2026-04-26 18:20:54 +02:00
|
|
|
# PunktFri.dk
|
|
|
|
|
|
|
|
|
|
Flask landing page for PunktFri — a Danish non-profit registrar initiative for self-hosters.
|
|
|
|
|
|
|
|
|
|
## Setup
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
python3 -m venv .venv
|
|
|
|
|
source .venv/bin/activate
|
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
python app.py
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Visit `http://localhost:5000`
|
|
|
|
|
|
|
|
|
|
## Environment variables
|
|
|
|
|
|
|
|
|
|
| Variable | Default | Description |
|
|
|
|
|
|----------|---------|-------------|
|
|
|
|
|
| `PORT` | `5000` | Port to listen on |
|
|
|
|
|
| `DATABASE` | `punktfri.db` | SQLite database path |
|
|
|
|
|
| `LOG_FILE` | `signups.log` | Signup log file path |
|
|
|
|
|
| `ADMIN_USER` | `admin` | Admin username |
|
|
|
|
|
| `ADMIN_PASS` | `punktfri2024` | Admin password |
|
2026-09-19 06:52:45 +02:00
|
|
|
| `NOTIFY_EMAIL` | `henrik@i80.dk` | Receives a mail on every signup |
|
|
|
|
|
| `SMTP_HOST` | *(empty)* | SMTP server; notifications are skipped when unset |
|
|
|
|
|
| `SMTP_PORT` | `587` | SMTP port (STARTTLS) |
|
|
|
|
|
| `SMTP_USER` / `SMTP_PASS` | *(empty)* | SMTP login (Consul KV `punktfri/smtp_user`, `punktfri/smtp_pass` in Nomad) |
|
|
|
|
|
| `SMTP_FROM` | `SMTP_USER` | Sender address (Consul KV `punktfri/smtp_from`) |
|
2026-04-26 18:20:54 +02:00
|
|
|
|
|
|
|
|
Change `ADMIN_USER` and `ADMIN_PASS` before deploying publicly.
|
|
|
|
|
|
|
|
|
|
## Routes
|
|
|
|
|
|
|
|
|
|
- `/` — Landing page + signup form
|
|
|
|
|
- `/tak` — Confirmation page after signup
|
|
|
|
|
- `/admin` — Signup table (HTTP Basic Auth)
|
|
|
|
|
- `/health` — Health check (returns `{"status": "ok"}`)
|
|
|
|
|
|
|
|
|
|
## Data
|
|
|
|
|
|
|
|
|
|
Signups are stored in two places:
|
|
|
|
|
- **SQLite** (`punktfri.db`) — queryable, used by `/admin`
|
|
|
|
|
- **Log file** (`signups.log`) — append-only plaintext log
|
|
|
|
|
|
|
|
|
|
Both are created automatically on first run.
|
|
|
|
|
|
|
|
|
|
## Admin
|
|
|
|
|
|
|
|
|
|
Visit `http://localhost:5000/admin` and enter the credentials above.
|