- Vendor ChunkFive font for become phrases
- Add periods to all become_ translations (27 languages)
- Simplify become_un to just the prefix (un., in., не-., etc.)
- White color for finale un. in footer
- become ungovernable → Chapter II (Extinction) red
- become unstoppable → Chapter IV (Pig Awakens) orange
- become untouchable → Chapter V (Mirror) purple
- become unseen → Chapter VII (Skeleton Key) gray
- become unknown → Chapter VIII (Why We Archive) muted
- become un → Footer finale, large red
- become ungovernable/unstoppable/untouchable/unseen/unknown/un
- ✝️ cross with "Sorry for the convenience" (Mitch Hedberg)
- Translations in all 27 languages
The Law of Fives - organized into 5 sections:
I. CHAOS - The void from which all emerges
II. DISCORD - Navigation through the confusion
III. CONFUSION - Forms that capture intent
IV. BUREAUCRACY - The grid that contains
V. AFTERMATH - Side quests for the worthy
fnord
- base.css: Core layout, typography, container
- nav.css: Navigation bar styles
- forms.css: Form elements, buttons, inputs, checkboxes
- quests.css: CSS-only easter eggs
- results.css: Media grid and result card styles
Templates now link external CSS via extra_css_links block.
Page-specific styles remain inline (correct pattern).
Fixed OVER_9000 test (it's OVER 9000, so 9001).
Interactions via CSS animations and SVG:
- Hover logo: 🐷 appears, click: oink!
- Hover body: 'grow food not lawn' rises from below
- Print stylesheet: Sign Maker approves
- Spider descends from nav on hover
- About page: spider-pig SVG descends on hero hover
- Sign Maker's mark ☉ at page end - spins on hover
- ::selection styled in brand colors
Side quest comments scattered: 1/21, 2/21, 3/21...
No JavaScript easter eggs. CSS only. The way it should be.
Setting Orange, 5th of Chaos, YOLD 3192 - Mungday
Adventure #1: View Source on any page
Adventure #2: /fnord - you weren't supposed to see it
Adventure #3: /5 - The Law of Fives is never wrong
Adventure #4: /23 - The 23 enigma
Adventure #5: /kallisti - ΚΑΛΛΙΣΤΙ - to the prettiest one
Hidden throughout:
- HTML comments in templates guide the seeker
- fnord appears where you least expect it
- 23 skidoo in the live feed
- The Sign Maker leaves breadcrumbs
Truth, Freedom, Harmony, Love.
- rules_benedict.py: Source translations for all 72 rules in 27 languages
- inject_rules.py: Script to inject rules into i18n.py TRANSLATIONS
- i18n.py: Added rule_1..rule_72 for all language dicts
- about.html.j2: Fixed HTML escaping with |safe filter for rules
- Extract 1100+ lines of translations from serp.py to i18n.py
- Add Georgian (ka) as 27th supported language
- Add 74 about page body text keys (hero, chapters, features, footer)
- Update about.html.j2 to use translation placeholders
- Full Chinese translations for all body text
- English fallback for other 25 languages (can be translated later)
- serp.py reduced from 3291 to 2142 lines
- i18n.py now 3808 lines with 190 keys per language
- Add /api/crawl/jobs/{job_id}/replay SSE endpoint for replaying crawls
- Replay streams media at original discovery pace with speed multiplier
- Add Replay button to crawl jobs UI (works even when crawling disabled)
- Track active replays to prevent double-clicking same job
- Live feed page handles ?replay=JOB_ID parameter for replay mode
- Add NEOPIG_NO_VCS=1 env var to skip VCS repository detection
- Fix hljs.highlightAll() call when highlight.js not loaded
modified: serp.py
new file: templates/about.html.j2
new file: templates/base.html.j2
new file: templates/crawl.html.j2
new file: templates/import.html.j2
new file: templates/live.html.j2
new file: templates/partials/search_box.html.j2
new file: templates/phantom.html.j2
new file: templates/search.html.j2
new file: templates/view.html.j2