Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Forja OS — optimizador de costos, cortes y proyectos.
Translation pending
BusinessTypeScript · PLpgSQLGitHub @keyronagainOnlineOwner 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 ↗PWA (Progressive Web App) para la gestión de un taller de herrería, optimizada para tablets y celulares. Los datos viven en Supabase y se leen y escriben en tiempo real; requiere conexión y sesión iniciada.
postgres_changes) como única fuente de datosmanifest.ts + public/sw.js. El Service Worker solo purga caches antiguos; no hay estrategia de caché ni modo offline.src/
├── app/ # Rutas App Router + manifest.ts (PWA)
├── components/
│ ├── ui/ # Primitivos (Button, Input, Modal, Card, Table, Badge…)
│ ├── layout/ # AppShell, Header, BottomNav
│ ├── materiales/ # CRUD de materiales
│ ├── calculadora/ # Piezas y visualización de cortes
│ ├── proyectos/ # Lista y detalle de proyectos
│ ├── configuracion/# Cuenta (login), insumos y datos del taller
│ └── cotizaciones/ # Lista y formulario de cotización
├── lib/
│ ├── cutting/ # Algoritmo de corte (First-Fit Decreasing)
│ ├── pricing/ # Motor de cotización
│ ├── pdf/ # Generación PDF (jsPDF + autotable)
│ ├── whatsapp/ # Compartir por WhatsApp (Web Share + wa.me)
│ ├── supabase/ # Cliente Supabase (singleton)
│ └── utils/ # cn, id, format, imagen…
├── types/ # Interfaces de dominio
├── constants/ # Defaults y presets
├── hooks/ # useMateriales, useProyectos, useCotizaciones, useConfig, useSync (solo auth)
├── stores/ # Zustand (estado de UI)
└── data/ # seed.ts: catálogo inicial
supabase/migrations/ # Esquema SQL
npm install
npm run dev # desarrollo
npm run build # build de producción
npm run lint # lint
npx tsc --noEmit # verificación de tipos
supabase/migrations/0002_direct_tables.sql en el SQL Editor. Crea las tablas materiales, proyectos, cotizaciones y configuracion, con RLS para que cada usuario solo acceda a sus filas (user_id). Las columnas están en camelCase entre comillas para coincidir 1:1 con los tipos TypeScript..env.local para desarrollo y en los ajustes del proyecto en Vercel para producción):
NEXT_PUBLIC_SUPABASE_URL (ej. https://xxx.supabase.co)NEXT_PUBLIC_SUPABASE_ANON_KEYAl primer login, si las tablas están vacías, los hooks insertan automáticamente los datos por defecto de src/data/seed.ts. Todos los hooks leen y escriben directo en Supabase y se actualizan en vivo mediante Realtime.
supabase/migrations/0001_init.sqles la migración histórica (tabla genéricasync_rowsdel esquema offline-first anterior), reemplazada por0002. No es necesaria en instalaciones nuevas.
| Fase | Entregable | Estado |
|---|---|---|
| 1 | Scaffold, PWA, UI base | ✅ |
| 2 | CRUD de materiales | ✅ |
| 3 | Calculadora Cutting Stock 1D + proyectos | ✅ |
| 4 | Motor de cotización + configuración | ✅ |
| 5 | PDF cliente/taller + WhatsApp | ✅ |
| 6 | Refactor a Supabase directo (sin Dexie ni sync-engine) | ✅ |
| 7 | Soporte multimaterial por proyecto y logo del taller | ✅ |