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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Indian payroll and HRMS — employee master, attendance and leave, payroll runs
with statutory deductions, income tax, loans and advances, full-and-final
settlement, banking files, and an employee self-service portal.
• Node 20+
• A PostgreSQL database. Render is what these
instructions assume; any managed Postgres works.
db:bootstrap creates the first company and administrator and prints a
generated password once. There is no demo data and no default account.檢視完整 README ↗Indian payroll and HRMS — employee master, attendance and leave, payroll runs with statutory deductions, income tax, loans and advances, full-and-final settlement, banking files, and an employee self-service portal.
npm install
# a local Postgres, e.g. docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=dev postgres:16
export DATABASE_URL="postgresql://postgres:dev@localhost:5432/postgres"
npm run db:push && npm run db:triggers
[email protected] ADMIN_NAME="Your Name" \
COMPANY_NAME="Your Company Private Limited" npm run db:bootstrap
npm run dev
db:bootstrap creates the first company and administrator and prints a
generated password once. There is no demo data and no default account.
Alternatively, visit /signup and register a company through the browser.
Registration is open unless SIGNUP_ENABLED=false is set — switch it off on a
single-company install, where a public page that mints administrators is not
something you want.
Copy .env.example and fill it in. In production DATABASE_URL is required —
the app refuses to open a file-backed database there, because a serverless
filesystem does not survive a redeploy.
| Variable | Purpose |
|---|---|
DATABASE_URL | PostgreSQL connection string. Required everywhere. |
STORAGE_PROVIDER | Set to vercel-blob for this installation. |
BLOB_READ_WRITE_TOKEN | Private Vercel Blob store token, server-side only. |
UPLOAD_ROOT | Development only, when the Blob store is unset. |
SIGNUP_ENABLED | Set to false to close self-serve registration. |
DATABASE_URL. The internal
URL only resolves inside Render's own network.STORAGE_PROVIDER=vercel-blob.
Keep BLOB_READ_WRITE_TOKEN in deployment secrets, never Git or a NEXT_PUBLIC_ variable.
Existing documents in another store must be migrated separately; selecting a
provider does not copy them.npm run db:migrate and npm run db:check
against that deployment's DATABASE_URL. The migration runner also installs
the append-only audit triggers. Do not use db:push for production upgrades./api/health; an administrator should also test upload, authenticated
download and unauthorized access with a disposable document. A configured
token is not proof that the store is reachable or its permissions are correct.DATABASE_URL=… ADMIN_EMAIL=… ADMIN_NAME=… COMPANY_NAME=… npm run db:bootstrapGET /api/health reports which piece is missing — whether the database and
Blob store are configured, whether the database answers, and whether the
schema has been pushed at it. It reports presence, never values.
A 500 on sign-in or registration with pages that otherwise render is almost
always an unset DATABASE_URL: the pages do not touch the database until
something is submitted.
These are deliberate, documented gaps rather than oversights. Read them before putting anyone's payroll in here.
lib/tax/config.ts; those flags are not certification of the whole
payroll workflow. ECR and ESIC return formats remain unverified. State
references, employer facts and filing outputs need independent review.
See PAYROLL-AUDIT-REMEDIATION.md for implemented fixes and remaining gaps.
COMPLIANCE-WORKFLOWS.md documents the statutory operations screens and
migrations 0027-0034, which must be rehearsed and applied before this release.lib/tax/config.ts. This is
deliberate — silently reusing last year's slabs is worse than refusing.npm run dev # development server
npm run build # production build
npm run db:check # read-only check for missing release tables/columns
npm run db:push # apply the schema
npm run db:bootstrap # create the first company and administrator
npx tsc --noEmit -p . # typecheck
npx tsx --test "lib/**/*.test.ts" # unit tests
npx eslint . # lint
bigint. No floating point
anywhere in a calculation that reaches a payslip — and not 32-bit
integer either, which caps at about ₹2.14 crore and would wrap
silently on a large annual total.lib/ holds the rules, Server Actions
are thin wrappers over them.no-floating-promises lint rule is load-bearing: an un-awaited
write inside a transaction is one the commit does not wait for.