opencode-skills-collection 4.0.68 → 4.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +266 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6943 -323
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: firebase-app-platform
|
|
3
|
+
description: Build and operate apps on Firebase using Auth, Firestore, Cloud Functions,
|
|
4
|
+
and Hosting. Use when building mobile/web backends with managed services, real-time
|
|
5
|
+
data sync, or serverless APIs.
|
|
6
|
+
category: devops
|
|
7
|
+
risk: critical
|
|
8
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
9
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
10
|
+
source_type: community
|
|
11
|
+
date_added: '2026-09-20'
|
|
12
|
+
license: MIT
|
|
13
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
14
|
+
compatibility: Requires the relevant OS/platform tooling and privileged access where
|
|
15
|
+
noted. Docs-only; helper scripts and templates not bundled.
|
|
16
|
+
metadata:
|
|
17
|
+
author: devops-skills
|
|
18
|
+
version: '1.0'
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Firebase App Platform
|
|
22
|
+
|
|
23
|
+
Ship mobile and web backends with Firebase managed services.
|
|
24
|
+
|
|
25
|
+
## When to Use This Skill
|
|
26
|
+
|
|
27
|
+
Use this skill when:
|
|
28
|
+
- Building mobile or web apps with real-time data sync
|
|
29
|
+
- Need authentication with minimal backend code
|
|
30
|
+
- Prototyping quickly with managed infrastructure
|
|
31
|
+
- Building serverless APIs with Cloud Functions
|
|
32
|
+
- Hosting static sites or SPAs with CDN
|
|
33
|
+
|
|
34
|
+
## Prerequisites
|
|
35
|
+
|
|
36
|
+
- Node.js 18+
|
|
37
|
+
- Firebase CLI (`npm install -g firebase-tools`)
|
|
38
|
+
- Google Cloud account (Firebase is part of GCP)
|
|
39
|
+
- A Firebase project (create at console.firebase.google.com)
|
|
40
|
+
|
|
41
|
+
## Quick Start
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Install and authenticate
|
|
45
|
+
npm install -g firebase-tools
|
|
46
|
+
firebase login
|
|
47
|
+
|
|
48
|
+
# Initialize in your project directory
|
|
49
|
+
firebase init
|
|
50
|
+
# Select: Firestore, Functions, Hosting, Emulators
|
|
51
|
+
|
|
52
|
+
# Start local emulators
|
|
53
|
+
firebase emulators:start
|
|
54
|
+
|
|
55
|
+
# Deploy everything
|
|
56
|
+
firebase deploy
|
|
57
|
+
|
|
58
|
+
# Deploy specific services
|
|
59
|
+
firebase deploy --only functions
|
|
60
|
+
firebase deploy --only hosting
|
|
61
|
+
firebase deploy --only firestore:rules
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Firestore Database
|
|
65
|
+
|
|
66
|
+
### Security Rules
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
// firestore.rules
|
|
70
|
+
rules_version = '2';
|
|
71
|
+
service cloud.firestore {
|
|
72
|
+
match /databases/{database}/documents {
|
|
73
|
+
// Users can only read/write their own data
|
|
74
|
+
match /users/{userId} {
|
|
75
|
+
allow read, write: if request.auth != null && request.auth.uid == userId;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Messages: authenticated users can read, only owner can write
|
|
79
|
+
match /channels/{channelId}/messages/{messageId} {
|
|
80
|
+
allow read: if request.auth != null;
|
|
81
|
+
allow create: if request.auth != null
|
|
82
|
+
&& request.resource.data.userId == request.auth.uid
|
|
83
|
+
&& request.resource.data.body is string
|
|
84
|
+
&& request.resource.data.body.size() <= 5000;
|
|
85
|
+
allow update, delete: if request.auth != null
|
|
86
|
+
&& resource.data.userId == request.auth.uid;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Admin-only collection
|
|
90
|
+
match /admin/{document=**} {
|
|
91
|
+
allow read, write: if request.auth != null
|
|
92
|
+
&& get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Default: deny everything
|
|
96
|
+
match /{document=**} {
|
|
97
|
+
allow read, write: if false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Data Operations
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// lib/firestore.ts
|
|
107
|
+
import { getFirestore, collection, doc, setDoc, getDoc,
|
|
108
|
+
query, where, orderBy, limit, onSnapshot,
|
|
109
|
+
serverTimestamp, increment } from "firebase/firestore";
|
|
110
|
+
|
|
111
|
+
const db = getFirestore();
|
|
112
|
+
|
|
113
|
+
// Create document with auto-ID
|
|
114
|
+
async function createMessage(channelId: string, body: string, userId: string) {
|
|
115
|
+
const ref = doc(collection(db, "channels", channelId, "messages"));
|
|
116
|
+
await setDoc(ref, {
|
|
117
|
+
body,
|
|
118
|
+
userId,
|
|
119
|
+
createdAt: serverTimestamp(),
|
|
120
|
+
});
|
|
121
|
+
return ref.id;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Real-time listener
|
|
125
|
+
function subscribeToMessages(channelId: string, callback: (msgs: any[]) => void) {
|
|
126
|
+
const q = query(
|
|
127
|
+
collection(db, "channels", channelId, "messages"),
|
|
128
|
+
orderBy("createdAt", "desc"),
|
|
129
|
+
limit(50)
|
|
130
|
+
);
|
|
131
|
+
return onSnapshot(q, (snapshot) => {
|
|
132
|
+
const messages = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
|
|
133
|
+
callback(messages);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Atomic counter
|
|
138
|
+
async function incrementViews(postId: string) {
|
|
139
|
+
await setDoc(doc(db, "posts", postId), {
|
|
140
|
+
views: increment(1),
|
|
141
|
+
}, { merge: true });
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Indexes
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
// firestore.indexes.json
|
|
149
|
+
{
|
|
150
|
+
"indexes": [
|
|
151
|
+
{
|
|
152
|
+
"collectionGroup": "messages",
|
|
153
|
+
"queryScope": "COLLECTION",
|
|
154
|
+
"fields": [
|
|
155
|
+
{ "fieldPath": "channelId", "order": "ASCENDING" },
|
|
156
|
+
{ "fieldPath": "createdAt", "order": "DESCENDING" }
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Authentication
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
// lib/auth.ts
|
|
167
|
+
import { getAuth, signInWithPopup, GoogleAuthProvider,
|
|
168
|
+
createUserWithEmailAndPassword, signInWithEmailAndPassword,
|
|
169
|
+
signOut, onAuthStateChanged } from "firebase/auth";
|
|
170
|
+
|
|
171
|
+
const auth = getAuth();
|
|
172
|
+
|
|
173
|
+
// Google sign-in
|
|
174
|
+
async function signInWithGoogle() {
|
|
175
|
+
const provider = new GoogleAuthProvider();
|
|
176
|
+
const result = await signInWithPopup(auth, provider);
|
|
177
|
+
return result.user;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Email/password registration
|
|
181
|
+
async function register(email: string, password: string) {
|
|
182
|
+
const result = await createUserWithEmailAndPassword(auth, email, password);
|
|
183
|
+
return result.user;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Auth state listener
|
|
187
|
+
onAuthStateChanged(auth, (user) => {
|
|
188
|
+
if (user) {
|
|
189
|
+
console.log("Signed in:", user.uid, user.email);
|
|
190
|
+
} else {
|
|
191
|
+
console.log("Signed out");
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Cloud Functions
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
// functions/src/index.ts
|
|
200
|
+
import { onRequest } from "firebase-functions/v2/https";
|
|
201
|
+
import { onDocumentCreated } from "firebase-functions/v2/firestore";
|
|
202
|
+
import { getFirestore } from "firebase-admin/firestore";
|
|
203
|
+
import { initializeApp } from "firebase-admin/app";
|
|
204
|
+
|
|
205
|
+
initializeApp();
|
|
206
|
+
const db = getFirestore();
|
|
207
|
+
|
|
208
|
+
// HTTP function (API endpoint)
|
|
209
|
+
export const api = onRequest({ cors: true, region: "us-central1" }, async (req, res) => {
|
|
210
|
+
if (req.method !== "GET") {
|
|
211
|
+
res.status(405).send("Method not allowed");
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const snapshot = await db.collection("posts").orderBy("createdAt", "desc").limit(10).get();
|
|
215
|
+
const posts = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
|
|
216
|
+
res.json({ posts });
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
// Firestore trigger — runs when a new message is created
|
|
220
|
+
export const onMessageCreated = onDocumentCreated(
|
|
221
|
+
"channels/{channelId}/messages/{messageId}",
|
|
222
|
+
async (event) => {
|
|
223
|
+
const data = event.data?.data();
|
|
224
|
+
if (!data) return;
|
|
225
|
+
|
|
226
|
+
// Update channel's last message timestamp
|
|
227
|
+
await db.doc(`channels/${event.params.channelId}`).update({
|
|
228
|
+
lastMessageAt: data.createdAt,
|
|
229
|
+
messageCount: FieldValue.increment(1),
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Send notification (example)
|
|
233
|
+
console.log(`New message in ${event.params.channelId}: ${data.body.substring(0, 50)}`);
|
|
234
|
+
}
|
|
235
|
+
);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Hosting
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
// firebase.json
|
|
242
|
+
{
|
|
243
|
+
"hosting": {
|
|
244
|
+
"public": "dist",
|
|
245
|
+
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
|
|
246
|
+
"rewrites": [
|
|
247
|
+
{ "source": "/api/**", "function": "api" },
|
|
248
|
+
{ "source": "**", "destination": "/index.html" }
|
|
249
|
+
],
|
|
250
|
+
"headers": [
|
|
251
|
+
{
|
|
252
|
+
"source": "**/*.@(js|css|svg|png|jpg|webp|woff2)",
|
|
253
|
+
"headers": [{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }]
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"source": "**",
|
|
257
|
+
"headers": [
|
|
258
|
+
{ "key": "X-Frame-Options", "value": "DENY" },
|
|
259
|
+
{ "key": "X-Content-Type-Options", "value": "nosniff" },
|
|
260
|
+
{ "key": "Strict-Transport-Security", "value": "max-age=63072000" }
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Local Emulators
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Start all emulators
|
|
272
|
+
firebase emulators:start
|
|
273
|
+
|
|
274
|
+
# Start specific emulators
|
|
275
|
+
firebase emulators:start --only auth,firestore,functions
|
|
276
|
+
|
|
277
|
+
# Export emulator data for persistence
|
|
278
|
+
firebase emulators:export ./emulator-data
|
|
279
|
+
firebase emulators:start --import=./emulator-data
|
|
280
|
+
|
|
281
|
+
# Emulator UI at http://localhost:4000
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```json
|
|
285
|
+
// firebase.json — emulator config
|
|
286
|
+
{
|
|
287
|
+
"emulators": {
|
|
288
|
+
"auth": { "port": 9099 },
|
|
289
|
+
"firestore": { "port": 8080 },
|
|
290
|
+
"functions": { "port": 5001 },
|
|
291
|
+
"hosting": { "port": 5000 },
|
|
292
|
+
"ui": { "enabled": true, "port": 4000 }
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Environment Configuration
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Set environment variables for functions
|
|
301
|
+
firebase functions:config:set stripe.key="sk_live_xxx" app.name="MyApp"
|
|
302
|
+
|
|
303
|
+
# View config
|
|
304
|
+
firebase functions:config:get
|
|
305
|
+
|
|
306
|
+
# Use in functions (v1)
|
|
307
|
+
const stripeKey = functions.config().stripe.key;
|
|
308
|
+
|
|
309
|
+
# For v2 functions, use .env files
|
|
310
|
+
# functions/.env
|
|
311
|
+
STRIPE_KEY=sk_live_xxx
|
|
312
|
+
|
|
313
|
+
# functions/.env.local (for emulators)
|
|
314
|
+
STRIPE_KEY=sk_test_xxx
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## Multi-Environment Setup
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# Create separate projects for each environment
|
|
321
|
+
firebase use --add # Add staging project alias
|
|
322
|
+
firebase use staging # Switch to staging
|
|
323
|
+
firebase use production
|
|
324
|
+
|
|
325
|
+
# Deploy to specific project
|
|
326
|
+
firebase deploy --project my-app-staging
|
|
327
|
+
firebase deploy --project my-app-production
|
|
328
|
+
|
|
329
|
+
# .firebaserc
|
|
330
|
+
{
|
|
331
|
+
"projects": {
|
|
332
|
+
"staging": "my-app-staging",
|
|
333
|
+
"production": "my-app-production"
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## CLI Reference
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
firebase projects:list # List all projects
|
|
342
|
+
firebase deploy # Deploy everything
|
|
343
|
+
firebase deploy --only functions # Deploy only functions
|
|
344
|
+
firebase deploy --only hosting # Deploy only hosting
|
|
345
|
+
firebase deploy --only firestore # Deploy rules + indexes
|
|
346
|
+
firebase functions:log # View function logs
|
|
347
|
+
firebase hosting:channel:create pr-123 # Preview channel
|
|
348
|
+
firebase hosting:channel:delete pr-123
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Security Best Practices
|
|
352
|
+
|
|
353
|
+
- Write strict Firestore security rules before any other code
|
|
354
|
+
- Separate environments by Firebase project (staging/production)
|
|
355
|
+
- Enable budget alerts and quota monitoring in GCP console
|
|
356
|
+
- Move privileged logic into Cloud Functions (never trust the client)
|
|
357
|
+
- Use App Check to prevent API abuse from non-app clients
|
|
358
|
+
- Enable Firestore audit logging for compliance
|
|
359
|
+
- Review OAuth consent screen settings
|
|
360
|
+
|
|
361
|
+
## Troubleshooting
|
|
362
|
+
|
|
363
|
+
| Issue | Solution |
|
|
364
|
+
|-------|---------|
|
|
365
|
+
| Permission denied | Check Firestore rules, verify auth state |
|
|
366
|
+
| Function cold starts | Use min instances (`minInstances: 1`), optimize imports |
|
|
367
|
+
| Emulator won't start | Check port conflicts, run `firebase emulators:start --debug` |
|
|
368
|
+
| Deploy fails | Run `firebase deploy --debug`, check service account permissions |
|
|
369
|
+
| Rules test failing | Use `firebase emulators:exec` to run rules unit tests |
|
|
370
|
+
|
|
371
|
+
## Related Skills
|
|
372
|
+
|
|
373
|
+
- gcp-cloud-functions (`gcp-cloud-functions`) — Function runtime patterns
|
|
374
|
+
- vercel-deployments (`vercel-deployments`) — Alternative frontend hosting
|
|
375
|
+
- convex-backend (`convex-backend`) — Alternative managed backend
|
|
376
|
+
|
|
377
|
+
## Limitations
|
|
378
|
+
|
|
379
|
+
- Infrastructure commands can disrupt services: confirm target host/scope and have backups/snapshots before mutating state.
|
|
380
|
+
- Docs-only import: upstream scripts and templates not bundled.
|
|
381
|
+
|