openjutsu
One-click character swap for videos: an open-source, local Higgsfield Genjutsu alternative built on ComfyUI and MiniMax H3, with FLUX.3 Klein relighting.
Obras de teatro, danza, circo e improvisación, con sus artistas, compañías y teatros. Descubre qué hay en cartel y la trayectoria de los profesionales de las artes vivas.
Translation pending
MediaTypeScript · CSSGitHub @battanairOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗La base de datos de las artes escénicas: obras, artistas, compañías y sus vínculos.
ziater2) para los datos.| Objetivo | Cómo se consigue |
|---|---|
| Gratis al empezar | Vercel Hobby + Firebase Spark + Cloudinary Free. Las fichas se sirven desde caché (ISR), así que cada visita no gasta lecturas de Firestore: se regeneran como mucho una vez por hora o al momento cuando alguien las edita. |
| Escalable | Ninguna página lee una colección entera. La portada muestra selecciones (mejor valoradas, recién añadidas, artistas de las obras mejor valoradas). Los listados van paginados de 24 en 24 con cursor. La búsqueda usa prefijos guardados en cada ficha (claves) con una sola consulta por colección. El sitemap se trocea en archivos de 5.000 fichas. Las páginas son estáticas en el CDN. |
| Valoraciones | Notas de 1 a 10 (una por persona y obra) en valoraciones. Cada obra guarda votos, suma_notas, nota (media) y puntuacion (media ponderada, para que una obra con un solo 10 no supere a otra con cien 9). Las reglas comprueban que los contadores cuadran con cada voto. |
| SEO | Cada ficha se genera en el servidor con título, descripción, URL canónica, imagen Open Graph 1200×630 (para WhatsApp, Instagram, X…), datos estructurados schema.org (CreativeWork, Person, PerformingGroup, BreadcrumbList), sitemap.xml con todas las fichas y robots.txt. Las URLs antiguas (/obra/:id, /persona/:id) se mantienen y /todoelequipo/:id redirige con 301. |
| Seguridad | Reglas de Firestore estrictas (firestore.rules), cabeceras HTTP (CSP, HSTS, anti-clickjacking…), secreto de Cloudinary solo en el servidor, tokens verificados en cada ruta /api, reclamación de fichas con revisión manual y sin redirecciones abiertas. |
npm i -g firebase-tools
firebase login
npm run deploy:rules
O copia firestore.rules en la consola de Firebase → Firestore → Reglas → Publicar.
Copia .env.example a .env.local y rellénalo:
CLOUDINARY_API_SECRET es secreto: solo en .env.local y en Vercel, nunca con prefijo NEXT_PUBLIC_.npm install
npm run dev
battanair/newziater..env.example en Settings → Environment Variables.ziater.com.ziater.com a Vercel (Settings → Domains) y retira el hosting antiguo.ziater.com y envía https://ziater.com/sitemap.xml.Añade a las fichas existentes los campos de búsqueda (claves) y la fecha de alta (creado) que usan la portada y el buscador. No borra nada:
npm run migrar # solo muestra cuántas fichas cambiaría
npm run migrar -- --aplicar # guarda los cambios
Después publica los índices con npm run deploy:rules (incluye firestore.indexes.json).
Necesario para aprobar reclamaciones de fichas en /panel/admin y editar fichas antiguas sin dueño:
# Descarga una clave de cuenta de servicio como service-account.json (ver scripts/set-admin.mjs)
npm run admin:set -- [email protected]
| Colección | Uso | Campos nuevos (opcionales) |
|---|---|---|
obra | Fichas de obra | duracion, edad, idioma, id_productora, votos, suma_notas, nota, puntuacion, creado, claves |
persona | Fichas de artista. coincide = uid del artista que la reclamó | roles, ciudad, verificado, destacadas, claves |
persona_obra | Créditos (el vínculo persona ↔ obra) | estado (pendiente/confirmado), creado_por |
premios_obras | Premios | — |
productoras | Compañías | — |
users | Cuenta privada: favoritos_obra («Quiero verla»), vistas («La he visto») | — |
fallos | Mensajes del formulario de contacto (privado) | — |
reclamaciones | Nueva. Solicitudes para reclamar una ficha | — |
valoraciones | Nueva. Nota de cada persona a cada obra ({obra}_{uid}) | — |
Los créditos antiguos no tienen estado y se muestran como confirmados.
Cualquier persona con cuenta (email y contraseña o Google) tiene su espacio en /panel:
| Sección | Qué muestra | De dónde sale |
|---|---|---|
| Resumen | Cifras, últimas notas, «quiero ver» y acceso a la ficha de artista | todo lo de abajo |
| Mis listas → Mis notas | Sus notas del 1 al 10, paginadas | valoraciones (uid) |
| Mis listas → Vistas | Obras que ha visto (puntuar una obra la añade sola) | users.vistas |
| Mis listas → Quiero ver | Obras guardadas | users.favoritos_obra |
| Mis listas → Artistas que sigo | Botón «Seguir» de cada ficha de artista | users.favoritos_persona |
| Aportaciones | Obras creadas, créditos añadidos y fichas creadas para otras personas | obra.creacion, persona_obra.creado_por, persona.creacion |
| Ficha de artista / Vínculos | Solo para profesionales | persona, persona_obra |
| Cuenta | Nombre, email, cambiar contraseña, cerrar sesión y eliminar la cuenta | Firebase Auth + users |
Las listas usan los mismos campos que la web anterior, así que cada usuario conserva lo que ya tenía. Las URLs antiguas /dashboard, /dashboard/editar y /dashboard/cuenta redirigen a las nuevas.
pendiente y la persona lo confirma en Panel → Vínculos.