# Hidden Soul Bible ## 1. Creative Pillars The hidden layer should feel like an emotional internet artifact: a personal site that has been lived in, repaired, renamed, backed up, forgotten, and returned to. It should reward attention without demanding completion. Primary emotional tones: - Cozy familial: kitchen lights, rice, mugs, family notes, practical tenderness. - Funny and self-aware: fake system warnings, old-web jokes, suspicious biscuit tins, web development folklore. - Reflective melancholy: unfinished letters, old usernames, returning to changed rooms. - Gentle mystery: Morrow, Nettle, Luma, Etta, Aunt Ma, Nadir, the radio, the train platform. - Internet nostalgia: guestbooks, counters, dial-up usernames, under construction language, source-code relics. ## 2. Recurring Cast - Morrow: a quiet figure tied to trains, platforms, lanterns, and unfinished apologies. Morrow represents return, hesitation, and the comfort of being expected. - Nettle: the archivist/moderator figure. Files impossible feelings under practical labels. Carries a clipboard and treats emotional continuity as infrastructure. - Luma: a lamp-associated presence who hums original tiny songs and notices margins. Luma represents small courage. - Etta: writer of the "Do Not Open" letter. Represents vulnerability hidden behind instructions and labels. - Aunt Ma: warm, funny, practical family presence. Connected to recipes, suspicious biscuit tins, and household wisdom. - Nadir: backup-minded family historian. Explains technical care through domestic metaphors. - Old Guest 14 / guest_000 / sunnydialup88: old-web guestbook presences who blur past visitors, usernames, and memory. ## 3. Symbolic Objects - Lamp: patience, late-night comfort, permission to rest. - Mug: continuity, small damage kept because it belongs. - Return ticket: coming back without needing to explain where from. - Radio: almost-heard family memory, voice messages, weather, original hums. - Pressed flower / marigold: seasonal return, promises that do not announce themselves. - Biscuit tin: running joke; allegedly contains tools, feelings, or neither. - Train platform: delay, return, growing older, being expected. - Cupboard: hidden terminal, family storage, recursive domestic mystery. ## 4. Implemented Global Systems ### Footer Notes - Trigger: every page load with a footer. - Content: rotates through 102 first-layer messages plus new second-layer continuity. - Frequency: always visible but subtle. - Lore: the footer is the house threshold. - UX: muted centered text; should feel like a small afterthought. ### Homepage Greetings - Trigger: homepage load. - Content: randomized greeting; repeat visitors receive memory-aware copy. - Frequency: always on homepage. - Lore: the site recognizes returning visitors locally through `localStorage`. ### Hover Whispers - Trigger: some paragraphs and headings gain tiny hover/click notes. - Content: short poems, quotes, and second-layer hidden memories. - Frequency: deterministic per page; not every paragraph. - UX: dotted question marks and heading hover captions. ### Corner Object - Trigger: click the small fixed corner symbol. - Sequence: five escalating messages, then seven clicks opens `/play/left-behind.html`. - Lore: a loose panel in the page. ### Keepsake Constellation - Trigger: click the five tiny bottom keepsakes: lamp, mug, ticket, radio, flower. - Payoff: after all are clicked, the site suggests searching `radio under stairs`. - Frequency: always present, low opacity. - Lore: collecting ordinary objects aligns the hidden family memory. ### Weather Window - Trigger: after at least three visits, a subtle `window` button appears. User click requests browser location. - Content: weather-aware line through Open-Meteo if permission/network works; indoor-weather fallback otherwise. - Frequency: repeat visitors only. - UX: no automatic permission prompt. ### Visit Milestones - Trigger: visit counts 2, 5, 9, 17, 31, 64. - Content: progressively warmer messages about being remembered. - Lore: the site stores visits locally, not identities. ### Page Revisit Memory - Trigger: 3rd, 7th, and 12th visit to the same path. - Content: page-specific return messages. - Lore: individual rooms recognize repeated footsteps. ### Seasonal Content - Trigger: low-probability seasonal toast on page load. - Content: winter blanket, spring pressed flower, summer fan/window, autumn leaf-links. - Frequency: 18% chance. ### Date Events - Site birthday: May 9. Message about imaginary candles. - Visitor anniversary: same month/day as first stored visit. - Minute thirteen: radio throat-clearing message. ### Night Messages - Trigger: 22:00-04:59 local browser time. - Content: gentle late-night comfort. - Visual: soft bottom glow. ### Search Secrets - `morrow`: lantern/lake/apology. - `nettle`: clipboard/cupboard/semicolon. - `home`: warm window/spare key. - `kitchen light`: opens `/play/kitchen-light.html`. - `radio under stairs`: opens `/play/radio-room.html`. - `guestbook 1999`: opens `/play/guestbook-1999.html`. - `do not open`: opens `/play/do-not-open.html`. - `cassette`: opens `/play/cassette-log.html`. - `return ticket`: opens `/play/train-platform.html`. - `unfinished letter`: opens `/play/forgotten-draft.html`. - `burnt sugar`: opens `/play/corrupted-recipe.html`. - `cupboard`: opens `/play/terminal-cupboard.html`. - `patience`: opens `/play/patience-game.html`. - `marigold`, `luma`, `nadir`: lore toasts. ### Typed Phrase Secrets - `remember`: continuity toast. - `dream`: opens Dream Corridor. - `leave the light on`: opens Kitchen Light. - `oldweb`: old layout joke. - `ma`: biscuit tin joke. - `luma`: plays a tiny original tone sequence. ### Rare Events - First layer: rare page breeze and biscuit event. - Second layer: - 0.6% rare homepage old-web takeover. - 0.2% cassette asks permission. - 0.4% recurring dream line. - 0.8% cryptic comforting warning. - Rule: rare events should delight, not block navigation. ### Patience Rewards - Trigger: 90 seconds of inactivity after repeat visits. - Content: quiet no-achievement reward. - Lore: patience and kindness count even when not announced. ### Source Relics and Alt Text - Trigger: DOM load. - Behavior: adds a source-code comment and fills empty image alt text with scrapbook-like hidden descriptions. - Purpose: secrets inside source and accessibility-friendly hidden storytelling. ### Audio - Trigger: user action only, never autoplay. - Content: short original Web Audio tone sequence associated with Luma/cassettes. - Note: no copyrighted lyrics or melodies. ## 5. Implemented Secret Pages ### `/play/left-behind.html` - Trigger: seven clicks on corner object. - Tone: familial, emotional. - Lore: blue bowl, soup memory, Morrow at 2:13. ### `/play/dream-corridor.html` - Trigger: logo taps or typed `dream`. - Tone: surreal, safe. - Lore: three shy doors, Nettle margin note. ### `/play/kitchen-light.html` - Trigger: search `kitchen light` or phrase `leave the light on`. - Tone: late-night comfort. - Lore: rice in pot, towel on chair, light asks no questions. ### `/play/radio-room.html` - Trigger: search `radio under stairs`; keepsake constellation hints it. - Tone: nostalgic audio memory. - Lore: Nadir backups, Luma humming, no autoplay manners. ### `/play/guestbook-1999.html` - Trigger: search `guestbook 1999`. - Tone: old-web funny/melancholy. - Lore: fake users are recurring ghosts of the old internet. ### `/play/do-not-open.html` - Trigger: search `do not open`. - Tone: emotionally meaningful warning. - Lore: Etta wanted to be found carefully. ### `/play/cassette-log.html` - Trigger: search `cassette`. - Tone: archive/audio. - Interaction: buttons reveal cassette transcript toasts and play original tones. ### `/play/train-platform.html` - Trigger: search `return ticket`. - Tone: patient return. - Lore: platform 3, Morrow, destinations as feelings. ### `/play/forgotten-draft.html` - Trigger: search `unfinished letter`. - Tone: unsent vulnerability. - Lore: website as a way to recover rooms in pieces. ### `/play/corrupted-recipe.html` - Trigger: search `burnt sugar`. - Tone: funny family warmth. - Lore: recipe corrupted into folklore. ### `/play/terminal-cupboard.html` - Trigger: search `cupboard`. - Tone: hidden terminal, domestic mystery. - Commands: `help`, `listen`, `inventory`, `tea`, `open`, `remember`, `exit`. ### `/play/patience-game.html` - Trigger: search `patience`. - Tone: quiet game. - Interaction: wait. Text changes at 30, 90, and 180 seconds. ## 6. Emotional Tone Categories - Comfort: Kitchen Light, night messages, visitor milestones, patience rewards. - Humor: biscuit tin, fake users, old-web jokes, fake errors. - Melancholy: Forgotten Draft, train platform, cassettes, old usernames. - Mystery: Dream Corridor, radio, cupboard, rare dreams. - Familial warmth: corrupted recipe, Aunt Ma, Nadir, blue bowl. - Meta/web: source relics, under construction takeover, cache warnings. ## 7. Page/Section Categories - Global: footer notes, toasts, hover whispers, keepsakes, weather window, source comments. - Homepage: greetings, rare old-web takeover, logo taps. - Search/nav: keyword portals. - Play wing: secret rooms and tiny games. - Comments: fake guestbook line when comments exist. - Images/source: hidden alt text and source-code comment. ## 8. UI/UX Notes - Hidden UI stays low opacity until hovered/focused. - No feature should obscure reading for long. - Audio requires explicit action. - Weather requests require explicit click and have graceful fallback. - Secret pages are buildable but marked `#+HIDDEN_PAGE: t` so they do not appear in index pages. - Rewards are intentionally non-competitive; no public checklist. ## 9. Audio/Visual Suggestions - Add tiny original ambient loops only after explicit button press. - Use cassette hiss, lamp hum, rain-on-window synthesis, and soft train-platform chimes. - Consider small generated bitmap textures: paper receipt, cassette label, pressed flower, old guestbook banner. - Avoid horror stingers; even corrupted pages should be emotionally safe. ## 10. Long-Term Evolution - Monthly train destination changes. - Seasonal recipe variants. - Yearly visitor anniversary letters. - A slow Luma arc where the lamp becomes less shy after enough patient moments. - Nettle's filing labels can become warmer over time. - Morrow's return ticket can gain stamps after visits to secret rooms. - Guestbook users can post new fake entries on real calendar dates. ## 11. Future Expansion Ideas - Add a real local-only guestbook draft pad that stores messages in `localStorage`. - Add a hidden "attic" page unlocked after visiting all secret rooms. - Add generated cassette-label images for each log. - Add a no-score cooking memory game using family recipe fragments. - Add an RSS-feed-only hidden note. - Add source-map comments or HTML comments with letter fragments. - Add a "kindness route" where closing pages gently or waiting unlocks softer endings. ## 12. Maintaining Mystery - Do not explain all triggers in the public UI. - Keep most secrets optional and small. - Never punish users for missing content. - Use recurrence, not randomness alone: objects and characters should reappear with altered context. - Make clues emotionally legible, not puzzle-hostile. - Avoid completion language. The site is a place, not a checklist. ## 13. Implementation Notes - Current state is client-side only through `localStorage` key `zxh_hidden_details_v1`. - Secret routes are static Org pages. - `#+HIDDEN_PAGE: t` excludes pages from sitemap/recently-updated via `lisp/sitemaps.el` and `lisp/recently-updated.el`. - Add backend later only if real guestbook/comment persistence is desired. - Keep hidden scripts dependency-free. ## 14. Canon Rule The hidden soul should always imply: somebody lived here, somebody cared enough to label the drawer badly, and the visitor is welcome without needing to prove they found everything. ## 15. Second-Layer Text Registry These are the newly added second-layer strings. The first-layer registry remains in `assets/scripts/hidden-details.js` as the original 102-detail foundation. ### Quotes - The archive does not keep score. It keeps chairs. - Some families pass down recipes. This one also passes down tabs left open for later. - A page can be a room if enough people arrive softly. - The oldest link on the site still expects a hand cursor. - If a memory changes, it may be trying to fit through a smaller door. - The guestbook is not empty. It is holding its breath between signatures. - Every backup is a small superstition against forgetting. - Somewhere in the CSS, a lamp is deciding whether to stay on. - The radio under the stairs only plays songs it has already missed. - A train can leave a station and still remain in the family story. - Kindness is the only password the house accepts without checking case. - The website learned your pace and stopped rushing the hallway. - A draft is just a letter still gathering courage. - The cursor is a visitor. The margin is a host. - If you hover long enough, even a heading may remember being handwritten. - The old forum banner says: welcome back, even if you are new. - Not all broken pages need repair. Some need a name. - The site keeps its mysteries low to the ground, where tired people can reach them. - A year is a folder that keeps renaming itself. - Some evenings are survived by the exact right mug. ### Poems - A train in the rain / waits beside an empty platform / so memory can board. - Grandma's radio / tuned between two stations / found us anyway. - A flower pressed flat / still teaches the book / how spring once leaned. - The lamp stayed awake / not because it was brave / but because someone might need it. - Old usernames fade / but the welcome thread remains / warm at the top. - I found a draft / with no ending / and felt less alone. - The house at midnight / is mostly refrigerator hum / and unsent kindness. - A calendar page / falls without bitterness / into tomorrow's hands. - There is a road home / made entirely of small tabs / you meant to close. - A cassette clicks / and the room becomes younger / for one more minute. ### Fake Conversations - Nettle: The ticket drawer is humming again. Morrow: That is normal. It hums when someone is almost ready. - Aunt Ma: Who put the screwdriver in the biscuit tin? Nadir: A person with vision and no labelling discipline. - Morrow: The lamp keeps following the visitor. Etta: Good. Lamps should have hobbies. - Old Guest 14: is this page still alive? Webmaster: yes, but quietly, please. the baby is asleep. - Nettle: Filed under: feelings disguised as infrastructure. Morrow: Approved without changes. - Luma: The radio said my name. Aunt Ma: Then say salaam back. Manners matter. - Nadir: The server made soup noises. Etta: That means the deployment is nearly done. - Morrow: I found a page that says do not open. Nettle: That usually means open gently. ### Journal Fragments - Journal scrap, 2006: We changed the wallpaper and everyone pretended it was not emotional. - Journal scrap, 2011: The old router blinked like it was trying to stay in the conversation. - Journal scrap, 2018: I learned that homesickness can happen inside your own house. - Journal scrap, 2024: Somebody laughed in the kitchen and the whole week became easier. - Journal scrap, undated: The marigolds came back where nobody planted them. - Journal scrap, undated: We kept the cracked mug because it knew too much. - Journal scrap, winter: I saved a voicemail just to remember the background noise. - Journal scrap, summer: The fan turned all afternoon and made the curtains look like boats. ### Comforting Warnings - COMFORT WARNING: this page may contain traces of old carpet, warm rice, and unfinished errands. - SOFT ERROR: the archive attempted to be impressive and became sincere instead. - NOTICE: do not stack heavy feelings on the top shelf. - LEGACY WARNING: this layout remembers 800x600 and asks you to be respectful. - SYSTEM MESSAGE: no achievement unlocked. You were kind anyway. - CACHE NOTE: the page kept a copy of the good part. - RECOVERY MODE: make tea, rename file, try again. - PERMISSION DENIED: the sadness may enter, but it must wipe its feet. ### Recurring Dreams - Dream 01: a train full of empty mugs waited at a station called Later. - Dream 02: the search box became a letterbox and returned every question with a family recipe. - Dream 03: a radio under the stairs played tomorrow's weather in a grandparent's voice. - Dream 04: the old homepage had a porch, and every link was a moth-wing-soft knock. - Dream 05: someone had folded the sitemap into a paper flower and left it in a browser tab. ### Cassette Logs - CASSETTE A / side 1: You can hear plates, rain, and someone saying, no, leave the light on. - CASSETTE A / side 2: Three seconds of silence, then laughter too close to the microphone. - CASSETTE B / side 1: Nadir explains backups to a child using rice grains and a spoon. - CASSETTE C / side 2: A song with no words, hummed badly, loved completely. - CASSETTE D / side ?: The tape label only says for when the house feels far away. ### Fake Users - sunnydialup88: first!!!! but emotionally - auntie-admin: please stop uploading files named newnewnewfinal - railway_morrow: platform 3 smells like rain today - nettle_mod: moved thread from Bugs to Feelings - luma-lamp: does anyone else hear the margins singing - guest_000: I signed this once and then grew up ### Rare Homepage Takeovers - For one rare minute, the homepage believes it is an old family desktop. - The dashboard has become a late-night noticeboard with one pin missing. - The homepage found its old forum skin in a drawer and is trying it on. ### Seasonal Lines - Winter: The archive put an extra blanket on the footer. - Spring: A pressed flower appeared between two cached pages. - Summer: The page opened a window and let the fan turn the silence. - Autumn: The old links sound like leaves when the cursor passes. ### Secret Room Search Terms - `radio under stairs` -> Radio Room. - `guestbook 1999` -> Guestbook 1999. - `do not open` -> Do Not Open. - `cassette` -> Cassette Log. - `return ticket` -> Train Platform. - `unfinished letter` -> Forgotten Draft. - `burnt sugar` -> Corrupted Recipe. - `cupboard` -> Terminal Cupboard. - `patience` -> Patience Game. ## 16. Maintenance Checklist - When adding a new hidden page, include `#+HIDDEN_PAGE: t`. - Add the route to the invisible link registry only if accidental discovery is acceptable. - Add one lore connection, one emotional reason, and one non-obvious trigger. - Keep text short in toasts; move longer writing into hidden rooms. - Prefer local state and static pages. Add backend persistence only for explicitly public features. - Rebuild with `emacs -Q --script build-site.el`. - Verify secret pages build and do not appear in `sitemap.org` or `recently-updated.org`.