agent skills
These are the Cursor Agent Skills I wrote while building this site — each one encodes a convention or pattern the AI agent needs to produce correct, consistent code in this codebase.
Browse them below, click through to read and copy any skill in full, or grab the raw markdown from /llm/skills/<slug> for AI-friendly consumption. Source repo: github.com/1chooo/skills.
project foundation
foundationI wanted a single source of truth for the project conventions that every AI agent session could start from — stack, routing, code placement, and design tokens in one place.
next.js app router
routingNext.js 16 has breaking changes from older versions. This skill captures the exact patterns that work — async params, proxy.ts instead of middleware, and full-bleed escape hatch.
applies to
api routes
routingConsistent API routes mean the AI can generate handlers that immediately match the project's auth, validation, and error response patterns without manual correction.
applies to
types & constants
dataMixing types and constants causes circular imports and blurs the boundary between data shapes and runtime logic. This rule kept the codebase clean across 237 TypeScript files.
applies to
auth & supabase
dataSupabase has multiple client modes (server, browser, service-role). Getting the wrong one causes subtle bugs — RLS bypass, missing cookies, or browser-only code on the server.
applies to
mdx content
contentMDX frontmatter in this project is a JS export, not YAML. The demo registration pipeline (component → index → mdx-components.tsx) needs to follow a specific order to avoid SSR issues.
applies to
article components
contentInteractive demos need a consistent visual container so readers can focus on the concept, not UI inconsistencies. The two-column shell and rurikon palette create a cohesive look across all articles.
applies to
shared ui primitives
uiThe project uses the unified radix-ui package (not @radix-ui/react-*) and a custom Dialog API with lowercase titles. Getting these wrong means styles silently diverge.
applies to
services ui
uiAll authenticated services share a lowercase, monospace aesthetic. Consistent button states and dialog patterns make each new service feel native to the suite.
applies to
confirm dialogs & toasts
uiwindow.confirm() breaks the visual design and is not customizable. Every destructive action gets a Radix-based confirm dialog; every mutation result gets a Sonner toast.
applies to
admin ui
uiRadix TabsTrigger active-state overrides fail silently with Tailwind. Plain buttons with useState give predictable, debuggable behavior and match the minimal admin aesthetic.
applies to