raw md ↗

1chooo.com Project Foundation

Personal site + authenticated mini-apps monolith on Next.js 16 App Router, React 19, TypeScript, Tailwind CSS v4, MDX, and Supabase.

#Stack

  • Package manager: pnpm
  • Auth + DB: Supabase (cookies via @supabase/ssr)
  • Styling: Tailwind CSS v4, rurikon-* palette, light-only, cn() from @/lib/utils
  • Content: MDX articles via @next/mdx + Shiki code highlighting
  • Fonts: Inter (sans), Lora (serif), Iosevka (mono)

#Route groups

PathPurpose
app/(home)/Public portfolio, blog, articles
app/(services)/Authenticated mini-apps (stock, jobs, notes, split, …)
app/(admin)/Admin dashboard (role-gated)
app/(llms)/llms.txt, per-page markdown for LLMs
app/api/REST route handlers (no Server Actions)

#Where to put new code

NeedLocation
Shared typestypes/services/<name>/
Domain constants, formatterslib/<name>.ts
Auth helpersutils/auth.ts (server-only)
Supabase clientsutils/supabase/server.ts, client.ts, service.ts
Shared UI primitivescomponents/ui/ (shadcn-style, CVA + Radix)
Site layout (navbar, header)components/layout/
Article interactive demoscomponents/articles/<topic>/
Feature-local componentsapp/<route-group>/.../_components/
API endpointsapp/api/<namespace>/
Article MDXapp/(home)/(article)/<section>/_articles/
Content path constantslib/path.ts
Site / admin nav constantslib/services-nav.ts, lib/admin-nav.ts — types in types/nav.ts
CORS + early auth redirectsproxy.ts (root)
MDX component mapmdx-components.tsx (repo root)
DB schema referencesupabase/schema.sql
Client fetch helperlib/api-fetch.ts

#Commands

ActionCommand
Install depspnpm install
Dev serverpnpm dev
Buildpnpm build
Lintpnpm lint
New thoughtpnpm create-thoughts title="..." date=2026.02.28 description="..."
New episodepnpm create-episode title="..." date=2026.02.28 description="..." [slug=...]

#Core conventions

  • Imports: Always use @/ path alias — never relative ../ paths across directories.
  • Type imports: import type { X } from '@/types/...'
  • Named exports for components and utilities; default exports only for Next.js page.tsx / layout.tsx and MDX content.
  • Server Components by default — add "use client" only when needed (state, effects, browser APIs).
  • Async params (Next.js 16): always await paramsparams: Promise<{ slug: string }>.
  • No Server Actions — mutations go through app/api/ route handlers.
  • No test framework — verify with pnpm dev / pnpm build.

#Design system

  • Palette: rurikon-* tokens (custom grays) in app/globals.css
  • Light-only: colorScheme: 'only light' — no dark mode
  • Class merging: cn() from @/lib/utils (clsx + tailwind-merge)

#Dev-only navigation

  • NavItem.isDev: true in lib/services-nav.ts — hidden in production (getVisibleServiceNavItems)
  • Home navbar shows Drafts + Admin links only when NODE_ENV === 'development'
TypePathShapeUse
Site navtypes/nav.ts{ label, href, isDev? }lib/services-nav.ts, lib/admin-nav.ts
Workspace tabstypes/services/workspace/shell.ts{ id, label, icon }ServiceWorkspaceShell internal nav

Use ServiceNavItem alias from types/services/nav.ts in services code to avoid the collision.

#Install

Copy .cursor/skills/1chooo-project/SKILL.md into your project, or clone from github.com/1chooo/skills.