
Vite Flare Starter
- 1.1k installs
- 946 repo stars
- Updated July 2, 2026
- jezweb/claude-skills
vite-flare-starter is a Claude Code skill that scaffolds a Vite plus React client and Cloudflare Worker API with D1, R2, and better-auth using copy-paste env and wrangler templates for developers bootstrapping edge-hoste
About
vite-flare-starter is a project generator skill from jezweb/claude-skills that stands up a Vite React frontend alongside a Cloudflare Worker API backed by D1 and R2, with better-auth handling sessions and optional Google OAuth. The readme ships a .env template covering BETTER_AUTH_SECRET, BETTER_AUTH_URL, APP_NAME, VITE_APP_ID, VITE_TOKEN_PREFIX, and optional email provider keys, plus wrangler configuration patterns developers paste before local dev on localhost:5173. Teams reach for vite-flare-starter when they want an opinionated edge stack on Cloudflare instead of hand-rolling Worker bindings, auth plumbing, and Vite env wiring from scratch.
- Local `.env` template for better-auth, optional Google OAuth, and Vite `VITE_*` app branding placeholders
- wrangler.jsonc pattern: `nodejs_compat`, SPA assets, `/api/*` run_worker_first, D1 migrations dir
- D1 database binding and R2 storage binding placeholders for edge persistence
- Documents optional email login flags and Resend-style email API keys for verification flows
- Explicit warning not to commit local env files to git
Vite Flare Starter by the numbers
- 1,065 all-time installs (skills.sh)
- +22 installs in the week ending Jul 29, 2026 (Skillselion tracking)
- Ranked #309 of 1,039 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/jezweb/claude-skills --skill vite-flare-starterAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.1k |
|---|---|
| repo stars | ★ 946 |
| Security audit | 2 / 3 scanners passed |
| Last updated | July 2, 2026 |
| Repository | jezweb/claude-skills ↗ |
How do you scaffold Vite React on Cloudflare Workers with D1?
Scaffold a Vite + React client and Cloudflare Worker API with D1, R2, and better-auth using copy-paste env and wrangler templates.
Who is it for?
Developers starting a SaaS on Cloudflare Workers who need Vite React, D1, R2, and better-auth wired together quickly.
Skip if: Teams deploying only a static Vite site or a non-Cloudflare backend without Workers, D1, or R2 requirements.
When should I use this skill?
A developer asks to bootstrap a Vite plus Cloudflare full-stack app with authentication and edge database storage.
What you get
Vite React client, Cloudflare Worker API, D1 and R2 bindings, better-auth configuration, and copy-paste .env plus wrangler templates ready for local development.
- vite react app
- cloudflare worker api
- env and wrangler templates
Files
Vite Flare Starter
Clone and configure the batteries-included Cloudflare starter into a standalone project. Produces a fully rebranded, deployable full-stack app.
Stack
| Layer | Technology | Version |
|---|---|---|
| Frontend | React, Vite, Tailwind CSS, shadcn/ui | 19, 6.x, v4, latest |
| Backend | Hono (on Cloudflare Workers) | 4.x |
| Database | D1 (SQLite at edge) + Drizzle ORM | 0.38+ |
| Auth | better-auth (Google OAuth + email/password) | latest |
| Storage | R2 (S3-compatible object storage) | — |
| AI | Workers AI binding | — |
| Data Fetching | TanStack Query | v5 |
Cloudflare Bindings
| Binding | Type | Purpose |
|---|---|---|
DB | D1 Database | Primary application database |
AVATARS | R2 Bucket | User avatar storage |
FILES | R2 Bucket | General file uploads |
AI | Workers AI | AI model inference |
Project Structure
src/
├── client/ # React frontend
│ ├── components/ # UI components
│ ├── hooks/ # Custom hooks + TanStack Query
│ ├── pages/ # Route pages
│ ├── lib/ # Utilities (auth client, etc.)
│ └── main.tsx # App entry point
├── server/ # Hono backend
│ ├── index.ts # Worker entry point
│ ├── routes/ # API routes
│ ├── middleware/ # Auth, CORS, etc.
│ └── db/ # Drizzle schema + queries
└── shared/ # Shared types between client/serverKey Commands
| Command | Purpose |
|---|---|
pnpm dev | Start local dev server |
pnpm build | Production build |
pnpm deploy | Deploy to Cloudflare |
pnpm db:migrate:local | Apply migrations locally |
pnpm db:migrate:remote | Apply migrations to production |
pnpm db:generate | Generate migration from schema changes |
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
2a. Clone and clean
git clone https://github.com/jezweb/vite-flare-starter.git PROJECT_DIR --depth 1
cd PROJECT_DIR
rm -rf .git
git init2b. Find-replace targets
Replace vite-flare-starter with the project name in these locations:
| File | Target | Replace with |
|---|---|---|
wrangler.jsonc | "vite-flare-starter" (worker name) | "PROJECT_NAME" |
wrangler.jsonc | vite-flare-starter-db | PROJECT_NAME-db |
wrangler.jsonc | vite-flare-starter-avatars | PROJECT_NAME-avatars |
wrangler.jsonc | vite-flare-starter-files | PROJECT_NAME-files |
package.json | "name": "vite-flare-starter" | "name": "PROJECT_NAME" |
package.json | vite-flare-starter-db | PROJECT_NAME-db |
index.html | <title> content | App display name (Title Case) |
Also in wrangler.jsonc:
- Remove hardcoded
account_idline (let wrangler prompt or use env var) - Replace
database_idvalue withREPLACE_WITH_YOUR_DATABASE_ID
Reset package.json version to "0.1.0".
Use the Edit tool for replacements (preferred over sed to avoid macOS/GNU differences).
2c. Generate auth secret
BETTER_AUTH_SECRET=$(openssl rand -hex 32 2>/dev/null || python3 -c "import secrets; print(secrets.token_hex(32))")2d. Create .dev.vars
Convert kebab-case project name: my-cool-app becomes Display My Cool App, ID my_cool_app.
# Local Development Environment Variables
# DO NOT COMMIT THIS FILE TO GIT
# Authentication (better-auth)
BETTER_AUTH_SECRET=<generated>
BETTER_AUTH_URL=http://localhost:5173
# Google OAuth (optional)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# Email Auth Control (disabled by default)
# ENABLE_EMAIL_LOGIN=true
# ENABLE_EMAIL_SIGNUP=true
# Application Configuration
APP_NAME=<Display Name>
VITE_APP_NAME=<Display Name>
VITE_APP_ID=<app_id>
VITE_TOKEN_PREFIX=<app_id>_
VITE_GITHUB_URL=
VITE_FOOTER_TEXT=
NODE_ENV=development2e. Create Cloudflare resources (optional)
npx wrangler d1 create PROJECT_NAME-db
# Extract database_id from output, update wrangler.jsonc
npx wrangler r2 bucket create PROJECT_NAME-avatars
npx wrangler r2 bucket create PROJECT_NAME-files2f. Install and migrate
pnpm install
pnpm run db:migrate:local2g. Initial commit
git add -A
git commit -m "Initial commit from vite-flare-starter"Step 3: Manual Configuration
1. 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 2. Favicon: Replace public/favicon.svg 3. CLAUDE.md: Update project description, remove vite-flare-starter references 4. index.html: Update <title> and meta description
Step 4: Verify Locally
pnpm devCheck: http://localhost:5173 loads, shows YOUR app name, sign-up/sign-in works (if 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 deployCritical: After first deploy, update BETTER_AUTH_URL with your actual Worker URL. Add the production URL to Google OAuth redirect URIs.
Security Fingerprints
Change all of these so attackers cannot identify your site uses this starter:
| Location | Default Value | How to Change |
|---|---|---|
| Page title | "Vite Flare Starter" | index.html |
| App name in UI | "Vite Flare Starter" | VITE_APP_NAME env var |
| localStorage keys | vite-flare-starter-theme | VITE_APP_ID env var |
| API tokens | vfs_ prefix | VITE_TOKEN_PREFIX env var |
| GitHub links | starter repo | VITE_GITHUB_URL (set empty to hide) |
| Worker name | vite-flare-starter | wrangler.jsonc |
| Database name | vite-flare-starter-db | wrangler.jsonc |
| R2 buckets | vite-flare-starter-* | wrangler.jsonc |
Environment Variables
Branding (VITE_ prefix = available in frontend)
| Variable | Purpose | Example |
|---|---|---|
VITE_APP_NAME | Display name in UI | "My Cool App" |
VITE_APP_ID | localStorage prefix, Sentry | "mycoolapp" |
VITE_TOKEN_PREFIX | API token prefix | "mca_" |
VITE_GITHUB_URL | GitHub link (empty = hidden) | "" |
VITE_FOOTER_TEXT | Footer copyright text | "2026 My Company" |
APP_NAME | Server-side app name | "My Cool App" |
Auth
| Variable | Purpose | Notes |
|---|---|---|
BETTER_AUTH_SECRET | Session encryption | openssl rand -hex 32 |
BETTER_AUTH_URL | Auth base URL | Must match actual URL exactly |
TRUSTED_ORIGINS | Allowed origins | Comma-separated, include localhost + prod |
GOOGLE_CLIENT_ID | Google OAuth | From Google Cloud Console |
GOOGLE_CLIENT_SECRET | Google OAuth | From Google Cloud Console |
ENABLE_EMAIL_LOGIN | Enable email/password | "true" to enable |
ENABLE_EMAIL_SIGNUP | Enable email signup | Requires ENABLE_EMAIL_LOGIN |
Email (Optional)
| Variable | Purpose | Notes |
|---|---|---|
EMAIL_FROM | Sender address | For verification/password reset |
EMAIL_API_KEY | Email service API key | Resend recommended |
Common Customisations
Adding a New Database Table
1. Add schema in src/server/db/schema.ts 2. Generate migration: pnpm db:generate 3. Apply locally: pnpm db:migrate:local 4. Apply to production: pnpm db:migrate:remote
Adding a New API Route
1. Create route file in src/server/routes/ 2. Register in src/server/index.ts 3. Add TanStack Query hook in src/client/hooks/
Changing Auth Providers
Edit src/server/auth.ts: add provider to socialProviders, add credentials to .dev.vars and production secrets, update client-side login buttons.
Feature Flags
Control features via environment variables: VITE_FEATURE_STYLE_GUIDE=true, VITE_FEATURE_COMPONENTS=true. Add your own in src/client/lib/features.ts.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Auth redirects to homepage silently | Missing TRUSTED_ORIGINS | Set TRUSTED_ORIGINS with all valid URLs |
| "Not authorized" on deploy | Wrong account_id | Remove account_id from wrangler.jsonc or set yours |
| Database 500 errors | Missing migrations | Run pnpm db:migrate:local and pnpm db:migrate:remote |
| localStorage shows "vite-flare-starter" | Missing VITE_APP_ID | Set VITE_APP_ID=yourapp in .dev.vars |
| Auth fails in production only | BETTER_AUTH_URL mismatch | Must match actual Worker URL exactly (https, no trailing slash) |
| "redirect_uri_mismatch" on Google sign-in | OAuth redirect URI missing | Add production URL to Google Cloud Console OAuth redirect URIs |
| Secret changes have no effect | Not redeployed | wrangler secret put does NOT redeploy. Run pnpm deploy after |
Production Deployment Checklist
- [ ]
BETTER_AUTH_SECRETset (different from dev!) - [ ]
BETTER_AUTH_URLmatches actual Worker URL - [ ]
TRUSTED_ORIGINSincludes all valid URLs - [ ] Google OAuth redirect URI includes production URL
- [ ] Remote database migrated (
pnpm db:migrate:remote) - [ ] No
vite-flare-starterreferences in config files - [ ] Favicon replaced
- [ ] CLAUDE.md updated
- [ ]
.dev.varsis NOT committed (check.gitignore)
# Local Development Environment Variables
# DO NOT COMMIT THIS FILE TO GIT
# Authentication (better-auth)
BETTER_AUTH_SECRET={{BETTER_AUTH_SECRET}}
BETTER_AUTH_URL=http://localhost:5173
# Google OAuth (optional — get from https://console.cloud.google.com/)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# Email Auth Control (disabled by default — OAuth-only)
# ENABLE_EMAIL_LOGIN=true
# ENABLE_EMAIL_SIGNUP=true
# Email Configuration (optional — for verification/password reset)
# EMAIL_FROM=noreply@yourdomain.com
# EMAIL_API_KEY=re_...
# Application Configuration
APP_NAME={{APP_DISPLAY_NAME}}
VITE_APP_NAME={{APP_DISPLAY_NAME}}
VITE_APP_ID={{APP_ID}}
VITE_TOKEN_PREFIX={{APP_ID}}_
VITE_GITHUB_URL=
VITE_FOOTER_TEXT=
NODE_ENV=development
// Cloudflare Workers Configuration
// Documentation: https://developers.cloudflare.com/workers/configuration/
{
"name": "{{PROJECT_NAME}}",
"compatibility_date": "2025-01-01",
"compatibility_flags": ["nodejs_compat"],
// Worker entry point (source file, NOT built file)
"main": "./src/server/index.ts",
// Static Assets Configuration (Workers with Static Assets)
"assets": {
"directory": "./dist/client",
"not_found_handling": "single-page-application",
"run_worker_first": ["/api/*"]
},
// D1 Database (SQLite at edge)
"d1_databases": [
{
"binding": "DB",
"database_name": "{{PROJECT_NAME}}-db",
"database_id": "{{DATABASE_ID}}",
"migrations_dir": "drizzle"
}
],
// R2 Storage (S3-compatible object storage)
"r2_buckets": [
{
"binding": "AVATARS",
"bucket_name": "{{PROJECT_NAME}}-avatars"
},
{
"binding": "FILES",
"bucket_name": "{{PROJECT_NAME}}-files"
}
],
// Workers AI
"ai": {
"binding": "AI"
},
// Observability
"observability": {
"enabled": true
}
}
Related skills
FAQ
What stack does vite-flare-starter generate?
vite-flare-starter generates a Vite React client and Cloudflare Worker API with D1, R2, and better-auth. The skill provides copy-paste .env and wrangler templates covering secrets, app IDs, and optional Google OAuth credentials.
Which auth variables does vite-flare-starter require?
vite-flare-starter requires BETTER_AUTH_SECRET and BETTER_AUTH_URL set to http://localhost:5173 for local development. Optional GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET enable OAuth, while email login flags remain disabled by default.
Is Vite Flare Starter safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.