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