{"id":51236747,"url":"https://github.com/kisaesdevlab/vibe-time-billing","last_synced_at":"2026-06-28T21:01:20.895Z","repository":{"id":367650215,"uuid":"1244043991","full_name":"KisaesDevLab/Vibe-Time-Billing","owner":"KisaesDevLab","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-26T22:23:07.000Z","size":9693,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-27T00:31:08.092Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KisaesDevLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-19T23:09:38.000Z","updated_at":"2026-06-26T22:23:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/KisaesDevLab/Vibe-Time-Billing","commit_stats":null,"previous_names":["kisaesdevlab/vibe-time-billing"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/KisaesDevLab/Vibe-Time-Billing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KisaesDevLab%2FVibe-Time-Billing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KisaesDevLab%2FVibe-Time-Billing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KisaesDevLab%2FVibe-Time-Billing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KisaesDevLab%2FVibe-Time-Billing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KisaesDevLab","download_url":"https://codeload.github.com/KisaesDevLab/Vibe-Time-Billing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KisaesDevLab%2FVibe-Time-Billing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34903523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-28T21:01:17.545Z","updated_at":"2026-06-28T21:01:20.886Z","avatar_url":"https://github.com/KisaesDevLab.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vibe Practice Management\n\n**Self-hosted practice management for CPA firms — time tracking, recurring billing, proposals, tax-return tracking, and a branded client portal.**\n\nA Docker appliance you run on your own hardware. One annual license, unlimited users, unlimited clients, no per-seat pricing. Built for firms that want their data on their own infrastructure and want billing math that actually models how partner write-downs flow through to staff realization.\n\n## What it does\n\n- Track time across seven fee structures: hourly, hourly-NTE, fixed-fee, fixed-fee with milestones, recurring subscription, mixed-mode (retainer + overage), and hour bank with rollover\n- Pre-bill, adjust, and invoice with six allocation methods — including a per-timekeeper grain so a partner's write-down on one engagement doesn't drag everyone's realization down equally\n- **Engagement-level secure messaging** — encrypted at rest with a firm-managed key (XChaCha20-Poly1305 + per-thread DEK wrapped by the firm Master Key); decrypted server-side only for the authenticated session\n- **Pay-to-unlock deliverables** — drop a file into a per-engagement `escrow` zone; it auto-promotes to client-visible the moment the gating invoice clears (Stripe webhook or manual `/payments/receive`); reverts on refund\n- **In-app document collection** — client requests with one-click conversion into time-entry suggestions on the assigned staff member's timer\n- **Unified branded client portal** — single magic-link auth, identity-based access (one person, multiple client entities, email-or-SMS login), four top-level tabs (Invoices · Messages · Requests · Files)\n- Stripe and CPACharge payment processing — firm owns the merchant account\n- Dimensional reporting cube (realization, utilization, profitability, recurring revenue)\n- Local-first AI for description suggestions, scope creep detection, and plain-English query\n- MCP server for AI agent integration (Claude Code, Cowork, third-party)\n\n## Scope\n\nVibe PM covers the engagement-to-cash workflow: time tracking, billing \u0026 realization, adjustments, proposals, retainers, tax-return tracking, secure messaging, document collection, and the client portal. It is **not** a bookkeeping ledger, a payroll system, or a tax-prep engine — pair it with the rest of the Vibe family for those:\n- **Vibe MyBooks** — bookkeeping\n- **Vibe Payroll Time** — kiosk time tracking\n- **Vibe Trial Balance** — tax workpapers\n- **Vibe Shield** — local PII redaction gateway (required when opting AI features into cloud API egress; see `docs/architecture/AI_EGRESS_POLICY.md`)\n\n(Messaging, document vault, and document requests — previously planned as standalone \"Vibe Connect\" features — are absorbed directly into Vibe Practice Management. See `docs/architecture/MESSAGING_VAULT.md`.)\n\n## Stack\n\n- TypeScript 5 · Node.js 24 · React 18 · Vite · Express · BullMQ\n- PostgreSQL 16 · Redis 7 · Drizzle ORM · pnpm workspaces\n- Caddy v2 · Puppeteer · Docker (multi-arch)\n- Multi-provider AI: Anthropic Claude API, Ollama, OpenAI-compatible\n\n## Deployment modes\n\n1. **Domain mode** — public web access via Cloudflare Tunnel; `app.firm.com` + `portal.firm.com`. DNS configuration required.\n2. **LAN mode** — appliance accessible on local network; portal accessible via Tailscale serve.\n3. **Tailscale-only mode** — both staff and portal access gated through Tailscale.\n\n## License\n\nElastic License 2.0 — source-available. Firms may self-host, use, modify, and serve their own clients freely; providing the software to third parties as a hosted or managed service is not permitted, and license-key functionality may not be circumvented. Commercial license required to enable client portal access (separately licensed). See `LICENSE.md` for full terms.\n\n## Status\n\nPre-release. Built autonomously via Claude Code following the plan in `BUILD_PLAN.md`. Track progress in `git log --grep '^phase'`.\n\n## For developers\n\nStart here:\n1. Read `CLAUDE.md` — autonomous build operating manual\n2. Read `BUILD_PLAN.md` — 26 phases, ~513 items\n3. Read `QUESTIONS.md` — locked architectural decisions\n\nTo resume the autonomous build, copy the prompt in `AUTONOMOUS_EXECUTION_PROMPT.md` into a fresh Claude Code session.\n\n## Repository\n\n`KisaesDevLab/Vibe-Time-Billing` — to be created at build kickoff.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkisaesdevlab%2Fvibe-time-billing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkisaesdevlab%2Fvibe-time-billing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkisaesdevlab%2Fvibe-time-billing/lists"}