vite-flare-starter
npx machina-cli add skill jezweb/claude-skills/vite-flare-starter --openclawVite 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.
Source
git clone https://github.com/jezweb/claude-skills/blob/main/plugins/cloudflare/skills/vite-flare-starter/SKILL.mdView on GitHub Overview
Vite Flare Starter clones a batteries-included Cloudflare project and turns it into a standalone, deployable full-stack app. It combines React 19, Hono on Cloudflare Workers, D1+Drizzle ORM, better-auth, Tailwind v4 with shadcn/ui, TanStack Query, R2 storage, and Workers AI to deliver a ready-to-run stack.
How This Skill Works
The workflow automates cloning and branding the starter, then replacing identifiers across wrangler.jsonc, package.json, and index.html. It generates a .dev.vars file, installs dependencies, runs local migrations, and finally builds and deploys the app with Cloudflare Workers and static assets. Use setup.sh to clone, configure, and prepare the project for deployment.
When to Use It
- You want a batteries-included Cloudflare app scaffold powered by React 19, Hono, D1+Drizzle, and Tailwind.
- You need edge-first storage with D1 and R2 aligned to your app's data model.
- You require Google OAuth-based authentication via better-auth (plus optional email/password).
- You are preparing a production deployment using wrangler and Cloudflare Workers.
- You want an end-to-end starter that includes Workers AI binding and TanStack Query for data fetching.
Quick Start
- Step 1: Run setup.sh to clone and configure the project for your app name.
- Step 2: pnpm install && pnpm run db:migrate:local to set up the database locally.
- Step 3: pnpm run build && pnpm run deploy to publish to Cloudflare.
Best Practices
- Run setup.sh in a clean repo and ensure all identifiers (names, URLs) are consistently replaced in wrangler.jsonc, package.json, and index.html.
- Create and populate .dev.vars from the template, converting kebab-case project name to Title Case.
- Keep secrets in Cloudflare via wrangler secret put and avoid committing sensitive values.
- Test Google OAuth redirect URIs locally and in prod; validate TRUSTED_ORIGINS before deployment.
- Migrate the local DB first, then migrate remotely after deploying to production.
Example Use Cases
- edge-portal to manage customer docs with D1+Drizzle and R2 backing storage
- shoplite-ecomm on Cloudflare with Google sign-in and edge-first data access
- docs-hub with static assets, search, and TanStack Query data layer
- inventory-d1-app for edge inventory management
- media-streamer using Workers AI and R2 for assets