Published model · 2026-09-23

Atlas architecture,
read from the code.

173,995 lines of source, 3,386 parts described, 4 areas and 28 customer paths. A self-hosted business suite: CRM, HR, invoices, projects. Every line on this page comes from the model — open it and check any of them.

In numbers

What the model holds.

173,995Lines of source read
3,386Parts described
4Areas
917Screens
1,035Actions
1,129API routes
224Records
207Services
28Customer paths
20Status flows
16Rules
553 of 1129Endpoints on no described path
Areas

The 4 heaviest areas of 4.

AreaScreensActionsAPIRecordsWhat it covers
server01,0131,118152Express API and background workers (packages/server): auth and tenancy, per-app routers, services and Drizzle schema, schedulers, the BullMQ sync…
client852003React/Vite single-page app (packages/client): the app shell, auth pages, and the CRM, HR, Work, Invoices, Sign, Drive, Docs, Draw, Calendar and…
tables6521114Deprecated Tables spreadsheet app kept under legacy/tables: its AG Grid client, formula engine, and server CRUD for spreadsheets and row comments.
Shared & root01065Shared workspace package (packages/shared) with domain types, enums, the RBAC permission matrix and validators used by both client and server, plus…
Customer paths

What a person walks through, step by step.

28 paths are described in the model; the longest 12 are here, with how many areas each one crosses.

Document e-signature22 steps · 2 areas

Owners upload a PDF, place signature and form fields, and generate per-recipient signing links, optionally in signing order. Signers open the public page, fill their…

Invoice issued, sent, viewed and paid22 steps · 2 areas

The core billing loop: an invoice is drafted with numbered line items, sent by email with a PDF and portal link, viewed by the client in the portal, and settled through…

Deal pipeline from creation to won or lost18 steps · 2 areas

Deals are created in a pipeline stage, dragged across the kanban as they progress and closed as won or lost. Each step emits activity-feed events, notifies the assignee…

Google account connection and CRM mailbox sync18 steps · 2 areas

Connecting Google stores encrypted OAuth tokens and creates the user's Gmail channel. Starting sync enqueues calendar and Gmail full-sync jobs on the BullMQ worker.…

Lead qualification and conversion16 steps · 2 areas

Salespeople move leads through the status pipeline, optionally enrich them with AI, and convert qualified leads into a contact, an optional company and a deal in a…

Proposal sent, accepted and invoiced16 steps · 2 areas

Salespeople draft a priced proposal, mark it sent and share its public link. The prospect accepts or declines on the public page, and acceptance creates a draft invoice…

Leave request and approval15 steps · 2 areas

Employees request leave for their own linked employee record and submit it. The manager is notified and approves or rejects from the approvals view, and the employee is…

Paraşüt accounting integration15 steps · 2 areas

Connects the tenant to the Paraşüt e-invoicing SaaS over OAuth, pushes Atlas invoices as Paraşüt sales invoices, and keeps payment status mirrored with a 10-minute…

Write and collaborate on documents14 steps · 2 areas

Users write hierarchical rich-text pages with auto-save. Content changes re-derive page links and backlinks, users take version snapshots (the newest 50 are kept), and…

Share a Drive file by public link13 steps · 2 areas

Users upload files into Drive within the tenant storage quota and share them either with teammates or through public links that can carry a password, an expiry and…

Web lead capture through embedded forms12 steps · 2 areas

Staff design a branded lead form and embed it on their site. Visitors load the server-rendered form by token and submit it, which creates a 'new' CRM lead, notifies…

Expense claim approval and reimbursement12 steps · 2 areas

Employees record expenses against their own employee profile and submit them. Submission checks the expense policy and routes the claim to the manager or a fallback HR…

Rules

What the product enforces on its own.

16 rules are described; each one watches a record and changes something else when it moves.

Cascade archive to descendantswatches Documents · reaches Documents

When a document's isArchived flag is set to true through an update, all of its descendant documents are recursively archived too (and unarchived on the reverse change).

New contact links prior emailswatches CRM Contacts · reaches message_participants · CRM Activities

Creating a CRM contact fires a fire-and-forget backfill that links previously synced inbound and outbound messages whose participants match the contact's email, and fans…

CRM events run workflow automationswatches CRM Deals · reaches Tasks · Notifications · CRM Deals · CRM Activities · CRM Workflows

Deal creation, stage changes, won/lost marking, contact creation and activity logging each call executeWorkflows for the tenant. Every active workflow whose trigger and…

Replacing a file keeps a versionwatches Drive items · reaches Drive Item Versions · Drive Item Versions

Replacing a Drive file's content first snapshots the current file as a version, unless the owner disabled auto-versioning on replace. Version history is then pruned…

Employee edits record status flow eventswatches Employees · reaches HR Status flow Events

Updating an employee compares the new values with the previous ones and records status flow timeline events: 'transferred' on department change, 'salary-change' on salary…

New employee is linked and onboardedwatches Employees · reaches Employees · App Permissions · Onboarding Tasks

Creating an employee whose email matches a platform user links the employee to that user and grants HR viewer ('own' scope) permission when none exists. It then seeds…

Removing billed lines releases time entrieswatches Invoice line items · reaches Project Time Entries

Deleting an invoice line item that came from tracked time, or archiving the whole invoice, resets the linked project time entries to unbilled and unlocked and clears…

Synced or sent email fans out to activitieswatches messages · reaches message_participants · CRM Contacts · CRM Activities

Each message ingested by Gmail sync, and each outbound message after a successful send, is matched to CRM contacts by participant handle, skipping the tenant blocklist…

Status flows

The states records move through.

Invoices · server

Invoice status

Draft → Sent → Viewed → Paid → Overdue → Waived

6 states · 10 transitions

Proposal · server

Proposal status

Draft → Sent → Viewed → Accepted → Declined → Expired

6 states · 3 transitions

CrmLead · server

CRM lead status

New → Contacted → Qualified → Converted → Lost

5 states · 8 transitions

HR Expenses · server

Expense status

Draft → Submitted → Approved → Refused → Paid

5 states · 10 transitions

HR Leave Applications · server

HR leave application status

Draft → Pending → Approved → Rejected → Cancelled

5 states · 5 transitions

SignatureDocument · server

Signature document status

Draft → Pending → Signed → Expired → Voided

5 states · 3 transitions

What the model says about itself

Answers nobody wrote down.

Computed from the model’s own connections, with the count behind each one.

How much of this product is built but unused?

49% of this product's API surface is dark: built and paid for, but part of no described customer path and consumed by no screen.

553 OF 1129 ENDPOINTS · READ FROM 28 CUSTOMER PATHS DESCRIBED SO FAR

Where is it riskiest to make a change?

The riskiest place to change is “server”: more of the product depends on User Settings than on anything else.

114 INBOUND DEPENDENCIES · COMPUTED FROM THE REACH GRAPH, NOT ESTIMATED

Where did the engineering effort actually go?

The deepest engineering investment is “server” — 70% of the product's mass. “Shared & root” is compact and self-contained: the cheapest place to change.

2359 VS 66 OBJECTS · CHANGE-COST RATING = SIZE × CROSS-DOMAIN COUPLING

Does the product lean on any one part?

One subsystem — db.bootstrap — alone carries 29 core objects. The product leans on it.

CONCENTRATION RISK · COUNTED FROM OWNERSHIP LINKS

Ask the model your own question →How these answers were scored →

Questions

About this model.

How was this Atlas architecture built?

GitMir read the public repository and established what the product does: its areas, screens, actions, API routes, records, customer paths, status flows and rules, with every statement traceable to the source it came from. Nothing on this page is written by hand; it is the published model, as of 2026-09-23.

Is it current?

This page is a snapshot of the published model. On a connected repository the model is updated as commits land, so people and AI agents work from the product as it is now rather than as it was when somebody last wrote it down.

Can I get this for my own repository?

Yes — connect a repository and GitMir builds the same thing for it: features, rules, customer paths and how they connect, available to people on the screen and to coding agents over MCP.

Supabase Studio architecture →OpenAI Codex architecture →cal.com architecture →Warpdrive architecture →DroneOps Command architecture →Pronto architecture →Faktorio architecture →

Get this for your
own product.