Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Lightweight CRM for Piano Technicians, and customer booking flow
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A modern booking and management system for piano technicians and their customers.
Sonata CRM is a multi-tenant Next.js application. Technicians sign up, manage customers, pianos, appointments, availability and service types, and customers book online. The Express API and Railway deployment were retired in the 2026 overhaul — Next.js route handlers + Prisma are the whole backend.
apps/web/components/ui), Lucide icons,
Sonner toasts, scoped liquid-glass chrome (auth / marketing / modals)supabase/cutover.md)DESIGN.md is the canonical design system: tokens, the
glass-vs-solid surface rules, the component catalog, and conventions for
auth/forms/tables. Read it before building UI — implementations live in
apps/web/components/ui, apps/web/components/auth, and
packages/tailwind-config/shared-styles.css.
sonata-crm/
├── apps/
│ └── web/ # Next.js app: pages, app/api route handlers, prisma/
├── packages/ # Shared tailwind / typescript / eslint configs
├── supabase/ # RLS policies + production cutover checklist
└── backups/ # Local pg_dump backups (gitignored)
make install
cp apps/web/.env.example apps/web/.env # then fill in DATABASE_URL + AUTH_SECRET
make migrate # apply migrations
make seed # seed sample technicians/customers (bcrypt-hashed passwords)
Seed password defaults to Sonata-Dev-2026! (override with
SEED_TECH_PASSWORD). Seeded accounts: [email protected],
[email protected], [email protected].
make dev # http://localhost:3001
Log in at http://localhost:3001/tech/login with a seeded account, or create a
new tenant at /tech/sign-up.
make install / generate / seed / dev / migrate / reset
cd apps/web
yarn lint # ESLint (warnings ratcheted, see eslint config)
yarn check-types # tsc --noEmit
yarn test # Vitest: session tokens + tenant-isolation (needs DATABASE_URL)
yarn test:e2e # Playwright: login, sign-up, dashboard guard, booking page
yarn build # production build (type + lint gates enforced)
apps/web/middleware.ts (Supabase session refresh, or
local session cookie presence) + server-side checks in every route handler.apps/web/lib/tenant-isolation.test.ts and the API itself).supabase/cutover.md.
Setting NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_ANON_KEY
switches the app to Supabase Auth automatically.npx prisma migrate deploy against it.DATABASE_URL (pooled), AUTH_SECRET,
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY, and optionally Cloudinary keys for piano photos.MIT