Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Time clock, scheduling and Philippine payroll for small businesses: a multi-tenant SaaS installable as a phone app (PWA).
Next.js 16 (App Router) · React 19 · TypeScript · Prisma 7 + PostgreSQL 16 · Better Auth · Tailwind CSS 4 · Vitest · Playwright
cp .env.example .env # then edit DATABASE_URL and the secrets
pnpm install
pnpm db:migrate # create tables
pnpm db:seed # statutory tables, PH holidays, demo company
pnpm dev # http://localhost:3000
Demo logins (password demo12345): [email protected] (owner), [email protected] (manager), [email protected] (employee). Demo company code: DEMO2026. Kiosk PINs are 1001–1007 in team order (Maria = 1001, Ana = 1003).
pnpm demo:enterprise # "Demo Logistics Corp": 4 regions, terminals, 24h guards, drivers, a full cutoff
pnpm report:sample # writes docs/samples/clocktime-cutoff-report-sample.xlsx (+ CSVs)
Sign in as [email protected], timekeeper@…, supervisor.cebu@… or owner@… (password demo12345).
ZKTeco-style terminals with ADMS (cloud push) send punches to /iclock/cdata. Add each terminal under Settings → Terminals by serial number, then on the terminal set Cloud Server to your domain, port 443, HTTPS. Staff names and RFID cards sync to the terminals; fingerprint templates stay on the device. Terminals that can't connect can upload a USB attlog.dat or CSV export on the same page, and other systems can post logs to POST /api/v1/attendance-logs. Test without hardware: pnpm adms:sim --sn <serial>.
Some older firmware only speaks plain HTTP, and Vercel serves HTTPS only; test one real unit before rollout, and use a small HTTP→HTTPS relay if needed.
| Command | What it does |
|---|---|
pnpm dev | Dev server |
pnpm build && pnpm start | Production build and server |
pnpm lint / pnpm typecheck | ESLint / TypeScript |
pnpm test | Unit + integration tests (Vitest, needs Postgres) |
pnpm test:e2e | End-to-end tests (Playwright, builds must exist) |
pnpm db:migrate / db:seed / db:reset | Database |
src/app/ routes: (auth), onboarding, app/ (managers), me/ (employees), kiosk/, admin/, api/
src/server/ server-only code: db, auth, tenant scoping, context, audit, services/
src/lib/ shared logic: time zones, pay engine (lib/pay), geo, validation, entitlements
src/config/plans.ts plan prices, limits and feature flags
prisma/ schema, migrations, seed
tests/ unit, integration, e2e
Every tenant row has companyId. Server code reads and writes through ctx.db (src/server/tenant.ts), a Prisma client extension that adds the company filter to every query and sets companyId on every create.
SSS, PhilHealth, Pag-IBIG, BIR withholding and DOLE premium tables live in src/lib/pay/statutory.ts and premiums.ts. They're seeded into the StatutoryTable table with effective dates. Have a Philippine payroll accountant verify them before running live payroll.
DATABASE_URL. Run pnpm db:deploy, then NODE_ENV=production pnpm db:seed, which loads the statutory tables and holidays only..env.example:
APP_URL: your domain, e.g. https://app.clocktime.phBETTER_AUTH_SECRET, DATA_ENCRYPTION_KEY: generate each with openssl rand -base64 32. Never change the encryption key after launch; encrypted IDs depend on it.CRON_SECRET: Vercel Cron sends it automatically. vercel.json schedules the jobs. Jobs that run every 15 minutes (exceptions, auto clock-out, reminders) need Vercel Pro; on Hobby, change them to daily.SUPER_ADMIN_EMAILS: your own email, which unlocks /admin.EMAIL_PROVIDER=resend, RESEND_API_KEY and EMAIL_FROM (a verified domain).STORAGE_PROVIDER=s3 plus the S3_* variables (Cloudflare R2 works).pnpm dlx web-push generate-vapid-keys, then set NEXT_PUBLIC_VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY.PAYMONGO_SECRET_KEY and PAYMONGO_PUBLIC_KEY.checkout_session.payment.paid pointing to https://<domain>/api/webhooks/paymongo, and set PAYMONGO_WEBHOOK_SECRET.BILLING_TEST_MODE on a live site./admin/statutory and the holiday list at /admin/holidays.Plans are prepaid monthly or yearly through PayMongo Checkout, which takes GCash, Maya, GrabPay or card. Renewal reminders go out 7 days and 1 day before expiry. A lapsed company becomes past due with a 7-day grace period, then drops to Free features; no data is deleted. Super-admins can record bank-transfer payments manually in /admin.
Not yet built: card auto-renewal through the PayMongo Subscriptions API. PayMongo has to enable that API on your account first, and payments in this build are verified only with signed webhook fixtures in tests.