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。 以下為已儲存的摘錄。
Realtime multiplayer collaborative canvases by Incrementic (lean.incrementic.com), powered by Next.js 15, Convex, and AI stress-testing. Choose a Lean Canvas or a GTM Canvas for each new canvas.
• Canonical Domain: https://lean.incrementic.com
• Brand System: Incrementic Design System (Sora, Inter, IBM Plex Mono, #EA5148)
Each canvas has one template, chosen when it is created and fixed after that. Existing canvases with no template are Lean Canvases.檢視完整 README ↗Realtime multiplayer collaborative canvases by Incrementic (lean.incrementic.com), powered by Next.js 15, Convex, and AI stress-testing. Choose a Lean Canvas or a GTM Canvas for each new canvas.
#EA5148)Each canvas has one template, chosen when it is created and fixed after that. Existing canvases with no template are Lean Canvases.
| Template | Blocks | Stress test |
|---|---|---|
Lean (lean) | Problem, Customer Segments, Unique Value Proposition, Solution, Channels, Revenue Streams, Cost Structure, Key Metrics, Unfair Advantage | Ash Maurya methodology |
GTM (gtm) | Ideal Customer, Pains & Alternatives, Positioning, Value Proposition & Messaging, Channels, Sales Motion, Pricing & Packaging, 90-Day Launch Plan, Success Metrics | Go-to-market criteria |
Both templates use the same 7 stress-test scores, so the stored results and the riskiest-assumptions view work the same way. Only the labels and the prompt change. The GTM blocks are based on common go-to-market frameworks (ideal customer profile, positioning, channels, sales motion, pricing, and launch plan), since there is no single standard GTM canvas.
RESEND_API_KEY, RESEND_FROM)incrhst/leancanvas-live)For non-technical users, connecting LeanOn to Claude takes just one click:
https://lean.incrementic.com/api/mcp
When configured, Claude has access to:
list_canvases(): Lists your canvases with their template, role, and URL.create_canvas({ title, description, template, seedNotes, launchDate }): Initializes a new canvas (template: lean by default, or gtm) and returns the direct collaboration URL.update_canvas({ canvasId, title, description, launchDate }): Changes a canvas's title, description or launch date. The launch date (YYYY-MM-DD) is day 0 of the plan; null clears it.get_canvas({ canvasId, driverUserId, market }): Fetches full structured canvas, blocks, and current notes with evidence states, drivers and tests (measure, passMark, reviewDate, latestResult). With a launch date it also returns currentDay and each note's reviewDay. driverUserId (or "unassigned") narrows it to the notes one person is driving; market to the notes that hold in one market (tagged with it, or untagged, which means every market).list_canvas_members({ canvasId }): Lists everyone with access (userId, name, email, role). Use a userId as a note's driverUserId (the driver is the person doing the work on the note; viewers can be drivers) or a decision's deciderUserId.add_note({ canvasId, block, content, evidenceState, driverUserId, markets, measure, passMark, reviewDate, reviewDay, latestResult, reason }): Inserts a note into a block of the canvas's template. A block from the other template is rejected.update_note({ noteId, content, block, evidenceState, driverUserId, markets, measure, passMark, reviewDate, reviewDay, latestResult, reason, link }): Rewords a note, moves it to another block of the same template, changes its state, or sets its test. Pass only what changes; null clears a test field. Dates are YYYY-MM-DD, or give reviewDay (e.g. 30) on a canvas with a launch date; latestResult is { text, date?, verdict? } with verdict pass, fail or inconclusive.delete_note({ noteId, reason }): Removes a note. Its history stays readable.get_note_history({ noteId }): Lists every change to a note, newest first: who, when, app or agent, from and to, and the reason. Works for deleted notes.request_decision({ noteId, question, deciderUserId, dueDate | dueDay, defaultOutcome, options }): Asks one canvas member to decide on a note. They're emailed a link () that answers it from a phone with no account or sign-in, even with view-only access. is what happens if nobody decides by the due date ("If nothing is decided by 1 November, we sign the agency."); it is shown everywhere the decision is, and never applied for them. gives 2 to 4 named choices instead of approve / reject.| Actor | View Canvas | Edit Canvas | Comment | Invite Others | Run Stress Test | Answer Decisions / Check-ins |
|---|---|---|---|---|---|---|
| Anonymous | Yes (via /share/[token]) | No | No | No | No | Only with the decider's emailed link (/d/[token]), for that one decision. Can send a test result with a note's result link or a driver's check-in link (/r/[token]); it waits for an editor to accept it |
| Authenticated Viewer | Yes | No | Yes | No | No | Yes, when they're the named decider (decisions) or the note's driver (check-ins) |
| Authenticated Editor | Yes | Yes | Yes | Yes (Editor / Viewer) | Yes | Yes, when they're the named decider (decisions) or the note's driver (check-ins) |
| Owner | Yes | Yes | Yes | Yes | Yes | Yes, when they're the named decider (decisions) or the note's driver (check-ins) |
/: Landing page with features & call to action/login: Magic link authentication with automatic return URL redirect/dashboard: Workspace canvases list & creation modal/canvas/[id]: Full multiplayer collaborative editor with sticky note evidence cycling/share/[token]: Public read-only view for anonymous users (editing and stress-test triggers strictly disabled)/decisions: The signed-in user's open decisions, across canvases/d/[token]: Public answer page for one decision, from the request email. No sign-in. The token is stored hashed, works for that one request only, and stops working once the request is answered or withdrawn, when an editor sends a new link or turns it off, or when the decider leaves the canvas/r/[token]: Public result page for one note's test: what we watch, the pass mark, a box for the result (a number or a line), an optional "did it pass?" and name. No account or sign-in. Two kinds of link open it: a shareable link an editor gets from the note (copy, or share to WhatsApp or email), which takes results as often as the test needs until an editor makes a new one or turns it off; and one link per question in the weekly check-in email, which answers that question once (a result, or "nothing new") and stops. A result sent this way never changes the note by itself: it waits on the note, marked "via link, no account", and the operator is emailed. An editor accepts it (it becomes the latest result; the evidence state is still theirs to change) or rejects it. Each link takes at most 10 results an hour, and a note stops taking more once 20 are waiting/invite/[token]: Magic invite acceptance flow (requires authentication before joining)canvases:createCanvas: Create canvas (optional template, default lean) and default workspace with owner membershipcanvases:getCanvas: Secure query for authenticated memberscanvases:getCanvasByPublicToken: Sanitized read-only query for public sharingcanvases:setPublicView: Enable/disable public read-only link and regenerate token (Owner only)notes:addNote, updateNote, deleteNote, reorderNotes: Editor+ only mutationsstressTests:runStressTest: Convex action running 7-dimension scoring & riskiest assumption analysisinvites:createInvite, acceptInvite: Magic link generation and authenticated acceptanceresultLinks:replaceLink, forNote, accept, reject: A note's result link and the results waiting on it (Editor+ only)resultLinks:getByLink, submitByLink: The public result page; no sign-in# 1. Install dependencies
pnpm install
# 2. Run Convex backend
npx convex dev
# 3. Run Next.js frontend
pnpm dev
# Tests (convex-test + vitest)
pnpm test
Open http://localhost:3000 or deploy to https://lean.incrementic.com.
/d/[token]defaultOutcomeoptionsanswer_decision({ noteId, answer, choice, comment }): The named decider answers approve, reject, choose with one of the request's options as choice (all three make the note a decision), or change (needs a comment; sends it back with the note unchanged).withdraw_decision({ noteId, reason }): Cancels an open request.list_decisions({ canvasId }): Decision requests on a canvas, or, without canvasId, the open ones waiting on you.create_snapshot({ canvasId, label }): Freezes the canvas under a label, e.g. Day 30.list_snapshots({ canvasId }): The canvas's snapshots, newest first.compare_snapshots({ canvasId, from, to }): Notes added, removed or changed between two snapshots; to defaults to current (the canvas now).get_review({ canvasId, sinceSnapshotId }): The review-meeting view, also at /canvas/[id]/review: tests grouped by how the latest result compares with the pass mark (missed, no result yet, too early, met), overdue reviews, open decisions, and what changed since the latest (or given) snapshot.list_check_ins(): The weekly check-in questions waiting on you.answer_check_in({ noteId, hasEvidence, text, verdict, date }): No records "no new evidence"; yes needs a line, which becomes the note's latest result. Works for view-only drivers.send_check_in({ canvasId }): Sends this week's check-in now. Otherwise a cron sends it every Monday at 13:00 UTC (8am Jamaica) to the driver of every note that is unproven (unknown, assumption, observed) or has a test, and isn't a decision.update_evidence_state({ noteId, evidenceState, reason }): Updates state (unknown, assumption, observed, supported, contradicted, decision).run_stress_test({ canvasId }): Triggers the 7-dimension diagnostic (Ash Maurya for Lean, go-to-market criteria for GTM) and extracts top riskiest assumptions.export_canvas({ canvasId, view, format }): Returns a link that downloads the canvas (view: "canvas") or its riskiest assumptions (view: "riskiest_assumptions", needs a stress test first) as a PDF or PNG (format). The file is rendered in the browser, so open the link while signed in. format: "summary" instead returns plain-language text right away: one short paragraph per block for a non-technical reader.