El directorio y el admin pueden compartir el mismo catálogo en la nube. Sin Firebase, todo sigue en el navegador (localStorage).
zonqr-guasave).En Netlify → Site configuration → Environment variables crea:
FIREBASE_API_KEY, FIREBASE_AUTH_DOMAIN, FIREBASE_PROJECT_ID,
FIREBASE_STORAGE_BUCKET, FIREBASE_MESSAGING_SENDER_ID, FIREBASE_APP_ID
(ver .env.example). El build genera js/firebase-config.js. Sin variables, Firebase queda apagado.
admins con un documento cuyo ID sea ese UID (puede ir vacío).firebase deploy --only firestore:rules,storage (o pega firestore.rules y storage.rules en la consola).Catálogo: lectura pública, escritura solo admin. Escaneos de QR: cualquiera puede registrar uno, solo admin los lee.
zonqr / {catalogId} → zona + categorías
zonqr / {catalogId} / businesses / {id}
zonqr / {catalogId} / scans / {auto} → escaneos de QR (solo admin lee)
admins / {uid} → quién es admin
Storage: zonqr/{catalogId}/photos/…
Publica el sitio en Netlify como siempre. Las claves web de Firebase van en variables de entorno de Netlify (no son secretas como una service account; la seguridad está en las reglas. Restringe el dominio de la API key en Google Cloud si puedes).