Overview
BowlerKit generates a Laravel admin-panel plus a shared /api/v1/app mobile contract for Account projects, while Guest projects can run local-first with Paywall and AdMob.
Overview
BowlerKit keeps one shared Expo or Flutter mobile codebase and asks for an app profile:
- Account — includes
landing-page,admin-panel, andapi-backend; authentication and remote data are enabled. - Guest — local-first, no BowlerKit backend bundle, with Paywall and AdMob retained. The generated root contains
docs/AI-GUEST-CLEANUP.mdfor optional runtime-only or deep cleanup.
Both profiles always include the mobile app.
Generated Folder Layout
With Backend
my-app/
├── mobile-app/ # Expo app
├── landing-page/ # Marketing / landing page template
├── admin-panel/ # Laravel (Filament admin + auth issuance)
├── api-backend/ # Go mobile API server
├── api-collections/ # Postman collections (Account profile)
├── AGENTS.md # AI project instructions
├── BOWLERKIT.md # Generated project guide
├── .bowlerkit/project.json
└── docs/AI-GUEST-CLEANUP.mdWithout Backend
my-app/
├── mobile-app/ # Expo app
├── landing-page/ # Marketing / landing page template
├── AGENTS.md # AI project instructions
├── BOWLERKIT.md # Generated project guide
├── .bowlerkit/project.json
└── docs/AI-GUEST-CLEANUP.mdBackend Responsibilities
The backend is split into two services that share the same database.
Admin Panel (Laravel)
The Laravel admin-panel owns:
- Auth issuance — Login, registration, Google OAuth, password reset, email verification. Issues Sanctum Personal Access Tokens.
- Token management — Logout, session revocation. Laravel remains the session/token authority.
- Admin dashboard — Filament-based panel for managing users, roles, permissions, content (FAQs, help center items), and system settings.
- Content CRUD — Admin-facing create/update/delete for help center, FAQs, contacts, and operating hours.
- Shared schema — Owns the auth/security schema including
audit_logs.
API Backend (Go)
The Go api-backend is the protected resource API for Account projects. It shares the Laravel database and validates Sanctum tokens; it is not a standalone auth server.
For a first local run, Laravel can serve the complete mobile API origin. Put the Go service behind the production gateway only when /api/v1/app/* performance mode is needed.
- Shared
/api/v1/app/*routes — the same mobile resource routes exist in both Laravel compatibility mode and Go performance mode. - Go performance mode — low-latency runtime for the shared mobile contract.
Why Two Services?
- Laravel handles what it does best: auth issuance, admin UI, email workflows, and content management.
- Go can handle the shared mobile contract in performance mode with low latency, validating the same Sanctum tokens Laravel issues.
- Both share the same MySQL/MariaDB database. Go will read the
personal_access_tokenstable directly using SHA-256 token hashing.
Routing Quick Reference
Canonical routing is prefix-based with Laravel on /api/v1/auth/*, /api/v1/uploads, and /api/v1/webhooks/revenuecat, while /api/v1/app/* can be routed to either Laravel compatibility mode or Go performance mode.
| Route | Owner | Notes |
|---|---|---|
POST /api/v1/auth/login | admin-panel | Issues Sanctum PAT |
POST /api/v1/auth/register | admin-panel | Issues Sanctum PAT |
POST /api/v1/auth/google | admin-panel | Issues Sanctum PAT |
POST /api/v1/auth/apple | admin-panel | Issues Sanctum PAT |
POST /api/v1/auth/forgot-password | admin-panel | Laravel mail |
POST /api/v1/auth/reset-password | admin-panel | Laravel mail |
GET /api/v1/auth/email/verify/{id}/{hash} | admin-panel | Email verification |
POST /api/v1/auth/email/verification-notification | admin-panel | Resend verification |
POST /api/v1/auth/logout | admin-panel | Token revoke |
PUT /api/v1/auth/update-password | admin-panel | Password update |
GET /api/v1/auth/connected-accounts | admin-panel | Connected-account list |
POST /api/v1/auth/connected-accounts/google | admin-panel | Link Google account |
POST /api/v1/auth/connected-accounts/apple | admin-panel | Link Apple account |
DELETE /api/v1/auth/connected-accounts/{provider} | admin-panel | Unlink provider |
DELETE /api/v1/auth/security/sessions/{id} | admin-panel | Session revoke |
DELETE /api/v1/auth/security/sessions | admin-panel | Revoke all sessions |
DELETE /api/v1/auth/security/delete-account | admin-panel | Account deletion |
POST /api/v1/uploads | admin-panel | File upload, returns URL |
POST /api/v1/webhooks/revenuecat | admin-panel | RevenueCat webhook |
/api/v1/app/* | shared mobile contract | Identical routes in Laravel compatibility mode or Go performance mode |
Routing Recommendation
For production, use the shipped Caddy prefix routing as the canonical contract. The active prefixes are:
/api/v1/auth/*→ admin-panel (Laravel, port 8000)/api/v1/uploads→ admin-panel (Laravel, port 8000)/api/v1/webhooks/revenuecat→ admin-panel (Laravel, port 8000)/api/v1/app/*→ admin-panel (Laravel compatibility mode, port 8000) or api-backend (Go performance mode, port 8080)/admin→ admin-panel (Laravel Filament)/→ landing-page
Start api-backend/compose.yaml with its production environment file on the shared web and shared networks before enabling /api/v1/app/* traffic.
Next Steps
Check out the Admin Panel and API Backend guides to set up your environment.
