BowlerKitBowlerKit

Landing Page & SEO

10/11/2026

Choose and optimize the profile-specific landing page and SEO surface.

What is generated

The landing surface is profile-specific:

  • Guest projects include a standalone landing-page/ TanStack Start/React app with Vite, Tailwind CSS, and prerendering.
  • Account projects do not include a duplicate standalone app. Their Laravel admin-panel/ already serves the public landing page at /, theme routes such as /productivity and /utility, legal pages, and SEO metadata through Inertia <Head>.

The Expo app and either landing surface are separate from the mobile bundle. The repository's own docs site is a different app under docs/ and is not copied into customer archives.

Develop the Guest landing page

Run these commands only when the generated profile is Guest:

cd landing-page
bun install
bun run dev

If Bun is unavailable, use npm install and npm run dev. The scripts are defined in landing-page/package.json.

Common scripts:

bun run build
bun run preview
bun run typecheck
bun run test
bun run check

Develop the Account landing page

Account projects use the landing page built into admin-panel; do not create or add a second landing-page/ app. Customize the public surface in admin-panel/resources/js/Pages/Home.tsx, the theme content/components, and admin-panel/routes/web.php. The page emits title, description, Open Graph, and theme-color metadata with Inertia <Head>.

cd admin-panel
composer install
npm install
npm run dev

Build the Laravel/Vite assets with npm run build as part of the Account backend deployment.

Build and publish

For Guest, the generated Vite config enables TanStack Start prerendering and link crawling. Build from landing-page/:

cd landing-page
bun run build

The output is under landing-page/.output/. Use the platform's TanStack Start deployment target or serve the generated output according to the adapter you choose; do not assume the Expo mobile bundle serves the landing page.

For Account, deploy the Laravel admin-panel and run its Vite build. The public landing and SEO routes are served by Laravel/Inertia, not by a standalone landing-page/ directory.

Customize and publish

For Guest, edit landing-page/src/ (routes, components, styles, and assets). For Account, edit the corresponding admin-panel/resources/js/ theme/page files and routes/web.php. In either profile, update metadata, canonical URLs, Open Graph images, robots rules, sitemap behavior, privacy policy, and terms URLs for your domain.

For static hosting, confirm that your provider supports the generated prerendered output and client-side route fallbacks. Cloudflare Pages, Netlify, or a self-hosted server can work, but the exact build/output settings are provider-specific.

SEO checklist

  • One descriptive <title> and meta description per public route.
  • Canonical URLs on public pages.
  • Open Graph/Twitter image and description.
  • Accessible headings, landmarks, and alt text.
  • robots.txt and sitemap for the production domain.
  • No development/demo API URLs or seeded credentials in public content.
  • Keep the profile contract: Guest uses landing-page/; Account uses the admin-panel landing and SEO surface.