{"id":15723736,"url":"https://github.com/epilys/sic","last_synced_at":"2025-05-13T04:57:18.278Z","repository":{"id":177949024,"uuid":"382079723","full_name":"epilys/sic","owner":"epilys","description":"link aggregator community organised by tags (with no javascript)","archived":false,"fork":false,"pushed_at":"2023-07-23T11:52:30.000Z","size":2616,"stargazers_count":18,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-13T04:57:09.838Z","etag":null,"topics":["discussion","discussion-forum","django","forum","link-aggregator","no-javascript","python","sqlite3","tags"],"latest_commit_sha":null,"homepage":"https://sic.pm","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epilys.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-01T15:34:29.000Z","updated_at":"2025-02-12T04:37:36.000Z","dependencies_parsed_at":"2024-02-06T07:46:04.140Z","dependency_job_id":null,"html_url":"https://github.com/epilys/sic","commit_stats":null,"previous_names":["epilys/sic"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilys%2Fsic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilys%2Fsic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilys%2Fsic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilys%2Fsic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epilys","download_url":"https://codeload.github.com/epilys/sic/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253877509,"owners_count":21977643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discussion","discussion-forum","django","forum","link-aggregator","no-javascript","python","sqlite3","tags"],"created_at":"2024-10-03T22:13:08.546Z","updated_at":"2025-05-13T04:57:18.258Z","avatar_url":"https://github.com/epilys.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [[sic]](https://sic.pm) link aggregator organised by tags [\u003ckbd\u003e\u003cb\u003eAGPL-3.0\u003c/b\u003e\u003c/kbd\u003e](https://github.com/epilys/sic/blob/main/LICENSE) [\u003ckbd\u003e\u003cb\u003e`python3`\u003c/b\u003e\u003c/kbd\u003e](https://www.python.org/) [\u003ckbd\u003e\u003cb\u003e`django3`\u003c/b\u003e\u003c/kbd\u003e](https://www.djangoproject.com/) [\u003ckbd\u003e\u003cb\u003e`sqlite3`\u003c/b\u003e\u003c/kbd\u003e](https://sqlite.org)\n\nPublic instance at https://sic.pm | [Tor hidden service](http://sicpm3hp7dtrwhmf4qlelycqlvie6flqa5qnjnt3snok5xydvxhs4xyd.onion/) | IRC: [`#sic` on Libera Chat](https://libera.chat/) | [[sic] bot on Mastodon](https://botsin.space/@sic)\n\n\u003ctable align=\"center\"\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e\u003ckbd\u003e\u003cimg src=\"./screenshot-frontpage.png\" alt=\"frontpage screenshot\" title=\"frontpage screenshot\" height=\"250\"/\u003e\u003c/kbd\u003e\u003c/td\u003e\n\t\t\t\u003ctd\u003e\u003ckbd\u003e\u003cimg src=\"./screenshot-frontpage-mobile.png\" alt=\"frontpage on mobile screenshot\"  height=\"250\"/\u003e\u003c/kbd\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n## In a nutshell\n\n- No Javascript necessary. An HTML5 compliant browser is enough; it even runs on [`w3m`, the text web browser](http://w3m.sourceforge.net/).\n- Lightweight, requires only a `python3` environment and stores its database in a `sqlite3` file.\n- Can be deployed with WSGI compatible servers (Apache/NGINX) or even `django`'s development server if need be.\n\n### ✒️ Forum features\n\n- Posts can be text and/or URLs.\n- Posts can optionally have any number of tags.\n- Latest stories RSS and Atom feeds are provided.\n- Post and comment text content support [commonmark Markdown syntax](https://commonmark.org/).\n- Posts and comments can only be upvoted. Support for flagging (downvoting) will be added soon.\n- Posts can be pinned to the top with a time limit or indefinitely.\n\n### 🏷️ Tag and 🗂️ Aggregation system\n\n- Tags can optionally have any number of parent tags (but cycles are not allowed)\n- 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.\n- Aggregations can optionally be private, public or discoverable by other users.\n- Aggregations can be set as \"default\" by moderators. New users are subscribed to default aggregations.\n- Users can create their own aggregations at any time.\n- Tags, users and domains can be excluded from an Aggregation via _exclude filters_.\n\n### 🔍 Search system\n\n- Comments and posts are automatically indexed in a separate `sqlite` database file using the `fts5` (full text search) virtual table extension.\n- Posts with URLs can optionally have their remote content fetched and indexed with a `django` management command (e.g. from within a cron job).\n\n### 🎛️ Permission and moderation system\n\n- Users can be inactive, active or banned.\n- 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.\n- Public moderation log.\n\n### 📨 Notification and email system\n\n- Mentioning other users in comments notifies them.\n- Users can choose when they receive each kind of notification via email\n- Users can optionally enable a weekly digest email.\n\n### 👥 Account system\n\n- Users can either freely sign-up or have to be invited to.\n- Users can optionally request for an invitation (this feature can be turned off).\n- Users can save any story, comment to their bookmarks along with personal notes and export them at any time.\n- Users can add personal metadata in their profile, including an avatar.\n- 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.\n- Users have a personalised Atom or RSS feed that shows only their subscriptions.\n\n### 🌐 Web standards\n\n- Posted URLs are notified with [`webmention`](https://www.w3.org/TR/webmention/).\n- Users can be retrieved with [`webfinger`](https://webfinger.net/).\n\n\n## Setup / Deployment\n\n```shell\ncp sic/local/secret_settings.py{.template,}\nvim sic/local/secret_settings.py # REQUIRED: add secret token\nvim sic/local/settings_local.py # OPTIONAL: local settings (SMTP etc)\npython3 -m venv # OPTIONAL: setup virtual python enviroment in 'venv' directory\npython3 -m pip install -r requirements.txt # Or 'pip3' install...\npython3 manage.py migrate #sets up database\npython3 manage.py createsuperuser #selfexplanatory\npython3 manage.py runserver # run at 127.0.0.1:8000\npython3 manage.py runserver 8001 # or run at 127.0.0.1:8001\npython3 manage.py runserver 0.0.0.0:8000 # or run at public-ip:8000\n```\n\nFor macos you will need to provide paths for headers and libraries like so:\n\n```shell\n$ python3 -m pip install pygraphviz\n$ python3 -m pip install \\\n    --global-option=build_ext \\\n    --global-option=\"-I$(brew --prefix graphviz)/include/\" \\\n    --global-option=\"-L$(brew --prefix graphviz)/lib/\" \\\n    -r requirements.txt\n```\n\nSee [`DEPLOY.md`](DEPLOY.md) for deployment instructions.\n\n## Code style\n\nSee [`CODE_STYLE.md`](CODE_STYLE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepilys%2Fsic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepilys%2Fsic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepilys%2Fsic/lists"}