AGPL-3.0 python3
django3
sqlite3
[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 asqlite3
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 thefts5
(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
- Posted URLs are notified with
webmention
. - Users can be retrieved with
webfinger
.
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
.
pip
Installing with See DEPLOY.md
.
Code style
See CODE_STYLE.md
.