• Python 65.2%
  • Svelte 15.2%
  • HTML 9.7%
  • JavaScript 3.5%
  • TypeScript 2.3%
  • Other 4.1%
Find a file
2025-11-16 16:29:18 +05:00
.vscode feat(git hook): init 2024-11-08 15:13:02 +05:00
bin Migrate to Docker & logger enhances 2024-02-07 17:17:15 +06:00
caddy feat(caddy): hotfix prod https error problem 2024-11-20 18:24:08 +05:00
data Moving codebase from GitHub 2024-01-31 06:48:20 +06:00
database-lib feat(git hook): init 2024-11-08 15:13:02 +05:00
docker-compose chore: redis only in prod profile 2025-06-26 21:47:34 +05:00
freedium-library new frontend: deps update, minor fixes 2025-06-06 20:18:55 +05:00
medium-parser embedly: iframe sizing fix 2025-06-27 01:06:13 +05:00
new-web new frontend: deps update, minor fixes 2025-06-06 20:18:55 +05:00
plausible/clickhouse feat(git hook): init 2024-11-08 15:13:02 +05:00
proxy-balancer wgcf: decrease to one instance 2025-05-09 16:25:17 +05:00
rl_string_helper rl-string-parser: logger to trace 2025-07-01 14:01:44 +05:00
scripts structure: refactor codebase 2024-09-20 18:39:12 +05:00
sitemap-generator structure: refactor codebase 2024-09-20 18:39:12 +05:00
test_lab medium parser: overlapse parser finnal fix 2024-09-21 20:41:38 +05:00
tests update blacklist 2025-11-16 16:29:18 +05:00
web fix: update notification banner 2025-10-02 13:29:12 +05:00
wgcf feat(git hook): init 2024-11-08 15:13:02 +05:00
.dockerignore prod: docker compose refactor filenames 2024-07-27 14:11:33 +05:00
.env_template docs: update .env_template and README for clarity 2025-04-24 08:34:40 +05:00
.gitignore feat(git hook): init 2024-11-08 15:13:02 +05:00
backup_db.sh prod: update 2025-05-09 16:28:44 +05:00
Dockerfile docker-compose: enhance container health checks 2024-09-25 15:56:47 +05:00
mypy.ini feat(server): add pgAdmin configuration and improve type hints 2024-10-10 12:04:18 +05:00
README.md docs: update .env_template and README for clarity 2025-04-24 08:34:40 +05:00

Freedium: Your paywall breakthrough for Medium!

Become a Patron

Stack:

  • Backend:
    • language: Python 3.9+
    • framework: Unicorn, FastAPI
  • Frontend:
    • framework: Tailwinds CSS v3, Jinja2
    • monitoring: Sentry
  • Database:
    • PostgreSQL, Dragonfly (Redis and Memcached compatible key-value database)
  • Utils:
    • Caddy, Docker, Docker Compose, Cloudflare WARP proxy (wgcf)

Project configuration:

There is three (3) docker-compose profiles:

  • min - without 2 Cluster of Cloudflare WARP proxy, HAProxy proxy balancer, Plausible, Grafana.
  • local - based on min, but with freedium.local exposed hostname, both 80 and 443 ports are exposed, with self-signed TLS certificate.
  • prod - with all services for production.

Requirements:

  • Docker, Docker Compose, last version is preferred.
  • Linux, preferably rolling release. We can't guarantee that Freedium instance will work on other OS. Tested on Ubuntu 22.04 and Fedora 39.
  • git
  • Preferably, fresh and clean brain.

Local run:

To configure your Freedium instance, follow these steps:

  1. Clone the repository:

    git clone https://codeberg.org/Freedium-cfd/web/ ./freedium-web --depth 1
    cd ./freedium-web
    
  2. Create and configure the environment file:

    cp .env_template .env
    

    Open the .env file and adjust the values as needed for your setup.

  3. Set up the Docker network:

    sudo docker network create caddy_net
    
  4. (Optional) Change your hosts file:

    sudo nano /etc/hosts
    # or
    vim /etc/hosts
    # and when you are closed vim, type `:w !sudo tee %` to save file without executing vim in root mode
    

    Add the following line:

    127.0.0.1 freedium.local
    
  5. Start the Freedium services (min profile):

    sudo docker compose --profile local -f ./docker-compose/docker-compose.yml up
    

    Stopping the services:

    sudo docker compose --profile local -f ./docker-compose/docker-compose.yml down
    

And now you can access local instance of Freedium by opening browser and type https://freedium.local or http://localhost:6752 if you ignored 4th step. There is would be a warning about insecure connection, because we use self-signed TLS certificate. Ignore it.

Production run:

All production services are running on prod profile. If you use Dockerized reverse proxy, you can specify network caddy_freedium_net with external: true option in networks section of your reverse proxy container. Specify caddy_freedium hostname with port 6752 (or 6753 for Plausible) in your reverse proxy configuration.

As alternative, you can directly change docker-compose configurations to use your reverse proxy. See docker-compose and caddy folders for more details.

Roadmap

  • Speed up parser logic
  • Parse articles directly to Markdown
  • Add more services than just a Medium
  • Rewrite frontend to Svelte
  • Integrate Grafana/Prometheus/Plausible to monitor our services
  • Translate posts to different languages using translatepy library
  • AI-powered summary of posts

Star History Chart