ship-create 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/create.mjs CHANGED
@@ -444,13 +444,17 @@ async function main() {
444
444
  }
445
445
 
446
446
  // Tech-stack reference — agent reads this when making stack decisions.
447
- // (Design system is NOT bundled as a static file — the /build command
448
- // invokes the ui-ux-pro-max skill to generate one specific to this project.)
449
447
  const techStackSrc = path.join(TEMPLATES_DIR, "docs", "tech-stack");
450
448
  if (fs.existsSync(techStackSrc)) {
451
449
  copyRecursiveExcluding(techStackSrc, path.join(docsDir, "tech-stack"), new Set());
452
450
  }
453
451
 
452
+ // Design system + spec templates — filled by /build after user picks theme/font/trend.
453
+ for (const f of ["DESIGN_SYSTEM.md", "DESIGN_SPEC.md"]) {
454
+ const src = path.join(TEMPLATES_DIR, "docs", f);
455
+ if (fs.existsSync(src)) fs.copyFileSync(src, path.join(docsDir, f));
456
+ }
457
+
454
458
  // ── 8. npm install ─────────────────────────────────────────────────────
455
459
  console.log("\nInstalling packages (this takes ~30 seconds)...");
456
460
  const install = spawnSync("npm", ["install"], {
@@ -468,6 +472,8 @@ Done! Your project is at: ./${projectSlug}/
468
472
 
469
473
  docs/PROJECT.md — product spec (pre-filled)
470
474
  docs/HUMAN_FLOW.md — UX flow (pre-filled)
475
+ docs/DESIGN_SYSTEM.md — design tokens & decisions (filled by /build)
476
+ docs/DESIGN_SPEC.md — screen-by-screen design spec (filled by /build)
471
477
  docs/tech-stack/STACK_DECISION_MATRIX.md — stack choices reference
472
478
 
473
479
  ── Open in your AI coding tool and type /build ─────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ship-create",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Scaffold a new project the SHIP Method way — Structure, Human Flow, Instruction, Publish. No git clone, no API key, just one command.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,89 +1,134 @@
1
1
  ---
2
- description: Read docs/PROJECT.md and docs/HUMAN_FLOW.md, finalize the build spec, design the UI with the ui-ux-pro-max skill, then start building the app.
2
+ description: Read docs, create build spec, and build the MVP fast home screen first, white theme by default.
3
3
  argument-hint: "[feature name — leave blank to build the full MVP]"
4
4
  ---
5
5
 
6
- You are about to build this app using The SHIP Method framework. Follow these steps exactly.
6
+ You are building this app using The SHIP Method. Move fast the goal is a working MVP the user can see and react to. Refine later.
7
7
 
8
8
  Argument passed (optional feature focus): "$ARGUMENTS"
9
9
 
10
10
  ## Step 1 — Read the project docs
11
11
 
12
- Read both of these files now before doing anything else:
12
+ Read both files now:
13
13
  - `docs/PROJECT.md` — what we're building and for whom
14
14
  - `docs/HUMAN_FLOW.md` — how users move through the product
15
15
 
16
- ## Step 2 — Check docs are ready
16
+ ## Step 2 — Quick sanity check
17
17
 
18
- Confirm that PROJECT.md has real content (not `[fill in]` placeholders) in:
19
- - Product Vision
20
- - Problem Statement (who + what problem)
21
- - Target Audience (primary segment)
18
+ If PROJECT.md or HUMAN_FLOW.md is missing OR still has `[fill in]` placeholders in Vision, Problem Statement, or Core Screens — stop and say: "Run `/ship` first — I need a filled spec to build from." Otherwise proceed immediately.
22
19
 
23
- And HUMAN_FLOW.md has real content in:
24
- - User Journey table
25
- - At least one Core Screen defined
20
+ ## Step 2.5 Four quick choices (one message, one reply)
26
21
 
27
- If critical sections are still blank, stop and say:
28
- "Run `/ship` first — I need a complete spec to build from."
22
+ Ask all four in a single message. Wait for one reply, then proceed immediately — no follow-up questions.
29
23
 
30
- If the docs look good, proceed to Step 3.
24
+ **1. Site type**
25
+ - `A` Landing page — public, no login needed to browse
26
+ - `B` Member system — login wall, users must sign in first
31
27
 
32
- ## Step 3 — Create the build spec
28
+ **2. Language**
29
+ - `A` Thai (ภาษาไทย)
30
+ - `B` English
33
31
 
34
- Check if `docs/AI_BUILD_SPEC.md` exists.
32
+ **3. Font style**
33
+ - If Thai (choice 2A): `T1` Prompt · `T2` IBM Plex Thai · `T3` Noto Sans Thai · `T4` Anuphan
34
+ - If English (choice 2B): `E1` Modern — Inter / Geist · `E2` Luxury — Playfair Display + DM Sans
35
35
 
36
- If not, create it now by deriving the following from `docs/PROJECT.md` and `docs/HUMAN_FLOW.md`:
36
+ **4. Color theme** shadcn/ui standard palettes:
37
+ - `1` Zinc (neutral gray — most common default)
38
+ - `2` Slate (cool blue-gray)
39
+ - `3` Blue (blue accent)
40
+ - `4` Green (green accent)
41
+ - `5` Orange (warm orange accent)
42
+ - `6` Rose (pink/red accent)
43
+ - `7` Violet (purple accent)
44
+
45
+ Defaults if skipped: B · B · T1 (Prompt) for Thai / E1 (Modern) for English · 1 (Zinc).
46
+
47
+ ---
48
+
49
+ ## Step 3 — Create the build spec (no waiting)
50
+
51
+ Check if `docs/AI_BUILD_SPEC.md` exists. If not, create it now from the docs:
37
52
 
38
53
  ```markdown
39
54
  # AI Build Spec
40
55
 
41
56
  ## Functional Requirements
42
- [list the features from MVP Scope in PROJECT.md — one bullet per feature]
57
+ [features from MVP Scope in PROJECT.md — one bullet per feature]
43
58
 
44
59
  ## Data Model
45
- [derive the tables/collections from the feature list — fields, types, relations]
60
+ [tables/collections derived from features — fields, types, relations]
46
61
 
47
62
  ## API Contract
48
- [list the routes/actions the app needs — method, path, what it does, who can call it]
63
+ [routes/actions needed — method, path, purpose, auth required]
49
64
 
50
65
  ## Auth
51
- [derive from HUMAN_FLOW.md Section 5 Key UX Decisions — magic link / OAuth / password]
66
+ [derived from HUMAN_FLOW.md Section 5 Key UX Decisions]
52
67
 
53
- ## Out of scope for this build
54
- [copy from PROJECT.md Section 6 "Out of scope for MVP"]
68
+ ## Out of scope
69
+ [from PROJECT.md "Out of scope for MVP"]
55
70
  ```
56
71
 
57
- Show the spec to the user and ask: "Does this look right before I start building?"
58
- Wait for confirmation before continuing.
72
+ Write it and move on do not wait for user confirmation.
73
+
74
+ ## Step 4 — Apply shadcn/ui theme + font (no waiting)
75
+
76
+ **Stack: Tailwind CSS v4 + shadcn/ui. Do not write custom HSL tokens manually.**
77
+
78
+ 1. Confirm `shadcn/ui` is initialized in the project. If `components/ui/` doesn't exist, run:
79
+ ```
80
+ npx shadcn@latest init
81
+ ```
82
+ Select the color palette chosen in Step 2.5 during init (or patch `components.json` + `app/globals.css` to match the chosen palette after the fact).
83
+
84
+ 2. Apply the chosen color theme to `app/globals.css` using shadcn's CSS variable block for that palette. Palettes available: `zinc` · `slate` · `blue` · `green` · `orange` · `rose` · `violet`. Always use white background (`--background: 0 0% 100%`).
85
+
86
+ 3. Apply the chosen font in `app/layout.tsx` and `app/globals.css` via `next/font/google`:
87
+
88
+ **Thai fonts** — set `subsets: ["thai", "latin"]` on all:
89
+ - `T1` Prompt: `weights: ["400","500","600","700"]`
90
+ - `T2` IBM Plex Thai: `weights: ["400","500","600","700"]`
91
+ - `T3` Noto Sans Thai: `weights: ["400","500","600","700"]`
92
+ - `T4` Anuphan: `weights: ["400","500","600","700"]`
93
+
94
+ Assign to `--font-sans`, apply `font-sans` on `<body>`. Thai fonts are single-font stacks — no separate serif needed.
95
+
96
+ **English fonts:**
97
+ - `E1` Modern: Keep Geist if present, otherwise `Inter`. `font-sans` on `<body>`.
98
+ - `E2` Luxury: `Playfair_Display` → `--font-serif` (headings), `DM_Sans` → `--font-sans` (body). Apply `--font-serif` to `h1`–`h3` in global CSS.
99
+
100
+ 4. Install any needed shadcn components now: `npx shadcn@latest add button card input label` (add more as needed per HUMAN_FLOW.md screens). Do not build custom components for things shadcn already covers.
101
+
102
+ 5. **Fill `docs/DESIGN_SYSTEM.md`** — replace all `[FILL: ...]` placeholders with the actual choices made above (palette name, font, language). Leave the trend section blank for now — it gets filled by the `uiux-frontend` skill in Step 5.
59
103
 
60
- ## Step 4Design the UI with ui-ux-pro-max
104
+ 6. **Fill `docs/DESIGN_SPEC.md` global decisions** fill site type, language, font, and palette rows.
61
105
 
62
- **Invoke the `ui-ux-pro-max` skill now.** Use it to:
106
+ Do not ask for approval. Proceed immediately.
63
107
 
64
- 1. Derive a color palette and font pairing from the business described in `docs/PROJECT.md` — the product type, audience, and tone should drive the style choices.
65
- 2. Present 2-3 theme options to the user. Never pick silently.
66
- 3. Apply the chosen theme to `app/globals.css` (`:root` and `.dark` tokens) and `app/layout.tsx`.
67
- 4. Use the skill's component and layout guidance when building each screen in Step 5 — it knows 67 design styles, 96 palettes, and 57 font pairings, so defer to it for any UI decision.
108
+ ## Step 5 5-minute MVP: home screen first, data later
68
109
 
69
- Also read `docs/tech-stack/STACK_DECISION_MATRIX.md` for stack decisions (database, auth provider, hosting).
110
+ **Target: user sees a real-looking screen within 5 minutes. Build UI with static placeholder data first. Wire real data after.**
70
111
 
71
- ## Step 5Build
112
+ **Before building each screen, apply the `.claude/skills/uiux-frontend/SKILL.md` guidelines** layout pattern, component selection, typography, states, and copy rules. Do not skip this for any screen.
72
113
 
73
- If a specific feature was passed as an argument, build that feature only.
74
- If no argument was given, build the full MVP from `docs/AI_BUILD_SPEC.md`.
114
+ Apply choices from Step 2.5 to every screen built:
115
+ - **Landing page:** `app/page.tsx` is a public page hero section, features, CTA. No auth.
116
+ - **Member system:** `app/page.tsx` redirects to `/login`. Build login page + middleware. First visible screen = the main dashboard with placeholder data.
117
+ - **Thai:** All labels, headings, buttons, nav, and placeholder copy in Thai.
118
+ - **English:** All copy in English.
75
119
 
76
- Build in this order:
77
- 1. Database schema (`lib/db/schema.*.ts`)
78
- 2. Server actions or API routes
79
- 3. Pages and components (one screen at a time, following `docs/HUMAN_FLOW.md` Section 3 Core Screens)
80
- 4. Replace mock data with real data layer calls
81
- 5. Replace the generic `app/page.tsx` ("Pick your area") with the real entry point from `docs/HUMAN_FLOW.md`
120
+ Build in this order — **stop after step 1 and show the user, then continue:**
121
+ 1. **Home/entry screen** — replace `app/page.tsx` with static placeholder UI. Announce: "MVP home screen done — here's what it looks like. Continuing with data layer…"
122
+ 2. **Database schema** (`lib/db/schema.*.ts`)
123
+ 3. **Server actions / API routes**
124
+ 4. **Remaining pages** one screen at a time per HUMAN_FLOW.md
125
+ 5. **Wire real data** replace placeholders with real data layer calls
82
126
 
83
- After each screen: summarize what was built and what's next.
127
+ After each screen: one line on what was built, one line on what's next. No long summaries.
84
128
 
85
129
  ## Rules
86
130
 
87
- - Never invent business logic not in the spec — if something is unclear, ask.
88
- - If a code change would conflict with `docs/AI_BUILD_SPEC.md`, flag it instead of silently overriding.
89
- - After finishing, run `/ship status` to confirm nothing is outstanding before declaring done.
131
+ - Never invent business logic not in the spec — if unclear, make a reasonable assumption and note it.
132
+ - If a code change conflicts with `docs/AI_BUILD_SPEC.md`, flag it in one sentence and proceed with the most reasonable interpretation.
133
+ - Speed over perfection working UI with placeholder data beats perfect code the user can't see yet.
134
+ - **No unnecessary libraries** — before adding any `npm install`, ask: "does Next.js, Tailwind, or shadcn already cover this?" If yes, use what's already there. Allowed additions: `next/font/google` (fonts), `zod` + `react-hook-form` (forms, included with shadcn), `lucide-react` (icons, included with shadcn). Everything else requires explicit justification. Never add: `axios` (use `fetch`), `lodash` (use native JS), `moment`/`dayjs` (use `Intl`), `framer-motion` (use CSS transforms + Tailwind transitions first), `styled-components`/`emotion` (Tailwind is the CSS layer).
@@ -0,0 +1,321 @@
1
+ ---
2
+ name: uiux-frontend
3
+ description: UI/UX design guidance for Next.js + Tailwind v4 + shadcn/ui projects. Invoke before building any screen. Fetches current trends, auto-selects the best one for the project, then applies layout, component, and copy guidance.
4
+ ---
5
+
6
+ # UI/UX Frontend Skill
7
+
8
+ Design guidance for **Next.js + Tailwind CSS v4 + shadcn/ui** projects. Runs in 3 phases: (0) fetch current trends, (1) auto-select + declare, (2) implement.
9
+
10
+ ---
11
+
12
+ ## Phase 0 — Fetch current trends (every invocation, no skipping)
13
+
14
+ Before designing any screen, do a web search to get the freshest UI/UX trend signal:
15
+
16
+ ```
17
+ search: "UI UX design trends 2025 site:nngroup.com OR site:smashingmagazine.com OR site:awwwards.com OR site:uxdesign.cc"
18
+ ```
19
+
20
+ Scan the results for any trends that have risen or fallen since the base catalog below. Note any new entrant that appears in ≥ 2 sources. This keeps designs current — do not skip this step.
21
+
22
+ ---
23
+
24
+ ## Phase 1 — Auto-select the trend (do not ask the user)
25
+
26
+ Read `docs/PROJECT.md` for product type, audience, and tone. Cross-reference with the **Trend Catalog** below. Pick **one primary trend** and optionally one supporting micro-trend. Announce the choice in one sentence before writing any code:
27
+
28
+ > "Using **[Trend Name]** — suits [product type] for [audience reason]."
29
+
30
+ ### Trend Catalog
31
+
32
+ #### 🎨 Visual & Tactile Aesthetics
33
+
34
+ **Tactile Maximalism (Squishy UI)**
35
+ Soft 3D shapes, inflated elements, playful depth, bold saturated colors, spring-like hover states.
36
+ - Best for: consumer apps, gaming, creative tools, young (18–30) audience
37
+ - Avoid: finance, healthcare, enterprise admin
38
+ - Tailwind implementation: `rounded-3xl shadow-2xl scale-[1.02] hover:scale-105 transition-transform duration-200`, bold `bg-[color]` fills, thick borders `border-4`
39
+
40
+ **Intentional Imperfection**
41
+ Hand-drawn strokes, organic shapes, slight rotation/misalignment, textured backgrounds, ink-style illustrations.
42
+ - Best for: creative agencies, cultural brands, portfolios, artisan products
43
+ - Avoid: SaaS dashboards, fintech, legal
44
+ - Tailwind implementation: `rotate-[-1deg]`, `skew-x-1`, SVG hand-drawn border overlays, `bg-[url('/texture.png')] bg-repeat opacity-10`
45
+
46
+ **Liquid Glass & Glassmorphism**
47
+ Frosted glass panels, translucent cards, blur backdrop, subtle borders on glass surface.
48
+ - Best for: premium apps, fintech, luxury SaaS, iOS-style products
49
+ - Avoid: heavy data tables, accessibility-critical flows (low contrast risk — add `backdrop-blur` + solid text)
50
+ - Tailwind implementation: `bg-white/10 backdrop-blur-md border border-white/20 shadow-lg`, ensure text contrast with `text-white drop-shadow-sm` or `text-gray-900` on light blur
51
+
52
+ **Retrofuturism**
53
+ Neon accents on dark base, grid/scanline overlays, monospace fonts mixed with modern sans, CRT glow effects.
54
+ - Best for: AI tools, dev products, tech startups, edgy consumer apps
55
+ - Avoid: healthcare, legal, conservative brands
56
+ - Tailwind implementation: `bg-gray-950 text-green-400`, `font-mono`, `shadow-[0_0_20px_rgba(74,222,128,0.5)]`, CSS `::before` scanline overlay
57
+
58
+ ---
59
+
60
+ #### ⚙️ Function & Experience
61
+
62
+ **Spatial Design**
63
+ Elements appear to exist in 3D space — parallax layers, perspective transforms, depth through scale + shadow, immersive scrolling.
64
+ - Best for: product showcases, portfolio sites, hero sections, tech launches
65
+ - Avoid: CRUD admin panels, form-heavy apps
66
+ - Tailwind implementation: `perspective-1000` (custom CSS), `translate-z-[40px]` on hover via `transform-gpu`, `shadow-2xl` depth layers, scroll-driven animation with CSS `@keyframes`
67
+
68
+ **Calm Design & Strategic Minimalism**
69
+ Maximum whitespace, restrained palette (2–3 colors), no decorative elements, typography as the main visual element.
70
+ - Best for: healthcare, productivity, focus tools, wellness, legal SaaS
71
+ - Avoid: marketing pages that need energy, entertainment
72
+ - Tailwind implementation: `max-w-prose mx-auto`, `text-gray-500` for supporting text, `border-b border-gray-100` dividers, avoid shadows — use whitespace for separation
73
+
74
+ **Command Palettes & Unified Search**
75
+ Global `⌘K` search overlay that routes to any action, page, or record. Reduces nav depth, enables power-user flow.
76
+ - Best for: SaaS dashboards, dev tools, data products with many entities
77
+ - Avoid: simple forms, landing pages, consumer apps with < 10 routes
78
+ - Tailwind implementation: Use `cmdk` library + shadcn `Command` component, `fixed inset-0 bg-black/50 flex items-start justify-center pt-32`, trigger via `useEffect` on `⌘K`
79
+
80
+ **Bento Grids**
81
+ Asymmetric card grid where different-sized cells showcase features, metrics, or media — like a magazine layout.
82
+ - Best for: dashboards, feature showcases, portfolios, SaaS landing pages
83
+ - Avoid: long-form content, step-by-step flows
84
+ - Tailwind implementation: `grid grid-cols-3 gap-4 auto-rows-[minmax(160px,auto)]`, mix `col-span-2 row-span-2` for hero cells, shadcn `Card` in each cell
85
+
86
+ ---
87
+
88
+ #### 🤖 Typography & AI
89
+
90
+ **Expressive Typography**
91
+ Large (100px+) hero type, variable font weights, type as graphic element, kinetic text on scroll, tight tracking on display sizes.
92
+ - Best for: landing pages, marketing sites, portfolios, brand-forward products
93
+ - Avoid: data-dense UIs, forms, admin panels
94
+ - Tailwind implementation: `text-7xl lg:text-9xl font-black tracking-tighter leading-none`, variable fonts via CSS `font-variation-settings`, `mix-blend-multiply` for type overlays
95
+
96
+ **Seamless AI Infrastructure**
97
+ Streaming text (typewriter), skeleton-to-real transitions, inline AI suggestions, confidence indicators, generative placeholders.
98
+ - Best for: AI SaaS, copilot tools, any product with AI-generated content
99
+ - Avoid: non-tech products, forms where instant response is expected
100
+ - Tailwind implementation: `animate-pulse` for streaming state, word-by-word reveal via JS interval, `border-l-2 border-primary pl-3` for AI response thread, `opacity-50` for low-confidence content
101
+
102
+ ---
103
+
104
+ ### Auto-selection decision matrix
105
+
106
+ | Project type | Primary trend | Supporting |
107
+ |---|---|---|
108
+ | AI / copilot SaaS | Seamless AI Infrastructure | Command Palettes |
109
+ | B2B dashboard / admin | Calm Design & Strategic Minimalism | Bento Grids |
110
+ | Consumer app (young) | Tactile Maximalism | Expressive Typography |
111
+ | Premium / luxury brand | Liquid Glass | Expressive Typography |
112
+ | Creative agency / portfolio | Intentional Imperfection | Spatial Design |
113
+ | Dev tool / CLI product | Retrofuturism | Command Palettes |
114
+ | Healthcare / wellness | Calm Design & Strategic Minimalism | — |
115
+ | Feature showcase landing page | Bento Grids | Expressive Typography |
116
+ | Tech startup landing | Spatial Design | Expressive Typography |
117
+ | Marketplace / e-commerce | Tactile Maximalism | Bento Grids |
118
+
119
+ ---
120
+
121
+ ## Phase 2 — Implement the screen
122
+
123
+ After announcing the trend:
124
+
125
+ 1. **Update `docs/DESIGN_SYSTEM.md`** — fill in the `UI Trend` section (trend name, reason, implementation rules, scope) if not already done.
126
+ 2. **Update `docs/DESIGN_SPEC.md`** — add a screen entry for the screen being built. Fill all fields before writing code. Mark `Status: in-progress`.
127
+ 3. Build the screen.
128
+ 4. After screen is done, update the DESIGN_SPEC entry: mark `Status: done`, tick off states (`✓`), fill in notes.
129
+
130
+ Then apply all sections below.
131
+
132
+ ---
133
+
134
+ ## A. Think user-first before touching code
135
+
136
+ Answer these before laying out any screen:
137
+ - Who is the user and what state are they in when they arrive?
138
+ - What is the ONE thing they must accomplish on this screen?
139
+ - Where do they come from, and where do they go next?
140
+ - What does "success" look like for them (not the business)?
141
+
142
+ If you can't answer these from `docs/HUMAN_FLOW.md` → reread it, don't guess.
143
+
144
+ ---
145
+
146
+ ## B. Layout patterns by screen type
147
+
148
+ ### Landing page (public)
149
+ ```
150
+ Hero → Value props (3 columns) → Social proof → CTA section → Footer
151
+ ```
152
+ - Hero: full-width, headline + subheadline + primary button. Apply trend here most visibly.
153
+ - Value props: shadcn `Card` or Bento grid cells
154
+ - CTA: high-contrast button
155
+ - Mobile: single column, buttons full width
156
+
157
+ ### Dashboard (member system)
158
+ ```
159
+ Sidebar nav (md+) | Top bar | Main content area
160
+ ```
161
+ - Sidebar: 240px, `bg-sidebar` token, active state via `aria-current="page"`
162
+ - Top bar: breadcrumb left, avatar/action right + optional `⌘K` trigger
163
+ - Content: `max-w-screen-xl px-6 py-8`. Bento grid for KPI cards, shadcn `Table` for lists
164
+
165
+ ### Login / auth screen
166
+ ```
167
+ Centered card (max-w-sm) — logo → heading → form → submit → helper link
168
+ ```
169
+ - shadcn `Card` + `CardContent`. Apply trend subtly (background, not form itself).
170
+ - Form: `Label` + `Input` stacked, `Button` full-width
171
+
172
+ ### Form / settings screen
173
+ ```
174
+ Page heading → section groups → save action at bottom
175
+ ```
176
+ - Group fields with section cards. Inline errors via shadcn `FormMessage`.
177
+ - Save button: primary, right-aligned
178
+
179
+ ### List / table screen
180
+ ```
181
+ Toolbar (search + filter + action) → Table or card grid → Pagination
182
+ ```
183
+ - shadcn `Table` for structured data, card grid for visual items
184
+ - Empty state: centered icon + message + CTA
185
+ - Loading: shadcn `Skeleton` rows
186
+
187
+ ---
188
+
189
+ ## C. Typography rules
190
+
191
+ ### Thai fonts (Prompt / IBM Plex Thai / Noto Sans Thai / Anuphan)
192
+ Single-font stack, `font-sans` everywhere.
193
+
194
+ | Element | Class |
195
+ |---------|-------|
196
+ | Page title h1 | `text-3xl font-bold` |
197
+ | Section heading h2 | `text-xl font-semibold` |
198
+ | Body | `text-base font-normal leading-relaxed` |
199
+ | Caption | `text-sm text-muted-foreground` |
200
+ | Button | `text-sm font-medium` |
201
+
202
+ > Thai script needs `leading-relaxed` or higher. Never go below `text-base` on mobile.
203
+
204
+ ### English — Modern (Inter / Geist)
205
+ | Element | Class |
206
+ |---------|-------|
207
+ | Page title h1 | `text-3xl font-bold tracking-tight` |
208
+ | Section heading h2 | `text-xl font-semibold` |
209
+ | Body | `text-base font-normal leading-relaxed` |
210
+ | Caption | `text-sm text-muted-foreground` |
211
+ | Button | `text-sm font-medium` |
212
+
213
+ ### English — Luxury (Playfair Display + DM Sans)
214
+ | Element | Class |
215
+ |---------|-------|
216
+ | Page title h1 | `font-serif text-3xl font-bold tracking-wide` |
217
+ | Section heading h2 | `font-serif text-xl font-semibold tracking-wide` |
218
+ | Body | `text-base font-normal leading-relaxed` |
219
+ | Caption | `text-sm text-muted-foreground` |
220
+ | Button | `text-sm font-medium tracking-wide uppercase` |
221
+
222
+ For **Expressive Typography** trend: override h1 to `text-7xl lg:text-9xl font-black tracking-tighter leading-none` on hero sections only.
223
+
224
+ ---
225
+
226
+ ## D. Spacing & sizing
227
+
228
+ - Page padding: `px-4 sm:px-6 lg:px-8`
229
+ - Section gap: `space-y-8` or `gap-8`
230
+ - Card padding: `p-6`
231
+ - Form fields: `space-y-4`
232
+ - Min touch target: `h-11` (44px)
233
+ - Min body text: `text-base` on mobile
234
+
235
+ ---
236
+
237
+ ## E. shadcn/ui component map
238
+
239
+ | Need | Component |
240
+ |------|-----------|
241
+ | Navigation | `NavigationMenu` or `<nav>` + Link |
242
+ | Data entry | `Input`, `Textarea`, `Select`, `Checkbox`, `RadioGroup` |
243
+ | Form | `Form` (react-hook-form + zod) |
244
+ | Actions | `Button` (default / outline / ghost / destructive) |
245
+ | Feedback | `Toast`, `Alert` |
246
+ | Modals | `Dialog`, `AlertDialog` |
247
+ | Data display | `Table`, `Card`, `Badge` |
248
+ | Loading | `Skeleton` |
249
+ | Sidebar (mobile) | `Sheet` |
250
+ | Global search | `Command` (cmdk) |
251
+ | Dropdowns | `DropdownMenu` |
252
+
253
+ Do not build custom versions of anything shadcn covers.
254
+
255
+ **Library rule — always check before installing:**
256
+
257
+ | Need | Use this — NOT a new library |
258
+ |------|------------------------------|
259
+ | HTTP requests | Native `fetch` |
260
+ | Date formatting | `Intl.DateTimeFormat` |
261
+ | Array/object utilities | Native JS (`.map`, `.filter`, `.reduce`) |
262
+ | Icons | `lucide-react` (already in shadcn) |
263
+ | Animation | CSS `transition` + Tailwind classes first; CSS `@keyframes` for complex |
264
+ | Forms + validation | `react-hook-form` + `zod` (already in shadcn `Form`) |
265
+ | Global search / cmd palette | shadcn `Command` (uses cmdk internally — do not install cmdk separately) |
266
+ | Fonts | `next/font/google` |
267
+
268
+ Only install a new library if no existing solution covers the need. Mention it explicitly when you do.
269
+
270
+ ---
271
+
272
+ ## F. UI copy rules
273
+
274
+ ### Thai
275
+ - ปุ่ม: กริยาสั้น — "บันทึก", "เข้าสู่ระบบ", "ดูเพิ่มเติม"
276
+ - หัวข้อ: ≤ 10 คำ
277
+ - Placeholder: ตัวอย่างจริง — "กรอกชื่อ-นามสกุล" ไม่ใช่ "กรอกข้อมูล"
278
+ - Error: บอกปัญหาและวิธีแก้ — "กรุณากรอกอีเมลให้ถูกต้อง"
279
+ - Empty: สั่งทำได้ทันที — "ยังไม่มีรายการ — กด 'เพิ่มรายการ' เพื่อเริ่มต้น"
280
+
281
+ ### English
282
+ - Buttons: verb-first — "Save changes", "Sign in", "View all"
283
+ - Headings: ≤ 8 words, sentence case
284
+ - Placeholders: real example — "Enter your full name"
285
+ - Error: what + fix — "Email already in use. Try signing in instead."
286
+ - Empty: actionable — "No items yet — click 'Add item' to get started"
287
+
288
+ ---
289
+
290
+ ## G. States (all 4 required on every screen)
291
+
292
+ | State | Implementation |
293
+ |-------|----------------|
294
+ | Loading | `Skeleton` matching real content shape |
295
+ | Empty | Centered icon + message + primary CTA |
296
+ | Error | `Alert` destructive + retry action |
297
+ | Success | `Toast` or inline confirmation |
298
+
299
+ ---
300
+
301
+ ## H. Accessibility minimum
302
+
303
+ - Keyboard-navigable (`Tab` order = visual order)
304
+ - Icon-only buttons have `aria-label`
305
+ - Every input has a visible `<Label>`
306
+ - Color contrast ≥ 4.5:1 (shadcn defaults pass; glassmorphism — verify manually)
307
+ - Images have `alt` (or `alt=""` if decorative)
308
+
309
+ ---
310
+
311
+ ## I. Revenue link check (before closing any screen)
312
+
313
+ | Screen | Revenue connection |
314
+ |--------|--------------------|
315
+ | Landing page | Conversion — CTA → sign-up / purchase |
316
+ | Login / sign-up | Activation — user reaches product |
317
+ | Dashboard | Retention — user sees value, returns |
318
+ | Settings / billing | Revenue — upgrade path, churn prevention |
319
+ | Empty state | Activation — first action drives retention |
320
+
321
+ If a screen has no revenue link, flag it before spending time on it.
@@ -51,11 +51,11 @@ All docs live under `docs/`:
51
51
 
52
52
  6. **Never invent business facts** (market size, pricing, real metrics, real user quotes). Draft clearly-labeled `[TBD: ...]` placeholders or ask the user.
53
53
 
54
- 7. **Once the spec is complete, run the "Theme & First Screen" step before polishing or shipping.**
54
+ 7. **Once the spec is complete, apply white theme and replace the home screen do this first, before any features.**
55
55
  When `docs/PROJECT.md` and `docs/HUMAN_FLOW.md` are filled and `docs/AI_BUILD_SPEC.md` exists:
56
- - **Theme:** Invoke the `ui-ux-pro-max` skill. Using the business context from `docs/PROJECT.md`, derive 2-3 theme candidates (HSL color tokens + font pairing). Present them, let the user pick one, apply it to `app/globals.css` and `app/layout.tsx`. See `.claude/skills/ship-method/theme-guide.md` for a fallback business-type → palette reference.
57
- - **Home:** Read `docs/HUMAN_FLOW.md`, determine the real entry point for this business, and replace the starter kit's generic `app/page.tsx` with it.
58
- - Never pick a theme silently. Never require brand assets the user didn't provide.
56
+ - **Home first:** Replace the starter kit's generic `app/page.tsx` immediately with the real entry point from `docs/HUMAN_FLOW.md`. This is always the first build output so the user sees something real right away.
57
+ - **Theme (shadcn/ui):** Use Tailwind CSS v4 + shadcn/ui. Apply the user's chosen shadcn color palette (zinc/slate/blue/green/orange/rose/violet) via its CSS variable block in `app/globals.css`. Always white background. Font: modern (Inter/Geist) or luxury (Playfair Display + DM Sans). Do not write custom HSL tokens manually.
58
+ - See `.claude/skills/ship-method/theme-guide.md` for product-type palette reference.
59
59
 
60
60
  ## Quick Orientation for a New Agent Session
61
61
 
@@ -51,11 +51,11 @@ All docs live under `docs/`:
51
51
 
52
52
  6. **Never invent business facts** (market size, pricing, real metrics, real user quotes). Draft clearly-labeled `[TBD: ...]` placeholders or ask the user.
53
53
 
54
- 7. **Once the spec is complete, run the "Theme & First Screen" step before polishing or shipping.**
54
+ 7. **Once the spec is complete, apply white theme and replace the home screen do this first, before any features.**
55
55
  When `docs/PROJECT.md` and `docs/HUMAN_FLOW.md` are filled and `docs/AI_BUILD_SPEC.md` exists:
56
- - **Theme:** Invoke the `ui-ux-pro-max` skill. Using the business context from `docs/PROJECT.md`, derive 2-3 theme candidates (HSL color tokens + font pairing). Present them, let the user pick one, apply it to `app/globals.css` and `app/layout.tsx`. See `.claude/skills/ship-method/theme-guide.md` for a fallback business-type → palette reference.
57
- - **Home:** Read `docs/HUMAN_FLOW.md`, determine the real entry point for this business, and replace the starter kit's generic `app/page.tsx` with it.
58
- - Never pick a theme silently. Never require brand assets the user didn't provide.
56
+ - **Home first:** Replace the starter kit's generic `app/page.tsx` immediately with the real entry point from `docs/HUMAN_FLOW.md`. This is always the first build output so the user sees something real right away.
57
+ - **Theme (shadcn/ui):** Use Tailwind CSS v4 + shadcn/ui. Apply the user's chosen shadcn color palette (zinc/slate/blue/green/orange/rose/violet) via its CSS variable block in `app/globals.css`. Always white background. Font: modern (Inter/Geist) or luxury (Playfair Display + DM Sans). Do not write custom HSL tokens manually.
58
+ - See `.claude/skills/ship-method/theme-guide.md` for product-type palette reference.
59
59
 
60
60
  ## Quick Orientation for a New Agent Session
61
61
 
@@ -51,11 +51,11 @@ All docs live under `docs/`:
51
51
 
52
52
  6. **Never invent business facts** (market size, pricing, real metrics, real user quotes). Draft clearly-labeled `[TBD: ...]` placeholders or ask the user.
53
53
 
54
- 7. **Once the spec is complete, run the "Theme & First Screen" step before polishing or shipping.**
54
+ 7. **Once the spec is complete, apply white theme and replace the home screen do this first, before any features.**
55
55
  When `docs/PROJECT.md` and `docs/HUMAN_FLOW.md` are filled and `docs/AI_BUILD_SPEC.md` exists:
56
- - **Theme:** Invoke the `ui-ux-pro-max` skill. Using the business context from `docs/PROJECT.md`, derive 2-3 theme candidates (HSL color tokens + font pairing). Present them, let the user pick one, apply it to `app/globals.css` and `app/layout.tsx`. See `.claude/skills/ship-method/theme-guide.md` for a fallback business-type → palette reference.
57
- - **Home:** Read `docs/HUMAN_FLOW.md`, determine the real entry point for this business, and replace the starter kit's generic `app/page.tsx` with it.
58
- - Never pick a theme silently. Never require brand assets the user didn't provide.
56
+ - **Home first:** Replace the starter kit's generic `app/page.tsx` immediately with the real entry point from `docs/HUMAN_FLOW.md`. This is always the first build output so the user sees something real right away.
57
+ - **Theme (shadcn/ui):** Use Tailwind CSS v4 + shadcn/ui. Apply the user's chosen shadcn color palette (zinc/slate/blue/green/orange/rose/violet) via its CSS variable block in `app/globals.css`. Always white background. Font: modern (Inter/Geist) or luxury (Playfair Display + DM Sans). Do not write custom HSL tokens manually.
58
+ - See `.claude/skills/ship-method/theme-guide.md` for product-type palette reference.
59
59
 
60
60
  ## Quick Orientation for a New Agent Session
61
61
 
@@ -51,11 +51,11 @@ All docs live under `docs/`:
51
51
 
52
52
  6. **Never invent business facts** (market size, pricing, real metrics, real user quotes). Draft clearly-labeled `[TBD: ...]` placeholders or ask the user.
53
53
 
54
- 7. **Once the spec is complete, run the "Theme & First Screen" step before polishing or shipping.**
54
+ 7. **Once the spec is complete, apply white theme and replace the home screen do this first, before any features.**
55
55
  When `docs/PROJECT.md` and `docs/HUMAN_FLOW.md` are filled and `docs/AI_BUILD_SPEC.md` exists:
56
- - **Theme:** Invoke the `ui-ux-pro-max` skill. Using the business context from `docs/PROJECT.md`, derive 2-3 theme candidates (HSL color tokens + font pairing). Present them, let the user pick one, apply it to `app/globals.css` and `app/layout.tsx`. See `.claude/skills/ship-method/theme-guide.md` for a fallback business-type → palette reference.
57
- - **Home:** Read `docs/HUMAN_FLOW.md`, determine the real entry point for this business, and replace the starter kit's generic `app/page.tsx` with it.
58
- - Never pick a theme silently. Never require brand assets the user didn't provide.
56
+ - **Home first:** Replace the starter kit's generic `app/page.tsx` immediately with the real entry point from `docs/HUMAN_FLOW.md`. This is always the first build output so the user sees something real right away.
57
+ - **Theme (shadcn/ui):** Use Tailwind CSS v4 + shadcn/ui. Apply the user's chosen shadcn color palette (zinc/slate/blue/green/orange/rose/violet) via its CSS variable block in `app/globals.css`. Always white background. Font: modern (Inter/Geist) or luxury (Playfair Display + DM Sans). Do not write custom HSL tokens manually.
58
+ - See `.claude/skills/ship-method/theme-guide.md` for product-type palette reference.
59
59
 
60
60
  ## Quick Orientation for a New Agent Session
61
61
 
@@ -0,0 +1,50 @@
1
+ # Design Spec
2
+
3
+ > Screen-by-screen design decisions. Auto-populated by the `uiux-frontend` skill during `/build`. Each section is filled when that screen is built — do not write speculative specs for unbuilt screens.
4
+
5
+ ---
6
+
7
+ ## Global decisions
8
+
9
+ | Decision | Value |
10
+ |----------|-------|
11
+ | Site type | `[FILL: Landing page / Member system]` |
12
+ | Language | `[FILL: Thai / English]` |
13
+ | Font | `[FILL]` |
14
+ | Color palette | `[FILL: shadcn palette name]` |
15
+ | UI trend | `[FILL]` |
16
+ | Trend source | `[FILL: URL or publication that confirmed this trend is current]` |
17
+
18
+ ---
19
+
20
+ ## Screen specs
21
+
22
+ Each screen gets one entry. Format:
23
+
24
+ ```
25
+ ### [Screen name] — [route e.g. /dashboard]
26
+ Status: [planned / in-progress / done]
27
+ Layout: [pattern used]
28
+ Trend application: [how the trend is expressed here]
29
+ Key components: [shadcn components used]
30
+ States: [loading ✓/✗ | empty ✓/✗ | error ✓/✗ | success ✓/✗]
31
+ Revenue link: [how this screen connects to money]
32
+ Notes: [any deviations from the design system, or decisions to revisit]
33
+ ```
34
+
35
+ ---
36
+
37
+ <!-- SCREENS BELOW — filled by uiux-frontend skill during /build -->
38
+
39
+ ### Home / Entry screen — /
40
+ Status: planned
41
+ Layout:
42
+ Trend application:
43
+ Key components:
44
+ States: loading ✗ | empty ✗ | error ✗ | success ✗
45
+ Revenue link:
46
+ Notes:
47
+
48
+ ---
49
+
50
+ <!-- Add a new entry below for each screen as it gets built -->
@@ -0,0 +1,145 @@
1
+ # Design System
2
+
3
+ > Auto-generated by `/build`. Update here when design decisions change — this is the source of truth for all visual decisions in this project.
4
+
5
+ ---
6
+
7
+ ## Stack
8
+
9
+ | Layer | Choice |
10
+ |-------|--------|
11
+ | CSS framework | Tailwind CSS v4 |
12
+ | Component library | shadcn/ui |
13
+ | Font loading | `next/font/google` |
14
+
15
+ ---
16
+
17
+ ## Color Palette
18
+
19
+ **Base theme:** `[FILL: zinc / slate / blue / green / orange / rose / violet]`
20
+
21
+ All color tokens are from shadcn's CSS variable system. Do not hardcode hex or rgb values anywhere — use only these tokens:
22
+
23
+ | Token | Usage |
24
+ |-------|-------|
25
+ | `bg-background` | Page background (always white in light mode) |
26
+ | `text-foreground` | Primary text |
27
+ | `text-muted-foreground` | Secondary text, captions, placeholders |
28
+ | `bg-primary` | Primary action background |
29
+ | `text-primary-foreground` | Text on primary background |
30
+ | `bg-secondary` | Secondary/subtle backgrounds |
31
+ | `border` | Dividers, card borders |
32
+ | `bg-destructive` | Error states, delete actions |
33
+ | `bg-accent` | Hover/active backgrounds |
34
+ | `bg-card` | Card surfaces |
35
+ | `bg-sidebar` | Sidebar background |
36
+
37
+ **Dark mode:** not scoped for MVP — defer until user requests it.
38
+
39
+ ---
40
+
41
+ ## Typography
42
+
43
+ **Language:** `[FILL: Thai / English]`
44
+
45
+ **Font:** `[FILL: Prompt / IBM Plex Thai / Noto Sans Thai / Anuphan / Inter / Geist / Playfair Display + DM Sans]`
46
+
47
+ **Font stack type:** `[FILL: Single-stack (Thai) / Sans-only (Modern) / Serif + Sans (Luxury)]`
48
+
49
+ | Role | Tailwind classes | Notes |
50
+ |------|-----------------|-------|
51
+ | Display / Hero h1 | `[FILL]` | Used in hero sections only |
52
+ | Page title h1 | `text-3xl font-bold` (Thai) / `text-3xl font-bold tracking-tight` (EN) | |
53
+ | Section heading h2 | `text-xl font-semibold` | |
54
+ | Card heading h3 | `text-base font-semibold` | |
55
+ | Body | `text-base font-normal leading-relaxed` | Thai: `leading-loose` for denser text |
56
+ | Caption / helper | `text-sm text-muted-foreground` | |
57
+ | Label | `text-sm font-medium` | Form labels |
58
+ | Button | `text-sm font-medium` | |
59
+
60
+ ---
61
+
62
+ ## Spacing Scale
63
+
64
+ Using Tailwind's default spacing scale. These are the project's agreed units — don't introduce other values:
65
+
66
+ | Use | Class | px |
67
+ |-----|-------|----|
68
+ | Page horizontal padding | `px-4 sm:px-6 lg:px-8` | 16 / 24 / 32 |
69
+ | Section vertical gap | `space-y-8` / `gap-8` | 32 |
70
+ | Card padding | `p-6` | 24 |
71
+ | Form field gap | `space-y-4` | 16 |
72
+ | Inline item gap | `gap-2` / `gap-3` | 8 / 12 |
73
+ | Min touch target | `h-11` | 44 |
74
+
75
+ ---
76
+
77
+ ## Border Radius
78
+
79
+ | Token | Class | Usage |
80
+ |-------|-------|-------|
81
+ | Default | `rounded-md` | Buttons, inputs, badges |
82
+ | Card | `rounded-lg` | Cards, modals, sheets |
83
+ | Full | `rounded-full` | Avatars, tags, pills |
84
+
85
+ ---
86
+
87
+ ## Shadow
88
+
89
+ | Class | Usage |
90
+ |-------|-------|
91
+ | `shadow-sm` | Cards, inputs on focus |
92
+ | `shadow-md` | Dropdowns, popovers |
93
+ | `shadow-lg` | Modals, dialogs |
94
+ | `shadow-none` | Flat/minimal screens |
95
+
96
+ ---
97
+
98
+ ## UI Trend
99
+
100
+ **Selected trend:** `[FILL: trend name]`
101
+ **Reason:** `[FILL: why this trend fits this product + audience]`
102
+
103
+ **Trend implementation rules for this project:**
104
+ `[FILL: specific Tailwind classes and patterns used to express the trend — filled by /build Step 4]`
105
+
106
+ **Trend scope:** Applied to `[FILL: hero section / cards / overall layout / specific screens]`. Not applied to: forms, error states, data tables (keep those neutral for usability).
107
+
108
+ ---
109
+
110
+ ## Component Decisions
111
+
112
+ | Need | Component | Notes |
113
+ |------|-----------|-------|
114
+ | Navigation | `[FILL]` | |
115
+ | Data entry | `[FILL]` | |
116
+ | Data display | `[FILL]` | |
117
+ | Modals | `[FILL]` | |
118
+ | Feedback | `[FILL]` | |
119
+ | Global search | `[FILL: Command / none]` | |
120
+
121
+ ---
122
+
123
+ ## Icons
124
+
125
+ Use `lucide-react` (already bundled with shadcn). Do not mix icon libraries.
126
+
127
+ ---
128
+
129
+ ## Animation
130
+
131
+ Keep animations subtle and intentional:
132
+ - Micro-interactions: `transition-all duration-150`
133
+ - Modal/sheet open: shadcn built-in (Radix transitions)
134
+ - Trend-specific animation: `[FILL: if any — e.g. spring scale for Squishy UI]`
135
+ - Disable if `prefers-reduced-motion`: wrap custom animations in `@media (prefers-reduced-motion: no-preference)`
136
+
137
+ ---
138
+
139
+ ## Accessibility Baseline
140
+
141
+ - Contrast: ≥ 4.5:1 for body text, ≥ 3:1 for large text/UI components
142
+ - Focus ring: Tailwind `ring-2 ring-primary ring-offset-2` (shadcn default)
143
+ - Every form input paired with `<Label htmlFor="...">`
144
+ - Icon-only buttons: `aria-label` required
145
+ - Color not used as the only differentiator (always pair color with shape/text)