Fast public pages
Astro keeps the landing site server-first and content-driven instead of turning the product app into a second website.
Launch the product shell first
This template now splits the public story from the authenticated app: Astro handles the landing site, while the dashboard stays focused on login, password recovery, role-aware routing, and the product workspace.
apps/
landing/ Astro marketing site
dashboard/ Vite + React product app
backend/ Express + Better Auth + Prisma
pnpm dev
landing → localhost:4321
dashboard → localhost:5185
backend → localhost:3005 Astro keeps the landing site server-first and content-driven instead of turning the product app into a second website.
The dashboard root now behaves like an auth entry, not a temporary homepage competing with the product routes.
Public narrative
The landing site is now a standalone app under apps/landing, ready for SEO, docs links, pricing sections, and marketing copy without
polluting the dashboard router.
Product ergonomics
The React app remains the product shell: login, forgot password, reset password, email verification, and role-aware redirects are still the center of gravity there, but public account creation is intentionally disabled after bootstrap.
Monorepo baseline
Astro joins the existing Turborepo and pnpm workspace without special-casing. The root task graph can now run the landing app alongside the dashboard and backend.
What ships in the template
Use Astro for the homepage, product framing, SEO pages, and future pricing or feature detail pages.
Send people into the React app for sign-in and the authenticated experience tailored to their role.
Keep sessions, persistence, email flows, and protected APIs on the Express and Prisma side.
Ready to adapt