Status: approved 2026-05-05. Ready for implementation plan.
Replace the current single-page "retired freelance" site with a hub showcasing the 6 ShadowPuppet, LLC apps (BarnHub, BookLoom, MortalLoom, EscapeMint, ADultingHD, Idea Loom). Demolish the deprecated Grunt + Bower + Jade + Stylus + Bespoke.js + CoffeeScript stack down to plain static HTML/CSS, matching every other marketing site in the family. The hub deliberately offers no contact information — Adam doesn't want freelance/agency solicitation.
- Canvas:
#0d0a14(near-black indigo) - Radial light pools: violet
rgba(120, 80, 180, 0.22)top-left, deep bluergba(60, 100, 180, 0.18)bottom-right - Hero H1: violet→blue gradient text (
linear-gradient(135deg, #c4a0e8, #80a8e0)clipped to text) - Body text: soft lavender
#e8e3f0 - Accent (links / CTAs): plum violet
#c4a0e8 - Muted text:
#9088a8 - Cards:
rgba(255,255,255,0.04)fill,rgba(255,255,255,0.08)border, 12px radius, hover lifts torgba(255,255,255,0.07)+ borderrgba(196,160,232,0.3) - Typography:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif - Brand wordmark: uppercase,
letter-spacing: 0.05em, weight 800 - Dark only — no light mode. Theatre has no daytime.
- Honor
prefers-reduced-motionto disable hover transitions.
-
Hero
SHADOWPUPPETwordmark- H1: "Quiet apps for loud times."
- Subtitle: "Six privacy-first apps for iPhone, iPad & Mac. No accounts. No tracking. Just tools."
- Below subtitle: 6 small icon pills (one per app) acting as anchor links to the grid
-
Apps grid (
<section id="apps">)- 2-column on desktop (≥720px), 1-column on mobile
- Each card: icon (38–48px), name (bold), tagline (one line), "Learn more →" affordance
- Whole card is the anchor link to the marketing site
-
About (
<section id="about">)- Heading: "About"
- Body (verbatim):
Hi, I'm Adam Eivy. I make these apps because I want tools that respect my time, my attention, and my data — and the ones I wanted didn't exist. Privacy-first means no servers, no accounts, no analytics. Your data lives on your device, not mine.
- One short follow-up paragraph (verbatim):
ShadowPuppet, LLC is the name on the App Store listing. It's a one-person operation.
-
Footer
- One line:
© 2026 ShadowPuppet, LLC. All rights reserved. - No nav, no contact, no socials.
- One line:
| App | Tagline | Marketing URL | App Store ID |
|---|---|---|---|
| BarnHub | Privacy-first barn & horse management. | https://barnhub.online | 6760518680 |
| BookLoom | Private book club planner with voting, meetings & shared ratings. | https://bookloom.shadowpuppet.net | 6765790616 |
| MortalLoom | Life planning paired with deep longevity tracking. | https://mortalloom.shadowpuppet.net | 6760883701 |
| EscapeMint | Rules-based DCA & portfolio tracking. | https://escapemint.shadowpuppet.net | 6760598547 |
| ADultingHD | Gamified household tasks. Level up real life. | https://adultinghd.shadowpuppet.net | 6761036805 |
| Idea Loom | Daily creative brainstorming. 10 ideas, every day. | https://idealoom.shadowpuppet.net | 6749868977 |
Card order: by App Store ID descending (newest first) → BookLoom, ADultingHD, MortalLoom, BarnHub, EscapeMint, Idea Loom.
index.html:<title>, meta description, meta keywords, OG, Twitter, canonical, theme-color- JSON-LD block 1:
Organizationschema for ShadowPuppet, LLC - JSON-LD block 2:
ItemListof 6MobileApplicationentries (each with name, description, App Store ID, downloadUrl, image, applicationCategory) robots.txt— allow all, point at sitemapsitemap.xml— single<url>for/(priority 1.0)manifest.webmanifest— name, theme/background colors, icons, norelated_applications(no single app)favicon.png+apple-touch-icon.png— kept from current site
Inline <style> in index.html. Single page, ~300 lines of CSS, no install banner. Per CLAUDE.md note about HTML/CSS cache split, keeping CSS inline avoids a cache split between HTML and external CSS.
shadowpuppet.net/
├── CNAME ← NEW (current repo has none; domain is custom)
├── index.html ← NEW (single-page hub, inline CSS, JSON-LD)
├── robots.txt ← NEW
├── sitemap.xml ← NEW
├── manifest.webmanifest ← NEW
├── assets/
│ └── icons/ ← NEW: 6 app icons, copied from each marketing site
│ ├── barnhub.png
│ ├── bookloom.png
│ ├── mortalloom.png
│ ├── escapemint.png
│ ├── adultinghd.png
│ └── idealoom.png
├── favicon.png ← KEPT
├── apple-touch-icon.png ← KEPT
├── LICENSE ← KEPT
└── README.md ← REWRITTEN (one-paragraph: "Static hub site for ShadowPuppet, LLC apps. Edit index.html, push, GitHub Pages serves.")
Delete entirely:
Gruntfile.jspackage.jsonbower.jsonsrc/(Jade templates, Stylus, CoffeeScript, Bespoke.js, all current copy/imagery)public/(Grunt build output, if present)node_modules/(if present)
The current page content (Disney mention, "no I won't build your site," GIFs of Cleese, Mickey, etc.) is intentionally fully discarded.
Demolish-and-rebuild. The current src/ tree has nothing reusable — different content, different stack, different aesthetic. Cleanest path: rm -rf the old, write the new.
Ordering:
- Add CNAME (domain is custom, current repo missing it)
- Write new
index.html,robots.txt,sitemap.xml,manifest.webmanifest - Copy 6 app icons from sister marketing-site repos into
assets/icons/ - Delete old build stack files and
src//public/ - Rewrite README
- Local verify, commit, push
python3 -m http.serverfrom repo root, loadhttp://localhost:8000/- Click every app card — confirm each lands on the right marketing site
- Click every hero icon-pill — confirm anchor scroll to apps section
- Run Google Rich Results Test against the rendered HTML — Organization and ItemList must validate
- Lighthouse a11y check: contrast on dark canvas (lavender body text on
#0d0a14— verify ≥ 4.5:1), all links have visible focus, semantic landmarks (<header>,<main>,<section>,<footer>) - Open in Safari, Chrome, Firefox — confirm radial gradients render, hero gradient text renders (Safari + Firefox need
-webkit-background-clip+background-clipboth) prefers-reduced-motion: reducetest — hover transitions must be suppressed
- Custom logo mark (typeset wordmark only)
- Blog / notes section
- App Store badge buttons on the hub (each marketing site has its own)
- Analytics (privacy-first family principle, matches current site)
- IndexNow integration (single page, low value; revisit if we add /vs/ pages later)
- Contact / email / social links — explicitly excluded by user request to discourage freelance solicitation
- Light mode
None. Design is approved.