Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.