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
Inventario de madera del taller
Translation pending
BusinessTypeScript · CSSGitHub @julioservanOnlineOwner 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
Woodbase is a personal web app to manage my woodworking shop inventory. I log each piece with photo, dimensions, location, notes and tags, powered by AI to suggest the wood species from an image.
Taken from the repository README
Loading the full README.
Read the full README ↗Inventario personal de madera para el taller. Registra tablones y piezas con su foto, dimensiones, estado de secado y ubicación — e identifica la especie a partir de una foto con la IA de Claude.
Stack: Next.js (App Router, TypeScript) · Neon (Postgres) · Drizzle ORM · Vercel Blob · API de Claude (visión) · Tailwind CSS + componentes estilo shadcn/ui.
3/4, 1 1/2 —, cantidad, ubicación, etiquetas, notas)/compras): historial de pedidos a Cook Woods con fotos, precios, envíos y gasto total. Los datos viven en src/lib/purchases.ts y las fotos en public/compras/ALLOWED_EMAILS)npm install
cp .env.example .env
postgresql://usuario:contraseñ[email protected]/neondb?sslmode=require)..env como DATABASE_URL.npm run db:migrate
Esto crea la tabla wood_items (y el enum moisture_state) a partir de las migraciones en drizzle/. Si cambias el schema (src/lib/db/schema.ts), genera una nueva migración con npm run db:generate y vuelve a ejecutar npm run db:migrate.
npm run db:seed
Inserta 4 piezas de ejemplo (roble, nogal, pino y haya) para ver la app funcionando desde el primer momento. No hace nada si la tabla ya tiene datos.
BLOB_READ_WRITE_TOKEN (en "Settings" del store, o en .env.local que Vercel genera) y ponlo en tu .env.En producción, al conectar el store Blob al proyecto de Vercel, la variable se inyecta automáticamente.
.env como ANTHROPIC_API_KEY. La identificación usa un modelo con visión (claude-opus-4-8); la llamada se hace siempre desde el servidor.Para entrar se pide un email y llega un código de 6 cifras (válido 10 minutos, 5 intentos, uno nuevo como mucho por minuto). Define en .env:
ALLOWED_EMAILS: los emails que pueden entrar, separados por comas.RESEND_API_KEY: crea una cuenta en resend.com y una API key. Con el remitente por defecto ([email protected]) Resend solo entrega al email con el que abriste la cuenta; para otros destinatarios, verifica un dominio y pon EMAIL_FROM.AUTH_SECRET: un secreto largo y aleatorio (openssl rand -hex 32). Si falta, se usa APP_PASSWORD como secreto.La tabla login_codes se crea sola la primera vez que se pide un código (también está en drizzle/0009_login_codes.sql). Las páginas se pueden ver sin sesión; el middleware exige una cookie de sesión válida para cualquier escritura (server actions y /api/*, que van por POST) y para las páginas de edición (/items/new, …/edit, /projects/new, la Mesa de trabajo).
npm run dev
Abre http://localhost:3000, introduce tu contraseña y listo.
DATABASE_URL, BLOB_READ_WRITE_TOKEN, ANTHROPIC_API_KEY, AUTH_SECRET, ALLOWED_EMAILS, RESEND_API_KEY) en Settings → Environment Variables (el token de Blob se añade solo al conectar el store).npm run db:migrate apuntando a la DATABASE_URL de producción.src/
app/
page.tsx # Listado + buscador + filtros
login/page.tsx # Login en dos pasos: email → código
items/
actions.ts # Server actions: crear / editar / borrar
new/page.tsx # Alta de pieza
[id]/page.tsx # Detalle
[id]/edit/page.tsx # Edición
api/
upload/route.ts # Subida de fotos a Vercel Blob (server-side)
identify/route.ts # Identificación de especie con Claude (visión)
components/ # UI estilo shadcn + formulario de pieza
lib/
db/schema.ts # Schema Drizzle (wood_items)
db/index.ts # Cliente Neon + Drizzle
auth.ts # Sesión firmada con AUTH_SECRET
login-codes.ts # Códigos de acceso: generar, guardar (hash) y verificar
email.ts # Envío del código con Resend
session.ts # canEdit(): muestra u oculta los controles de edición
middleware.ts # Exige sesión para escribir y para las páginas de edición
drizzle/ # Migraciones SQL generadas
scripts/seed.ts # Datos de ejemplo
El schema está pensado para crecer: projects y tools se añadirán como tablas nuevas en src/lib/db/schema.ts sin tocar wood_items.