Enterprise software · In development
PracticeERP Kilimanjaro
The next generation of PracticeERP: a Go Virtual Office-owned, multi-tenant system of execution for CPA firms, being migrated from the existing NetSuite vertical to Azure.
View the current PracticeERP product ↗My role
I am one of the software engineers developing Kilimanjaro across the API, web application, data model, and platform framework. The migration is currently in progress. Our goal is not to reproduce every legacy screen; it is to preserve the business intent of the PracticeERP vertical while creating a product we can evolve independently on Azure.
Action-oriented core
- Business capabilities are modeled as stable actions rather than scattered route or UI logic.
- Every domain write passes through one server-side action runtime.
- The runtime consistently applies permissions, availability, validation, tenant policies, and audit.
- Domain changes, audit records, and outbox events commit or roll back together.
Built for extension
- Experience variants adapt forms and workflows without redefining the underlying business action.
- Web, CLI, browser extension, integrations, and future agents share the same execution boundary.
- Thin clients render backend-owned permissions and action availability instead of duplicating rules.
- Typed actions create a safe surface for automation and agent-assisted work.
Product architecture
Kilimanjaro is a TypeScript monorepo with an Express API, Next.js web app, CLI, and Chrome extension. Azure SQL stores tenant-scoped data with composite tenant keys, Flyway manages forward-only migrations, and Terraform defines the Azure environments. SQL and in-memory repository implementations support fast behavioral tests plus validation against real SQL Server semantics.
Migration strategy
Legacy NetSuite scripts, workflows, records, and reports are treated as evidence of user intent—not specifications to copy blindly. Each workflow is translated into an explicit action, record, projection, policy, or integration boundary with declared system-of-record ownership. The first vertical slices focus on assigned work, task execution, and time entry before broader PracticeERP parity.
Technical range
TypeScript, Express, Next.js, React, SQL Server, Flyway, Microsoft Entra, MSAL, Azure, Terraform, Docker, action runtimes, multi-tenant authorization, policies, approvals, audit, outbox events, and integration architecture.