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.