24W.IN — Full Site Build Prompt

For use with Claude Code, Cursor, or any AI coding agent

Stack: Netlify + Vercel · Next.js 14 App Router · Static-first


WHO YOU ARE WORKING WITH

You are building a personal brand ecosystem for Tony Cu (Detroit, MI — formerly Washington, DC), a nonprofit funds development and marketing director who is also a systems architect, AI integrator, and PKM practitioner. His professional identity lives at 24w.in, organized as a multi-subdomain ecosystem. His provenance signature is:

"Made with love and care, with music in the air, plus TonYC."


BRAND & DESIGN SYSTEM

Aesthetic DNA

  • Primary reference: A24 Studios website — editorial, cinematic, dark, minimal
  • Secondary reference: Braille Institute website — accessible clarity, strong typographic hierarchy
  • Core motif: Large oversized numbers (cardinals, not ordinals) offset in corners of cards and sections. These numbers are structural identity markers, not decoration.
  • Layout language: Field of cards with varied sizes — NOT symmetric grids, NOT calendar-like rows, NOT tables
  • Feel: Constraint-based editorial luxury. Dark. Spacious. Intentional.

Design Tokens

/* COLOR */
--bg: #0d0d0c;
--surface: #131312;
--surface-2: #1a1918;
--surface-offset: #1f1e1c;
--border: oklch(from #cdccca l c h / 0.10);
--text: #cdccca;
--text-muted: #797876;
--text-faint: #4a4947;
--accent: #4f98a3;       /* Hydra Teal — primary CTA only */
--accent-hover: #227f8b;
--accent-highlight: #1a3035;
--number-label: #1e1d1b;   /* Background chip for big numbers */

/* TYPOGRAPHY */
--font-display: 'Atkinson Hyperlegible', 'Georgia', serif;
--font-body: 'Satoshi', 'Inter', sans-serif;

/* OVERSIZED NUMBER SCALE */
--num-hero: clamp(6rem, 12vw, 14rem);   /* Hero section offset labels */
--num-card: clamp(3rem, 6vw, 7rem);      /* Card corner labels */

/* TYPE SCALE (fluid) */
--text-xs:   clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);
--text-sm:   clamp(0.875rem, 0.8rem + 0.35vw, 1rem);
--text-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
--text-lg:   clamp(1.125rem, 1rem + 0.75vw, 1.5rem);
--text-xl:   clamp(1.5rem, 1.2rem + 1.25vw, 2.25rem);
--text-2xl:  clamp(2rem, 1.2rem + 2.5vw, 3.5rem);

/* SPACING */
--space-4: 1rem; --space-6: 1.5rem; --space-8: 2rem;
--space-12: 3rem; --space-16: 4rem; --space-24: 6rem;

/* RADIUS */
--radius-sm: 0.375rem; --radius-md: 0.5rem;
--radius-lg: 0.75rem;  --radius-xl: 1rem;

/* SHADOWS */
--shadow-sm: 0 1px 2px oklch(0 0 0 / 0.25);
--shadow-md: 0 4px 12px oklch(0 0 0 / 0.35);
--shadow-lg: 0 12px 32px oklch(0 0 0 / 0.45);

Typography Rules

  • Atkinson Hyperlegible (via Braille Institute / Google Fonts) — display only, 24px+
  • Satoshi (via Fontshare) — all body, UI, labels
  • Big number labels: --num-card size, --text-faint color, positioned absolute top-left or bottom-right of cards with z-index: 0 behind content
  • Never center-align body copy or card descriptions — left-align as default
  • Max 4 type styles per page

Card System

  • Cards use --surface background, --border border, --radius-lg radius
  • Inner content has z-index: 1, number label has z-index: 0
  • Hover: box-shadow lifts to --shadow-md, border brightens slightly
  • Varied sizes in grid: use grid-column: span 2 on featured items
  • No colored left-border accents. No icon-in-circle badges.

FULL SITEMAP

Root Domain: 24w.in

The manifesto and ecosystem hub. The "operating system" homepage.

24w.in/
├── /                    → Manifesto homepage (the 24 cards field)
├── /philosophy          → Origin story: constraint, the number 24, how it works
├── /ecosystem           → Visual map of all subdomains and how they connect
└── /brand               → Design system & brand guidelines (public-facing)

Primary Subdomain: tony.24w.in

Tony's personal portfolio and professional identity.

tony.24w.in/
├── /                    → Hero + intro + selected work + contact CTA
├── /about               → Full biography, philosophy, story, third-person bio
├── /work                → All case studies index (card grid)
│   ├── /work/prana-obsidian-os      → Case study: Personal OS in Obsidian
│   ├── /work/prana-group-systems    → Case study: Nonprofit systems & automation
│   ├── /work/24w-ecosystem          → Case study: 24w.in design + architecture
│   └── /work/sett-life              → Case study: SETT.LIFE concept
├── /tools               → Stack: tools, stack, workflows
├── /now                 → /now page — what Tony is working on right now
└── /contact             → Contact form + calendar booking link

Subdomain: sett.24w.in

SETT.LIFE venture concept — personal brand + lifestyle content.

sett.24w.in/
├── /                    → SETT landing/intro
├── /story               → Brand origin and philosophy
└── /log                 → Development log (public-facing sett.log)

Subdomain: lab.24w.in

Experiments, prototypes, builds in progress.

lab.24w.in/
├── /                    → Lab index: active + archived experiments
├── /[slug]              → Individual experiment pages
└── /tools               → Public-facing tool demos

Subdomain: notes.24w.in

Public notes, writing, thinking. Connected to Obsidian vault publish.

notes.24w.in/
├── /                    → Notes index / recent entries
├── /[slug]              → Individual note or essay
└── /tags/[tag]          → Tag index

Subdomain: app.24w.in

Application layer — dashboards, internal tools.

app.24w.in/
├── /                    → App hub / login gate
└── /[tool]              → Individual app routes (protected)

Subdomain: nas.24w.in

Synology NAS landing page — internal Prana Group system panel.

nas.24w.in/
└── /                    → Internal system landing (professional, mixed tone)

TECH STACK & INFRASTRUCTURE

Hosting Architecture

  • Cloudflare: DNS management, SSL/TLS (Full Strict), edge caching, WAF, subdomain routing
    • All subdomains route through Cloudflare with appropriate Page Rules
    • Cloudflare Pages: host 24w.in root (static, no framework needed)
    • Cloudflare R2: media/asset storage (images, fonts if self-hosted)
  • Vercel: Host tony.24w.in and lab.24w.in as Next.js 14 App Router projects
    • Connect GitHub repo, set custom domain in Vercel dashboard
    • Use Vercel's Edge Runtime for any dynamic routes
    • notes.24w.in: Vercel + MDX or Obsidian Publish

Repository Structure

24w-in/                         ← GitHub org or monorepo root
├── apps/
│   ├── root/                   ← 24w.in (Cloudflare Pages, static HTML or Astro)
│   ├── tony/                   ← tony.24w.in (Next.js 14, Vercel)
│   ├── lab/                    ← lab.24w.in (Next.js 14, Vercel)
│   ├── notes/                  ← notes.24w.in (Next.js + MDX, Vercel)
│   └── sett/                   ← sett.24w.in (Next.js or static, Vercel)
├── packages/
│   ├── ui/                     ← Shared component library (design system)
│   ├── tokens/                 ← Design tokens (CSS vars + JS exports)
│   └── config/                 ← Shared ESLint, Tailwind, TypeScript configs
└── docs/                       ← Internal docs, brand guidelines source

DNS Setup (Cloudflare)

Type    Name        Value                       Proxy
A       @           192.0.2.1 (CF Pages IP)     Proxied
CNAME   tony        cname.vercel-dns.com         Proxied
CNAME   lab         cname.vercel-dns.com         Proxied
CNAME   notes       cname.vercel-dns.com         Proxied
CNAME   sett        cname.vercel-dns.com         Proxied
CNAME   app         cname.vercel-dns.com         Proxied
CNAME   nas         [Synology QuickConnect or internal IP]  DNS only

PERFORMANCE REQUIREMENTS

Apply these rules to every page, no exceptions:

  1. Font preloading — preload Atkinson Hyperlegible woff2 and Satoshi woff2 in <head> before any other resource. Subset to Latin + numerals only for display font.
  2. font-display: swap with fallback size-adjust and ascent-override to prevent CLS on large heading swap.
  3. LCP targettony.24w.in homepage: LCP < 1.5s. All other pages: < 2.0s.
  4. CLS target — < 0.1 on all pages. Set explicit width/height on every image.
  5. Scroll animations — use CSS scroll-driven animations (animation-timeline: view()) for card reveals, NOT JS scroll listeners. Wrap in prefers-reduced-motion media query.
  6. backdrop-filter: blur() — max one element per page (sticky nav only). Do not apply to cards.
  7. will-change — JS toggle only: add on mouseenter, remove on animationend. Never in static CSS.
  8. content-visibility: auto — apply to all sections below the fold with contain-intrinsic-size.
  9. Imagesloading="lazy" on all below-fold images. fetchpriority="high" on hero/first-card image. Always WebP/AVIF.
  10. JavaScriptdefer or type="module" on all script tags. No render-blocking JS.

PAGE-BY-PAGE BUILD SPECS

tony.24w.in / (Homepage)

Sections in order:

  1. Nav — Logo (SVG inline, "24W" mark), links: Work | About | Now | Contact. Dark theme toggle.
  2. Hero — Full viewport. Name: TOE · KNEE · SEE. Role line: "Systems builder. Nonprofit strategist. Knowledge architect." One CTA: "See the work →". Oversized offset number 01 bottom-right, --num-hero size, --text-faint color.
  3. Selected Work — 4 case study cards in bento layout (2 wide + 2 regular or 1 featured full-width + 3 smaller). Each card has: number label (01–04), project title, one-line context, outcome tag. Click → /work/[slug].
  4. Method — 2-column: left is a short philosophy statement; right is a list of 5–6 workflow principles with Satoshi bold labels.
  5. Tools — horizontal scroll strip or compact 3-col grid: grouped by category (PKM, Dev, AI, Ops). Icon + name + one-line role.
  6. Now — Single card excerpt from /now page. Pull dynamically if MDX, or static if plain HTML.
  7. Contact CTA — Full-width dark section. "Let's work together." Two buttons: "Book a call" (primary, accent) + "Send a message" (ghost). Email shown as plain text.
  8. Footer — "Made with love and care, with music in the air, plus TonYC." Links: tony.24w.in | 24w.in | notes | lab. Year.

tony.24w.in/work (Case Studies Index)

  • Card grid: each card shows number label, project title, tags (Nonprofit / Systems / AI / Design), year, one-sentence outcome
  • Cards link to individual case study pages
  • Filter by tag (client-side, no page reload)

tony.24w.in/work/[slug] (Individual Case Study)

Template structure per case study:

Title
One-line tagline
─────────────────────────────
Context      — what this was and who it served
Problem      — what was broken, unclear, or missing
Approach     — what Tony built or designed
Tools        — stack and working methods
Outcome      — what improved, measured if possible
Takeaway     — one-line principle extracted
─────────────────────────────
← Back to Work    Next Case Study →

tony.24w.in/about

Sections: Identity line → Quick intro (3 sentences) → Philosophy (constraint, systems, care) → How I work (methodology) → Story (nonprofit journey + PKM + AI) → Third-person bio (for speaking/press) → Contact links.

tony.24w.in/now

Minimal. Current date header. 3–4 short paragraphs: what project, what I'm reading/learning, where I am. Updated manually. No CMS needed.

24w.in / (Root Manifesto)

  • 24 cards in a field layout (not grid). Varied sizes. Each card = one of the 24 "ways in."
  • Cards have: large corner number (--num-card), category chip (person / project / place / tool / concept), title, optional short description
  • Some cards are intentionally blank or marked private
  • Sticky minimal nav. No footer needed.
  • Philosophy CTA → /philosophy

COMPONENT LIBRARY (packages/ui)

Build these components first, shared across all apps:

ComponentPropsNotes
<Card>number, title, description?, tag?, href?, span?Core card with offset number
<NumberLabel>value, size ("hero"|"card")Positioned absolute
<CTA>label, href, variant ("primary"|"ghost"|"text")Accent-colored primary only
<Nav>links[], logoDark toggle built in
<Footer>provenance, links[]Provenance signature required
<CaseStudyLayout>all case study fieldsRenders full case study template
<TagFilter>tags[], onFilterClient-side filter, no reload
<NowBlock>date, contentCurrent /now excerpt

CONTENT SEEDS (use as starting copy — edit freely)

Hero tagline options

  • "24 ways in. One system. All mine."
  • "I build the infrastructure behind the work that matters."
  • "Systems thinker. Nonprofit strategist. Builder."

Case studies to build (Tony's approved work)

  1. Personal OS in Obsidian — Built a full PKM + project management system in Obsidian with custom templates, Johnny Decimal file hierarchy, Claude Code integration, and automated daily notes.
  2. Prana Group Systems — Designed internal ops, documentation, and automation systems for a nonprofit consulting firm.
  3. 24w.in Ecosystem — Designed and built the full 24w.in brand, design system, multi-subdomain architecture, and visual language from scratch.
  4. SETT.LIFE — Concept development for a personal brand venture: brand identity, naming, origin story, and digital presence strategy.

Philosophy excerpt (use on /philosophy)

"At the heart of 24W.IN is a simple but deliberate philosophy: meaningful work thrives within constraints. The name itself emerged from a practical realization. There is a limit to how many things a person can actively manage at once. Through experience, that number became clear: 24."


LAUNCH SEQUENCE

Phase 1 — Foundation (Week 1)

  • Set up GitHub monorepo with apps/ and packages/ structure
  • Create packages/tokens with all CSS variables
  • Create packages/ui with Card, Nav, Footer, CTA components
  • Deploy tony.24w.in shell to Vercel (empty Next.js app with design tokens)
  • Deploy 24w.in shell to Cloudflare Pages
  • Verify all DNS records proxied correctly in Cloudflare
  • Confirm SSL Full Strict on all subdomains

Phase 2 — tony.24w.in (Week 2)

  • Build Homepage all sections
  • Build /about page
  • Build /work index page
  • Build 4 case study pages
  • Build /now page
  • Build /contact page
  • Run Lighthouse audit — fix any LCP/CLS failures before moving on

Phase 3 — 24w.in Root (Week 3)

  • Build manifesto homepage (24 cards field)
  • Build /philosophy page
  • Build /ecosystem visual map

Phase 4 — Secondary Subdomains (Week 4+)

  • notes.24w.in (MDX + Obsidian export pipeline)
  • lab.24w.in (experiment index)
  • sett.24w.in (brand landing)

NON-NEGOTIABLES (enforce on every file)

  1. No tables or calendar-like row layouts — always card-based
  2. No symmetric 3-column icon-grid feature sections — vary layout
  3. No centered body copy — left-align as default
  4. No gradient buttons — solid --accent only
  5. No colored left-border cards — use surface elevation
  6. Light mode must exist as a toggle-accessible alternative even if dark is default
  7. Every page passes WCAG AA contrast at both light and dark
  8. Provenance footer required on every page: "Made with love and care, with music in the air, plus TonYC."
  9. Every <img> must have alt, width, height, loading, and decoding attributes
  10. No hardcoded colors — all values must reference CSS variables
14 Notes link here
Built with LogoFlowershow