ilia 203f469ee1
CI / secret-scan (pull_request) Successful in 32s
CI / python-ci (pull_request) Successful in 56s
Add public demo seed set and document the live demo board
Ship Mira/Noa/Lior/Elena/Ezra seed data, STORK_SEED_FILE support,
and a public-ready README with the demo /b/… link.
2026-08-07 17:04:27 -04:00

Stork

Shareable baby-name boards: suggest names, vote, keep origin / meaning / pronunciation in English, Russian, and Hebrew, and optionally record how a name sounds.

Each board has a unique share link (/b/<uid>). Start a board with no password, add names, share the link. Live demo: stork.levkin.ca demo board.

Quick start (local)

cp .env.example .env   # optional STORK_INVITE_TOKEN bootstraps a "Family" board
make install
make test
make run

Open http://127.0.0.1:8094Start new board → share /b/…. Visitors open the link and enter a display name.

Features

  • Renamable columns (First is fixed; + adds up to 4; ✕ removes extras)
  • Votes / ranking per board
  • Locale notes (en / ru / he) + voice recordings (re-record overwrites)
  • Paper UI at / (classic layout at /v1)

API sketch

Method Path Notes
GET /api/health Liveness
POST /api/boards Start board {title}{id, url}
GET /api/boards/{id} Public board title + url
GET /api/resolve?invite= Legacy invite → board url
POST /api/session {board_id, display_name} → cookies
GET /api/columns Columns for session board
POST/PATCH/DELETE /api/columns… Add / rename / remove (not first)
GET/POST /api/names List / add
PATCH /api/names/{id} Locale notes
POST /api/names/{id}/vote {value: 1|-1|0}
POST/GET/DELETE /api/names/{id}/recording/{lang} Voice
DELETE /api/names/{id} Admin header X-Stork-Admin

Scripts

# Seed starter names onto a board
make seed STORK_BOARD_ID=b_…
# Demo set (Mira / Noa / Lior / Elena / Ezra):
STORK_SEED_FILE=data/demo-names.example.json make seed STORK_BOARD_ID=b_…

# Create an empty board and print share URL
.venv/bin/python scripts/create_board.py

Secrets

  • Local: gitignored .env
  • Deploy host: .env next to compose (never commit)

CI gates

Gitea Actions (.gitea/workflows/ci.yml): ruff and pytest are hard gates (no || true). Gitleaks on PRs. Bandit is advisory.

Production

Public HTTPS at stork.levkin.ca. Homelab deploy lives in a separate ansible repo (make deploy-stork).

S
Description
Shareable baby-name boards — votes, en/ru/he notes, voice. Demo: https://stork.levkin.ca/b/b_gS0LlZHm-lk
Readme MIT
7.1 MiB
Languages
Python 68.9%
HTML 28.6%
JavaScript 1%
Shell 0.8%
Makefile 0.6%
Other 0.1%