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。 以下為已儲存的摘錄。
This repository is a trauma response with dependency injection.
It started as a way to never rebuild auth. It stayed because my father is
opening a solo intellectual-property practice, and every legal AI that can
cite its sources wants his client files in someone else's cloud.
Prose-to-Proof is the product. A local-first workbench for a professional
who cannot afford a hallucination. Documents go in. Candidate claims come out.
Nothing becomes practice memory until the exact source span checks out and the
attorney says yes.
Obsidian for lawyers — but it proves its sources.檢視完整 README ↗This repository is a trauma response with dependency injection.
It started as a way to never rebuild auth. It stayed because my father is opening a solo intellectual-property practice, and every legal AI that can cite its sources wants his client files in someone else's cloud.
Prose-to-Proof is the product. A local-first workbench for a professional who cannot afford a hallucination. Documents go in. Candidate claims come out. Nothing becomes practice memory until the exact source span checks out and the attorney says yes.
Obsidian for lawyers — but it proves its sources.
A solo IP attorney is the whole firm: partner, associate, paralegal, librarian, and IT. Cloud tools that "show their work" process client material on someone else's servers. Local tools that keep the files on-device mostly shrug when you ask where that sentence came from.
This repo exists to occupy the unoccupied intersection:
The first user is not a persona. He is my dad. His archive is the seed. His daily use is the standard. Agents propose; he approves; the record only keeps what survived. That loop is the product strategy, not a footnote.
The full vision, in human and in schema:
docs/PROSE_TO_PROOF_VISION.mddocs/PROSE_TO_PROOF_FOR_TOM.mddocs/product/prose-to-proof.mdgoals/agentic-professional-runtime/document in
→ model proposes a claim
→ the span must reproduce the source
→ the attorney approves
→ practice memory
The model guesses. The graph proves. Confidence gets you to the boundary. Only proof gets you across.
CONTRIBUTING.md.Honest status, not a launch deck.
| Surface | What it actually is |
|---|---|
apps/professional-desktop | Tauri workbench. Today a local chat shell on PGlite. Becoming the document portal. |
apps/practice-kg-mcp | Read-only local MCP server over a portable practice graph. First-user front: Claude Desktop asks the archive; the corpus never enters this repo. |
apps/oip-web | Public site for Oppold IP Law. Decoupled from the first-user metric. |
The north star is Prose-to-Proof in front of Tom: a real attorney doing
real work in a shipped surface. Priority lives in
docs/ROADMAP.md. Packet lifecycle lives in each tracked
goals/<slug>/ops/manifest.json; bun run beep goals index renders the local,
untracked portfolio view.
I used to work on a warehouse management system. Fortune 500 clients. Healthcare. Pharmaceuticals. The VA. Regulated industries where data integrity is not a nice-to-have.
The codebase had no foreign keys.
Not "some tables were missing foreign keys." None of them had foreign keys.
tenant_id was a vibes-based suggestion. Multi-tenant isolation was "we trust
the application layer" and "QA will catch it." The POC became production
because someone showed it to a stakeholder. The hardening phase is in the
backlog. It will always be in the backlog.
I sat in sprint reviews for two years. We pointed at the same debt. We agreed it mattered. We walked out. Nothing moved. Story points are astrology for project managers. Velocity is a number we invented so the board would have a number. The deadline was set before the requirements existed. You said two weeks. You lied. Pressure code borrows time at a rate you cannot pay.
Every SaaS idea I spawned after that started the same way: three weeks rewiring auth, uploads, and settings, then I got impatient and duct-taped the dream. This repo was supposed to make Idea #37 start at "ship."
Then the idea that mattered showed up, and it was not another SaaS. It was building the machine my father will actually run his practice on.
The VA deserved foreign keys. An IP attorney deserves a privilege wall and citations that exist.
It has compile errors.
If a table needs a tenant, the type system rejects the table. If a third-party contract is violated, the schema throws. If a citation cannot point at a real span, it does not become a fact. The backlog is empty because bad states do not merge.
This is not agile. This is spite.
Every factory is a scar. Every type constraint is a promise that you will not repeat my mistakes, because I have made them impossible to compile.
UserId is not string. OrganizationId is not string.
The type system remembers what you will forget.docs/product/citation-grounding.md.docs/product/workspace-substrate.md.This codebase uses Effect. All of it. v4, because the alternative is waiting for a newsletter to tell me the ecosystem moved.
async/await in domain codetry/catch in domain code. Boundaries may catch; they still surface
typed errors.const program = Effect.gen(function* () {
const db = yield* Database
const result = yield* db.query(/* ... */)
return yield* S.decode(ResponseSchema)(result)
})
// NOT this
// async function program() {
// try {
// return await db.query(/* ... */) // hope it's valid lol
// } catch (e) {
// console.log(e) // cool, very helpful
// }
// }
The Effect version tells you what it needs, what can go wrong, and what it returns. The async version hopes. I am done hoping.
APIs get validated against the live Effect source referenced at
.repos/effect, the Effect child of $HOME/YeeBois/references/effect, rather than
whatever an agent remembers from training. See
standards/effect-first-development.md
and
standards/schema-first-development-prompt.md.
There is a goals/ directory. There is an explorations/ directory. There
is a nightly research/ routine that proposes, and does not silently become
the plan.
I use agents to write packets for agents to implement. The agent researches. The agent writes the plan. The agent executes. The agent reflects. The reflection improves the next packet.
explorations/ fuzzy front end
goals/ the things we actually committed to
research/ machine intel — it proposes, it does not append itself
If this concerns you, remember: the alternative was me doing it manually at 2am. The agents do not get tired. The agents do not cut corners when they are frustrated. I trust the recursion more than I trust myself after midnight.
Shipping that recursion without lying to git is
bun run beep yeet. Feature branch.
Proof. PR. Hosted checks. No wip on main.
This is a laboratory, not npx create-beep. You want Bun, a willingness to
read, and the onboarding doc — not a four-command fantasy.
bun install
bun run beep yeet verify # the real quality bar
bun run beep architecture # the generator surface
Dev servers go through portless hostnames, never raw localhost:3000:
# examples — see each app's package.json
# http://professional-desktop.beep.localhost:1355
# http://oip-web.beep.localhost:1355
If something does not work, it is probably Docker. It is always Docker.
Newcomers who came for the shape of the monorepo, not the product: start at
standards/architecture/13-onboarding-the-minimum-viable-slice.md.
The executable architecture proof lives in packages/architecture-lab/* with
the apps/architecture-lab-proof harness. Binding law:
standards/ARCHITECTURE.md.
any painful. The friction is the point.main is PR-only.Human contribution and vulnerability reporting:
CONTRIBUTING.md and SECURITY.md.
Agent law: AGENTS.md.
.repos/effectFirst-party work lives under packages/, apps/, infra/, goals/,
explorations/, standards/, and the authored docs/ tree.
The reference workspace lives at $HOME/YeeBois/references/effect, with effect
and effect-tsgo child clones. bun run beep refs provision provisions it from
scripts/references.json; BEEP_REFERENCES_ROOT overrides the workspace root.
The gitignored .repos/effect link still points to the
Effect-TS/effect child, whose main is
Effect v4, so existing relative source links stay valid. .repos/effect-tsgo
points to the tsgo child; .repos/effect-workspace points to the parent.
Nothing under .repos/ is part of the tracked tree.
Use graft ask "<q>" .repos/effect-workspace to query across members, or
graft ask "<q>" .repos/effect to narrow to Effect. The nightly 03:30
beep-refs-refresh timer, installed by beep refs install-timer, refreshes
the workspace with the claude-opus-5 deep tier through CLIProxyAPI, reusing
$HOME/.config/beep-graft/env. See the timer runbook.
Agents may run beep refs plan and beep refs install-timer --refresh to
inspect the plan or re-render an installed timer. Agents never run
beep refs refresh, a fresh beep refs install-timer, graft init, or
graft build --deep.
Do not add git subtrees under .repos/. Historical subtree imports
still sit in git objects and poison naive git log author counts — those
names are not first-party contributors.
I will never again:
If you call this over-engineered, wait until you meet a malpractice carrier.
This is not documentation. This is a restraining order against bad decisions, signed by the TypeScript compiler, served on every language model that wants to practice law without a license.
Licensed under the Apache License, Version 2.0. See LICENSE.
Public laboratory. Session notes you can clone. Not a support contract.
"It's not a business priority."
— Everyone who has ever created a production incident that was absolutely their fault