Multi-Tenant Accounting CRM

A multi-module practice-management platform built for an Irish accounting & professional-services practice, replacing spreadsheets, a shared inbox and a patchwork of point tools with one system of record.

FastAPI
PostgreSQL
Redis
Celery
Next.js
Docker
Google Workspace
Microsoft 365
app.practice-os.internal/dashboard
OverviewCommandGrowthDaily Triage

Revenue under mgmt.

€48.2k

Active notices

126

Active clients

184

New clients · 30d

+12

Notices received: last 12 weeks

Illustrative interface with fictitious sample data, shown in place of confidential client screens.

The problem

A growing practice was running client work across spreadsheets, a shared WhatsApp/email inbox and a patchwork of point tools. Nothing tracked where a client's filing actually stood, compliance documents (AML, GDPR, signed contracts) went stale unnoticed, and every client message needed a person to read, triage and route it by hand.

A multi-module platform

Rather than one screen, it's a suite of modules under one roof: an ops dashboard and command center, client records and a client-facing portal, payroll, a unified inbox, compliance tracking, Irish Revenue (ROS) notices, revenue and bank reconciliation, and a CRO/company-registry lookup, all sharing the same client and document data instead of living in separate tools.

Staff sign in through the practice's own Google Workspace / Microsoft 365 tenant (SSO), and routine communication is automated from there: deadline and missing-document reminders go out by email on a schedule, instead of someone remembering to chase them manually.

app.practice-os.internal/inbox

Unified inbox

4 open

Marcos Silva

WhatsApp

Can you confirm the VAT number?

Bot

09:41

Studio Nunes Cleaning

WhatsApp

Sent the receipts, thanks!

Human

09:12

Ana Ferreira

Teams

Payroll for July looks correct

Human

Yesterday

Dunphy Landscaping

WhatsApp

When is the return due?

Bot

Yesterday

Unified inbox: illustrative interface with fictitious sample data.

Unified inbox & chatbot triage

WhatsApp (via 360dialog) and Microsoft Teams messages land in one inbox. A bot handles the first pass, confirming simple requests like a VAT number or a deadline, and hands off to a human the moment a conversation needs judgement, so nothing simple eats staff time and nothing that matters goes unhandled.

app.practice-os.internal/compliance

Client compliance

2 missing docs
ClientAMLGDPR
Maple & Co. Bookkeeping
Kelly Civil Engineering
Riverside Wellness Clinic
Harte & Sons Joinery

Client compliance tracking: illustrative interface with fictitious sample data.

Compliance, automated

Every client's AML, GDPR and contract status is tracked in one grid instead of a spreadsheet someone updates by hand. When something goes missing or expires, the system flags it and sends the reminder itself.

Under the hood

FastAPI over PostgreSQL, with Redis and Celery handling background jobs (reminders, document processing, inbox routing, sync tasks), self-hosted on Hetzner behind Caddy in Docker, with OAuth2/JWT auth and automated daily backups. Client-model separation is enforced at the data layer, not just the UI, so the same platform safely serves every client on the books.

Impact

Delivery status, compliance state and client conversations all live in one place instead of three. Reminder emails, document chasing and first-line chat triage now run themselves, freeing staff time for the work that actually needs a person.