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。 以下为已保存的摘录。
A web version of Elixir Solutions' project estimation workbook (Business
Assessment through HubSpot Deployment & Go-Live, plus ElixirSync and Third
Party integrations), with a shared dashboard so estimations live in one
place instead of scattered spreadsheet copies.查看完整 README ↗A web version of Elixir Solutions' project estimation workbook (V3: Business Assessment, Technical Assessment and Data Migration, the Sales / Service / Marketing / CMS / DealHub implementations, plus ElixirSync and Third Party integrations), with a shared dashboard so estimations live in one place instead of scattered spreadsheet copies.
/estimations/[id]) — edit standard effort, complexity
factors, and per-line items for every workstream (drag a line by its handle
to reorder it), live totals, PM % and integration subscriptions. The Cover
page assigns each onderdeel to phase 1, 2 or 3; once more than one phase is
used, the sidebar summary and the Proposal Summary overview group by phase
with subtotals, and every onderdeel page shows its phase.StandardWorkstream.custom (src/lib/customWorkstreams.ts), so phases,
links, totals, the Proposal Summary and the export treat it like any other
workstream. Name, type, billing and removal are edited on the Cover page
(✎). In these workstreams, lines can also be Consulting,
Development, Support or Project management and carry their
own hourly rate
(StandardLineItem.hourlyRate; empty = the workstream's rate). Prices are
then summed per line, and the workstream shows the effective (blended)
rate. A Project management line starts at the PM rate and is left out of
the PM % base, so planned PM hours never get PM on top.totalsByStage, incl. PM; subscriptions follow their integration), and
the export carries stage per workstream and per line, plus
closedWonPrice / proposalPrice in the totals./) — every saved estimation with client, status,
hours, price, and last edit. "Duplicate" freezes a copy as a snapshot you
can pull numbers from for a proposal while the original stays editable.Next.js 16 (App Router) + TypeScript + Tailwind, Prisma 7 + PostgreSQL. No authentication (open-link, by request — see Security note below).
The templates follow the V3 workbook (2026-03-11). Hourly rates and the PM rate are deliberately lower than the workbook's (150/135 vs. 175/150) - an app-side decision, not an import error. The workbook has a few real bugs, fixed here rather than replicated:
=SUM(G6:G30), missing the
Kick-off Session and Workshop 1, 12h): the sheet shows 104h, the real sum
(and the app) is 116h.The V3 workbook dropped the separate HubSpot Deployment & Go-Live tab (its trainings and go-live now sit inside each hub implementation tab), so it's no longer in the template; estimations created before V3 keep it.
Estimations created from the V2 template show a banner in the editor with an
Update to V3 template button (src/lib/upgradeTemplate.ts). It is opt-in
per estimation and only changes the unsaved editor state: it keeps rates,
included workstreams, complexity choices, hand-edited topics/hours and the
user's own lines, swaps the template lines for V3's, and shows the old and
new total price before applying. Nothing is migrated in bulk, since saved
estimations may already have been sent to a client.
If you need numbers that reconcile with an Excel estimate line-for-line, they may be off by these amounts for the affected tabs.
The editor sidebar has Export ⬇ Excel and ⬇ JSON buttons, for importing an
estimation into other software. Both are built from one model
(src/lib/export/model.ts), so they always carry the same numbers. They export
what's on screen (including unsaved changes) and only what's in scope: included
workstreams and included lines.
workstreamKey, lineId), activity values (Session,
Session Prep, Setup, Risk Buffer, Integration, Project management)
and column/field names are stable English, so an import mapping keeps
working across languages.type is set only for client-specific workstreams, and
billing is one_off or retainer. On retainer workstreams and lines,
hours/price (finalEffortHours/price per line) are the totals over
all months, and the per-month figures come alongside. That way every
sheet still adds up to the grand total, and an importer that ignores the
retainer fields still gets the right amounts.Excel (.xlsx, written by src/lib/export/xlsx.ts; no formulas, no merged
cells, no totals rows in the data sheets):
| Sheet | One row per | Columns |
|---|---|---|
| Workstreams | workstream / integration | key, name, phase, stage, type, billing, months, hours per month, price per month, hours, hourly rate, price, PM hours, PM rate, PM price, total price (incl. PM) |
| Lines | line item (+ one PM line per workstream) | workstream key, workstream, phase, stage, line ID, activity, topic, description, duration (h), standard effort (h), complexity, complexity adjustment (h), months, hours per month, price per month, final effort (h), hourly rate, price |
| Summary | field | client, project, owner, status, estimation ID, language, currency, export time, PM % and rate, totals, subscriptions, grand total |
JSON (format: "elixir-estimation-export", schemaVersion: 1): the same
data as one object, with fields estimation, projectManagement,
workstreams[] (each with its lines[]), subscriptions[] and totals. The
TypeScript interface EstimationExport in src/lib/export/model.ts is the
schema. Bump schemaVersion on any breaking change.
Requires Node 20+ and a Postgres database.
npm install
cp .env.example .env # if starting fresh; otherwise edit .env directly
# set DATABASE_URL to a local Postgres, e.g.:
# postgresql://user:password@localhost:5432/estimator?schema=public
npm run db:migrate # creates the Estimation table
npm run dev # http://localhost:3000
npm run verify-totals runs the calculation engine against the default
template and prints per-workstream totals — useful as a quick regression
check after changing src/lib/calculations.ts or src/lib/templates.ts.
DATABASE_URL environment variable
automatically when you create it there; if you're connecting your own,
add DATABASE_URL yourself under Settings → Environment Variables
(use the pooled connection string, not the direct one, since serverless
functions open many short-lived connections).npm run build) runs
prisma generate && prisma migrate deploy && next build, so the
database schema is created/updated automatically on every deploy as long
as DATABASE_URL is set. No manual migration step needed.Edit prisma/schema.prisma, run npx prisma migrate dev --name <change>
locally to generate the migration file, commit it, and push — the next
Vercel build applies it automatically via prisma migrate deploy.
Per your request this app has no authentication — anyone with the URL can view and edit every estimation, including hourly rates and pricing. That's fine for an internal link shared only with the team, but:
@elixir-solutions.nl (e.g. via
NextAuth with the Google provider and a
domain check in the signIn callback) — happy to wire that up if
priorities change.npm audit reports high-severity advisories in mysql2 and
deepmerge-ts. Both are transitive dependencies of the prisma CLI
package (used only for prisma generate / migrate during development
and build), not of @prisma/client which is what actually ships in the
deployed app. They're not part of the runtime bundle.
src/
app/
page.tsx Dashboard
estimations/[id]/page.tsx Estimator (server component, loads the record)
api/estimations/... REST API (list/create/read/update/delete/duplicate)
components/
editor/ Estimator UI (tabs, panels, summary sidebar)
... Dashboard UI (search, row actions, new-estimation dialog)
lib/
types.ts Shared TypeScript types for an estimation's state
templates.ts Default line items, extracted from the source .xlsx
calculations.ts All total/price math (the "formula engine")
validation.ts Zod schemas for the API boundary
prisma.ts Prisma client (pg driver adapter)
prisma/
schema.prisma Estimation model (JSON payload + cached totals)
scripts/
verify-totals.ts Regression check against the default template