Survival LLM
A free AI assistant and survival library (1.5 million offline articles) that runs on your own computer, with no internet. Shows the source of every answer. Mac and Windows.
Fecha, hora, lugar y novedades.
Translation pending
OtherJavaScript · PLpgSQLGitHub @espectante73OnlineOwner 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
Loading the full README. The saved excerpt is shown below.
Aplicación para gestionar invitados, colaboradores, mesas y pagos de un evento (pensada originalmente para una boda, pero reutilizable para futuros eventos). Empezó como un boceto ("Artifact") en Claude.ai y ahora es una web real: Vite + React, con Supabase (Postgres + Auth) como base de datos compartida entre el anfitrión y sus colaboradores, desplegada en Vercel, con avisos automáticos por email vía Resend.Read the full README ↗
Aplicación para gestionar invitados, colaboradores, mesas y pagos de un evento (pensada originalmente para una boda, pero reutilizable para futuros eventos). Empezó como un boceto ("Artifact") en Claude.ai y ahora es una web real: Vite + React, con Supabase (Postgres + Auth) como base de datos compartida entre el anfitrión y sus colaboradores, desplegada en Vercel, con avisos automáticos por email vía Resend.
Este README cubre cómo poner en marcha el proyecto y cómo está organizado. El historial de decisiones, bugs ya resueltos y gotchas conocidos vive en
CLAUDE.md— consúltalo antes de tocar nada que suene a "esto ya se intentó una vez".
src/App.jsx — cascarón: decide qué rol/vista mostrar y reparte lo que de
verdad comparten dos o más ventanas (asignar colaborador, panel
flotante activo, filtros, motor de invitaciones).useLedgerData.js — toda la carga y guardado de datos contra Supabase
(RPCs), un persistX/acción por tabla o gesto.vistas/ — VistaLogin.jsx, VistaAnfitrion.jsx, VistaColaborador.jsx,
y dentro de vistas/anfitrion/ cada ventana flotante del anfitrión en
su propio fichero (Colaboradores, Mesas, Cuentas, Avisos, Invitaciones,
Configuración, Versiones...).components/ — piezas de presentación reutilizadas por más de una
vista (ColaboradorCard, MiCuenta, VentanaFlotante/ModalFlotante,
Portada, etc.).lib/ — funciones puras (formato, validación, cálculos sobre
invitados) con sus tests co-localizados (*.test.js).theme.js / constants.js — paleta de colores compartida y
VERSION_APP.npm install
.env.example a .env y rellena los dos valores con los de tu
proyecto de Supabase (Project Settings → API):
cp .env.example .env
npm run dev
npm run lint # detecta al instante variables no importadas (no-undef)
npm run build # detecta imports de módulo equivocado que el lint no ve
npm test # funciones puras de lib/ — puede no arrancar en algunos Mac,
# ver "Vitest no arranca" en CLAUDE.md; lint+build ya cubren
# la mayoría de fallos reales del día a día.
supabase/schema.sql.
Es re-ejecutable de forma segura (usa if not exists/create or replace en todo), así que también es el mismo archivo que se vuelve
a pegar cuando se le añade algo nuevo.anon public (Project Settings
→ API) a tu .env local. Nunca uses ni compartas la clave
service_role — esa da acceso total sin restricciones.https://tu-dominio.com) — los enlaces de
confirmación/recuperación de email de Supabase apuntan ahí..env como VITE_TURNSTILE_SITE_KEY — ver .env.example). Sitio
nuevo gratis en
dash.cloudflare.com → Turnstile.config_secretos
(usada por la función SQL enviar_email para mandar los avisos
automáticos) — ver supabase/schema.sql para el nombre exacto de la
fila esperada..env local (VITE_SUPABASE_URL,
VITE_SUPABASE_ANON_KEY).git push a main despliega una versión nueva automáticamente.Login real (email + contraseña, Supabase Auth) para el anfitrión y para cada colaborador:
vincular_cuenta_nueva) la enlaza sola comparando ese email; si no
coincide con nadie conocido, la cuenta se crea igual pero sin ningún
acceso.colaborador_* filtran siempre por
"authUserId" = auth.uid()), no solo ocultando cosas en pantalla.VITE_TURNSTILE_SITE_KEY configurada no se exige (útil para
desarrollo local).El enlace-token antiguo (?rol=<secreto>) sigue existiendo solo como
plan B para el anfitrión — para colaboradores ya no funciona (retirado
tras confirmarse en pruebas en vivo que seguía dando acceso sin sesión
real). Guarda ese enlace en un sitio privado: quien lo tenga, tiene
acceso total a los datos del evento.
Página de solo lectura, sin login ni cuenta, en ?tablon=<token> —
pensada para compartir UN único enlace en un grupo de WhatsApp "solo
lectura" con los ya confirmados, en vez de saturarlo con avisos largos.
Muestra fecha/hora/lugar fijos arriba y, debajo, las novedades que
escriba el anfitrión (ventana "Novedades"), plegadas por secciones. El
enlace vive en su propio secreto (tablon_secreto, tabla cerrada como
anfitrion_secreto) — nadie sin él lo encuentra, y es el mismo enlace
para todo el grupo (no uno por persona), así que crece solo con el
número de confirmados sin que haga falta repartir enlaces nuevos. El
tablón avisa con un candado de que el enlace es privado y no debe
reenviarse. Un botón "Novedades" en la portada (visible para el
anfitrión y para cada colaborador logueado) lleva directo ahí y permite
volver sin perder la sesión.
Capa extra opcional: una pregunta con respuesta (configurable en Novedades) que hay que responder antes de ver nada del tablón, ni siquiera la fecha del evento — protege de verdad la propia API, no es solo una pantalla decorativa. Cada dispositivo la recuerda tras la primera vez.
Puede sonar música ambiental de fondo mientras el tablón está abierto (Configuración → Fondo musical, sube uno o varios archivos de audio a Supabase Storage). Un botón flotante la activa: los navegadores bloquean el audio automático sin que la persona interactúe antes con la página, así que nunca suena sola de verdad al cargar.
Al pegar cualquier enlace de esta web en WhatsApp/Facebook aparece una
miniatura con imagen (etiquetas og:image estáticas en
index.html — el rastreador no ejecuta React, así que no pueden leer
datos de la base en tiempo real). La imagen se sube en Configuración →
Datos del evento, a un segundo bucket de Storage
(og-imagen, nombre de archivo fijo para que la URL nunca cambie).
Ya en producción, probado en vivo. Vía Resend, disparado desde la
propia base de datos (función SQL enviar_email, llamada
fire-and-forget con pg_net — nunca espera de forma bloqueante la
respuesta HTTP, ver el porqué en CLAUDE.md):
Backup diario vía GitHub Actions
(.github/workflows/backup.yml),
también lanzable a mano desde la pestaña Actions. El volcado se guarda
como artifact de la ejecución (90 días), nunca commiteado al
repositorio (los datos de config_secretos/anfitrion_secreto se
excluyen del volcado a propósito). Requiere el secreto de repositorio
SUPABASE_DB_URL (cadena de conexión "Session pooler" de Supabase).
.github/workflows/pruebas.yml).src/lib/registroErrores.js.CLAUDE.md para el detalle):
Proyecto privado. Todos los derechos reservados: el código se publica para poder enseñarlo, no para reutilizarlo sin permiso.
Confirmado por el autor el 2026-09-20.