A working atlas of every process that runs a business — and the software that powers it.
Every company, whatever it sells, runs the same underlying processes — develop strategy, market and sell, manage finance, hire people, run IT. The APQC Process Classification Framework is the standard map of those processes. The Business Model Almanac takes that map — 13 categories, 72 process groups — and, for each one, charts the software that actually runs it: 257 vendors, ranked and dated as a 2026 snapshot, plus 23 end-to-end "threads" that trace how work crosses categories (lead-to-cash, hire-to-retire, record-to-report…).
It renders as a cartographic celestial survey — an astrolabe you steer, not a list you scroll. Every ranking carries its snapshot date and links to how the ranking was made; the whole thing is a dated edition, not a live leaderboard (see the epoch model).
| 13 categories | 72 process groups | 257 software vendors | 23 threads | 371 static pages |
flowchart LR
A["Any business"] --> C["13 categories<br/>(6 operating · 7 support)"]
C --> L2["72 process groups<br/>APQC PCF v7.4 · Level 2"]
L2 --> V["257 software vendors<br/>ranked #1–3 · dated 2026"]
T["23 threads"] -.->|trace work across categories| L2
classDef a fill:#0e1220,stroke:#c8a24c,color:#eae6d9;
classDef b fill:#0e1220,stroke:#6ba0f0,color:#eae6d9;
class A,C,L2 a;
class V,T b;
A category holds its Level-2 process groups; each process group carries software rows (a named market, e.g. "CRM"); each row ranks up to three vendors, and every rank resolves to one entry in a shared software dictionary. Threads reference the processes they pass through.
erDiagram
CATEGORY ||--o{ SUBPROCESS : "contains (L2)"
SUBPROCESS ||--o{ ROW : "software rows"
ROW ||--o{ VENDORRANK : "ranks #1–3"
VENDORRANK }o--|| SOFTWARE : "resolves to"
THREAD }o--o{ SUBPROCESS : "passes through"
The whole dataset is typed with Zod content collections and validated at build time — referential integrity (every ranked vendor exists), a dead-brand denylist (retired names can't reappear), and a taxonomy-fidelity check against the canonical APQC structure all run before a page is emitted.
Rankings age; facts don't. The Almanac freezes each edition at an epoch (this is 2026.0) and treats the two kinds of change differently, so the record stays both accurate and honest about its date:
flowchart TD
X(["A proposed change"]) --> Q{"Factual error?<br/>wrong name · dead link · mis-stated fact"}
Q -->|Yes| F["✔ Fixed anytime<br/>the record stays correct"]
Q -->|No| R{"Ranking or market shift?<br/>new leader · acquisition · re-rank"}
R -->|Yes| N["→ Labeled next-epoch<br/>the 2026 edition is immutable"]
R -->|No| D["Discuss in an issue"]
classDef ok fill:#0e1220,stroke:#3fc79b,color:#eae6d9;
classDef ep fill:#0e1220,stroke:#e8b23a,color:#eae6d9;
class F ok;
class N ep;
A build-time invariant enforces it: no vendor can carry a date newer than the epoch, so a 2027 fact can't be smuggled into the 2026 edition. Full details on the methodology page and in CONTRIBUTING.md.
- Astro 5 + TypeScript (strict) — a fully static site, 0 KB of client JavaScript on content pages; the astrolabe and a couple of islands are the only scripted surfaces (≤ 47 KB gzip).
- Typed content collections (Zod) for the dataset, with the build-time data contract in
scripts/validate-data.ts. - GSAP + Lenis for the hero astrolabe; scroll-driven CSS (no JS) for the thread figures.
- Design system documented in
DESIGN.md— a "celestial survey" of role tokens, category hues, and cartographic components. - Gates on every build: data-contract validation →
astro build→ rendered-taxonomy & dead-brand re-verification → accountability "shield" checks → a Playwright rendered-regression guard → Lighthouse (perf / a11y / SEO / CLS / TBT) in CI.
flowchart LR
D["src/data<br/>(typed collections)"] --> B["astro build"]
B --> G["build gates<br/>taxonomy · denylist · shields"]
G --> P["dist/ · 371 pages"]
P --> GH["GitHub Pages<br/>gtm-k.github.io/business-model-almanac"]
git clone https://github.com/gtm-k/business-model-almanac.git
cd business-model-almanac
npm install
npm run dev # dev server at http://localhost:4321/business-model-almanac/
npm run build # production build → dist/ (runs every data + shield gate)
npm run preview # serve the built dist/ at the deployed base pathRequires Node 22. Other scripts: npm run check (astro + type check), npm run test:data (data-contract fixtures), npm run test:regression (Playwright rendered-regression guard).
Factual fixes are welcome anytime; ranking and market changes are queued for the next epoch. Corrections use dedicated issue templates so the right change lands in the right place — see CONTRIBUTING.md.
- How the rankings are made: methodology page.
- Process taxonomy: the APQC Process Classification Framework (PCF®) — Cross-Industry, v7.4. Category and process names are reproduced from the framework; APQC holds the PCF.
- Code (everything that builds the site) — MIT.
- Content (the rankings, editorial text, and dataset) — CC BY 4.0; reuse it with attribution to the Business Model Almanac.
See LICENSE for the full terms.
