Skip to content

feat(templates): add 100 new templates across 20 design DNAs#2

Merged
karngyan merged 9 commits into
mainfrom
feat/100-templates
May 1, 2026
Merged

feat(templates): add 100 new templates across 20 design DNAs#2
karngyan merged 9 commits into
mainfrom
feat/100-templates

Conversation

@karngyan

@karngyan karngyan commented May 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds 100 new resume templates organized as 20 design DNAs × 5 variants each. Each template is a folder under templates/<id>/ with index.tsx + styles.css + meta.ts, conforming to the existing <PageFrame> contract and adding density-aware CSS overrides scoped to its own root class.

This is a single bundled PR for the full set per the project decision; the existing 3 templates (_starter, emerald-twocol, minimal-mono) are untouched aside from a small prettier reflow on emerald-twocol/index.tsx.

What's in here

  • Spec: docs/superpowers/specs/2026-05-02-100-templates-design.md documents the approach (20 DNAs × 5 variants) and the per-DNA breakdown.
  • Skill update: .claude/skills/designing-templates/SKILL.md now requires templates to own their .density-tight / .density-roomy overrides in their own styles.css, scoped to their root class. The centralized stage.css density block stays in place for the two pre-existing templates (no behavior change).
  • 100 new templates (303 new files) across these DNAs:
DNA Variants
swiss swiss, swiss-rose, swiss-graphite, swiss-airy, swiss-mirror
editorial editorial, editorial-noir, editorial-vogue, editorial-condensed, editorial-pull
brutalist brutalist, brutalist-redbar, brutalist-grid, brutalist-stamp, brutalist-strip
terminal terminal, terminal-amber, terminal-green, terminal-prompt, terminal-tabular
newspaper newspaper, newspaper-tribune, newspaper-times, newspaper-broadsheet, newspaper-gazette
architect architect, architect-blueprint, architect-section, architect-tabular, architect-elevation
banker banker, banker-burgundy, banker-monogram, banker-twocol, banker-letterhead
academic academic, academic-tight, academic-twocol, academic-lmr, academic-cv
magazine magazine, magazine-kicker, magazine-quote, magazine-issue, magazine-cover
display display, display-cobalt, display-noir, display-stack, display-shout
saas saas, saas-teal, saas-violet, saas-mono, saas-banner
letterpress letterpress, letterpress-cream, letterpress-italics, letterpress-monogram, letterpress-correspondence
dossier dossier, dossier-redact, dossier-stamped, dossier-archive, dossier-field
specsheet specsheet, specsheet-rev, specsheet-grid, specsheet-callout, specsheet-tab
executive executive, executive-monogram, executive-graphite, executive-deepblue, executive-rule
traditional traditional, traditional-mono, traditional-warm, traditional-tight, traditional-divider
mirror mirror, mirror-bold, mirror-quiet, mirror-stack, mirror-block
manuscript manuscript, manuscript-roman, manuscript-folio, manuscript-ornament, manuscript-script
periodical periodical, periodical-volume, periodical-folios, periodical-running, periodical-byline
indexcard indexcard, indexcard-ruled, indexcard-tab, indexcard-stamp, indexcard-classified

Verification

  • pnpm typecheck — clean (102 templates registered: 100 new + 2 pre-existing).
  • pnpm build — production build succeeds, 517 modules transformed in <1s.
  • pnpm format — clean (modulo the pre-existing resumes/** glob in the format script that errors when no resumes exist; not introduced here).
  • ✅ All 100 new templates have all 3 required files.
  • ✅ All 100 new templates have .density-tight + .density-roomy blocks scoped to their actual root class.
  • Each DNA's templates were authored by a dedicated subagent that read the spec and existing templates first; reports captured per-template visual signatures and any deviations.

Out of scope (queued separately)

  • Gallery UX at scale. With 103 total templates, /templates rendering 100+ live iframes will overwhelm the browser. Needs pagination / virtualization / featured-set in a separate task. Flagged in the spec.
  • Bundle size. Template CSS bundles to 615 kB raw / 68 kB gzipped, JS to 870 kB raw / 66 kB gzipped. Vite emits a chunk-size warning. Probably fine for a local-only product but worth a code-split pass later.
  • README revamp. Already queued separately — not touched here.

Test plan

  • pnpm dev, then visit /templates and click into ~10 random templates to verify each renders.
  • In /preview/<id>, exercise the toolbar density (tight/regular/roomy) and padding sliders on a representative ~5 templates.
  • Cmd+P "Save as PDF" on 2-3 templates; verify single-page output, no clipped content, accent colors preserved.
  • Spot-check a chromatic template (e.g. dossier-stamped, magazine-cover, display-shout) prints with print-color-adjust: exact taking effect.

🤖 Generated with Claude Code

karngyan and others added 9 commits May 2, 2026 01:47
Each DNA contributes 5 variants (different palette / layout / density / type
pairing). Every template lives in templates/<id>/ with index.tsx + styles.css
+ meta.ts and conforms to the existing contract: <PageFrame> wrap, scoped CSS,
--page-pad-top/bot vars, data-print-entry on entries, print-color-adjust on
chromatic templates, no @page redeclaration.

Each template owns its density-tight + density-roomy overrides in its own
styles.css (scoped to its root class) so the toolbar's density selector works
without further plumbing - the centralized stage.css block remains for
emerald-twocol and minimal-mono only.

DNAs: swiss, editorial, brutalist, terminal, newspaper, architect, banker,
academic, magazine, display, saas, letterpress, dossier, specsheet, executive,
traditional, mirror, manuscript, periodical, indexcard.

Spec: docs/superpowers/specs/2026-05-02-100-templates-design.md
Skill update: density-support guidance added to designing-templates SKILL.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mount each card's iframe only when the card is near the viewport (400px
rootMargin) and unmount when it leaves. Without this, the gallery rendering
100+ cards saturates Chrome's per-host connection cap and surfaces as
ERR_INSUFFICIENT_RESOURCES on the dev server, where each iframe pulls a
separate set of unbundled module requests.

Adds a quiet skeleton placeholder + a 360ms opacity/scale fade-in once the
iframe loads so the appearance is intentional rather than a pop-in.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Inline transform on the iframe was clobbering the .tn-thumb iframe CSS rule
that scales the 793px-wide template down to fit the card's aspect-[210/297]
container. Result: cards showed only the top-left of the resume at native
size. Animate opacity only and let the existing CSS scale stick.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy button on each TemplateCard yields a Claude Code prompt that drives the
writing-resumes skill: 'create a new resume from the "<name>" template (id:
<id>). fork it as a new variant and walk me through replacing the placeholder
content with my real experience...'. Visual feedback flips the icon + label to
a check + 'copied' for 1.4s.

Search input above the grid filters across id / name / description / tags with
a tiny AND-of-terms substring match, plus a 'N of M' counter and an empty
state. No new dependencies — inline SVG icons, plain Tailwind input styled to
match the existing toolbar/button vocabulary.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Main container goes max-w-3xl → max-w-7xl so the templates row can fit 4 A4
thumbnails side by side at xl. Header and your-resumes block stay readable
inside an inner max-w-3xl wrapper. Templates section is sliced to first 4 with
a 'browse all (N) →' link to /templates. Grid responds 1 → 2 (md) → 4 (xl).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace alphabetical slice(0,4) (which was 4 academic variants) with a curated
set: swiss (minimal sans), emerald-twocol (two-col gradient), editorial-vogue
(bold serif editorial), terminal (CLI mono). One per DNA, maximum aesthetic
contrast.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@karngyan karngyan merged commit 2c53731 into main May 1, 2026
1 check passed
@karngyan karngyan deleted the feat/100-templates branch May 1, 2026 21:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant