Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证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.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 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.