🪡 Show off your favorite public threads https://ayo.ayco.io/threads
Find a file
2025-01-19 17:07:58 +01:00
.vscode feat: display featured tags 2025-01-18 16:51:44 +01:00
static style: add padding on body & card bottom-menu 2025-01-19 16:45:57 +01:00
templates style: add padding on body & card bottom-menu 2025-01-19 16:45:57 +01:00
.gitignore feat: initial Mastodon client 2025-01-18 14:59:38 +01:00
__init__.py feat: init package 2024-05-20 15:21:05 +02:00
app.py feat: use blueprint static path 2025-01-19 09:45:12 +01:00
cache.py feat: provide own module cache 2024-05-19 22:01:56 +02:00
example_config.json feat: display featured tags 2025-01-18 16:51:44 +01:00
LICENSE chore: add license 2024-04-19 19:29:43 +02:00
mastodon.py feat: improve error handling of mastodon operations 2025-01-19 14:51:10 +01:00
README.md chore: update instructions 2024-12-15 11:04:14 +01:00
requirements.txt feat: initial Mastodon client 2025-01-18 14:59:38 +01:00
schema.sql feat: add schema 2024-12-15 18:52:05 +01:00
threads.py feat: add status; only show 15 2025-01-19 17:07:58 +01:00
utils.py feat: make status id a string 2025-01-19 10:56:44 +01:00

Threads

Show off your favorite public threads and offer hand-picked, fine-grained, topical subscriptions!

These are streams of thought you decide to float to your personal site for being a bit more-effort than other small posts, but still yet to be refined as a blog.

How it works:

  1. a featured status will be fetched on the server along with qualified "descendants", which are replies of the same author in a single thread.
  2. clean HTML with some styling will be sent to the viewer's browser
  3. bit of client-side JS for progressive enhancement:
    1. <relative-time> by GitHub: https://github.com/github/relative-time-element
  4. self-hostable with the app configuration in config.json file -- we are working on a docker way and easy configuration

See it in action.

The project is currently experimental. Some improvements need to be made with regards to app configuration, storing data, and easy deployment & usage.

Project setup

  1. Set up your Debian (for other environments, search for counterpart instructions)

    # update repositories
    $ sudo apt update
    
    # install python stuff
    $ sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools python3-venv
    

For MacOS: https://docs.python.org/3/using/mac.html

  1. Install dependencies and set up the project

    # clone the project 
    $ git clone git@git.sr.ht:~ayoayco/threads
    
    # go into the project directory
    $ cd threads
    
    # create app config from example
    $ cp example_config.json config.json
    
    # create python environment:
    $ python3 -m venv .venv
    
    # activate python env:
    $ . .venv/bin/activate
    
    # install dependencies
    (.venv)$ python -m pip install -r requirements.txt
    
    # create configuration from example config file
    (.venv)$ cp ./example_config.json ./config.json
    
    # rejoice!
    
  2. To start development, run the following:

    (.venv)$ flask --debug run
    

    Note: On a Mac, the default port 5000 is used by AirDrop & Handoff; you may have to turn those off

  3. After development session, deactivate the python env

    (.venv)$ deactivate
    

Deployment

For deployment, the recommended setup is with production server gunicorn and reverse proxy nginx. See the DigitalOcean tutorial (their website uses cookies).