ship-create 1.3.1 → 1.4.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.
@@ -0,0 +1,288 @@
1
+ # STACK_DECISION_MATRIX.md
2
+
3
+ **Phase:** S — Structure
4
+ **Purpose:** A fast lookup so a non-developer can confidently pick a stack for their specific product type instead of defaulting to the full stack in `TECH_STACK.md` for everything — including for products simple enough that Supabase/auth/payments would be overkill. Find your use case below, copy the recommended stack, and paste the AI Build Prompt to get started.
5
+
6
+ > **Rule of thumb:** Don't add a piece of the stack until the product actually needs it. A landing page does not need a database. A lead-gen site does not need Stripe. Match the table below before defaulting to everything in `TECH_STACK.md`.
7
+
8
+ ---
9
+
10
+ ## Quick Reference Table
11
+
12
+ | Use Case | Recommended Stack | Complexity | Cost | Time to MVP |
13
+ |---|---|---|---|---|
14
+ | Landing Page | Next.js + Tailwind + shadcn/ui, no backend | Low | $ | 2-4 days |
15
+ | Lead Generation Website | Next.js + Tailwind + shadcn/ui + Resend + Plausible | Low | $ | 3-5 days |
16
+ | CRM | Next.js + Tailwind + shadcn/ui + Supabase + Supabase Auth + PostHog | High | $$ | 4-6 weeks |
17
+ | Dashboard | Next.js + Tailwind + shadcn/ui + Supabase + Supabase Auth + PostHog | Medium | $$ | 2-4 weeks |
18
+ | SaaS | Full stack (`TECH_STACK.md`) — Next.js, Tailwind, shadcn/ui, Supabase, Supabase Auth, Supabase Storage, Stripe, Resend, PostHog, Sentry | High | $$$ | 6-10 weeks |
19
+ | Membership Site | Next.js + Tailwind + shadcn/ui + Supabase + Supabase Auth + Stripe + Resend | Medium-High | $$ | 4-6 weeks |
20
+ | Booking System | Next.js + Tailwind + shadcn/ui + Supabase + Supabase Auth + Stripe + Resend + n8n/Make | High | $$ | 4-7 weeks |
21
+ | Directory Website | Next.js + Tailwind + shadcn/ui + Supabase + Sanity (or Directus) | Medium | $$ | 3-5 weeks |
22
+ | Internal Tool | Next.js + Tailwind + shadcn/ui + Supabase + Supabase Auth | Medium | $ | 1-3 weeks |
23
+
24
+ ---
25
+
26
+ ## 1. Landing Page
27
+
28
+ **Recommended Stack:** Next.js + Tailwind CSS + shadcn/ui (a few components only). No backend, no database, no auth.
29
+
30
+ **Why this stack:** A landing page exists to convert visitors with copy and design, not to store data. Supabase/auth/payments add setup time and cost with zero benefit here. Next.js + Vercel still gives fast load times and easy deployment; shadcn/ui covers the occasional interactive element (FAQ accordion, contact form UI).
31
+
32
+ **Complexity:** Low
33
+ **Cost:** $ (Vercel free tier + domain only)
34
+ **Time to MVP:** 2-4 days
35
+
36
+ **AI Build Prompt:**
37
+ ```
38
+ Build a single-page marketing landing page using Next.js (App Router) and Tailwind CSS, no backend or database needed.
39
+
40
+ Product: [one-line description]
41
+ Sections needed: [e.g. "hero, problem/solution, features, social proof, pricing teaser, FAQ, final CTA"]
42
+ Brand: [colors/fonts, or "recommend a clean modern palette"]
43
+ Form handling: [e.g. "email signup form that posts to [Resend/Mailchimp/Google Sheet] — specify provider" or "no form needed yet"]
44
+
45
+ Output:
46
+ 1. Full page structure as one Next.js page (or split into components if it gets long)
47
+ 2. Tailwind styling matching the brand input above
48
+ 3. Mobile-responsive by default — confirm breakpoints used
49
+ 4. If a form is needed, the simplest working integration for the provider specified — do not add a database for this
50
+ ```
51
+
52
+ ---
53
+
54
+ ## 2. Lead Generation Website
55
+
56
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Resend (for lead notification emails) + Plausible (traffic analytics). No Supabase unless leads must be queryable/searchable later — a simple lead-gen site can pipe form submissions straight to email or a spreadsheet via n8n/Make.
57
+
58
+ **Why this stack:** The job here is capturing and routing leads, not managing user accounts. Resend handles the "notify me/the lead" emails; Plausible tells you which traffic sources actually convert. Add Supabase only once you need a searchable leads database instead of an inbox/spreadsheet.
59
+
60
+ **Complexity:** Low
61
+ **Cost:** $ (Vercel + Resend + Plausible free/low tiers)
62
+ **Time to MVP:** 3-5 days
63
+
64
+ **AI Build Prompt:**
65
+ ```
66
+ Build a lead generation website using Next.js, Tailwind, and shadcn/ui.
67
+
68
+ Product/offer: [one-line description]
69
+ Lead capture form fields: [list, e.g. "name, email, company size"]
70
+ What happens after submission: [e.g. "send me an email notification via Resend" / "send to a Google Sheet via n8n webhook"]
71
+ Lead magnet (if any): [e.g. "free PDF download after form submit"]
72
+ Analytics: add Plausible for pageview/traffic tracking, no cookie banner needed
73
+
74
+ Output:
75
+ 1. Page structure (hero, value prop, lead capture form, optional lead magnet delivery)
76
+ 2. Form validation (required fields, valid email format) before submission
77
+ 3. The exact integration code for the "what happens after submission" step specified above
78
+ 4. Plausible script installation
79
+ 5. A thank-you state/page after successful submission
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 3. CRM
85
+
86
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Supabase (database + Auth) + PostHog (usage analytics).
87
+
88
+ **Why this stack:** A CRM is fundamentally a structured database (contacts, deals, activities) with role-based permissions (who can see/edit which records) — exactly what Supabase + RLS is built for. shadcn/ui's table and form components cover the bulk of CRM UI needs. PostHog matters here because CRM adoption (do people actually log activity?) is the real risk, not traffic.
89
+
90
+ **Complexity:** High
91
+ **Cost:** $$
92
+ **Time to MVP:** 4-6 weeks
93
+
94
+ **AI Build Prompt:**
95
+ ```
96
+ Build a CRM MVP using Next.js, Tailwind, shadcn/ui, and Supabase (database + Auth).
97
+
98
+ Core entities: [e.g. "contacts, companies, deals (with stages), activities/notes logged against a contact or deal"]
99
+ Pipeline stages (if deals exist): [list, e.g. "New, Contacted, Qualified, Proposal, Won, Lost"]
100
+ Roles/permissions: [e.g. "admin sees everything, rep only sees their own assigned contacts/deals"]
101
+ Views needed: [e.g. "contact list with search/filter, deal kanban board by stage, contact detail page with activity timeline"]
102
+
103
+ Output:
104
+ 1. Database schema (SQL) for the entities above, with RLS policies matching the roles described
105
+ 2. Folder structure for the Next.js app covering each view listed
106
+ 3. The kanban/pipeline view component (if applicable) using shadcn/ui, with drag-to-change-stage behavior described even if implemented as a simple dropdown for v1
107
+ 4. Auth setup restricting each view by role
108
+ 5. Flag any permission rule that's ambiguous before writing the RLS policy for it
109
+ ```
110
+
111
+ ---
112
+
113
+ ## 4. Dashboard
114
+
115
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Supabase (database + Auth) + PostHog.
116
+
117
+ **Why this stack:** A dashboard's core job is querying and visualizing existing data (yours or a connected source) and gating it by user/role — Supabase covers both the data layer and the access control in one place. PostHog is included specifically to track which charts/views users actually look at, since dashboards are often built on guesses about what matters.
118
+
119
+ **Complexity:** Medium
120
+ **Cost:** $$
121
+ **Time to MVP:** 2-4 weeks
122
+
123
+ **AI Build Prompt:**
124
+ ```
125
+ Build a dashboard using Next.js, Tailwind, shadcn/ui, and Supabase.
126
+
127
+ Data being visualized: [describe, e.g. "weekly sales totals, top 10 products, customer signups over time"]
128
+ Data source: [e.g. "already in Supabase from our app" / "needs to be synced in from [external tool/API]"]
129
+ Who sees this dashboard: [e.g. "only logged-in admins" / "each customer sees only their own data"]
130
+ Key widgets needed: [list, e.g. "line chart of signups over time, table of top customers, summary stat cards"]
131
+
132
+ Output:
133
+ 1. Data queries (SQL or Supabase client calls) for each widget listed, including any aggregation needed
134
+ 2. RLS policies enforcing who sees what, matching the access rule above
135
+ 3. Component structure using shadcn/ui for cards/tables + a charting library recommendation (state which one and why) for the charts
136
+ 4. Loading and empty states for every widget (what shows before data loads / if there's no data yet)
137
+ 5. Refresh strategy: does data need to update live, or is a periodic refresh acceptable? Recommend one and explain why for this use case
138
+ ```
139
+
140
+ ---
141
+
142
+ ## 5. SaaS
143
+
144
+ **Recommended Stack:** Full default stack — Next.js, Tailwind, shadcn/ui, Supabase (database + Auth + Storage), Stripe, Resend, PostHog, Sentry. See `TECH_STACK.md` for every piece.
145
+
146
+ **Why this stack:** SaaS is the use case the default stack is built around — it needs accounts, billing, transactional email, usage tracking, and error visibility all at once. Skipping any one of these (especially Sentry and Stripe webhook idempotency) is the most common cause of post-launch fires.
147
+
148
+ **Complexity:** High
149
+ **Cost:** $$$
150
+ **Time to MVP:** 6-10 weeks
151
+
152
+ **AI Build Prompt:**
153
+ ```
154
+ Build a SaaS MVP using the full stack: Next.js, Tailwind, shadcn/ui, Supabase (database + Auth + Storage), Stripe, Resend, PostHog, Sentry.
155
+
156
+ Product: [one-line description]
157
+ Core feature(s) the paid plan unlocks: [describe]
158
+ Pricing model: [e.g. "free tier with limits + $X/mo pro tier" — see AI_STACK_PROMPTS.md for a dedicated pricing/billing prompt]
159
+ Key user flows: [list, e.g. "sign up → onboarding → create first [thing] → invite teammate → upgrade to paid"]
160
+
161
+ Output, in this order:
162
+ 1. Database schema + RLS policies for the core entities and the multi-tenant/account structure (workspace/team if applicable)
163
+ 2. Auth flow (signup, login, protected routes) per the user flows listed
164
+ 3. Stripe billing integration matching the pricing model, including idempotent webhook handling
165
+ 4. Resend email triggers for: welcome, payment receipt, payment failed
166
+ 5. PostHog events for each step in the key user flows listed, so activation/drop-off is measurable from day one
167
+ 6. Sentry setup with error boundaries on the core flows
168
+
169
+ Build this in stages, not all files at once — confirm each stage works before moving to the next.
170
+ ```
171
+
172
+ ---
173
+
174
+ ## 6. Membership Site
175
+
176
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Supabase (database + Auth) + Stripe + Resend.
177
+
178
+ **Why this stack:** A membership site is gated content behind a paid subscription — the core mechanics are Supabase Auth (who's logged in) + RLS (what content their plan unlocks) + Stripe (recurring billing) + Resend (renewal/payment-failed emails). PostHog/Sentry are optional at MVP stage unless content volume/users are already large.
179
+
180
+ **Complexity:** Medium-High
181
+ **Cost:** $$
182
+ **Time to MVP:** 4-6 weeks
183
+
184
+ **AI Build Prompt:**
185
+ ```
186
+ Build a membership site MVP using Next.js, Tailwind, shadcn/ui, Supabase, Stripe, and Resend.
187
+
188
+ Content type being gated: [e.g. "video courses", "downloadable templates", "community posts"]
189
+ Membership tiers: [list, e.g. "free preview tier, $X/mo full access tier"]
190
+ What free vs. paid members can each access: [describe clearly]
191
+
192
+ Output:
193
+ 1. Database schema for content + membership tier tracking per user
194
+ 2. RLS policies enforcing tier-based access to content (free users cannot query/see paid content rows, not just UI-hidden)
195
+ 3. Stripe subscription setup matching the tiers, with webhook handling that updates the user's tier in Supabase on subscribe/cancel/payment failure
196
+ 4. Resend emails for: welcome, payment failed/card declined (with a clear call-to-action to update payment), subscription canceled
197
+ 5. The content-gating UI pattern (e.g. blurred/locked preview for non-members) using shadcn/ui
198
+ ```
199
+
200
+ ---
201
+
202
+ ## 7. Booking System
203
+
204
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Supabase (database + Auth) + Stripe (if paid bookings) + Resend (confirmations/reminders) + n8n or Make (calendar sync / reminder automation).
205
+
206
+ **Why this stack:** Booking systems hinge on correctly handling time slots, availability, and double-booking prevention (a database-level concern — Supabase + proper constraints) plus reliable confirmation/reminder emails. n8n/Make is included specifically for calendar sync (Google Calendar, etc.) and reminder scheduling, which is painful to hand-code but a standard automation pattern.
207
+
208
+ **Complexity:** High
209
+ **Cost:** $$
210
+ **Time to MVP:** 4-7 weeks
211
+
212
+ **AI Build Prompt:**
213
+ ```
214
+ Build a booking system MVP using Next.js, Tailwind, shadcn/ui, Supabase, Stripe (if paid), and Resend.
215
+
216
+ What's being booked: [e.g. "1-hour consultation slots", "equipment rental by day"]
217
+ Availability rules: [e.g. "Mon-Fri 9am-5pm, 1-hour slots, 1 booking per slot, 24hr cancellation cutoff"]
218
+ Payment required at booking: [yes/no — if yes, describe pricing]
219
+ Confirmation/reminder emails needed: [e.g. "confirmation immediately, reminder 24hrs before"]
220
+
221
+ Output:
222
+ 1. Database schema preventing double-booking at the database level (not just app-level checks) — explain the constraint used
223
+ 2. Availability query logic (how the app determines which slots show as bookable)
224
+ 3. Booking flow UI using shadcn/ui (calendar/slot picker, confirmation step)
225
+ 4. Stripe integration if paid, including what happens if payment fails after a slot was tentatively held
226
+ 5. Resend confirmation email immediately on booking; note where a reminder automation (n8n/Make scheduled trigers) would plug in for the 24hr-before reminder
227
+ 6. Cancellation flow respecting the cutoff rule stated above
228
+ ```
229
+
230
+ ---
231
+
232
+ ## 8. Directory Website
233
+
234
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Supabase (database) + Sanity or Directus (for listing content management). Auth only if listings need owner-editable profiles or paid listings.
235
+
236
+ **Why this stack:** A directory is mostly structured, searchable/filterable listing data. Supabase handles search/filter at the database level; Sanity/Directus gives whoever manages listings a real editing UI without touching code. Skip Stripe/Auth entirely if listings are submitted manually by you, not self-service by listing owners.
237
+
238
+ **Complexity:** Medium
239
+ **Cost:** $$
240
+ **Time to MVP:** 3-5 weeks
241
+
242
+ **AI Build Prompt:**
243
+ ```
244
+ Build a directory website MVP using Next.js, Tailwind, shadcn/ui, Supabase, and [Sanity / Directus] for content management.
245
+
246
+ What's being listed: [e.g. "local service providers", "SaaS tools by category"]
247
+ Listing fields: [list, e.g. "name, category, description, location, contact info, image, rating"]
248
+ Filtering/search needed: [e.g. "filter by category and location, search by name"]
249
+ Who manages listings: [e.g. "only me via the CMS" / "listing owners can self-submit and edit their own listing"]
250
+
251
+ Output:
252
+ 1. Content model/schema in the chosen CMS matching the fields above
253
+ 2. Database/query setup for filtering and search (server-side, with pagination)
254
+ 3. Listing card and detail page components using shadcn/ui
255
+ 4. If self-service editing is needed: the auth + ownership model so a listing owner can only edit their own listing
256
+ 5. SEO basics for listing pages (meta tags, structured data) since directories live or die on search traffic
257
+ ```
258
+
259
+ ---
260
+
261
+ ## 9. Internal Tool
262
+
263
+ **Recommended Stack:** Next.js + Tailwind + shadcn/ui + Supabase (database + Auth). Skip Stripe, Resend, PostHog, and Sentry at MVP stage — these are for external users and paying customers, not your own team.
264
+
265
+ **Why this stack:** Internal tools serve a small, known, trusted user base (your team) — the priority is fast build time and basic access control, not billing, marketing email, or public-facing polish. Supabase Auth still matters because internal tools often touch sensitive operational data.
266
+
267
+ **Complexity:** Medium
268
+ **Cost:** $
269
+ **Time to MVP:** 1-3 weeks
270
+
271
+ **AI Build Prompt:**
272
+ ```
273
+ Build an internal tool MVP using Next.js, Tailwind, shadcn/ui, and Supabase (database + Auth).
274
+
275
+ What this tool needs to do: [describe the core operational task, e.g. "let ops team update order status and see daily shipment counts"]
276
+ Who uses it: [e.g. "5 internal team members, 2 roles: ops and admin"]
277
+ Data source: [e.g. "new Supabase tables" / "existing data already in our main app's Supabase project"]
278
+
279
+ Output:
280
+ 1. Database schema (or confirmation of reuse if data already exists elsewhere) and RLS policies matching the 2 roles
281
+ 2. Core screens needed for the task described, kept as simple as possible — no marketing polish needed
282
+ 3. Auth setup restricted to known team members only (e.g. invite-only, no public signup)
283
+ 4. Skip Stripe, Resend, and analytics entirely unless I ask for them — keep this lean
284
+ ```
285
+
286
+ ---
287
+
288
+ **Next step:** Once you've picked your row, paste the matching AI Build Prompt into Claude or Cursor/Windsurf to scaffold it, then use [`AI_STACK_PROMPTS.md`](./AI_STACK_PROMPTS.md) to generate the supporting architecture, schema, and security checklist before handing off implementation.