Handoff: Mystery Spot — Personal Literary Blog

Overview

A personal blog with a "literary, slightly gothic" feel — warm near-black background, refined serif typography, and a quiet, restrained UI. The site hosts essays/observations (Posts), short microposts (Notes), and a "media diet" of Books / Movies / Television logs with star ratings.

About the Design Files

The files in this bundle are design references created in HTML/React/Babel — prototypes that show the intended look, layout, type system, and interaction model. They are not production code to copy directly. The task is to recreate these designs in the target codebase's environment (Next.js, Astro, Eleventy, Jekyll, plain HTML, etc.) using its established patterns. If no codebase exists yet, pick the framework that fits the user's needs — for a personal blog with light interactivity, a static-site generator (Astro, Eleventy, or Next.js with SSG) is a very natural fit.

The prototype uses a Tweaks panel for switching theme + density + page. Do not ship the Tweaks panel — it's a design tool. Theme switching should be a real UI affordance (e.g. a small toggle in the header or footer) or driven by prefers-color-scheme. Density is a designer-only knob; pick compact (the current default) and remove the rest.

Fidelity

High-fidelity. Colors, typography, spacing, and interactions are intentional and final. Match them pixel-close where reasonable. Use the codebase's existing component patterns where they exist; otherwise the markup in app.jsx is a faithful reference.

Stack Notes for the Implementer


Screens / Views

1. Header (every page)

3. Home Page

Top Story block (full container width):

Two-column body (≥880px viewport):

Mobile (<880px):

4. Single Post Page

5. Notes Index Page

6. Books / Movies / Television Pages

7. 404


Design Tokens

Colors — Dark (default)

--bg:         #131210   (page background, warm near-black)
--bg-2:       #1b1814   (lifted band — mobile notes row)
--bg-3:       #221d16   (inset cards)
--ink:        #e8dfc9   (primary text)
--ink-soft:   #b8ad94   (secondary/italic copy)
--ink-faint:  #807761   (tertiary text, dates)
--ink-meta:   #aea48a   (meta/accent text — readable contrast)
--rule:       #2e2a22   (dividers)
--rule-soft:  #221f19   (faint dividers, card grid gap)
--accent:     #c8966a   (brand mark dot, eyebrow, hover, links)
--accent-2:   #8a6a4a   (deeper accent)

Colors — Light (parchment)

--bg:         #f1e8d4
--bg-2:       #e7dcc1
--bg-3:       #ddd0b1
--ink:        #14110b
--ink-soft:   #44392a
--ink-faint:  #756a52
--ink-meta:   #56492f
--rule:       #b8a988
--rule-soft:  #cdc0a0
--accent:     #5a3a1a
--accent-2:   #7a4f2a

Typography Stacks

--f-display:  'Publico Headline', 'Source Serif 4', Georgia, serif;
--f-body:     'Publico Text',     'Source Serif 4', Georgia, serif;
--f-title:    'IM Fell English',  'Publico Headline', Georgia, serif;
--f-meta:     'IBM Plex Sans', ui-sans-serif, system-ui, -apple-system, sans-serif;

Sizes (compact density — default)

base size:   17px
line-height: 1.55
gap:         .85rem
measure:     64ch
section-y:   clamp(1.1rem, 2.5vw, 2rem)

Letter-spacing

Numerals

Borders / Radii / Shadows


Interactions & Behavior

Responsive Breakpoints


Content Shapes

See data.jsx for examples. Schema:

Post:  { slug, title, date (YYYY-MM-DD), category, excerpt, body: string[] }
Note:  { slug, kind: "note", date, time?, body: string }
Book:  { title, author, rating, note, date }
Movie: { title, year, rating, note, date }
TV:    { title, season, rating, note, date }

Assets


Files In This Bundle


Implementation Recommendations

  1. Strip the Tweaks panel entirely. Replace with a single small theme toggle if desired.
  2. Move all content into markdown files (frontmatter for title/date/category) or a headless CMS. Map fields to the schema above.
  3. Self-host fonts. If Publico isn't licensed, leave the stack as-is; Source Serif 4 carries the design competently.
  4. Make sure tabular figures are enabled in meta text — it's the single biggest readability fix the design relies on.
  5. Use semantic HTML: <article> for posts, <time> for dates, real <a> tags with cursor: default if you want to preserve the print feel.