From 64d8fc9ce9922f38780cc677478cbfb47b21a87e Mon Sep 17 00:00:00 2001
From: Kyle Javier [kj_sh604]
Date: Mon, 16 Mar 2026 14:24:34 -0400
Subject: merge: python rewrite (#1)
* refactor: Dockerfile
* refactor: docker-compose.yml
* refactor: docker-entrypoint.sh
* refactor: src/font.php
* refactor: src/fonts.php
* refactor: src/index.php
* refactor: src/upload.php
* refactor: src/app.py
* refactor: src/index.html
* refactor: src/requirements.txt
* refactor: 24.04 vps compatibility and README re-write
* refactor: python .gitignore update
* refactor: README.md---
README.md | 46 +++++++++++++++++++++++++++++++++-------------
1 file changed, 33 insertions(+), 13 deletions(-)
(limited to 'README.md')
diff --git a/README.md b/README.md
index 140f679..f8883d0 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
> suckless's sent tool ported to the very sucky web world
A web-based reimplementation of [suckless sent](https://tools.suckless.org/sent/)
-using pure PHP and vanilla JavaScript.
+using Python and vanilla JavaScript.
@@ -11,15 +11,14 @@ using pure PHP and vanilla JavaScript.
## features
-- **sent-compatible format** — paragraphs = slides, `#` comments, `@image`
+- **sent-compatible format** - paragraphs = slides, `#` comments, `@image`
slides, `\` escapes
-- **keyboard navigation** — arrow keys, hjkl, space, enter, backspace, pgup/pgdn
+- **keyboard navigation** - arrow keys, hjkl, space, enter, backspace, pgup/pgdn
(same as sent)
-- **mouse navigation** — left-click right half = next, left half = prev, scroll
+- **mouse navigation** - left-click right half = next, left half = prev, scroll
wheel
-- **image upload** — upload images and insert `@filename` references
-- **export** — download as `.sent` file for local sent, or export `.pdf` for portability
-
+- **image upload** - upload images and insert `@filename` references (50 MB cap)
+- **export** - download as `.sent` file for local sent, or export `.pdf` for portability
## usage
### docker compose (recommended)
@@ -37,6 +36,26 @@ docker build -t sent-web .
docker run -d -p 3000:3000 --init --name sent-web sent-web
```
+### local python run (without docker)
+
+Requirements:
+
+- Python `3.12+`
+- `fontconfig` (`fc-list` must be available)
+- `libmagic` runtime (`libmagic1` on Ubuntu)
+
+Setup:
+
+```sh
+cd src
+python3.12 -m venv .venv
+. .venv/bin/activate
+pip install -r requirements.txt
+gunicorn --bind 0.0.0.0:3000 --workers 2 app:app
+```
+
+Then open [http://localhost:3000](http://localhost:3000).
+
### presentation shortcuts
| key | action |
@@ -65,12 +84,13 @@ with multiple lines
## technology
-- **PHP 8.3** — no framework, just `.php` files
-- **vanilla JavaScript** — no npm, no webpack, no react
-- **[noir.css](https://github.com/kj-sh604/noir.css)** — classless CSS
-- **Apache** — serves it all
-- **fontconfig** — `fc-list` for font enumeration
-- **Docker** — containerized with fonts pre-installed
+- **Python 3.12+** - Flask backend
+- **vanilla JavaScript** - no npm, no webpack, no react
+- **[noir.css](https://github.com/kj-sh604/noir.css)** - classless CSS
+- **Gunicorn** - production WSGI server
+- **fontconfig** - `fc-list` for font enumeration
+- **python-magic + libmagic** - content-based upload type checks
+- **Docker** - containerized with fonts pre-installed
## license
--
cgit v1.2.3