Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证SaaS Web/PWA para la gestión operativa, financiera y de convivencia en pequeñas y medianas copropiedades (Propiedad Horizontal bajo Ley 675 de Colombia). Desarrollado para el curso ISIS2007 (UniAndes) con Next.js, TypeScript, Tailwind CSS, Prisma, Supabase y Vercel.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Tablero operativo de una copropiedad. El administrador entiende la cartera por torre y apartamento, gestiona el cobro y aplica reglas claras a las reservas de zonas comunes. Rentu ya no es un marketplace de arriendos. La ruta /propiedades, los componentes de catálogo y el lenguaje de canon/publicación se retiraron del producto. Los campos de arriendo siguen en prisma/schema.prisma marcados como deprecados para no hacer una migración destructiva, pero ninguna pantalla, Server Action ni el seed los leen o escriben.查看完整 README ↗
Tablero operativo de una copropiedad. El administrador entiende la cartera por torre y apartamento, gestiona el cobro y aplica reglas claras a las reservas de zonas comunes.
Rentu ya no es un marketplace de arriendos. La ruta /propiedades, los
componentes de catálogo y el lenguaje de canon/publicación se retiraron del
producto. Los campos de arriendo siguen en prisma/schema.prisma marcados como
deprecados para no hacer una migración destructiva, pero ninguna pantalla,
Server Action ni el seed los leen o escriben.
Next.js 16 (App Router) · React 19 · TypeScript · Tailwind CSS 4 · Prisma 6 +
PostgreSQL (pgvector) · Supabase Auth · Gemini + embeddings locales para el
Copiloto RAG · pnpm.
pnpm install
cp .env.example .env # y completar credenciales
pnpm db:push # aplica el schema (no hay migraciones versionadas)
pnpm db:seed # siembra la demo (datos ficticios)
pnpm provision:auth # crea los logins de la demo en Supabase Auth
pnpm dev
Para volver a sembrar la cartera desde cero (borra cuentas, pagos, gestiones, avisos, reservas, PQRS y órdenes de la copropiedad demo; conserva unidades y residentes):
SEED_RESET=1 pnpm db:seed
Una sola copropiedad ficticia: Conjunto Residencial Altos de Salitre, 3 torres, 24 apartamentos, 6 periodos de cuentas de cobro con comportamiento de pago variado, 14 residentes, 4 zonas comunes, 5 PQRS, 5 prestadores y órdenes de servicio.
Contraseña de todas las cuentas demo: la que definas en SEED_DEFAULT_PASSWORD (.env, ver .env.example).
| Rol | Correo | Para ver |
|---|---|---|
| Administrador | [email protected] | Todo el tablero |
| Residente con cuotas vencidas | [email protected] | Reserva bloqueada y explicada |
| Residente a paz y salvo | [email protected] | Reserva habilitada |
Ningún dato del seed proviene de una copropiedad real: nombres, NIT, direcciones, apartamentos y montos son inventados.
/dashboard — cartera total, vencida, facturado y recaudo del mes, cartera
por antigüedad y distribución por torre. La Torre C concentra ~64% de la
cartera./dashboard/cartera — filtra por torre o situación y abre Apto C201:
estado de cuenta cuota por cuota, residentes, bitácora de gestión y avisos.[email protected] a /portal/reservas: el bloqueo por
cartera vencida aparece explicado, con el camino de salida./dashboard/pqrs — responde una PQRS y, si es de mantenimiento, escálala a
una orden de servicio para un prestador.El producto marca en la interfaz lo que no está integrado. No se afirma que algo funcione si no funciona.
| Funcionalidad | Estado |
|---|---|
| Cartera, pagos, abonos, saldos, antigüedad | Real, calculado sobre la base |
| Bitácora de gestión y etapas de cobro | Real |
| Bloqueo de reservas por cartera vencida | Real, validado en el servidor al radicar y al confirmar |
| PQRS y órdenes de servicio | Real |
| Importación de unidades desde CSV | Real: valida fila por fila, muestra vista previa y solo escribe al confirmar |
| Copiloto sobre documentos | Real (embeddings locales + Gemini), requiere GEMINI_API_KEY |
| Envío de avisos de cobro | Simulado. Se redacta y se archiva en el historial; no sale por correo ni WhatsApp. La UI lo declara. |
| Contraseña temporal de un residente invitado | Simulada. No hay proveedor de correo: se muestra una vez y la comparte el administrador. |
| Recargos de mora | No hay job automático. En la demo los siembra el seed; en la app se crean a mano. |
Fuera de alcance, por decisión: contabilidad NIIF/DIAN, facturación electrónica, pagos bancarios, conciliación, nómina, firma de contratos y gestión judicial. Las etapas prejurídico y jurídico son clasificaciones de seguimiento que mueve el administrador; no inician ningún proceso ni son asesoría legal. Una PQRS nunca se convierte automáticamente en orden de servicio ni en multa.
pnpm lint
pnpm build
pnpm verify:demo # agregados de cartera y reglas de negocio, contra la base
pnpm start # en otra terminal
BASE=http://localhost:3000 pnpm verify:rutas # cada página protegida con sesión real
verify:rutas deja 1 ruta "en rojo" a propósito: un residente que entra a
/dashboard debe ser redirigido a /portal.
getCopropiedadActiva resuelve sobre qué
copropiedad se opera a partir de la sesión. Ninguna Server Action acepta un
copropiedadId que venga del formulario.findMany y se agrega en memoria: una PH pequeña o mediana son decenas de
unidades, y evitar 4–5 round-trips por pantalla importa más en serverless./dashboard/[section] agrupa cartera,
reservas, PQRS, residentes, prestadores y documentos para no pasarse del
límite de 12 funciones serverless del plan Hobby de Vercel.framer-motion (el JS del cliente
bajó de 407 KB a 373 KB gzip), junto con los backdrop-blur en headers
sticky, los blur-3xl decorativos, los transition-all con hover:scale y
las animaciones animate-pulse infinitas. Las animaciones que quedan son CSS
sobre opacity/transform y respetan prefers-reduced-motion.us-east-1 cada ida y vuelta a Postgres cuesta 85–180 ms. Tres causas y sus
arreglos, todos medidos:
pgbouncer=true (puerto 6543) Prisma
desactiva los prepared statements y envuelve cada consulta en
BEGIN / DEALLOCATE ALL / SELECT / COMMIT: 4 viajes donde debería haber 1.
DATABASE_URL pasó al puerto 5432 (modo sesión): una consulta simple pasó
de 447 ms a 119 ms.relationLoadStrategy: "join" (preview relationJoins) es una sola con
LATERAL JOINs: 549 ms → 104 ms, mediana de 5 corridas alternadas. Se
aplicó a todas las lecturas con relaciones.getCopropiedadActiva hacía tres consultas
(buscar + contar + agrupar por torre); ahora es una y los totales se
calculan en memoria. El middleware ya no llama a (~170 ms de
red) en rutas públicas.getUser()loading.tsx). Sin ellos, al hacer clic en una sección
el navegador se quedaba en la pantalla anterior hasta que el servidor
terminaba: parecía que el clic no había hecho nada. Efecto secundario
aceptado: una URL de sección inexistente responde 200 en vez de 404, porque
las cabeceras ya salieron cuando la página llama a notFound() — la persona
igual ve la página de "no encontrado".dark: se ató a la clase .dark
(@custom-variant en globals.css) en vez de a prefers-color-scheme:
el dashboard tenía variantes oscuras y el portal no, así que un visitante con
el sistema en oscuro veía media app ilegible.