@donotdev/cli 0.0.14 → 0.0.16
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/dependencies-matrix.json +372 -88
- package/dist/bin/commands/agent-setup.js +7 -1
- package/dist/bin/commands/build.js +141 -44
- package/dist/bin/commands/bump.js +81 -41
- package/dist/bin/commands/cacheout.js +37 -9
- package/dist/bin/commands/create-app.js +276 -121
- package/dist/bin/commands/create-project.js +506 -217
- package/dist/bin/commands/deploy.js +1785 -694
- package/dist/bin/commands/dev.js +177 -43
- package/dist/bin/commands/doctor.d.ts +6 -0
- package/dist/bin/commands/doctor.d.ts.map +1 -0
- package/dist/bin/commands/{lint.js → doctor.js} +1215 -156
- package/dist/bin/commands/doctor.js.map +1 -0
- package/dist/bin/commands/emu.js +451 -104
- package/dist/bin/commands/format.js +37 -9
- package/dist/bin/commands/make-admin.js +77499 -11
- package/dist/bin/commands/preview.js +181 -43
- package/dist/bin/commands/setup.d.ts +6 -0
- package/dist/bin/commands/setup.d.ts.map +1 -0
- package/dist/bin/commands/setup.js +11733 -0
- package/dist/bin/commands/setup.js.map +1 -0
- package/dist/bin/commands/supabase-setup.d.ts +6 -0
- package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
- package/dist/bin/commands/supabase-setup.js +7 -0
- package/dist/bin/commands/supabase-setup.js.map +1 -0
- package/dist/bin/commands/sync-secrets.js +211 -34
- package/dist/bin/commands/type-check.d.ts +14 -0
- package/dist/bin/commands/type-check.d.ts.map +1 -0
- package/dist/bin/commands/type-check.js +2049 -0
- package/dist/bin/commands/type-check.js.map +1 -0
- package/dist/bin/commands/wai.js +3 -1
- package/dist/bin/dndev.js +73 -52
- package/dist/bin/donotdev.js +54 -45
- package/dist/index.js +4212 -3050
- package/package.json +3 -3
- package/templates/app-demo/src/App.tsx.example +1 -0
- package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
- package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
- package/templates/app-demo/src/themes.css.example +5 -12
- package/templates/app-expo/.env.example +44 -0
- package/templates/app-expo/.expo/README.md.example +5 -0
- package/templates/app-expo/.gitignore.example +36 -0
- package/templates/app-expo/README.md.example +58 -0
- package/templates/app-expo/app/.gitkeep +2 -0
- package/templates/app-expo/app/_layout.tsx.example +41 -0
- package/templates/app-expo/app/form.tsx.example +52 -0
- package/templates/app-expo/app/index.tsx.example +89 -0
- package/templates/app-expo/app/list.tsx.example +32 -0
- package/templates/app-expo/app/profile.tsx.example +76 -0
- package/templates/app-expo/app/signin.tsx.example +53 -0
- package/templates/app-expo/app.json.example +39 -0
- package/templates/app-expo/assets/adaptive-icon.png +0 -0
- package/templates/app-expo/assets/favicon.png +0 -0
- package/templates/app-expo/assets/icon.png +0 -0
- package/templates/app-expo/assets/splash.png +0 -0
- package/templates/app-expo/babel.config.js.example +10 -0
- package/templates/app-expo/eas.json.example +20 -0
- package/templates/app-expo/expo-env.d.ts.example +4 -0
- package/templates/app-expo/metro.config.js.example +20 -0
- package/templates/app-expo/service-account-key.json.example +12 -0
- package/templates/app-expo/src/config/app.ts.example +46 -0
- package/templates/app-expo/src/config/providers.ts.example +7 -0
- package/templates/app-expo/tsconfig.json.example +19 -0
- package/templates/app-next/.env.example +4 -33
- package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
- package/templates/app-next/src/app/layout.tsx.example +7 -6
- package/templates/app-next/src/config/providers.ts.example +7 -0
- package/templates/app-next/src/globals.css.example +2 -11
- package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
- package/templates/app-next/src/themes.css.example +10 -13
- package/templates/app-vite/.env.example +3 -32
- package/templates/app-vite/index.html.example +2 -24
- package/templates/app-vite/src/App.tsx.example +2 -0
- package/templates/app-vite/src/config/providers.ts.example +7 -0
- package/templates/app-vite/src/globals.css.example +2 -12
- package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
- package/templates/app-vite/src/pages/HomePage.tsx.example +2 -2
- package/templates/app-vite/src/themes.css.example +109 -79
- package/templates/app-vite/vercel.json.example +11 -0
- package/templates/functions-firebase/README.md.example +1 -1
- package/templates/functions-firebase/build.mjs.example +2 -72
- package/templates/functions-firebase/functions-firebase/.env.example.example +24 -26
- package/templates/functions-firebase/functions-firebase/README.md.example +1 -1
- package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
- package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
- package/templates/functions-firebase/functions.config.js.example +1 -1
- package/templates/functions-supabase/supabase/config.toml.example +59 -0
- package/templates/functions-supabase/supabase/functions/.env.example +13 -0
- package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
- package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
- package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
- package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/deno.json.example +8 -0
- package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
- package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
- package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
- package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
- package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
- package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
- package/templates/functions-vercel/vercel.json.example +1 -1
- package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
- package/templates/github/workflows/firebase-deploy.yml.example +1 -1
- package/templates/overlay-firebase/env.fragment.example +34 -0
- package/templates/overlay-firebase/env.fragment.expo.example +34 -0
- package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
- package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
- package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
- package/templates/overlay-supabase/env.fragment.example +12 -0
- package/templates/overlay-supabase/env.fragment.expo.example +12 -0
- package/templates/overlay-supabase/env.fragment.nextjs.example +12 -0
- package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
- package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
- package/templates/overlay-supabase/vercel.headers.example +23 -0
- package/templates/overlay-supabase/vercel.json.example +22 -0
- package/templates/overlay-vercel/env.fragment.example +34 -0
- package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
- package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
- package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
- package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
- package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
- package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
- package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
- package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
- package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
- package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
- package/templates/root-consumer/.clinerules.example +1 -0
- package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
- package/templates/root-consumer/.cursorrules.example +1 -0
- package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
- package/templates/root-consumer/.windsurfrules.example +1 -0
- package/templates/root-consumer/AI.md.example +44 -123
- package/templates/root-consumer/CLAUDE.md.example +1 -134
- package/templates/root-consumer/CONVENTIONS.md.example +1 -0
- package/templates/root-consumer/GEMINI.md.example +1 -0
- package/templates/root-consumer/firebase.json.example +1 -1
- package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +22 -2
- package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
- package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
- package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +101 -32
- package/templates/root-consumer/guides/dndev/INDEX.md.example +4 -2
- package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +3 -3
- package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +241 -12
- package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +13 -7
- package/templates/root-consumer/guides/dndev/SETUP_OAUTH_PROVIDERS.md.example +60 -0
- package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
- package/templates/root-consumer/guides/dndev/SETUP_STRIPE.md.example +62 -0
- package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
- package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
- package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
- package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
- package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
- package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +7 -8
- package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
- package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
- package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
- package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
- package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +55 -15
- package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
- package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
- package/dist/bin/commands/lint.d.ts +0 -11
- package/dist/bin/commands/lint.d.ts.map +0 -1
- package/dist/bin/commands/lint.js.map +0 -1
- package/dist/bin/commands/staging.d.ts +0 -11
- package/dist/bin/commands/staging.d.ts.map +0 -1
- package/dist/bin/commands/staging.js +0 -12
- package/dist/bin/commands/staging.js.map +0 -1
- package/templates/app-payload/.env.example +0 -28
- package/templates/app-payload/README.md.example +0 -233
- package/templates/app-payload/collections/Company.ts.example +0 -125
- package/templates/app-payload/collections/Hero.ts.example +0 -62
- package/templates/app-payload/collections/Media.ts.example +0 -41
- package/templates/app-payload/collections/Products.ts.example +0 -115
- package/templates/app-payload/collections/Services.ts.example +0 -104
- package/templates/app-payload/collections/Testimonials.ts.example +0 -92
- package/templates/app-payload/collections/Users.ts.example +0 -35
- package/templates/app-payload/src/server.ts.example +0 -79
- package/templates/app-payload/tsconfig.json.example +0 -24
|
@@ -36,6 +36,10 @@ core_principles:
|
|
|
36
36
|
- Define entity states and transitions
|
|
37
37
|
- Capture business rules and validations explicitly
|
|
38
38
|
- Never assume - always ask
|
|
39
|
+
- **UX Strategist:** Identify the "North Star" action (max 2 clicks from home).
|
|
40
|
+
- **Kano Prioritization:** Tag features as Must-Have vs Delighter.
|
|
41
|
+
- **Duty to Advise:** Challenge layouts with high friction (> 2 clicks). If the user overrides your advice, log it in **Section 11** of the spec and move on.
|
|
42
|
+
- **Spec Drift:** Any changes to the validated spec must be logged in `spec_changes.md` for human review.
|
|
39
43
|
|
|
40
44
|
phase_0_brainstorm:
|
|
41
45
|
goal: DEEPLY understand the app and produce COMPLETE validated spec
|
|
@@ -47,7 +51,7 @@ phase_0_brainstorm:
|
|
|
47
51
|
questions:
|
|
48
52
|
- "Describe your app in one paragraph. What problem does it solve?"
|
|
49
53
|
- "Who is the primary user? Who else uses it?"
|
|
50
|
-
- "What's the ONE thing a user MUST be able to do?"
|
|
54
|
+
- "What's the ONE thing a user MUST be able to do? (The North Star)"
|
|
51
55
|
- "What makes this different from similar apps?"
|
|
52
56
|
done_when: "Can explain the app to someone unfamiliar in 2 minutes"
|
|
53
57
|
|
|
@@ -111,17 +115,26 @@ phase_0_brainstorm:
|
|
|
111
115
|
- "What happens when [entity status] changes unexpectedly?"
|
|
112
116
|
done_when: "Common failure scenarios have defined handling"
|
|
113
117
|
|
|
114
|
-
|
|
118
|
+
7_ux_intent:
|
|
119
|
+
purpose: "Plan the layout hierarchy and navigation flow"
|
|
120
|
+
questions:
|
|
121
|
+
- "Where should the shortcut for the North Star action live? (Goal: < 2 clicks)"
|
|
122
|
+
- "Which features are 'Delighters' (Marketing/Heroes) vs 'Must-Haves' (CRUD)?"
|
|
123
|
+
done_when: "Navigation hierarchy planned; high-friction paths challenged"
|
|
124
|
+
|
|
125
|
+
output: Filled spec_template.md with ALL sections complete, including Section 11 for overrides.
|
|
115
126
|
|
|
116
127
|
phase_1_scaffold:
|
|
117
|
-
goal: Create
|
|
128
|
+
goal: Create an Interactive Prototype from the validated spec
|
|
118
129
|
prerequisite: "spec_template.md is COMPLETE with no empty sections or TBDs"
|
|
119
130
|
steps:
|
|
120
131
|
- Verify spec is truly complete
|
|
121
132
|
- Create *Page.tsx files for each route in spec
|
|
122
|
-
- Set PageMeta (namespace, icon
|
|
133
|
+
- Set PageMeta (namespace, icon). **Set auth: false** temporarily so the user can click through the prototype without login.
|
|
134
|
+
- **Interactive Stubs:** Each page must contain its 'Role' (from spec) and 'Next Step' navigation buttons to related pages.
|
|
135
|
+
- **Friction Check:** If North Star path > 2 clicks, propose a 'Global Shortcut' (Header/Sidebar).
|
|
123
136
|
- Verify app runs with bun dev
|
|
124
|
-
output: All routes exist as
|
|
137
|
+
output: All routes exist as **Interactive Prototype Stubs** with navigation buttons.
|
|
125
138
|
|
|
126
139
|
validation_checklist:
|
|
127
140
|
before_filling_spec:
|
|
@@ -129,14 +142,21 @@ validation_checklist:
|
|
|
129
142
|
- [ ] Can trace every page back to a user journey
|
|
130
143
|
- [ ] Can answer "who can do X to Y?" for any entity/action
|
|
131
144
|
- [ ] Can answer "what happens when Z fails?" for common scenarios
|
|
145
|
+
- [ ] **North Star identified:** Defined a max 2-click path for the core action.
|
|
132
146
|
|
|
133
147
|
before_moving_to_scaffold:
|
|
134
148
|
- [ ] Every user journey has numbered steps
|
|
135
149
|
- [ ] Every entity has fields, states, permissions
|
|
136
150
|
- [ ] Every business rule is explicit
|
|
151
|
+
- [ ] **Overrides logged:** Any intentional UX friction documented in Section 11.
|
|
137
152
|
- [ ] No empty fields in spec_template.md
|
|
138
153
|
- [ ] User has validated the spec
|
|
139
154
|
|
|
155
|
+
after_scaffold_validation:
|
|
156
|
+
- [ ] App is running and clickable.
|
|
157
|
+
- [ ] User has clicked through the "North Star" path.
|
|
158
|
+
- [ ] Sitemap and click-depth are validated in the browser.
|
|
159
|
+
|
|
140
160
|
read_files:
|
|
141
161
|
- "guides/wai-way/blueprints/0_brainstorm.md"
|
|
142
162
|
- "guides/wai-way/spec_template.md"
|
|
@@ -21,7 +21,7 @@ persona:
|
|
|
21
21
|
|
|
22
22
|
golden_rule: |
|
|
23
23
|
THE SPEC IS YOUR TEST PLAN.
|
|
24
|
-
READ the spec (Phase 0 output) for entities, permissions, journeys.
|
|
24
|
+
READ the spec (Phase 0 output) and `spec_changes.md` for entities, permissions, journeys.
|
|
25
25
|
READ each entity file for access rules and fields.
|
|
26
26
|
GENERATE tests that verify the spec is implemented correctly.
|
|
27
27
|
|
|
@@ -31,6 +31,8 @@ core_principles:
|
|
|
31
31
|
- Configuration: app.ts, legal.ts, .env
|
|
32
32
|
- Mobile check: 375px width
|
|
33
33
|
- i18n is OPTIONAL and comes LAST
|
|
34
|
+
- **Contract Check:** Consult **Section 11** of the spec for intentional UX overrides. If a layout deviation is documented there, it is a **PASS**.
|
|
35
|
+
- **Heuristic Audit:** Verify 3-click rule for North Star, system status visibility (loaders), and visual hierarchy.
|
|
34
36
|
|
|
35
37
|
test_generation:
|
|
36
38
|
entity_tests:
|
|
@@ -53,6 +55,14 @@ test_generation:
|
|
|
53
55
|
- No unauthenticated writes
|
|
54
56
|
output: "tests/access/access-rules.test.ts"
|
|
55
57
|
|
|
58
|
+
ux_audit_checklist:
|
|
59
|
+
- [ ] **Contract Compliance:** Check Section 11 of spec for approved deviations.
|
|
60
|
+
- [ ] **Spec Drift Review:** Ensure all changes in `spec_changes.md` are documented and explained.
|
|
61
|
+
- [ ] **North Star Check:** Is the primary action reachable in < 3 clicks? (Unless overridden)
|
|
62
|
+
- [ ] **Hierarchy:** Does every page have a clear visual anchor (one primary focus)?
|
|
63
|
+
- [ ] **System Status:** Verify framework default feedback (Toasts/Loaders) is visible. Ask if 'North Star' action needs a custom 'Delighter' redirect.
|
|
64
|
+
- [ ] **Mobile:** Touch targets > 44px, no horizontal scroll.
|
|
65
|
+
|
|
56
66
|
firestore_rules:
|
|
57
67
|
source: "Entity access definitions"
|
|
58
68
|
mapping:
|
|
@@ -116,7 +126,8 @@ Steps:
|
|
|
116
126
|
6. Update app.ts, legal.ts, .env
|
|
117
127
|
7. Run bun test — all must pass
|
|
118
128
|
8. Mobile check at 375px
|
|
119
|
-
9. (
|
|
129
|
+
9. **UX Audit** (3-click rule, Visual Anchor, Mobile targets, and Spec Drift review)
|
|
130
|
+
10. (Optional) Add i18n
|
|
120
131
|
|
|
121
132
|
Call get_guide("TESTING") for testing patterns.
|
|
122
133
|
```
|
|
@@ -37,8 +37,7 @@ User provides idea
|
|
|
37
37
|
↓
|
|
38
38
|
Agent calls list_features() → matches needs to existing framework capabilities
|
|
39
39
|
↓
|
|
40
|
-
Agent asks IDENTITY questions (who, what, why)
|
|
41
|
-
↓
|
|
40
|
+
Agent asks IDENTITY questions (who, what, why, and **Aesthetic Essence**) ↓
|
|
42
41
|
Agent asks USER JOURNEY questions (what do users DO step by step?)
|
|
43
42
|
↓
|
|
44
43
|
Agent asks DATA questions (what entities, relationships, states?)
|
|
@@ -66,6 +65,7 @@ Start broad, then narrow down:
|
|
|
66
65
|
- "Who is the primary user? Secondary users?"
|
|
67
66
|
- "What's the one thing a user MUST be able to do?"
|
|
68
67
|
- "What makes this different from [similar apps]?"
|
|
68
|
+
- **Aesthetic Essence:** "Which visual 'vibe' fits the brand? SaaS (Clean/Modern), Luxury (Gold/Serif), or Brutalist (Orange/High-Contrast)?"
|
|
69
69
|
|
|
70
70
|
**Don't proceed until you can explain the app to someone else.**
|
|
71
71
|
|
|
@@ -11,18 +11,33 @@
|
|
|
11
11
|
|
|
12
12
|
## Step 1: Create App
|
|
13
13
|
|
|
14
|
+
**`dndev` is an installed CLI — run directly, never via `bunx` or `npx`.**
|
|
15
|
+
|
|
14
16
|
```bash
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
# Interactive wizard — prompts for builder, backend, features (no --preset flag)
|
|
18
|
+
dndev create-app
|
|
19
|
+
|
|
20
|
+
# Start emulators (if Firebase backend was selected)
|
|
17
21
|
dndev emu start
|
|
18
|
-
|
|
22
|
+
|
|
23
|
+
# Start the dev server
|
|
24
|
+
dndev dev
|
|
19
25
|
```
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Step 2: Apply Aesthetic Essence
|
|
30
|
+
|
|
31
|
+
**READ:** `guides/dndev/essences_reference.css`
|
|
32
|
+
|
|
33
|
+
Apply the chosen essence (SaaS, Luxury, Brutalist) to your `src/themes.css`.
|
|
34
|
+
- If **SaaS**: Keep defaults.
|
|
35
|
+
- If **Luxury/Brutalist**: Copy the variables from the reference file into `src/themes.css`.
|
|
36
|
+
- If **Custom**: Adjust primary/secondary colors in `:root`.
|
|
22
37
|
|
|
23
38
|
---
|
|
24
39
|
|
|
25
|
-
## Step
|
|
40
|
+
## Step 3: Review Spec Pages
|
|
26
41
|
|
|
27
42
|
From your spec, you have a list of pages. Now create them.
|
|
28
43
|
|
|
@@ -43,13 +58,16 @@ touch src/pages/ProductPage.tsx
|
|
|
43
58
|
|
|
44
59
|
---
|
|
45
60
|
|
|
46
|
-
## Step 4:
|
|
61
|
+
## Step 4: Create Interactive Prototype Stubs
|
|
47
62
|
|
|
48
63
|
**READ:** `src/pages/HomePage.tsx` for PageMeta pattern.
|
|
49
64
|
|
|
65
|
+
For **each page**, create a functional stub that allows the user to validate the flow.
|
|
66
|
+
|
|
50
67
|
```tsx
|
|
51
68
|
import type { PageMeta } from '@donotdev/core';
|
|
52
|
-
import { PageContainer } from '@donotdev/ui';
|
|
69
|
+
import { PageContainer, Link } from '@donotdev/ui';
|
|
70
|
+
import { Section, Stack, Text, Card, Button } from '@donotdev/components';
|
|
53
71
|
import { Info } from 'lucide-react';
|
|
54
72
|
|
|
55
73
|
export const NAMESPACE = 'about';
|
|
@@ -57,22 +75,44 @@ export const NAMESPACE = 'about';
|
|
|
57
75
|
export const meta: PageMeta = {
|
|
58
76
|
namespace: NAMESPACE,
|
|
59
77
|
icon: <Info />,
|
|
60
|
-
// From spec:
|
|
61
|
-
|
|
62
|
-
// auth: { required: true, role: 'admin' }, // Admin
|
|
63
|
-
// hideFromMenu: true, // Form pages
|
|
78
|
+
// From spec: Set auth: false for the prototype phase so user can click through
|
|
79
|
+
auth: false,
|
|
64
80
|
};
|
|
65
81
|
|
|
66
82
|
export default function AboutPage() {
|
|
67
|
-
return
|
|
83
|
+
return (
|
|
84
|
+
<PageContainer>
|
|
85
|
+
<Section title="About Page (Prototype Stub)">
|
|
86
|
+
<Stack gap="large">
|
|
87
|
+
<Text><strong>Role:</strong> [Describe the purpose of this page from the spec]</Text>
|
|
88
|
+
|
|
89
|
+
<Text level="h3">Navigate Flow:</Text>
|
|
90
|
+
<Stack direction="row" gap="medium">
|
|
91
|
+
<Link path="/dashboard">
|
|
92
|
+
<Button variant="outline">Go to Dashboard</Button>
|
|
93
|
+
</Link>
|
|
94
|
+
<Link path="/contact">
|
|
95
|
+
<Button variant="outline">Go to Contact</Button>
|
|
96
|
+
</Link>
|
|
97
|
+
</Stack>
|
|
98
|
+
|
|
99
|
+
{/* Placeholder for flow validation */}
|
|
100
|
+
<Card variant="outline" content={[`[Placeholder for ${NAMESPACE} core components]`]} />
|
|
101
|
+
</Stack>
|
|
102
|
+
</Section>
|
|
103
|
+
</PageContainer>
|
|
104
|
+
);
|
|
68
105
|
}
|
|
69
106
|
```
|
|
70
107
|
|
|
108
|
+
**Goal:** The user should be able to `bun dev` and click through the entire app flow (the "North Star" path) to validate the architecture before you build any logic.
|
|
109
|
+
|
|
71
110
|
---
|
|
72
111
|
|
|
73
112
|
## Output
|
|
74
113
|
|
|
75
114
|
- [ ] App runs with `bun dev`
|
|
76
|
-
- [ ] All route files created
|
|
77
|
-
- [ ] PageMeta set
|
|
78
|
-
- [ ] Navigation
|
|
115
|
+
- [ ] All route files created as **Interactive Stubs**
|
|
116
|
+
- [ ] PageMeta set (auth: false for prototype validation)
|
|
117
|
+
- [ ] Navigation links included on each stub to related pages
|
|
118
|
+
- [ ] User has "clicked through" the flow and validated sitemap/friction
|
|
@@ -9,7 +9,18 @@
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
## Step 1:
|
|
12
|
+
## Step 1: Apply UX Intent Rules
|
|
13
|
+
|
|
14
|
+
**Every page must follow the Designer Mandate:**
|
|
15
|
+
1. **70/30 Hierarchy:** Only ONE `primary` variant button/card per view. Use `outline` or `muted` for everything else to direct the user's eye to the North Star.
|
|
16
|
+
2. **Benefit-First Copy:** Do not use technical titles for Heros/Cards.
|
|
17
|
+
- ❌ "User Management" → ✅ "Empower Your Team"
|
|
18
|
+
- ❌ "Car List" → ✅ "Explore the Fleet"
|
|
19
|
+
3. **Success Intent:** Ensure framework default toasts are working. Only add a custom celebratory view or Redirect for the **North Star** goal completion.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 2: Read Page Patterns
|
|
13
24
|
|
|
14
25
|
**READ:** `guides/wai-way/page_patterns.md` for all patterns:
|
|
15
26
|
- Dashboard, List Page, Form Page
|
|
@@ -18,7 +29,7 @@
|
|
|
18
29
|
|
|
19
30
|
---
|
|
20
31
|
|
|
21
|
-
## Step
|
|
32
|
+
## Step 3: CRUD Pages
|
|
22
33
|
|
|
23
34
|
For each entity in spec:
|
|
24
35
|
|
|
@@ -60,7 +71,7 @@ export default function ProductPage() {
|
|
|
60
71
|
|
|
61
72
|
---
|
|
62
73
|
|
|
63
|
-
## Step
|
|
74
|
+
## Step 4: Dashboard Page
|
|
64
75
|
|
|
65
76
|
Copy Dashboard pattern from `page_patterns.md`:
|
|
66
77
|
- Quick actions (cards with onClick)
|
|
@@ -69,7 +80,7 @@ Copy Dashboard pattern from `page_patterns.md`:
|
|
|
69
80
|
|
|
70
81
|
---
|
|
71
82
|
|
|
72
|
-
## Step
|
|
83
|
+
## Step 5: Landing Pages
|
|
73
84
|
|
|
74
85
|
Copy Landing pattern from `page_patterns.md`:
|
|
75
86
|
- HeroSection with CTAs
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
| **Primary User** | _(Who uses this daily?)_ |
|
|
15
15
|
| **Secondary Users** | _(Who else interacts?)_ |
|
|
16
16
|
| **Core Value** | _(What problem does it solve?)_ |
|
|
17
|
+
| **Aesthetic Essence** | SaaS (Default) / Luxury / Brutalist / Custom |
|
|
17
18
|
|
|
18
19
|
---
|
|
19
20
|
|
|
@@ -275,13 +276,13 @@ _(Copy entity template for each entity)_
|
|
|
275
276
|
|
|
276
277
|
---
|
|
277
278
|
|
|
278
|
-
## 11.
|
|
279
|
+
## 11. Design Decisions & Overrides
|
|
280
|
+
> **CRITICAL:** These are intentional deviations from framework UX heuristics (e.g., 3-click rule, 70/30 hierarchy).
|
|
281
|
+
> **FOR AGENTS:** If a layout choice is documented here, do NOT challenge or flag it during the Build or Polish phases.
|
|
279
282
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
- [ ]
|
|
284
|
-
- [ ]
|
|
283
|
+
| Target (Page/Feature) | Override Description | Rationale |
|
|
284
|
+
|-----------------------|----------------------|-----------|
|
|
285
|
+
| | | |
|
|
285
286
|
|
|
286
287
|
---
|
|
287
288
|
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Lint Command Wrapper
|
|
3
|
-
* @description Re-exports lint from tooling for CLI bundling.
|
|
4
|
-
* Each command wrapper is bundled separately as a fully self-contained script.
|
|
5
|
-
*
|
|
6
|
-
* @version 0.0.4
|
|
7
|
-
* @since 0.0.1
|
|
8
|
-
* @author AMBROISE PARK Consulting
|
|
9
|
-
*/
|
|
10
|
-
export { lint as main } from '@donotdev/tooling';
|
|
11
|
-
//# sourceMappingURL=lint.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/lint.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/bin/commands/lint.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Staging Command Wrapper
|
|
3
|
-
* @description Staging is a thin wrapper around deploy with --staging flag.
|
|
4
|
-
* Re-exports deploy from tooling — the staging flag is set by the CLI entry point.
|
|
5
|
-
*
|
|
6
|
-
* @version 0.0.1
|
|
7
|
-
* @since 0.0.1
|
|
8
|
-
* @author AMBROISE PARK Consulting
|
|
9
|
-
*/
|
|
10
|
-
export { deploy as main } from '@donotdev/tooling';
|
|
11
|
-
//# sourceMappingURL=staging.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/staging.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// packages/cli/src/bin/commands/staging.ts
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Staging Command Wrapper
|
|
4
|
-
* @description Staging is a thin wrapper around deploy with --staging flag.
|
|
5
|
-
* Re-exports deploy from tooling — the staging flag is set by the CLI entry point.
|
|
6
|
-
*
|
|
7
|
-
* @version 0.0.1
|
|
8
|
-
* @since 0.0.1
|
|
9
|
-
* @author AMBROISE PARK Consulting
|
|
10
|
-
*/
|
|
11
|
-
export { deploy as main } from '@donotdev/tooling';
|
|
12
|
-
//# sourceMappingURL=staging.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"staging.js","sourceRoot":"","sources":["../../../src/bin/commands/staging.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# Payload CMS Configuration
|
|
2
|
-
PAYLOAD_SECRET=your-super-secret-key-here
|
|
3
|
-
PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3001
|
|
4
|
-
|
|
5
|
-
# Database Configuration (MongoDB)
|
|
6
|
-
MONGODB_URI=mongodb://localhost:27017/{{projectName}}
|
|
7
|
-
|
|
8
|
-
# For production, use MongoDB Atlas or similar
|
|
9
|
-
# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/{{projectName}}?retryWrites=true&w=majority
|
|
10
|
-
|
|
11
|
-
# Optional: Redis for caching (recommended for production)
|
|
12
|
-
# REDIS_URL=redis://localhost:6379
|
|
13
|
-
|
|
14
|
-
# CORS Origins (comma-separated)
|
|
15
|
-
CORS_ORIGINS=http://localhost:3000,https://{{projectName}}.com,https://admin.{{projectName}}.com
|
|
16
|
-
|
|
17
|
-
# File Upload Configuration
|
|
18
|
-
PAYLOAD_PUBLIC_MAX_FILE_SIZE=5000000
|
|
19
|
-
|
|
20
|
-
# Admin Configuration
|
|
21
|
-
PAYLOAD_PUBLIC_ADMIN_EMAIL=admin@{{projectName}}.com
|
|
22
|
-
PAYLOAD_PUBLIC_ADMIN_PASSWORD=your-admin-password
|
|
23
|
-
|
|
24
|
-
# Optional: Email Configuration (for notifications)
|
|
25
|
-
# SMTP_HOST=smtp.gmail.com
|
|
26
|
-
# SMTP_PORT=587
|
|
27
|
-
# SMTP_USER=your-email@gmail.com
|
|
28
|
-
# SMTP_PASS=your-app-password
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
# {{projectName}} CMS (Payload)
|
|
2
|
-
|
|
3
|
-
This is a **Payload CMS** application that provides a professional content management system for your business website.
|
|
4
|
-
|
|
5
|
-
## 🚀 What is Payload CMS?
|
|
6
|
-
|
|
7
|
-
Payload is a **headless CMS** that gives you:
|
|
8
|
-
- **Database** - Stores all your content (text, images, etc.)
|
|
9
|
-
- **Admin Interface** - Professional web interface for editing content
|
|
10
|
-
- **API** - Your website fetches content via REST API calls
|
|
11
|
-
- **Media Library** - Upload and manage images/files
|
|
12
|
-
|
|
13
|
-
## 📁 Project Structure
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
{{appName}}/
|
|
17
|
-
├── collections/ # Content types (Hero, Services, Products, etc.)
|
|
18
|
-
│ ├── Users.ts # Admin users authentication
|
|
19
|
-
│ ├── Media.ts # File uploads and media management
|
|
20
|
-
│ ├── Hero.ts # Landing page hero section
|
|
21
|
-
│ ├── Services.ts # Business services
|
|
22
|
-
│ ├── Products.ts # Product offerings
|
|
23
|
-
│ ├── Testimonials.ts # Client feedback
|
|
24
|
-
│ └── Company.ts # Company information
|
|
25
|
-
├── src/
|
|
26
|
-
│ └── server.ts # Express server with Payload
|
|
27
|
-
├── payload.config.ts # Payload configuration
|
|
28
|
-
├── package.json # Dependencies and scripts
|
|
29
|
-
└── .env # Environment variables
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## 🛠️ Content Types
|
|
33
|
-
|
|
34
|
-
### 1. **Hero Section** (`/admin/collections/hero`)
|
|
35
|
-
- **Title** - Main headline
|
|
36
|
-
- **Subtitle** - Supporting text
|
|
37
|
-
- **CTA Button** - Call-to-action text and link
|
|
38
|
-
- **Background Image** - Hero background
|
|
39
|
-
|
|
40
|
-
### 2. **Services** (`/admin/collections/services`)
|
|
41
|
-
- **Name** - Service name
|
|
42
|
-
- **Description** - Detailed description
|
|
43
|
-
- **Category** - Consulting, Training, Development, Support
|
|
44
|
-
- **Features** - List of service features
|
|
45
|
-
- **Pricing** - Pricing information
|
|
46
|
-
- **Icon** - Service icon
|
|
47
|
-
|
|
48
|
-
### 3. **Products** (`/admin/collections/products`)
|
|
49
|
-
- **Name** - Product name
|
|
50
|
-
- **Description** - Product description
|
|
51
|
-
- **Category** - Framework, Tool, Platform, Service
|
|
52
|
-
- **Features** - Key product features
|
|
53
|
-
- **Demo Link** - Live demo URL
|
|
54
|
-
- **Documentation** - Documentation link
|
|
55
|
-
- **GitHub** - Repository link
|
|
56
|
-
|
|
57
|
-
### 4. **Testimonials** (`/admin/collections/testimonials`)
|
|
58
|
-
- **Client Name** - Client's name
|
|
59
|
-
- **Company** - Company name
|
|
60
|
-
- **Quote** - Testimonial text
|
|
61
|
-
- **Rating** - 1-5 star rating
|
|
62
|
-
- **Avatar** - Client photo
|
|
63
|
-
- **Project** - Related project
|
|
64
|
-
|
|
65
|
-
### 5. **Company Info** (`/admin/collections/company`)
|
|
66
|
-
- **Name** - Company name
|
|
67
|
-
- **Contact** - Email, phone, address
|
|
68
|
-
- **Social Media** - LinkedIn, Twitter, GitHub, etc.
|
|
69
|
-
- **Logo** - Company logo
|
|
70
|
-
- **Favicon** - Website favicon
|
|
71
|
-
|
|
72
|
-
## 🚀 Quick Start
|
|
73
|
-
|
|
74
|
-
### 1. Install Dependencies
|
|
75
|
-
```bash
|
|
76
|
-
bun install
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### 2. Set Up Environment
|
|
80
|
-
```bash
|
|
81
|
-
cp .env.example .env
|
|
82
|
-
# Edit .env with your configuration
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 3. Set Up Database
|
|
86
|
-
**Option A: Local MongoDB**
|
|
87
|
-
```bash
|
|
88
|
-
# Install MongoDB locally or use Docker
|
|
89
|
-
docker run -d -p 27017:27017 --name mongodb mongo:latest
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**Option B: MongoDB Atlas (Recommended)**
|
|
93
|
-
- Create account at [MongoDB Atlas](https://www.mongodb.com/atlas)
|
|
94
|
-
- Create cluster and get connection string
|
|
95
|
-
- Update `MONGODB_URI` in `.env`
|
|
96
|
-
|
|
97
|
-
### 4. Start Development Server
|
|
98
|
-
```bash
|
|
99
|
-
bun run dev
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### 5. Access Admin Panel
|
|
103
|
-
- **URL**: http://localhost:3001/admin
|
|
104
|
-
- **Email**: admin@{{projectName}}.com
|
|
105
|
-
- **Password**: your-admin-password (from .env)
|
|
106
|
-
|
|
107
|
-
## 🔗 API Endpoints
|
|
108
|
-
|
|
109
|
-
### Content API
|
|
110
|
-
- **Hero**: `GET /api/hero`
|
|
111
|
-
- **Services**: `GET /api/services`
|
|
112
|
-
- **Products**: `GET /api/products`
|
|
113
|
-
- **Testimonials**: `GET /api/testimonials`
|
|
114
|
-
- **Company**: `GET /api/company`
|
|
115
|
-
|
|
116
|
-
### Example API Call
|
|
117
|
-
```javascript
|
|
118
|
-
// Fetch hero content
|
|
119
|
-
const response = await fetch('http://localhost:3001/api/hero');
|
|
120
|
-
const heroData = await response.json();
|
|
121
|
-
console.log(heroData.docs[0]); // Latest hero content
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## 🎯 How It Works
|
|
125
|
-
|
|
126
|
-
### 1. **Content Management**
|
|
127
|
-
- Login to admin panel at `/admin`
|
|
128
|
-
- Edit content using the professional interface
|
|
129
|
-
- Save changes instantly
|
|
130
|
-
|
|
131
|
-
### 2. **Content Delivery**
|
|
132
|
-
- Your website makes API calls to fetch content
|
|
133
|
-
- Content is returned as JSON
|
|
134
|
-
- Website displays the content dynamically
|
|
135
|
-
|
|
136
|
-
### 3. **Real-time Updates**
|
|
137
|
-
- Changes in admin appear immediately on website
|
|
138
|
-
- No code deployment needed
|
|
139
|
-
- Non-developers can update content
|
|
140
|
-
|
|
141
|
-
## 🔧 Configuration
|
|
142
|
-
|
|
143
|
-
### Environment Variables
|
|
144
|
-
```bash
|
|
145
|
-
# Required
|
|
146
|
-
PAYLOAD_SECRET=your-secret-key
|
|
147
|
-
MONGODB_URI=mongodb://localhost:27017/{{projectName}}
|
|
148
|
-
|
|
149
|
-
# Optional
|
|
150
|
-
PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3001
|
|
151
|
-
CORS_ORIGINS=http://localhost:3000,https://{{projectName}}.com
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### Customization
|
|
155
|
-
- **Add new content types**: Create new files in `collections/`
|
|
156
|
-
- **Modify fields**: Edit field definitions in collection files
|
|
157
|
-
- **Change admin UI**: Customize admin interface in `payload.config.ts`
|
|
158
|
-
|
|
159
|
-
## 🚀 Deployment
|
|
160
|
-
|
|
161
|
-
### Vercel Deployment
|
|
162
|
-
1. **Connect to Vercel**
|
|
163
|
-
2. **Set environment variables** in Vercel dashboard
|
|
164
|
-
3. **Deploy** - Vercel will build and deploy automatically
|
|
165
|
-
|
|
166
|
-
### Environment Variables for Production
|
|
167
|
-
```bash
|
|
168
|
-
PAYLOAD_SECRET=your-production-secret
|
|
169
|
-
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/{{projectName}}
|
|
170
|
-
PAYLOAD_PUBLIC_SERVER_URL=https://admin.{{projectName}}.com
|
|
171
|
-
CORS_ORIGINS=https://{{projectName}}.com,https://admin.{{projectName}}.com
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## 📊 Admin Features
|
|
175
|
-
|
|
176
|
-
- **User Management** - Create admin users
|
|
177
|
-
- **Media Library** - Upload and organize images
|
|
178
|
-
- **Content Versioning** - Track content changes
|
|
179
|
-
- **Draft/Published** - Preview before publishing
|
|
180
|
-
- **Rich Text Editor** - Format content easily
|
|
181
|
-
- **Image Optimization** - Automatic image resizing
|
|
182
|
-
- **File Upload** - Drag & drop file uploads
|
|
183
|
-
|
|
184
|
-
## 🔒 Security
|
|
185
|
-
|
|
186
|
-
- **Authentication** - Secure admin login
|
|
187
|
-
- **CORS Protection** - Configured for your domains
|
|
188
|
-
- **File Upload Limits** - 5MB file size limit
|
|
189
|
-
- **Input Validation** - All inputs validated
|
|
190
|
-
- **HTTPS Required** - Secure in production
|
|
191
|
-
|
|
192
|
-
## 🎨 Integration with Website
|
|
193
|
-
|
|
194
|
-
Your website (Next.js/Vite) connects to this CMS:
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
// Example: Fetch hero content
|
|
198
|
-
const { data: hero } = await fetch('/api/hero').then(r => r.json());
|
|
199
|
-
|
|
200
|
-
// Example: Fetch services
|
|
201
|
-
const { data: services } = await fetch('/api/services?where[isActive][equals]=true').then(r => r.json());
|
|
202
|
-
|
|
203
|
-
// Example: Fetch testimonials
|
|
204
|
-
const { data: testimonials } = await fetch('/api/testimonials?sort=order').then(r => r.json());
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## 🆘 Troubleshooting
|
|
208
|
-
|
|
209
|
-
### Common Issues
|
|
210
|
-
|
|
211
|
-
**"MongoDB connection failed"**
|
|
212
|
-
- Check `MONGODB_URI` in `.env`
|
|
213
|
-
- Ensure MongoDB is running
|
|
214
|
-
- Verify network connectivity
|
|
215
|
-
|
|
216
|
-
**"Admin panel not loading"**
|
|
217
|
-
- Check `PAYLOAD_SECRET` is set
|
|
218
|
-
- Verify `PAYLOAD_PUBLIC_SERVER_URL` is correct
|
|
219
|
-
- Check browser console for errors
|
|
220
|
-
|
|
221
|
-
**"API calls failing"**
|
|
222
|
-
- Verify CORS configuration
|
|
223
|
-
- Check server is running on correct port
|
|
224
|
-
- Ensure API endpoints are accessible
|
|
225
|
-
|
|
226
|
-
### Getting Help
|
|
227
|
-
- Check [Payload Documentation](https://payloadcms.com/docs)
|
|
228
|
-
- Review server logs for error messages
|
|
229
|
-
- Verify environment variables are set correctly
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
**That's it!** You now have a professional CMS that your website can use to fetch dynamic content. No more hardcoded text - everything is manageable through the admin interface.
|