Add email waitlist and durable Telegram notification backend #1
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
backmeupplz/project-horae!1
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/waitlist-22"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Agentboard #22: add the exact requested waitlist copy and accessible responsive email form without changing hardware/CAD or build-log content.
Validation
uv run --python 3.12 --no-project python -m unittest discover -s waitlist -v: 22 passed.node --test tests/waitlist.test.cjs: 7 passed.git diff --check main...HEAD: clean.e1f303f9aec197c433b6c1b9259cf1a2e624f8b0, final review287bb83e-30dd-422c-908e-9bfc36add29f; prior full and integration reviews also approved. CI passed with Python 3.12 + Node 22. First CI failure was a test-only shared clock mock issue, corrected without weakening assertions.Release requirements (not yet deployed)
Frontend remains GitHub Pages
main:/. Release owner must deploy API before exposing a broken form: new Easypanel appborodutch/horae-waitlist, source/waitlist, Nixpacks, one replica, stop-first, persistent volume/data, port 3000. Existing authorized Cloudflare zone supports newhorae-waitlist.borodutch.comA record to existing Hetzner host; DNS currently absent. Configure HTTPS domain, verify health/CORS and synthetic dedup + persistence through managed restart. Followwaitlist/README.md.Owner supplies TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID manually in Easypanel. No bot secret accessed; mock contract tests only, real delivery unverified. Ambiguous external timeouts may produce duplicate notifications (not duplicate stored signups).
Protected Easypanel/Cloudflare reads and dedicated SSH verified; no infrastructure changes in this implementation phase. GitHub main currently has no branch protection; release must still use exact-head independent review + green CI and guarded PR merge, never direct main push.
Independent review verdict: APPROVE
Head:
e1f303f9aec197c433b6c1b9259cf1a2e624f8b0Astra independent review chain: full implementation/shared-cooldown approval
f7ac98eb-baf6-4c61-8199-9cea4e9b8ebf; combined-main/lightbox approval6005e20c-12a9-492e-888d-8d0198fde7b6; final exact-head Python 3.12 test-clock correction approval287bb83e-30dd-422c-908e-9bfc36add29f. No remaining actionable findings.22 Python 3.12 tests and 7 Node tests pass; Nixpacks plan selects Python 3.12, requirements installation and
python server.py; actual image build belongs to Easypanel release. CI 37208171147 passed at this head.No live deployment or real Telegram delivery claimed. Release owner: stage native backend with durable /data volume, one replica/stop-first and HTTPS domain before homepage exposes the form; guarded PR merge/current-base + green main CI, restore service source to main if pre-staged, verify synthetic signup dedup and managed-restart persistence. Owner configures TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID later; absent variables are not a release blocker. No manual UI gate for this non-Veydrift ticket.
Independent Astra/high review and release-owner acceptance review APPROVE
e1f303f9ae; no actionable findings. 22 Python 3.12 + 7 Node tests pass; separate real-process restart/dedup test passed. Latest main already included, exact-head CI green. Staging durable native Easypanel backend before guarded squash and Pages publication.