🔥

Firebase Setup — NutriTrack SaaS

Configuracion inicial completa con Firebase CLI · Generado por CULTIVA IA
Firebase 13 React 18 + React Native Node.js 20 Entorno: Production
nutritrack-app-prod
NutriTrack Production
europe-west1
✓ Configurado
Pasos de configuracion
Autenticacion Firebase CLI
Verificar instalacion y autenticar con cuenta Google
Completado
terminal — bash
$ npx -y firebase-tools@latest --version ✔ 13.28.0 $ npx -y firebase-tools@latest login i Firebase optionally collects CLI and Emulator Suite usage data i To disable it run `firebase logout` first, then log in with `--no-analytics`. ✔ Success! Logged in as alvaro@nutritrack.io
Usuario autenticado: alvaro@nutritrack.io — Si el navegador no abre automaticamente, usar login --no-localhost
Crear proyecto Firebase
Proyecto unico globalmente con ID valido (6-30 chars, lowercase)
Completado
terminal — bash
$ npx -y firebase-tools@latest projects:create nutritrack-app-prod --display-name "NutriTrack Production" i Creating Google Cloud Platform project ✔ Google Cloud Platform project created i Adding Firebase resources to Google Cloud Platform project ✔ Firebase project nutritrack-app-prod has been successfully created! ✔ Visit https://console.firebase.google.com/project/nutritrack-app-prod to manage your project. $ npx -y firebase-tools@latest use nutritrack-app-prod ✔ Active Project: nutritrack-app-prod
Registrar apps (Web, iOS, Android)
Crear app ID para cada plataforma y obtener config SDK
Completado
terminal — bash — registrar apps
# App Web (React dashboard) $ npx -y firebase-tools@latest apps:create web nutritrack-web --project nutritrack-app-prod ✔ App registered: 1:847239016582:web:a3f8e2c1d4b09e7f # App iOS (React Native) $ npx -y firebase-tools@latest apps:create ios nutritrack-ios --bundle-id io.nutritrack.app --project nutritrack-app-prod ✔ App registered: 1:847239016582:ios:c9a1f3e0b2d47891 # App Android (React Native) $ npx -y firebase-tools@latest apps:create android nutritrack-android --package-name io.nutritrack.app --project nutritrack-app-prod ✔ App registered: 1:847239016582:android:e7b3d9f2a1c08463
Descargar config movil sin consola
terminal — descargar archivos de configuracion
# google-services.json para Android $ npx -y firebase-tools@latest apps:sdkconfig ANDROID 1:847239016582:android:e7b3d9f2a1c08463 --project nutritrack-app-prod --out android/app/google-services.json ✔ Config written to android/app/google-services.json # GoogleService-Info.plist para iOS $ npx -y firebase-tools@latest apps:sdkconfig IOS 1:847239016582:ios:c9a1f3e0b2d47891 --project nutritrack-app-prod --out ios/NutriTrack/GoogleService-Info.plist ✔ Config written to ios/NutriTrack/GoogleService-Info.plist
Importante: Nunca pedir al usuario que descargue estos archivos desde la consola manualmente. La CLI los genera directamente con apps:sdkconfig.
Inicializar servicios Firebase
Firestore, Auth, Functions (Node 20), Hosting
Completado
Servicios seleccionados para NutriTrack:
🗄
Firestore
DB pacientes + planes
🔐
Authentication
Email/Password + Google
Functions
Node 20 · europe-west1
🌐
Hosting
Dashboard web React
📦
Storage
Fotos progreso (v2)
📊
Analytics
Movil (v2)
terminal — firebase init
$ npx -y firebase-tools@latest init ? Which Firebase features do you want to set up? ◉ Firestore: Configure security rules and indexes files ◉ Functions: Configure a Cloud Functions directory ◉ Hosting: Configure files for Firebase Hosting ? Please select an option: Use an existing project ? Select a default Firebase project: nutritrack-app-prod ✔ Firebase initialization complete!
5
Archivo firebase.ts — SDK Web listo
Inicializacion modular con todos los servicios configurados
Resultado final
src/lib/firebase.ts TypeScript
// NutriTrack — Firebase SDK Web (modular API) // Generado por CULTIVA IA · firebase-fundamentos-configuracion // npx -y firebase-tools@latest apps:sdkconfig WEB 1:847239016582:web:a3f8e2c1d4b09e7f import { initializeApp, FirebaseApp } from "firebase/app"; import { getAuth, Auth } from "firebase/auth"; import { getFirestore, Firestore } from "firebase/firestore"; import { getFunctions, Functions } from "firebase/functions"; import { getPerformance } from "firebase/performance"; // Config obtenida via CLI — NO descargar manualmente desde consola const firebaseConfig = { apiKey: "AIzaSyBxQ7mKrN4p2tDvU9sE1fLhA8wCjMoYkZc", authDomain: "nutritrack-app-prod.firebaseapp.com", projectId: "nutritrack-app-prod", storageBucket: "nutritrack-app-prod.firebasestorage.app", messagingSenderId: "847239016582", appId: "1:847239016582:web:a3f8e2c1d4b09e7f", measurementId: "G-K8P3N2Q7RT" }; // Inicializacion singleton — evitar doble init en HMR (Vite dev) const app: FirebaseApp = initializeApp(firebaseConfig); // Servicios exportados export const auth: Auth = getAuth(app); export const db: Firestore = getFirestore(app); export const functions: Functions = getFunctions(app, "europe-west1"); // Performance solo en cliente (no SSR) if (typeof window !== "undefined") { getPerformance(app); } export default app;
src/services/patients.ts TypeScript — ejemplo uso Firestore
import { collection, getDocs, addDoc, query, where, Timestamp } from "firebase/firestore"; import { db, auth } from "../lib/firebase"; interface Patient { name: string; email: string; nutriId: string; // uid del nutricionista createdAt: Timestamp; } /** Obtiene pacientes del nutricionista autenticado */ export async function getMyPatients(): Promise<Patient[]> { const uid = auth.currentUser?.uid; if (!uid) throw new Error("No autenticado"); const q = query( collection(db, "patients"), where("nutriId", "==", uid) ); const snap = await getDocs(q); return snap.docs.map(d => ({ id: d.id, ...d.data() } as Patient & { id: string })); }
Estructura de archivos generada
Archivos creados por la CLI e inicializacion
Completado
nutritrack/ ├── .firebaserc ← generado (proyecto activo) ├── firebase.json ← generado (hosting, functions config) ├── firestore.rules ← generado (reglas seguridad) ├── firestore.indexes.json ← generado (indices) ├── functions/ │ ├── package.json ← generado (Node 20) │ └── src/index.ts ← entry de Cloud Functions ├── src/ │ ├── lib/firebase.ts ← nuevo (SDK init) ✦ │ └── services/patients.ts ← nuevo (ejemplo Firestore) ├── android/app/ │ └── google-services.json ← descargado via CLI ✦ └── ios/NutriTrack/ └── GoogleService-Info.plist ← descargado via CLI ✦
✦ generado sin abrir consola Firebase verde = nuevo / editado manualmente