An editorial homage to POPEYE Magazine (Tokyo, Magazine House Co.).
The site itself never names this inspiration. This document is for contributors so the design system stays coherent across future pages and issues.
POPEYE — Magazine for City Boys — is a 50-year-old Japanese style magazine. Its design grammar is one of the most disciplined editorial systems in print: warm paper stocks, a single spot color (tomato red), bracketed kicker categories, numbered catalogs, bilingual JP/Latin lockups, and a confident feature monument on every cover.
We borrowed all of that.
The thought experiment that shaped the redesign:
What would a POPEYE × kernel.chat collab issue look like if Magazine House let the kbot terminal write the field reports?
Answer: warm editorial frame around a quiet utility core. Loud cover, quiet command line. Bilingual everywhere. Tomato as the only spot color. Every release is ISSUE N · MONTH YEAR — like a magazine back-catalog, not a changelog.
The site never says "POPEYE." The grammar carries the homage on its own.
POPEYE is the spine. Around it we keep a working file of editorial neighbours — magazines whose mechanics we want to learn from without imitating. Each entry below is a quick decode (what makes the cover read as that magazine) plus a short list of transferable mechanics (what we could borrow without it reading as homage to a second magazine on top of POPEYE). This section grows as we encounter new references; future entries follow the same shape.
PAPERSKY (Tokyo, 2002–present, founded by Lucas Badtke-Berkow / Knee High Media — rebranded as PAPERSKY Inc. in 2024) is a quieter cross-reference. Self-described as "a different way to travel," it runs roughly quarterly, bilingual JP/EN, anchored each issue to a single place — most issues built around a walking, hiking or cycling route through it. The SHIMANAMI issue (#69 "Dreamy") is built around the Setouchi Shimanami Kaido, the ~70 km route from Onomichi (Hiroshima) to Imabari (Ehime) across the Seto Inland Sea.
We do not want to look like PAPERSKY — its serene white-bordered single-photo cover is so identifiably PAPERSKY that direct mimicry would read as homage to a second magazine on top of the first. What we want from it is a small set of mechanics the POPEYE grammar doesn't already give us.
| Element | What it does | Notes |
|---|---|---|
| Single full-bleed photograph in natural light | Functions as the cover headline; no cover lines compete with it | Available light, candid, place-led. Editorial brief, not layout rule |
| Generous white border around the photo | Reads as gallery print, not magazine bleed | Margin, not bleed |
| Sans-serif white wordmark set high, modest scale | Stable masthead across every issue | Geometric sans, all-caps, tight tracking |
| All-caps Latin subtitle ("A DIFFERENT WAY TO TRAVEL") | Stable tagline under the wordmark | Tracked tight |
| Custom JP display lettering for the issue's place name | Per-issue signature gesture | Hand-drawn or commissioned per issue — never a system font |
| Paper-airplane glyph below the place word | Recurring folio / wayfinding mark | The "paper" + "sky" rebus, used as a small system element |
| Centred place dateline at the bottom (e.g. "HIROSHIMA & EHIME") | Postmark, not subtitle | Small-caps Latin |
Things kernel.chat could borrow without copying the silence:
- Per-issue custom display lettering for the topic word, paired
with the stable Latin wordmark — gives every issue an identity
without breaking the masthead. Our equivalent is the
headline.emphasisitalic-tomato word; the move PAPERSKY suggests is occasionally commissioning a hand-drawn JP word forfeatureJpor for the cover's secondary lockup, instead of defaulting to the body type. - A small recurring glyph as a system folio mark — PAPERSKY
uses a paper airplane. We could reserve a single mark (a tomato
spot, a kernel, a caret, a block-quote bracket) and use it
consistently as the cover/section/page-number ornament. We
already have
<PopIcon>infrastructure for this; the discipline we lack is using one glyph as a system thread, not eleven. - Centred place / topic dateline as postmark — small-caps Latin
anchored at the bottom centre of the cover, separate from the
monument. Could co-exist with the existing bottom-right monument
on
classiclayout, or replace it on a futurepostmarkcover variant. - One-photo cover with a real margin — for the rare future
issue where photography is the right voice (a place dispatch, a
field report, a maker profile). Resist cover lines; let the
image be the headline. We have not shipped this yet — would
need a new
coverLayout: 'photo-postmark'variant. - Photographic register rule — when we do use photography, commit to natural light, place-led, candid, no studio gloss. This is a brief to photographers, not a CSS rule.
- Issue-as-place — anchor each issue to one subject (a route, a problem, a maker, a fish) rather than a mixed bag. We already do this; PAPERSKY confirms the discipline.
The bilingual parallel text and the place-anchored issue concept are table stakes in the JP indie ecosystem (POPEYE, &Premium, Brutus, Subsequence). The distinctive PAPERSKY moves are the per-issue custom JP display word, the paper-airplane folio glyph, the postmark dateline, and the disciplined white margin around a single quiet hero image. Borrow the mechanics; do not borrow the silence — kernel.chat has a louder voice.
POPEYE is dense, urban, catalog-led — a packed magazine for city boys. PAPERSKY is spare, place-led, slow — a quiet magazine for travellers. Seven things the second has that the first doesn't, ranked by usefulness to kernel.chat:
- Restraint as a tool. ★ POPEYE packs the cover. PAPERSKY shows what one big photograph and a real white margin can carry. The discipline of not putting things on the cover is itself a design move. We tend toward POPEYE's density; banking a single restraint move per year (one quiet cover among the loud ones) would extend our range.
- A single recurring system glyph. ★ POPEYE's identity is the
wordmark plus the layout grammar; it has no small graphic
shorthand that travels across cover, section openers, and page
numbers. PAPERSKY's paper-airplane does. We have
<PopIcon>infrastructure for this — what we lack is the discipline to reserve one mark as a system thread instead of using eleven. - Per-issue commissioned display lettering. POPEYE's
typography is largely systemized (a confident type lockup is the
brand). PAPERSKY commissions a unique JP display word per place.
A different relationship to type: bespoke per issue, not a font
choice. For us this could mean occasionally hand-drawing the
featureJpword rather than setting it. - Place-and-route as issue spine. ★ POPEYE is theme-and- catalog ("Italy," "Long Stays," "Reading"). PAPERSKY is place-and-route (Shimanami built around the cycling road, not "the cycling issue"). The structure is geographic and kinetic. Every kernel.chat issue could ask: what is the route through this subject? — not just what is this subject?
- Full bilingual parallel text. POPEYE is JP-primary with selective Latin display. PAPERSKY runs JP/EN side by side. A different commitment to readership. We are EN-primary with selective JP — the inverse of POPEYE — so PAPERSKY's mode would be a stretch but not a reversal.
- The postmark grammar. ★ POPEYE plants a monument number
bottom-right. PAPERSKY plants a centred place dateline at the
bottom — geography, not serial time. A future
coverLayout: 'postmark'variant could let an issue ground itself in subject rather than serial position. - Slowness as a position. POPEYE is monthly; PAPERSKY is quarterly. The cadence itself is a design decision the reader can feel. We publish more like POPEYE — fast, frequent — but could mark certain issues as slow (no dispatch energy, longer form, fewer items in the catalog) to use cadence as a tool the way PAPERSKY does.
★ marks the four most useful for kernel.chat: restraint, single-glyph system thread, place-and-route structure, postmark dateline. Adopt these first; the others are optional.
Status of the four (current run, IV·26):
| Mechanic | First exercised | Status |
|---|---|---|
| Restraint (earned quiet cover) | 370 | In active use across 370, 372, 373 |
| Single-glyph system thread (★) | 370 | Ratified — three surfaces (cover dateline, frame masthead, frame footer) |
| Place-and-route structure | 370 (seven stakes) | Re-exercised in 375 (six borrows) at the references layer |
| Postmark dateline | 372 (ROOM 503 · IV·26) | First fired this drop. The fourth chamber, no longer unfired |
WIRED (San Francisco, 1993–present, Condé Nast) is the second editorial neighbour the magazine reads from. Where PAPERSKY is the quiet field-trip register, WIRED is the data-journalism register: charts as headlines, fact-boxes as paragraphs, and footnoted methodology as the editorial value-add. We do not want to look like WIRED — its cover language (high-saturation acid yellow + caps-locked single-word headlines + glitch type) is so specifically WIRED that direct mimicry would read as a third homage on top of POPEYE × PAPERSKY. What we want is a small set of mechanics that POPEYE and PAPERSKY don't already give us, drawn from WIRED's discipline at the data layer.
| Element | What it does | Notes |
|---|---|---|
| Inline fact-box callouts (mid-paragraph) | Pulls a number out of running prose into a typeset card readers scan first | Tabular nums, tracked tight, accent-rule above |
| Footnoted methodology, set in the same point size as the body | Treats the method as part of the text, not as a back-of-book appendix | Footnote markers in tomato spot, not page-marginal |
| Numbered sources at the foot of long features | Publishes the working bibliography inline, not as a credit page | Author surname + year or arXiv id, never bare URLs |
| Pull-quote with the number, not the sentence | When a feature turns on a measurement, the pull-quote is the measurement | "8.8×" sized as the pull-quote, source line below |
| "Methods" sidebar adjacent to the headline | The credibility lives next to the claim, not behind it | Shorter than the lede; longer than the standfirst |
Things kernel.chat could borrow without copying the cover voice:
- The methods sidebar adjacent to the claim, not at the end.
When an issue turns on a measurement (374's
8.8× / 13.9× / 19.7×, 372's670 → 105), the method sits next to the number. We haveEssaySpread.dataBlockinfrastructure for this; the discipline we lack is placing the data block adjacent to the headline rather than after the closing. - Numbered references at the foot of every long feature.
PAPERSKY footnotes places. WIRED footnotes papers and
measurements. We started this in 375 (THE SIX BORROWS) with
a
referencesblock credit page; the next move is making it standard for any feature whose argument cites a paper, benchmark, or external source. - Pull-quote with the number, not the sentence. When the feature is methodologically driven, the quote should be the measurement, the unit, and the source line — not the most quotable English. Exercised quietly in 374; codify going forward.
- Footnote markers in tomato spot, set inline. Tiny lift
from cover to body: the asterisk is already our system
glyph; admitting tomato-tinted superscript markers
(
¹ ² ³) for in-text footnotes joins the system glyph discipline to the footnote discipline. Not yet shipped.
These four sit alongside the four PAPERSKY-starred mechanics. The two neighbours together give the magazine a complete working register: PAPERSKY for the quiet-field, WIRED for the data-grounded. Most issues need neither set fully exercised; the catalog is for when an issue's subject calls for them.
Principle. Every issue has its own identity. Every issue carries its own set of design decisions, catalogued here. Continuity does not come from uniformity — it comes from documented per-issue choices that future issues can reach for, vary against, or refuse on purpose.
The catalog below is the run's working memory. Each row is one issue's identity sheet: what stock, what layout, what ornament, what accent, what mechanics it exercised, what new vocabulary it introduced. Adding a new issue means adding a row.
The author-notes block at the top of each src/content/issues/<n>.ts
file is the long version. This table is the index.
| # | Stock | Layout | Ornament | Seal / Postmark | Accent | Spread | Mechanics exercised | New to the design language |
|---|---|---|---|---|---|---|---|---|
| 360 | cream | classic | — | — | tomato | — | The anchor identity | first issue |
| 361 | butter | classic | — | — | tomato | — | Summer reading register | butter stock signal |
| 362 | cream | classic | — | — | tomato | — | Vacation / quiet | — |
| 363 | cream | classic | — | — | tomato | — | Style register | — |
| 364 | cream | classic | — | seal: FORECAST | cobalt | forecast | First forecast spread; cobalt accent | forecast spread type, cobalt ink seed |
| 365 | kraft | classic | — | — | tomato | — | Craft register | kraft stock signal |
| 366 | cream | classic | ink-spread | — | tomato | dispatch | Ornament debut | ink-spread ornament, dispatch spread type |
| 367 | ivory | classic | — | seal: SIEVE | cobalt | essay | First sieve / preselection essay | ivory stock register |
| 368 | cream | asymmetric-left | — | — | tomato | essay | First Anthropic-Labs profile | asymmetric-left layout |
| 369 | cream | classic | warty-spots | seal: SHEDD · IV·26 | brick | dispatch | Specimen ornament | warty-spots ornament, brick ink seed |
| 370 | cream | monument-hero | — | seal: FORECAST · IV·26 | tomato | forecast | Restraint ★ + single-glyph thread (★) ★ + place-and-route ★ — three of four PAPERSKY mechanics ratified | monument-hero layout, the asterisk (★) as system glyph |
| 371 | ink | asymmetric-left | flash-burn | seal: AFTER HOURS · APR 2026 | tomato | essay | Cinematographer profile; flash ornament | ink stock, flash-burn ornament |
| 372 | ledger | ledger-rule | — | postmark: ROOM 503 · IV·26 | graphite | essay | Postmark dateline ★ — the unfired fourth PAPERSKY mechanic, fired here | ledger stock, ledger-rule layout, graphite ink seed, coverPostmark field |
| 373 | cream | asymmetric-left | — | — | tomato | essay | Editorial-neighbours framework applied at the AI-tools layer; restraint by absence | first under-decorated cover (no ornament + no seal + no accent override) |
| 374 | ivory | classic | asterisk-stamp | — | tomato | essay | Numbers-with-methodology piece; first WIRED-mechanic exercise (methods sidebar adjacent to claim) | asterisk-stamp ornament |
| 375 | cream | numbered-catalog | — | seal: CREDITED · SIX BORROWS | tomato | essay | Place-and-route at the references layer; first dossier + references spread elements (WIRED's methods + numbered references mechanics) | numbered-catalog layout, dossier spread element, references block as credit page |
| 376 | ivory | classic | — | seal: FILED · STANDARDS · IV·26 | tomato | essay | First WIRED references block exercised at full strength as a craft mechanic (seven cited sources at the foot of a 1,500-word spread); confirms 374's ivory + classic + sober register as a repeatable editorial pattern, not a one-off |
first issue where the WIRED references mechanic does load-bearing editorial work (the route is paper → adoption → local example) |
| 377 | ivory | classic | — | seal: FILED · API TIER · IV·26 | tomato | essay | Second consecutive issue exercising the WIRED references block (after 376); ratifies the ivory + classic + sober-register pattern as repeatable. Subject is the convergence — not either company. Zero kbot pitch. |
first issue where the WIRED references block fires twice in a row, turning the mechanic from one-off into the magazine's standard move for data-led pieces |
★ marks an issue that ratified a PAPERSKY-starred mechanic into active service. Three are now ratified across the run; the asterisk in the row marker is the magazine's own bookkeeping.
When publishing a new issue:
- Build the issue file at
src/content/issues/<n>.ts— author notes at top explain the identity decisions in long form. - Add a row to the catalog above with the issue's identity at a glance.
- If the issue introduces new design vocabulary (a stock, a
layout, an ornament, an accent seed, a spread element, a
mechanic), document the introduction in the row's
"New to the design language" column AND extend the relevant
type union (
IssueStock,IssueCoverLayout,IssueCoverOrnament, etc.). - If the issue exercises a previously-unfired starred mechanic, mark the row with ★ and note the ratification.
It is not a style enforcement table. Two issues with cream +
classic are not interchangeable; the difference is in the
spread, the prose, the headline, and the ornament-or-absence-of.
The catalog records which surface decisions an issue made so
the next issue can choose against the run with eyes open. The
discipline is the same as the editorial-neighbours framework:
collect the references, decode them, borrow without imitating,
make the next thing distinctly itself.
Stocks — warm paper grounds:
--pop-ivory#FAF9F6— primary white ground--pop-cream#F3E9D2— warm secondary stock--pop-butter#EFD9A0— summer / reading issue stock--pop-sepia#D4C5A9— muted accent--pop-kraft#C8A97E— camel / outdoor issue--pop-coffee#6B4E3D— warm brown text--pop-ink#1F1E1D— primary dark ground--pop-ledger(introduced 372) — pale graph-ruled accountant's paper. Audit register; pairs with thegraphiteaccent.
Stock cabinet — when each stock signals what:
| Stock | Signal | First used |
|---|---|---|
cream |
Anchor — the default; warm magazine paper | Run-wide |
ivory |
Serious-sober — methodological / press-preview register | 374 (AGAINST VIRAL BENCHMARKS) — the lab-bench paper |
butter |
Summer / leisure — slow reading | (per-issue) |
kraft |
Field-report / outdoor | (per-issue) |
ink |
Night / after-hours | 371 (AFTER HOURS) — the tungsten dark |
ledger |
Audit / account — graph-ruled accountant's paper | 372 (THE AUDIT) — debuts with the postmark mechanic |
Spot color — the punch:
--pop-tomato#E24E1B— banners, rules, italic em accents, catalog numbers, terminal prompt. The only spot color the press needs to mix.--pop-tomato-soft— 8% tomato wash for hover states
Reserved accents (defined, not yet used — earmarked for future issue variants):
--pop-cobalt#1D4E89— winter issue--pop-ivy#2E4A2E— nature issue--pop-pool#4FB5C8— terminal agent label
Editorial rules:
--pop-hairline— 0.5px ink rule--pop-hairline-soft— 16% opacity rule--pop-tape— butter tape overlay
Terminal traffic-light dots (mac-style chrome):
--pop-term-red,--pop-term-yellow,--pop-term-green
- Display + prose: EB Garamond →
var(--font-serif) - Meta + code: Courier Prime →
var(--font-mono)
Nothing else. No system fonts, no sans-serif.
The asterisk (★) — ratified ISSUE 370 — is the magazine's
single recurring small mark, threaded through every folio strip in
the system. Borrowed practice from PAPERSKY (whose paper-airplane
glyph plays the same role), implemented through the existing
<PopIcon name="asterisk"> SVG and the .pop-system-glyph CSS
class in src/index.css.
Where it appears (one place per surface — never as decoration):
| Surface | Position | Component |
|---|---|---|
| Cover dateline | Leading the issue folio (top-right of every cover) | IssueCover.tsx |
| Frame masthead | Leading the issue folio (top of every inner page) | MagazineFrame.tsx |
| Frame footer | Leading the issue folio (bottom of every inner page) | MagazineFrame.tsx |
| Postmark dateline | Leading coverPostmark.place at the bottom-centre of covers that fire the fourth PAPERSKY mechanic (introduced 372) |
IssueCover.tsx (postmark variant) |
Spec: tomato spot color, 0.85em of the surrounding folio
text, vertically centred, 6px right margin, opacity: 0.95.
Renders the existing PopIcon asterisk stroke SVG — no new
infrastructure.
Discipline: this is the only small graphic mark that
travels through the system. The rest of the <PopIcon> vocabulary
(leaf, coffee, pin, quote, thread, etc.) remains
available for single-use editorial accents inside specific
issues, but none of them are systemwide. A system with eleven
small marks has none. We have one. Keep it.
Promotion path for future surfaces: section openers
(pop-section-header), page-number folios on long features,
colophon. Add only if the surface already carries the issue meta
strip — otherwise the asterisk reads as decoration, not as a
thread.
| Primitive | What it is | Where it appears |
|---|---|---|
.pop-rule |
Hairline divider (1px) | Section breaks |
.pop-rule--tomato |
2px tomato spot rule | Section accents |
.pop-rule--short |
64px max-width centered rule | Under kickers |
.pop-kicker |
Bracketed [CATEGORY · 日本語] mono label |
Every section head |
.pop-banner |
Tomato tag box (reverses to ivory text) | Issue banner, tags |
.pop-hash |
#tag chip |
Cover stats |
.pop-catalog-num |
001. numbered item (tabular nums) |
Catalog rows, cards |
.pop-price |
¥0 · BYOK price tag |
Cover masthead |
.pop-monument |
Stacked issue-number block | Cover bottom-right, colophon |
.pop-bilingual |
Latin/JP lockup wrapper (.pop-latin + .pop-jp) |
Catalog cards, specialist cards |
.pop-display |
EB Garamond display headline (italic em → tomato) | All section titles |
.pop-swash |
Italic coffee accent | Decks, subtitles |
.pop-stock-* |
Paper ground (cream/butter/kraft/ivory/ink) | Whole sections |
.pop-row |
Catalog row grid (num · label · badge) | Table of contents |
.pop-folio |
Page number / byline / date strip | Masthead, frame footer |
.pop-section-header |
Editorial lockup (kicker + rule + title) | Every section |
.pop-section-title |
Large display title | Section titles |
.pop-section-header--on-ink |
Dark mode variant | Field report, Security, Bench |
.pop-feature-jp |
Mono Japanese subtitle | Feature hero, page heads |
.pop-term-dot |
Terminal traffic-light (red/yellow/green) | All terminal demos |
A wrapper that gives every inner route the same masthead strip + folio
footer as the cover — wordmark + ISSUE · MONTH YEAR + page kicker on
top, "← BACK TO COVER" + folio on bottom. Optional title /
titleJp / deck for pages that want a full editorial head block,
or just the wrapper strip for pages that keep their own hero. dark
mode for ink-ground pages.
Every release is a new issue. Cover, masthead, folios all read from a
single typed ISSUE object:
{ number: '360', month: 'APRIL', year: '2026',
feature: 'THE URBAN OUTDOORS REVIEW',
featureJp: '都会のコードと、自然のOS',
price: '¥0 · BYOK',
tagline: 'MAGAZINE FOR CITY CODERS · 街のコーダーのために' }Bumping the issue is a one-line change.
The design begs to be printable. Print:
- A4 page, ink on white, all stocks collapse
- Tomato preserved as press spot color
- Interactive chrome hidden (CTAs, install pill, nav, buttons)
- URLs exposed beside inline links
page-break-inside: avoidon sections, cards, rows- Display sizes in points
Print any route (Cmd+P) for the printable zine form.
| Route | Wrapper | Stock | Dark | Section heads | Bilingual |
|---|---|---|---|---|---|
/ Landing |
— (cover) | cream / butter / ivory / ink mixed | mixed | ✓ on every section | ✓ catalog + specialists |
/security |
MagazineFrame | ink | ✓ | ✓ tomato kickers, on-ink | section-head only |
/bench |
MagazineFrame | ink | ✓ | ✓ tomato kickers, on-ink | section-head only |
/privacy |
MagazineFrame | cream | — | h2s get tomato spot rule via CSS | masthead only |
/terms |
MagazineFrame | cream | — | h2s get tomato spot rule via CSS | masthead only |
- Never name the inspiration on the site. The grammar carries the homage. No "POPEYE" copy in user-visible surfaces.
- Never hardcode color or font. Always go through
--pop-*,--font-serif,--font-mono. - Never use inline styles for color, font, or spacing. Extract
to CSS classes per
.claude/rules/components.md. - Bilingual everywhere it fits. Catalog items, section heads,
page titles — wrap in
.pop-bilingual > .pop-latin / .pop-jp. - Tomato is the only spot color. Don't introduce a second accent without proposing a new issue-variant token (cobalt / ivy are reserved for that).
- Every release is an issue. Bump
src/content/issue.tson each version. Don't ship a kernel.chat update without incrementing the issue number — like a real magazine.
Different issues need different tools. An essay wants section
kickers, drop caps, and a pull quote. An interview wants a subject
dossier and a Q&A format. A recipe (future) wants an ingredient
list and a method block. Rather than force every feature into one
layout, the spread field on IssueRecord is a discriminated
union — each issue picks the right tool, and the
IssueFeature router renders the matching component.
| Tool | spread.type |
Component | Used by | Grammar |
|---|---|---|---|---|
| Essay | 'essay' |
EssayFeature |
ISSUE 363 | Mono section kickers, serif prose, drop cap on lead paragraph, tomato pull-quote, sign-off |
| Interview | 'interview' |
InterviewFeature |
(available) | Subject dossier card with tomato corner badge, alternating Q./A. blocks, drop cap on final answer |
| Forecast | 'forecast' |
ForecastFeature |
(available) | Cobalt-led forward projection — signals, horizons, confidence bands. Surfaces forecast_summary numerics in editorial form |
| Dispatch | 'dispatch' |
DispatchFeature |
ISSUE 376 | Wire-style news filing — repeating slug band, dateline, numbered propositions with tomato check-squares, mid-spread bulletin, optional bridge to a prior issue, terminator rule |
| Review | 'review' |
ReviewFeature |
(available, ISSUE 378 candidate) | Olive-led graded survey — top-line italic verdict, numbered rubric (criteria), optional standout award, grid of subject cards with score monument, stars, pros/cons, per-card verdict |
- Extend
IssueSpreadinsrc/content/issues/index.tswith a new member of the union, e.g.{ type: 'recipe', ... }. - Build
src/components/<Name>Feature.{tsx,css}following theEssayFeature/InterviewFeatureconventions. - Add a case to the switch in
src/components/IssueFeature.tsx. - TypeScript's exhaustiveness check will flag any variant that isn't handled.
recipe— ingredients list (numbered rows), method block (numbered steps), field variables (time, yield, temp). POPEYE runs these in food issues.letters— reader letters column: one block per letter with italic signature right-aligned.gallery— when images arrive: caption-first photo grid.
Inspired by how designers work across Illustrator, Photoshop, InDesign, and Adobe Express (or their Figma equivalents), the kernel.chat magazine is a four-layer toolkit. Each layer has a distinct job; each issue picks what it needs from each.
| Layer | Adobe analog | Figma analog | What it does | Status |
|---|---|---|---|---|
| Layout + text flow + features | InDesign | Pages + auto-layout | Grid, masthead/frame, feature modules (essay / interview / forecast) | ✅ shipped |
| Ornaments — shape, icon, path-text | Illustrator | Components (vector) | Editorial marks that compose inside any feature | ✅ shipped |
| Images + textures | Photoshop | Image fills | Photography, overlays, raster texture | ⏸ deliberately skipped |
| Template builders | Adobe Express | Community templates | One-call issue helpers so authoring is faster | ⬜ next |
Three families of decorative primitive, all in src/components/ornaments/:
Tokenized shapes for editorial badges, corner marks, dividers.
Renders as inline SVG taking currentColor so it adopts the ink
of wherever it sits.
| name | use |
|---|---|
circle · ring · dot |
counters, corner badges, index markers |
square · lozenge |
subject-card corner badges, feature tags |
triangle · star |
flags, anniversary covers, play buttons |
slash |
diagonal accent, strike-through headlines |
Sizes: sm · md · lg (all via clamp() — mobile-first).
Colors: tomato · ink · coffee · ivory · current.
Optional label prop centers mono text inside the shape.
<PopShape name="lozenge" size="md" color="tomato" />
<PopShape name="circle" size="lg" label="03" />Hand-tuned inline SVGs with a slightly thicker editorial stroke. Not Lucide / Feather / Material — these speak the magazine's type weight.
Icons: arrow · asterisk · sparkle · leaf · coffee · sun · moon · book · pin · quote · thread · pilcrow. Sizes: sm · md · lg.
Takes currentColor.
<PopIcon name="asterisk" size="sm" />
<PopIcon name="arrow" aria-label="continue" />SVG <textPath> primitive for curved headlines, arc signoffs,
wavy drop-in ornaments.
Presets: arc-top · arc-bottom · wave. Custom d supported for
bespoke curves.
<PopPathText text="Summer is Here" preset="arc-top" color="tomato" />Different issues need different tools. An essay wants section
kickers, drop caps, and a pull quote. An interview wants a subject
dossier and a Q&A format. The spread field on IssueRecord is a
discriminated union — each issue picks the right tool, and the
IssueFeature router renders the matching component.
| Tool | spread.type |
Component | Used by | Grammar |
|---|---|---|---|---|
| Essay | 'essay' |
EssayFeature |
ISSUE 363 | Mono section kickers, serif prose, drop cap on lead paragraph, tomato pull-quote, sign-off |
| Interview | 'interview' |
InterviewFeature |
(available) | Subject dossier card with PopShape corner lozenge, alternating Q./A. blocks, drop cap on final answer |
- Extend
IssueSpreadinsrc/content/issues/index.tswith a new member of the union, e.g.{ type: 'recipe', ... }. - Build
src/components/<Name>Feature.{tsx,css}following theEssayFeature/InterviewFeatureconventions. - Add a case to the switch in
src/components/IssueFeature.tsx. - TypeScript's exhaustiveness check will flag any variant that isn't handled.
recipe— ingredient list, method block, field variables.review— product review grid, ratings, pros/cons.letters— reader letters column.dispatch— field report, location/date header.gallery— when images arrive: caption-first photo grid.
Mobile is primary, not responsive. Six principles guide every layout decision:
- Mobile is the cover. Design at 393px first; scale up.
- The thumb is the turn-of-page. 44px tap targets everywhere, no sticky nav, no hamburger menu, no horizontal scroll (except deliberate editorial moves like wide tables).
- Type-first, never card-first. No rounded-rectangle UI chrome. The pop-* primitives are all typographic — pop-kicker, pop-banner, pop-folio, pop-rule.
- Warm grounds beat pure white. Ivory/cream/butter/kraft stocks
soften mobile blue-light. No pure
#ffffff. No dark mode (the ink stock handles dark sections on a per-section basis). - Generous vertical rhythm, tight horizontal frame. 18–22px
horizontal padding on ≤640px;
line-height: 1.6+for serif prose. - One issue per session. Linear read: cover → feature → next. No discovery UI, no menus, no app-shell. The issue is the app.
- All
.pop-landingand.pop-frameuseenv(safe-area-inset-*)so iPhone notch + home indicator are respected. prefers-reduced-motiondisables transitions site-wide.- Every layout variant has a mobile-first
clamp()pass. - Ornaments (PopShape, PopIcon, PopPathText) use
clamp()sizing by default.
A print-inspired magazine is mostly still on the web. A book
doesn't animate itself. But two very small ambient moves keep
the page from feeling dead — both respect
prefers-reduced-motion via the site-wide override in
src/index.css (animation-duration collapses to 0.01ms).
| Accent | Where | Spec |
|---|---|---|
| Tomato rule breath | Every .pop-rule--tomato |
Opacity 0.92 ↔ 1.00, 3.3s period (0.3Hz). CSS keyframe pop-rule-breath. |
| Dateline marquee | Cover dateline JP tagline | ~4px/second horizontal drift via .pop-marquee + .pop-marquee-track. Static folio beside it stays still. Mask gradient softens the entry/exit edges. |
Both are deliberately subtle — a reviewer should have to be told they exist. The tomato rule breath is also the one motion token shared with the TikTok grammar, a quiet cross-medium tie-in.
Rules for new ambient motion:
- Must be imperceptibly small (amplitudes ≤ 8% opacity or ≤ 4px translate).
- Must respect
prefers-reduced-motion. - Must be CSS-only — no JS animation libraries, no Framer
Motion, no
requestAnimationFrame. - Must not trigger layout or repaint hotspots — animate only
opacityandtransform. - Before adding a third ambient accent, audit whether the existing two are enough. The site's character is stillness with two quiet accents — not a gallery of ambient effects.
- PDF export per route — actual printable issue file
- Template builder layer (Adobe Express analog): one-call helpers
like
createEssayIssue({...})that fill in defaults
(The seasonal accent move shipped: cobalt, ivy, pool are seeded
in src/content/issues/accents.ts alongside tomato, brick, olive,
amethyst, oxblood, coffee — nine seeds total, each with a default
spread-type binding.)