Plataforma de Gobernanza Inteligente para Administración de Fincas
Ecosistema SaaS B2B multi-inquilino para despachos que gestionan comunidades de propietarios bajo la Ley de Propiedad Horizontal (LPH).
VotifAI transforma la gestión de juntas de propietarios en un proceso digital, y añade encima el resto de lo que necesita un despacho de administración de fincas: incidencias, cuotas, documentos, reservas de zonas comunes, atención al cliente, agenda y contabilidad simple — todo bajo el mismo inquilino (tenant) por despacho.
- 🎙️ Manos Alzadas y Transcripción Real: cada propietario se registra con una cuenta propia (email + contraseña, verificada con el código de acceso de su finca) y graba sus intervenciones desde su propio móvil. La atribución de autoría es exacta — no hay diarización por IA sobre un micrófono de sala, cada persona ya está identificada en su dispositivo. El audio se transcribe con la API de OpenAI y aparece en vivo en el panel del secretario.
- 📊 Escrutinio por Coeficientes: control en tiempo real de cuórum por cabezas y por cuota de participación durante la votación.
- 🔒 Sellado de Actas: el acta final se archiva de forma inmutable al clausurar la junta.
Una vez dentro de una finca, además de "Junta en Vivo":
| Módulo | Qué hace |
|---|---|
| Incidencias | Partes de avería con timeline de estado y catálogo de proveedores del despacho |
| Cuotas | Cuotas y pagos, con morosidad real sobre el censo de propietarios |
| Documentos | Repositorio de documentos, comunicados, y un editor de texto con plantillas reutilizables |
| Reservas | Reserva de zonas comunes con validación de solape de horarios en el servidor |
| Atención al Cliente | Solicitudes de propietarios al despacho (consultas, reclamaciones...), con timeline |
| Agenda | Calendario único del despacho (no por finca), para juntas y vencimientos de toda la cartera |
| Contabilidad | Ingresos/gastos, presupuestos (previsto vs. ejecutado) y liquidaciones cerradas por periodo |
- Frontend (React + Tailwind v4 + Framer Motion): interfaz oscura con tablas de datos en modo "papel" (fondo blanco) para legibilidad; primitivos de UI compartidos en
src/components/ui/. - Gestor de Estado (Context + useReducer en
src/store.jsx): flujo de datos centralizado en la raíz para la sesión del despacho. - Backend (Node.js + Express): API en
server/, con un router por módulo enserver/routes/montado bajo/api. - Base de Datos (PostgreSQL / Neon): identificadores
UUID, migraciones versionadas enserver/migrations/(pnpm run migrate), aislamiento estricto portenant_idverificado en cada endpoint.
| Despacho (administrador) | Vecino (propietario) | |
|---|---|---|
| Credenciales | Email + contraseña | Email + contraseña |
| Verificación inicial | Registro directo (/register) |
Código de acceso de su finca (entities.codigo_acceso, generado al crear la finca) |
| Cookie de sesión | votifai_session (7 días) |
votifai_voter_session (180 días) |
| Alcance | Todas las fincas de su despacho | Solo su propia finca |
Ambas sesiones tienen recuperación de contraseña por email (/olvide-password/despacho y /olvide-password/comunidad), enviada a través del mismo webhook de n8n que las notificaciones (ver más abajo).
Las convocatorias, los reenvíos de acta y la recuperación de contraseña se envían a través de un único webhook de n8n (server/lib/notificaciones.js), configurable con N8N_WEBHOOK_URL. Es el flujo de n8n quien decide el canal por destinatario según tenga teléfono, email o ambos. Sin esa variable, el envío se simula con un console.log (útil en desarrollo).
Crea una base de datos y copia .env.example a server/.env, rellenando DATABASE_URL, JWT_SECRET y (opcional, para la transcripción de voz) OPENAI_API_KEY.
cd server
pnpm install
pnpm run migrate # aplica todas las migraciones versionadas
node index.jspnpm install
pnpm run dev --forceEl repositorio contiene render.yaml para que Render instale las dependencias
del frontend y del backend antes de compilar. Si el servicio ya existe y no usa
Blueprints, configura manualmente:
Build Command: pnpm install --frozen-lockfile && pnpm install --dir server --frozen-lockfile && pnpm build
Start Command: node server/index.js
En Render configura como mínimo DATABASE_URL, JWT_SECRET y CORS_ORIGIN.
Cada consulta que toca datos de una finca o de un propietario verifica explícitamente que esa fila pertenece al tenant autenticado (server/middleware/auth.js) antes de leer o escribir — sin excepciones por conveniencia. El histórico de cambios de titularidad, las actas y las liquidaciones cerradas son inmutables una vez generadas.
VotifAI © 2026 — Gobernanza de comunidades con IA