# Pest Nocturne 🪲 A midnight specimen-cabinet study suite for the **WSU EM019** pest management certification exam. The complete *Study Manual for Pest Management Professionals* rebuilt as an interactive, illustrated single-page app. ## Live **https://nocturne.thetempleofdoom.com** ## What's inside - **Field guide** — all 13 chapters with illustrated plates - **Identification keys** — branching keys, walked one couplet at a time - **House faults** — 22 points of faulty construction/maintenance, in order - **Flashcards** 🔒 — premium - **Practice exam** 🔒 — premium (scored, with the official answer key) - **Glossary** — every defined term, searchable as you type ## Monetization Freemium: the field guide, keys, and house faults are free. **Flashcards and the practice exam are a $5 Bitcoin unlock** via BTCPay. - BTCPay store: `FDT6DHWEaA7DF5WFePkp4pufgQ9yy1G6JfzTCwey1jYn` - Price: $5 USD (on-chain BTC) - Flow: `/unlock` → BTCPay invoice → `/webhook/btcpay` (InvoiceSettled) → client polls `/api/status` → unlocks ## Stack - Single self-contained `index.html` (vanilla JS SPA, no build step) - Flask (`app.py`) for the paywall + BTCPay webhook - nginx reverse proxy → Flask :5000 - SQLite (`orders.db`) for order state ## Deploy - Proxmox LXC CT **117** (`nocturne`) @ 10.30.20.234 - systemd `nocturne.service`, nginx `sites-enabled/nocturne` - Cloudflare tunnel `thetemple-fleet` (`1aeb1ac0`), ingress → `:80` ## Files - `index.html` — the study suite + injected paywall gate + BMAC footer - `app.py` — Flask backend (BTCPay invoice, webhook, unlock status) - `inject.py` — one-shot script that injects the paywall + footer into the HTML - `nocturne.service` / `nocturne.nginx` — service + nginx config