Customise
Your product
/dashboard is the blank you fill. Auth is done. Payments write has_access. This is where the rest of the week goes.
/dashboard is signed-in only. Guests go to /signin. The page you see is a placeholder: account menu, a heading, and a note about has_access.
Replace app/dashboard/page.tsx with the product. Keep the layout’s auth check. Add the paid-access check when the feature is not free.
What is already there
- Session via
app/dashboard/layout.tsx ButtonAccount— billing portal and sign out- Header
dynamic = "force-dynamic"so the page is not statically cached around a session
Add routes under app/dashboard/ and they inherit the layout.
Patterns to copy
| Need | Copy this |
|---|---|
| Another private area | app/dashboard/layout.tsx |
| Paid-only API | Server createClient(), then profiles.has_access, return 403 |
| Browser call to your API | apiClient from libs/api.ts |
| Email after an action | sendEmail() from libs/resend.ts |
Scaffold the first product page