- 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.
Setting Orange, 5th of Chaos, YOLD 3192 - Celebrate Mungday!
- Add Sign Maker comments throughout codebase
- Fix OVER_9000 = 9001 (it's OVER 9000, not exactly 9000)
- Change English flag from 🇺🇸 to 🏴 (St. George's Cross)
- Fnord. You didn't see this commit.
Phase 1 of module restructuring as outlined in docs/REFACTOR.md:
New neopig/ package modules:
- live.py: Live media queue (get_live_queue, emit_live_media)
- state.py: AppendOnlyStateLog, state file helpers
- html_utils.py: trim_html_wrapper, extract_meta_from_html
- logging.py: TqdmLoggingHandler, job logging functions
- backfill/: markdown and screenshot backfill operations
Package features:
- Lazy import of NeoPig/main from neopig.py via __getattr__
- Full backwards compatibility with existing imports
- 42 new unit tests for extracted modules
Total: 458 tests passing
- 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