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.
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.
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.
data.jsx file shows the expected content shape for each kind (post, note, book, movie, tv).title, rating (0–5, .5 increments), short note, date, and one kind-specific field (author, year, season).text-transform: uppercase, letter-spacing: .02em. Preceded by a small 14px circular dot-in-circle icon (1px border, 4px filled center dot in accent color).Posts and Notes only. IBM Plex Sans, 500 weight, .82rem. Active item underlined with a 1px accent border.Media diet: followed by Books, Movies, Television. IBM Plex Sans .78rem, ink-soft color, dotted underlines on hover, accent on active.❦ in display serif. Tagline Mystery Spot — observations, occasionally sharp, mostly sincere. Estd. line Est. 2026 · Brooklyn at reduced opacity. Top 1px rule.Top Story block (full container width):
THE LATEST · APRIL 24, 2026 — IBM Plex Sans, .72rem, 600 weight, .14em tracking, accent color, uppercase. Date inline.clamp(1.85rem, 4.2vw, 2.85rem), letter-spacing: -.012em, text-wrap: balance.ink-soft color, max-width: 60ch.Two-column body (≥880px viewport):
letter-spacing: -.008em.all notes → link on the right. Stack of notes, each with a 2px left border (rule color → accent on hover), small uppercase date+time, body text in Source Serif Text 0.98rem.Mobile (<880px):
--bg-2 background and 1px rule borders top + bottom. Inside: a Recent notes label + All notes → link, then horizontally-scrolling cards. Each card: ~78vw wide (max 320px), --bg-3 background, 1px rule border, 3px radius, scroll-snap. Max 6 notes shown here.var(--measure) = 64ch).MAY 19, 2026 · ESSAYS · ~ 4 MIN — IBM Plex Sans .76rem, ink-meta, with · dots at 55% opacity.clamp(1.9rem, 4.2vw, 2.8rem), center-aligned, balance-wrapped.line-height: 1.55 (compact density), text-wrap: pretty, hanging-punctuation: first last.line-height: .9, floated left, padded .1em right, ink color (not accent — intentional, more restrained).{braces} in the source data becomes italic via a small custom span renderer.Notes and italic blurb.repeat(auto-fill, minmax(280px, 1fr)), 1px gap on rule-soft background (creating a thin divider effect between cards), 1px outer border.by Author / 2023 / Season 3 depending on kind.--bg-2.404 numerals in Source Serif 500, ~clamp(5rem, 14vw, 9rem), tight tracking.What you seek is not here. Perhaps it was never here at all.Return to the index (accent color, IBM Plex Sans uppercase).--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)
--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
--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;
base size: 17px
line-height: 1.55
gap: .85rem
measure: 64ch
section-y: clamp(1.1rem, 2.5vw, 2rem)
-.005em to -.015em (slightly tight, refined).04em to .18em depending on size/rolefont-feature-settings: "tnum", "lnum" (tabular + lining figures) — this is critical for date readability. Numbers should never look small next to caps.cursor: default on all clickable elements (the design intentionally avoids the pointing-finger — feels more print-like). When implementing real navigation, prefer subtle hover states (color shift, slight padding shift on archive items) over cursor changes..4rem, title shifts to --accent.--rule to --accent.--bg-2.data-theme="light|dark" on the <html> element (or app root). All theme work happens via CSS variables. Default = dark. Consider respecting prefers-color-scheme on first visit.window.scrollTo({top:0}) on every page change.::selection { background: var(--accent); color: var(--bg); }.880px: Home goes from single-column (with mobile notes row) → two-column posts+notes layout.720px: Header gap tightens, shelf grid collapses to 1 column, post nav stacks.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 }
body strings support {wrapped text} for italic emphasis (custom inline renderer; trivial to port to a markdown processor — just teach it the syntax or use plain markdown asterisks).❦ (fleuron) is a unicode character (U+2766) rendered in the display serif.Mystery Spot.html — entry point.styles.css — full token + component CSS. The source of truth for the design system.app.jsx — React component structure for every page. Babel-transpiled in-browser in the prototype; treat as pseudocode for whatever framework you use.data.jsx — mock content showing the expected schema. Replace with markdown/CMS in production.tweaks-panel.jsx — the prototype's design control panel. Do not ship this.<article> for posts, <time> for dates, real <a> tags with cursor: default if you want to preserve the print feel.