This skill should be used when initializing a new Firebase project with proven architecture...
This sub-skill guides initializing a new Firebase project with proven architecture patterns. It handles Firebase CLI setup, architecture decisions, emulator configuration, and initial project structure.
Key principles:
Do not use for:
firebase-development:add-featurefirebase-development:debugUse AskUserQuestion to gather these four decisions upfront:
Reference: docs/examples/multi-hosting-setup.md
Reference: docs/examples/api-key-authentication.md
Reference: docs/examples/express-function-architecture.md
Reference: docs/examples/firestore-rules-patterns.md
Create checklist with these 14 steps:
firebase --version # Install via npm install -g firebase-tools if missing
firebase login
mkdir my-firebase-project && cd my-firebase-project
git init && git branch -m main
Create .gitignore with: node_modules/, .env, .env.local, .firebase/, lib/, dist/
firebase init
Select: Firestore, Functions, Hosting, Emulators. Choose TypeScript for functions.
Use AskUserQuestion for the four decisions above.
Set up based on hosting decision. Critical emulator settings:
{
"emulators": {
"singleProjectMode": true,
"ui": { "enabled": true, "port": 4000 }
}
}
Reference: docs/examples/multi-hosting-setup.md
Based on architecture choice:
Express: Create middleware/, tools/, services/, shared/
Domain-Grouped: Create shared/types/, shared/validators/
Individual: Create functions/
Install dependencies: express, cors, firebase-admin, firebase-functions, vitest, biome
Create functions/src/index.ts with ABOUTME comments. Include health check endpoint for Express pattern.
Reference: docs/examples/express-function-architecture.md
Based on security model decision. Always include:
isAuthenticated(), isOwner())Reference: docs/examples/firestore-rules-patterns.md
Create vitest.config.ts and vitest.emulator.config.ts. Set up __tests__/ and __tests__/emulator/ directories.
Create biome.json with recommended rules. Run npm run lint:fix.
Create .env.example template. Copy to .env and fill in values.
For hosting: create hosting/.env.local with NEXT_PUBLIC_USE_EMULATORS=true.
git add . && git commit -m "feat: initial Firebase project setup"
firebase emulators:start
open http://127.0.0.1:4000
Verify all services start. Test health endpoint if using Express.
Create functions/src/__tests__/setup.test.ts with basic verification. Run npm test.
Before marking complete:
npm run buildnpm testnpm run lint.env files created and gitignoredExpress API:
functions/src/
āāā index.ts
āāā middleware/apiKeyGuard.ts
āāā tools/
āāā services/
āāā __tests__/
Domain-Grouped:
functions/src/
āāā index.ts
āāā posts.ts
āāā users.ts
āāā shared/types/
āāā __tests__/
Individual Files:
functions/
āāā functions/upload.ts
āāā functions/process.ts
āāā index.js
After setup complete:
firebase-development:add-featurefirebase-development:validatefirebase-development:debugdocs/examples/multi-hosting-setup.mddocs/examples/api-key-authentication.mddocs/examples/express-function-architecture.mddocs/examples/firestore-rules-patterns.mddocs/examples/emulator-workflow.md