vite-flare-starter
Vite Flare Starter
Clone and configure the batteries-included Cloudflare starter into a standalone project. Produces a fully rebranded, deployable full-stack app.
What You Get
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite, Tailwind v4, shadcn/ui |
| Backend | Hono (on Cloudflare Workers) |
| Database | D1 (SQLite at edge) + Drizzle ORM |
| Auth | better-auth (Google OAuth + optional email/password) |
| Storage | R2 (S3-compatible object storage) |
| AI | Workers AI binding |
| Data Fetching | TanStack Query |
| Deployment | Cloudflare Workers with Static Assets |
See references/tech-stack.md for the full dependency list.
Workflow
Step 1: Gather Project Info
Ask for:
| Required | Optional |
|---|---|
| Project name (kebab-case) | Admin email |
| Description (1 sentence) | Google OAuth credentials |
| Cloudflare account | Custom domain |
Step 2: Clone and Configure
Perform these operations to scaffold the project. See references/setup-pattern.md for exact replacement targets and the .dev.vars template.
- Clone the repo and remove
.git, init fresh repo - Find-replace
vite-flare-starterwith the project name in wrangler.jsonc (worker name, database name, R2 bucket names), package.json (name, database refs), and index.html (title, meta) - Remove hardcoded
account_idand replacedatabase_idwith placeholder in wrangler.jsonc - Reset package.json version to
0.1.0 - Generate
BETTER_AUTH_SECRETusingopenssl rand -hex 32(or Pythonsecrets.token_hex(32)) - Create
.dev.varsfrom template (convert kebab-case name to Title Case for display, underscore for ID) - Optionally create Cloudflare D1 database and R2 buckets, update wrangler.jsonc with database_id
- Install dependencies with
pnpm install - Run local database migration with
pnpm run db:migrate:local - Initial commit
Step 3: Manual Configuration
After the script completes:
-
Google OAuth (if using):
- Go to Google Cloud Console
- Create OAuth 2.0 Client ID
- Add redirect URI:
http://localhost:5173/api/auth/callback/google - Copy Client ID and Secret to
.dev.vars
-
Favicon: Replace
public/favicon.svgwith your own -
CLAUDE.md: Update project description and remove vite-flare-starter references
-
index.html: Update
<title>and meta description
Step 4: Verify Locally
pnpm dev
Check:
- http://localhost:5173 loads
- Shows YOUR app name, not "Vite Flare Starter"
- Sign-up/sign-in works (if Google OAuth configured)
Step 5: Deploy to Production
# Set production secrets
openssl rand -base64 32 | npx wrangler secret put BETTER_AUTH_SECRET
echo "https://PROJECT_NAME.SUBDOMAIN.workers.dev" | npx wrangler secret put BETTER_AUTH_URL
echo "http://localhost:5173,https://PROJECT_NAME.SUBDOMAIN.workers.dev" | npx wrangler secret put TRUSTED_ORIGINS
# If using Google OAuth
echo "your-client-id" | npx wrangler secret put GOOGLE_CLIENT_ID
echo "your-client-secret" | npx wrangler secret put GOOGLE_CLIENT_SECRET
# Migrate remote database
pnpm run db:migrate:remote
# Build and deploy
pnpm run build && pnpm run deploy
Critical: After first deploy, update BETTER_AUTH_URL with your actual Worker URL. Also add the production URL to Google OAuth redirect URIs.
Common Issues
| Symptom | Cause | Fix |
|---|---|---|
| Auth silently fails (redirect to homepage) | Missing TRUSTED_ORIGINS | Set TRUSTED_ORIGINS secret with all valid URLs |
| "Not authorized" on deploy | Wrong account_id | Remove account_id from wrangler.jsonc or set yours |
| Database operations fail | Using original database_id | Create YOUR database, use YOUR database_id |
| localStorage shows "vite-flare-starter" | Missing VITE_APP_ID | Set VITE_APP_ID=yourapp in .dev.vars |
| Auth fails in production | BETTER_AUTH_URL mismatch | Must match actual Worker URL exactly |
What Gets Rebranded
The setup process handles these automatically:
| File | What Changes |
|---|---|
wrangler.jsonc |
Worker name, database name, bucket names |
package.json |
Package name, database references in scripts |
.dev.vars |
App name, secret, URL |
index.html |
Title, meta tags |
These need manual attention:
CLAUDE.md— project descriptionpublic/favicon.svg— your favicon- Google OAuth — redirect URIs
- Production secrets — via
wrangler secret put
See references/customization-guide.md for the complete rebranding checklist.