tade is a discussion/forum/link aggregator application. It provides three interfaces: a regular web page, a mailing list bridge and an NNTP server

Overview

tade - web/mailing list/nntp discussions

AGPL-3.0 python3 django3 sqlite3

frontpage screenshot frontpage on mobile screenshot

[tade] † ‡ is a discussion/forum/link aggregator application. It provides three interfaces: a regular web page, a mailing list bridge and an NNTP server.

†. pronounced tA-de, ta- as in tally and -de as in the
‡. τάδε is a Greek pronoun meaning this

Public instance at https://sic.pm | Tor hidden service | IRC: #sic on Libera Chat | [sic] bot on Mastodon

In a nutshell

  • No Javascript necessary. An HTML5 compliant browser is enough; it even runs on w3m, the text web browser.
  • Lightweight, requires only a python3 environment and stores its database in a sqlite3 file.
  • Can be deployed with WSGI compatible servers (Apache/NGINX) or even django's development server if need be.

✒️ Forum features

  • Posts can be text and/or URLs.
  • Posts can optionally have any number of tags.
  • Latest stories RSS and Atom feeds are provided.
  • Post and comment text content support commonmark Markdown syntax.
  • Posts and comments can only be upvoted. Support for flagging (downvoting) will be added soon.

🏷️ Tag and 🗂️ Aggregation system

  • Tags can optionally have any number of parent tags (but cycles are not allowed)
  • Tags can optionally be organised in Aggregations, which are collections of tags with a common theme. A user's frontpage can be either all stories or their subscribed aggregations' stories.
  • Aggregations can optionally be private, public or discoverable by other users.
  • Aggregations can be set as "default" by moderators. New users are subscribed to default aggregations.
  • Users can create their own aggregations at any time.
  • Tags, users and domains can be excluded from an Aggregation via exclude filters.

🔍 Search system

  • Comments and posts are automatically indexed in a separate sqlite database file using the fts5 (full text search) virtual table extension.
  • Posts with URLs can optionally have their remote content fetched and indexed with a django management command (e.g. from within a cron job).

🎛️ Permission and moderation system

  • Users can be inactive, active or banned.
  • Moderators can set the number of days for which an account is considered new. New accounts cannot add tags or perform other potentially destructive actions.
  • Public moderation log.

📨 Notification and email system

  • Mentioning other users in comments notifies them.
  • Users can choose when they receive each kind of notification via email
  • Users can optionally enable a weekly digest email.

👥 Account system

  • Users can either freely sign-up or have to be invited to.
  • Users can optionally request for an invitation (this feature can be turned off).
  • Users can save any story, comment to their bookmarks along with personal notes and export them at any time.
  • Users can add personal metadata in their profile, including an avatar.
  • Users can add "hats" to their account, which are decorations that can optionally be added to a comment. For example a moderator user wanting to comment as a moderator and not as a user would use a hat.
  • Users have a personalised Atom or RSS feed that shows only their subscriptions.

🌐 Web standards

Setup / Deployment

You can use this repository as is by modifying the tade package to fit your needs, or install it with pip as a Django app.

Using it directly

cp tade/local/secret_settings.py{.template,}
vim tade/local/secret_settings.py # REQUIRED: add secret token
vim tade/local/settings_local.py # OPTIONAL: local settings (SMTP etc)
python3 -m venv venv # OPTIONAL: setup virtual python enviroment in 'venv' directory
python3 -m pip install -r requirements.txt # Or 'pip3' install...
python3 manage.py migrate #sets up database
python3 manage.py createsuperuser #selfexplanatory
python3 manage.py runserver # run at 127.0.0.1:8000
python3 manage.py runserver 8001 # or run at 127.0.0.1:8001
python3 manage.py runserver 0.0.0.0:8000 # or run at public-ip:8000

For customization options look at the TadeAppConfig class in tade/apps.py, style.css in tade/static and the templates in tade/templates.

Installing with pip

See DEPLOY.md.

Code style

See CODE_STYLE.md.

Owner
Manos Pitsidianakis
Electrical and Computer Engineering
Manos Pitsidianakis
This code renames subtitle file names to your video files names, so you don't need to rename them manually.

Rename Subtitle This code renames your subtitle file names to your video file names so you don't need to do it manually Note: It only works for series

Mostafa Kazemi 4 Sep 12, 2021
Program to extract signatures from documents.

Extracting Signatures from Bank Checks Introduction Ahmed et al. [1] suggest a connected components-based method for segmenting signatures in document

Muhammad Saif Ullah Khan 9 Jan 26, 2022
Helpful functions for use alongside the rich Python library.

🔧 Rich Tools A python package with helpful functions for use alongside with the rich python library. 󠀠󠀠 The current features are: Convert a Pandas

Avi Perl 14 Oct 14, 2022
Fraud Multiplication Table Detection in python

Fraud-Multiplication-Table-Detection-in-python In this program, I have detected fraud multiplication table using python without class. Here, I have co

Sachin Vinayak Dabhade 4 Sep 24, 2021
Script to generate a massive volume of data in sql, csv, json or xml format

DataGenerator Made with Python Open for pull requests 1. Dependencies To install required dependencies run pip install -r requirements.txt 2. Executi

icrescenti 3 Sep 20, 2022
A functional standard library for Python.

Toolz A set of utility functions for iterators, functions, and dictionaries. See the PyToolz documentation at https://toolz.readthedocs.io LICENSE New

4.1k Dec 30, 2022
A toolkit for writing and executing automation scripts for Final Fantasy XIV

XIV Scripter This is a tool for scripting out series of actions in FFXIV. It allows for custom actions to be defined in config.yaml as well as custom

Jacob Beel 1 Dec 09, 2021
A tool to create the basics of a project

Project-Scheduler Instalação Para instalar o Project Maker, você necessita está em um ambiente de desenvolvimento Linux ou wsl com alguma distro debia

2 Dec 17, 2021
Abby's Left Hand Modifiers Dictionary

Abby's Left Hand Modifiers Dictionary Design This dictionary is inspired by and

12 Dec 08, 2022
A sys-botbase client for remote control automation of Nintendo Switch consoles. Based on SysBot.NET, written in python.

SysBot.py A sys-botbase client for remote control automation of Nintendo Switch consoles. Based on SysBot.NET, written in python. Setup: Download the

7 Dec 16, 2022
Deep Difference and search of any Python object/data.

DeepDiff v 5.6.0 DeepDiff Overview DeepDiff: Deep Difference of dictionaries, iterables, strings and other objects. It will recursively look for all t

Sep Dehpour 1.6k Jan 08, 2023
An okayish python script to generate a random Euler circuit with given number of vertices and edges.

Euler-Circuit-Test-Case-Generator An okayish python script to generate a random Euler circuit with given number of vertices and edges. Executing the S

Alen Antony 1 Nov 13, 2021
腾讯云轻量服务流量超出限制自动关机

LightHouse_Automatic_Shutdown 腾讯云轻量服务流量超出限制自动关机

132 Dec 14, 2022
Simple RGB to HEX game made in python

Simple RGB to HEX game made in python

5 Aug 26, 2022
Functional UUIDs for Python.

🏷️FUUID stands for Functional Universally Unique IDentifier. FUUIDs are compatible with regular UUIDs but are naturally ordered by generation time, collision-free and support succinct representations

Phil Demetriou 147 Oct 27, 2022
iOS Snapchat parser for chats and cached files

ParseSnapchat iOS Snapchat parser for chats and cached files Tested on Windows and Linux install required libraries: pip install -r requirements.txt c

11 Dec 05, 2022
Every 2 minutes, check for visa slots at VFS website

vfs-visa-slot-germany Every 2 minutes, check for visa slots at VFS website. If there are any, send a call and a message of the format: Sent from your

12 Dec 15, 2022
Install, run, and update apps without root and only in your home directory

Qube Apps Install, run, and update apps in the private storage of a Qube. Build and install in Qubes Get the code: git clone https://github.com/micahf

Micah Lee 26 Dec 27, 2022
Go through a random file in your favourite open source projects!

Random Source Codes Never be bored again! Staring at your screen and just scrolling the great world wide web? Would you rather read through some code

Mridul Seth 1 Nov 03, 2022
convert a dict-list object from / to a typed object(class instance with type annotation)

objtyping 带类型定义的对象转换器 由来 Python不是强类型语言,开发人员没有给数据定义类型的习惯。这样虽然灵活,但处理复杂业务逻辑的时候却不够方便——缺乏类型检查可能导致很难发现错误,在IDE里编码时也没

Song Hui 15 Dec 22, 2022