445 lines
19 KiB
Markdown
445 lines
19 KiB
Markdown
# 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`.
|