View For Picture
Elements (47)Elements (46)
Sell Licencearchimate:businessprocess
sell-licenceTurn an interested reader of the free version into a paying customer: they download the free build, pick a plan, pay online, and receive an invoice and a signed licence file. Every step is logged so the accountant sees the same sale the customer does. Runs without anyone at b9 Solutions touching it, which is the entire point — the business has one person and cannot staff a sales desk.
Financial Administrationarchimate:capability
financial-administrationFinancial Administration
The ability to turn work into an invoice, an invoice into money received, and money received into books that stand up to inspection.
It is one capability rather than three, but it is not one job. The split that matters runs between what the customer sees — an invoice they can pay — and what the tax authority sees — a ledger that reconciles. Those two halves are performed by different parties: billing is held inside the company because it needs commercial judgement about what was delivered and when to chase, while the books are kept by an external accounting practice. The capability is the company's regardless of who performs which half, which is exactly why it is modelled at this level and the performers are modelled below it.
This capability is unusual in this model in that it does not serve the product. Every other capability b9 Solutions holds exists to make ArchMeta better. This one exists so that there is a company left to build it: revenue that arrives on time, and books correct enough that no statutory obligation ever becomes a distraction from the work.
Licence Deliveryarchimate:applicationservice
licence-deliveryWhat the paying customer gets: an encrypted, signed licence file in their inbox that replaces the free one and lifts the element cap to whatever they bought. Delivery is by mail rather than by download so the entitlement reaches the customer even when the purchase was made by someone else in their organisation.
Plan Checkoutarchimate:applicationservice
plan-checkoutShows the customer what each plan costs and how many elements it allows, takes their choice, and hands them to the payment provider. Named for what the customer does, not for what the portal does internally.
Software Downloadarchimate:applicationservice
software-downloadFree and unconditional access to the ArchMeta build, licence file included. The capped free version is the trial: nothing is disabled, the repository simply cannot grow past 30 elements, so the customer evaluates the real product rather than a demonstration of it.
ArchMeta Billing Portalarchimate:applicationcomponent
billing-portalThe public web application b9 Solutions runs to sell ArchMeta without a salesperson in the loop: it hands out the free build, presents the plans, takes the customer through checkout and orchestrates everything that follows. It is the only component that observes the sale end to end, which is why the transaction log is its responsibility rather than the invoicing service's.
Licence Filearchimate:dataobject
licence-fileThe entitlement itself: a file dropped next to the ArchMeta installation that states the maximum number of elements the repository may hold. Encrypted and signed, so it can neither be read nor edited into a larger allowance. The free build ships with one capped at 30 elements; a purchase replaces it.
Transaction Loggingarchimate:applicationservice
transaction-loggingWrites down every commercially meaningful event in a sale — plan chosen, payment captured, invoice raised, licence issued — in a form the accountant can post without asking b9 what happened. Consumed by the Record Transaction business process.
The Company Is Financially Sustainablemotivation:goal
motivation.financially-sustainableRevenue arrives on time and the books are correct, so that the company can keep building the product. Getting paid and being able to prove what was paid are the same goal seen from two sides.
Accounting and Invoicing Toolchainarchimate:resource
accounting-toolchainThe bookkeeping and invoicing tools the company runs on, plus the chart of accounts and templates behind them. Small enough that the whole finance function costs a few hours a month.
Issue Invoicearchimate:businessprocess
issue-invoiceTurn delivered work or an active subscription period into an invoice, and send it to the customer with terms attached.
Collect Paymentarchimate:businessprocess
collect-paymentReconcile the provider's settlements back to open invoices, resolve what does not match, and chase what is overdue or failed. The capture of funds itself is outsourced; what stays in-house is knowing which invoices a batched payout actually cleared.
Record Transactionarchimate:businessprocess
record-transactionPost every invoice raised, payment received and cost incurred to the ledger, against the right account and in the right period. Reads the invoice and payment records the company produces; writes the ledger.
Close Accounting Periodarchimate:businessprocess
close-accounting-periodReconcile the ledger at period end, resolve what does not balance, and produce the period accounts in the form the tax authority requires.
ArchMetaarchimate:applicationcomponent
archmeta-applicationArchMeta
ArchMeta is an enterprise architecture tool whose repository is code. Despite a powerful graphical rendering and editing engine, the point of ArchMeta is that the whole architecture repository is a set of human-readable, human-editable text files.
The objective of the approach is to ensure that the customer owns their architecture repository.
ArchMetac4:softwaresystem
archmetaA platform for managing architecture documentation as code. Architects describe their organisation in a textual DSL stored in Git; the Kernel reads that repository into an in-memory graph and serves it over REST, the Viewer authors it, and the Publisher turns it into a static site. There is no database — Git is the source of truth, and the same commit always produces the same model.
ArchMeta Deploymentarchimate:node
deploymentHow ArchMeta is run. Everything below is a technology-layer reading of the containers above: images, the runtime that executes them, and the volumes that carry state. The product itself is stateless — all state is the mounted Git working tree.
CLIc4:container
archmeta.cliThe command surface: archmeta init scaffolds a repository with its metamodel profiles, archmeta load reports the model and its diagnostics, archmeta build generates the site, archmeta daemon serves the Kernel and the Viewer. The only entry point in a CI pipeline.
Diagram Renderc4:container
archmeta.diagram-renderThe rendering primitives both renderers share: geometry, element shapes, orthogonal routing, status styling, relationship chips and the link indicator. One implementation per render boundary is an enforced rule — a diagram must look the same on the canvas and on the published site, and the only way to guarantee that is to give them one function.
Generated Sitec4:container
archmeta.static-siteThe deliverable: static HTML, CSS and JavaScript with a prebuilt search index. No server, no database, no API — it can be served from object storage, a CDN, an nginx container or a filesystem, which is the point.
Grammarc4:container
archmeta.grammarThe Langium grammars for .arch, .data, .view, .cascade and .metamodel, plus the generated parsers and TextMate syntaxes. Depends on nothing else in the product — deliberately, so the language can be reasoned about without the Kernel.
Kernelc4:container
archmeta.kernelReads the repository into an in-memory graph and serves it over REST on port 7777. Never throws on model content: unresolved references, malformed attributes and rule violations become diagnostics, and the load always completes. A pure function of the repository — no clock, no randomness, no network during a load — so the same commit produces the same model and the same diagnostics forever.
Kernel Clientc4:container
archmeta.kernel-clientThe wire contract: the types crossing HTTP, and the predicates that must not be re-implemented on either side of it. Shared so the Viewer and the generated site cannot disagree about what a relationship means.
Publisherc4:container
archmeta.publisherGenerates the static site from a loaded model: element pages, view pages with interactive SVG diagrams, the BPMN gallery and the search index. The output has no back end and carries no diagnostic data — what an architect needs to fix the model is not what a stakeholder should read.
Viewerc4:container
archmeta.viewerThe single-screen React SPA that is the primary authoring tool: model canvas, BPMN modeler, Markdown editor and Explore in one shell, flanked by a management pane and a docked Inspector. Never reads the whole graph — every instance read is a point read, a search or a bounded neighbourhood — and never touches the filesystem. Edits stage; only a commit sends them to the Kernel.
Docker Enginearchimate:node
deployment.docker-engineThe container runtime, on the architect's workstation for authoring or on a build agent for CI. Composed by a docker-compose file that wires the Kernel to the model repository volume and the site container to the generated output.
Container Imagesarchimate:node
deployment.imagesWhat is actually shipped. Multi-stage builds: the workspace is compiled once, then only the built output and production dependencies are copied into a slim runtime layer.
Volumesarchimate:node
deployment.volumesThe only state in the deployment. Both are bind mounts rather than named volumes, because the architect works on these directories with their own editor and Git client at the same time.
The Customer Owns the Repositorymotivation:goal
motivation.customer-owns-repositoryThe architecture repository is the customer's asset outright — readable, portable and usable without ArchMeta in the loop.
Custom Development Capabilityarchimate:capability
customer-dev-capabilityOur customers have their own development capability. ArchMeta extends it, linking enterprise architecture concepts to the capability the customer already has.
Enterprise Architecture Suitearchimate:businessservice
enterprise-architecture-servicesCustomer Use Architecturearchimate:businessprocess
customer-use-architectureThe architecture repository becomes an asset in the life cycle of the company.
AI-Assisted Product Engineeringarchimate:capability
ai-assisted-engineeringAI-Assisted Product Engineering
The ability to build and maintain a product of this size with AI in the loop, at a quality bar a team this small could not otherwise hold.
Concretely: roughly 40,000 lines of code under about 2,000 automated test cases. The test suite is the capability, not a by-product of it — because the Kernel never fails a load, regression tests are the only thing standing between a change and silent data loss.
This is what makes the pricing argument credible. ArchMeta can be cheaper than an in-house build while being better tested than one, and both halves of that sentence depend on this capability.
Model Repository Volumearchimate:node
deployment.volumes.model-repoThe Git working tree holding the .arch, .data, .view, .cascade, .metamodel, .bpmn and .md files, mounted read-write so the Kernel can commit. This is the database, and it is a directory.
Site Output Volumearchimate:node
deployment.volumes.site-outputWhere the Publisher writes the generated site and the site container reads it from. Disposable: it is derived entirely from the model repository at a given commit.
archmeta/kernelarchimate:technologycomponent
deployment.images.kernel-imageMulti-stage image on node:22-alpine. Build stage installs the npm workspace and compiles every package; the runtime stage carries the Kernel, the CLI and the Viewer bundle. Entry point is archmeta daemon; the model repository arrives as a mount, never baked in.
archmeta/sitearchimate:technologycomponent
deployment.images.site-imagenginx:alpine with the generated site copied into the web root. Built per model repository rather than per product release, because its content is the customer's architecture, not ArchMeta's code.
archmeta-build (job)archimate:node
deployment.docker-engine.builder-containerA one-shot container that runs archmeta build and exits. This is the CI shape: check the repository out, build the site, publish the artifact, tear everything down. Nothing persists between runs, which is safe precisely because the load is a pure function of the commit.
archmeta-kernel (container)archimate:node
deployment.docker-engine.kernel-containerRuns the Kernel daemon, publishing port 7777 and serving the Viewer bundle alongside the API. Stateless: kill it and nothing is lost, because everything it knows was read from the mounted repository and everything it changed was committed back to it.
archmeta-site (container)archimate:node
deployment.docker-engine.site-containerAn nginx image serving the generated static site. It has no connection to the Kernel and no back end of its own — once the site is built, this container is interchangeable with any static host.
Git Repositoryc4:externalsystem
git-repositoryThe model repository: .arch, .data, .view, .cascade, .metamodel, .bpmn and .md files. This IS the database. The Kernel reads it on load and commits to it on write-back; it never pushes, never pulls and never branches, and is silently inert when the directory is not a Git working tree.
LLM (Claude)c4:externalsystem
llmWhere .arch files come from in practice. The authoring loop is AI-first, which is why the DSL keeps uniform, predictable shapes a model can emit reliably and why the diagnostics and report files matter — they are the feedback channel back to the generator.
Architectarchimate:businessactor
architectDescribes the organisation in the DSL, usually by generating .arch files with an LLM and then adjusting them in the Viewer. Reloads the Kernel and reads the diagnostics to find out whether what they meant is what they wrote. The Viewer's edit mode is for curation, not bulk authoring.
Cheaper Than Building Your Ownmotivation:goal
motivation.cheaper-than-building-your-ownAdopting ArchMeta costs less than specifying, building, testing and maintaining an in-house equivalent — while holding a quality bar an in-house build would not reach.
Do-It-Yourself AI Buildsmotivation:driver
motivation.diy-ai-buildsAI has made it feasible for a customer to build their own modelling application. Any EA product is now priced against that alternative, not against other vendors.
Customer Organisationmotivation:stakeholder
motivation.customer-organisationThe organisation that adopts ArchMeta and whose architecture repository it holds. Cares that the repository remains its own asset.
The Repository Is Directly Usable by AImotivation:goal
motivation.repository-usable-by-aiAn AI agent can read, reason over and edit the repository with no adapter, no API and no training specific to this product.
Relationships (87)Relationships (7)
accounting-toolchain → financial-administrationAccounting and Invoicing Toolchain → Financial Administrationarchimate:assignment
accounting-toolchain → financial-administrationai-assisted-engineering → motivation.cheaper-than-building-your-ownAI-Assisted Product Engineering → Cheaper Than Building Your Ownarchimate:realization
ai-assisted-engineering → motivation.cheaper-than-building-your-ownAuthors and curates inc4:uses
architect → archmeta.viewerAuthors and curates the modelc4:uses
architect → archmetaarchitect → customer-use-architectureArchitect → Customer Use Architecturearchimate:assignment
architect → customer-use-architecturearchitect → enterprise-architecture-servicesArchitect → Enterprise Architecture Suitearchimate:assignment
architect → enterprise-architecture-servicesGenerates .arch files withc4:uses
architect → llmarchmeta-application → licence-fileArchMeta → Licence Filearchimate:access
archmeta-application → licence-fileLoads throughc4:uses
archmeta.cli → archmeta.kernelLoads the model through
Invokes for archmeta buildc4:uses
archmeta.cli → archmeta.publisherParses every source file withc4:dependson
archmeta.kernel → archmeta.grammararchmeta.kernel → archmeta.kernel-clientKernel → Kernel Clientc4:dependson
archmeta.kernel → archmeta.kernel-clientUsec4:uses
archmeta.kernel → git-repositoryReads on load, commits on write-back — never pushes
Same primitives as the Viewer, so the two cannot driftc4:dependson
archmeta.publisher → archmeta.diagram-renderReads the loaded model fromc4:uses
archmeta.publisher → archmeta.kernelEmitsc4:sendsto
archmeta.publisher → archmeta.static-sitearchmeta.viewer → archmeta.diagram-renderViewer → Diagram Renderc4:dependson
archmeta.viewer → archmeta.diagram-renderarchmeta.viewer → archmeta.kernel-clientViewer → Kernel Clientc4:dependson
archmeta.viewer → archmeta.kernel-clientREST over HTTPc4:uses
archmeta.viewer → archmeta.kernelREST over HTTP — never IPC, never shared state
Is the C4 reading ofarchimate:realization
archmeta → archmeta-applicationarchmeta → archmeta.cliArchMeta → CLIarchimate:composition
archmeta → archmeta.cliarchmeta → archmeta.diagram-renderArchMeta → Diagram Renderarchimate:composition
archmeta → archmeta.diagram-renderarchmeta → archmeta.grammarArchMeta → Grammararchimate:composition
archmeta → archmeta.grammararchmeta → archmeta.kernel-clientArchMeta → Kernel Clientarchimate:composition
archmeta → archmeta.kernel-clientarchmeta → archmeta.kernelArchMeta → Kernelarchimate:composition
archmeta → archmeta.kernelarchmeta → archmeta.publisherArchMeta → Publisherarchimate:composition
archmeta → archmeta.publisherarchmeta → archmeta.static-siteArchMeta → Generated Sitearchimate:composition
archmeta → archmeta.static-sitearchmeta → archmeta.viewerArchMeta → Viewerarchimate:composition
archmeta → archmeta.viewerReads the modelc4:uses
archmeta → git-repositorybilling-portal → plan-checkoutArchMeta Billing Portal → Plan Checkoutarchimate:realization
billing-portal → plan-checkoutbilling-portal → software-downloadArchMeta Billing Portal → Software Downloadarchimate:realization
billing-portal → software-downloadbilling-portal → transaction-loggingArchMeta Billing Portal → Transaction Loggingarchimate:realization
billing-portal → transaction-loggingclose-accounting-period → financial-administrationClose Accounting Period → Financial Administrationarchimate:realization
close-accounting-period → financial-administrationcollect-payment → financial-administrationCollect Payment → Financial Administrationarchimate:realization
collect-payment → financial-administrationcollect-payment → record-transactionCollect Payment → Record Transactionarchimate:triggering
collect-payment → record-transactioncustomer-dev-capability → motivation.customer-owns-repositoryCustom Development Capability → The Customer Owns the Repositoryarchimate:realization
customer-dev-capability → motivation.customer-owns-repositorycustomer-use-architecture → ai-assisted-engineeringCustomer Use Architecture → AI-Assisted Product Engineeringarchimate:realization
customer-use-architecture → ai-assisted-engineeringcustomer-use-architecture → enterprise-architecture-servicesCustomer Use Architecture → Enterprise Architecture Suitearchimate:realization
customer-use-architecture → enterprise-architecture-servicesRuns archmetaarchimate:assignment
deployment.docker-engine.builder-container → archmeta.cliRuns archmeta build via
Mounts read-onlyarchimate:access
deployment.docker-engine.builder-container → deployment.volumes.model-repoWritesarchimate:access
deployment.docker-engine.builder-container → deployment.volumes.site-outputWrites the generated site to
deployment.docker-engine.kernel-container → archmeta.kernelarchmeta-kernel (container) → Kernelc4:realization
deployment.docker-engine.kernel-container → archmeta.kernelServesarchimate:assignment
deployment.docker-engine.kernel-container → archmeta.viewerServes the bundle for
Mounts read-writearchimate:access
deployment.docker-engine.kernel-container → deployment.volumes.model-repoServesarchimate:assignment
deployment.docker-engine.site-container → archmeta.static-siteReads fromarchimate:access
deployment.docker-engine.site-container → deployment.volumes.site-outputdeployment.docker-engine → deployment.docker-engine.builder-containerDocker Engine → archmeta-build (job)archimate:composition
deployment.docker-engine → deployment.docker-engine.builder-containerdeployment.docker-engine → deployment.docker-engine.kernel-containerDocker Engine → archmeta-kernel (container)archimate:composition
deployment.docker-engine → deployment.docker-engine.kernel-containerdeployment.docker-engine → deployment.docker-engine.site-containerDocker Engine → archmeta-site (container)archimate:composition
deployment.docker-engine → deployment.docker-engine.site-containerdeployment.images.kernel-image → archmeta.kernelarchmeta/kernel → Kernelarchimate:realization
deployment.images.kernel-image → archmeta.kernelIs instantiated asarchimate:realization
deployment.images.kernel-image → deployment.docker-engine.builder-containerIs instantiated asarchimate:realization
deployment.images.kernel-image → deployment.docker-engine.kernel-containerPackagesarchimate:access
deployment.images.site-image → archmeta.static-siteIs instantiated asarchimate:realization
deployment.images.site-image → deployment.docker-engine.site-containerdeployment.images → deployment.images.kernel-imageContainer Images → archmeta/kernelarchimate:composition
deployment.images → deployment.images.kernel-imagedeployment.images → deployment.images.site-imageContainer Images → archmeta/sitearchimate:composition
deployment.images → deployment.images.site-imageRealizearchimate:realization
deployment.volumes.model-repo → git-repositoryIs the working tree of
deployment.volumes → deployment.volumes.model-repoVolumes → Model Repository Volumearchimate:composition
deployment.volumes → deployment.volumes.model-repodeployment.volumes → deployment.volumes.site-outputVolumes → Site Output Volumearchimate:composition
deployment.volumes → deployment.volumes.site-outputRunsarchimate:realization
deployment → archmetadeployment → deployment.docker-engineArchMeta Deployment → Docker Enginearchimate:composition
deployment → deployment.docker-enginedeployment → deployment.imagesArchMeta Deployment → Container Imagesarchimate:composition
deployment → deployment.imagesdeployment → deployment.volumesArchMeta Deployment → Volumesarchimate:composition
deployment → deployment.volumesenterprise-architecture-services → customer-dev-capabilityEnterprise Architecture Suite → Custom Development Capabilityarchimate:realization
enterprise-architecture-services → customer-dev-capabilityfinancial-administration → motivation.financially-sustainableFinancial Administration → The Company Is Financially Sustainablearchimate:realization
financial-administration → motivation.financially-sustainableissue-invoice → collect-paymentIssue Invoice → Collect Paymentarchimate:triggering
issue-invoice → collect-paymentissue-invoice → financial-administrationIssue Invoice → Financial Administrationarchimate:realization
issue-invoice → financial-administrationissue-invoice → record-transactionIssue Invoice → Record Transactionarchimate:triggering
issue-invoice → record-transactionlicence-delivery → licence-fileLicence Delivery → Licence Filearchimate:access
licence-delivery → licence-filelicence-delivery → sell-licenceLicence Delivery → Sell Licencearchimate:serving
licence-delivery → sell-licenceWrites generated .arch files intoc4:sendsto
llm → git-repositorymotivation.customer-organisation → motivation.diy-ai-buildsCustomer Organisation → Do-It-Yourself AI Buildsarchimate:association
motivation.customer-organisation → motivation.diy-ai-buildsmotivation.diy-ai-builds → motivation.cheaper-than-building-your-ownDo-It-Yourself AI Builds → Cheaper Than Building Your Ownarchimate:influence
motivation.diy-ai-builds → motivation.cheaper-than-building-your-ownmotivation.diy-ai-builds → motivation.repository-usable-by-aiDo-It-Yourself AI Builds → The Repository Is Directly Usable by AIarchimate:influence
motivation.diy-ai-builds → motivation.repository-usable-by-aiplan-checkout → sell-licencePlan Checkout → Sell Licencearchimate:serving
plan-checkout → sell-licencerecord-transaction → financial-administrationRecord Transaction → Financial Administrationarchimate:realization
record-transaction → financial-administrationsell-licence → financial-administrationSell Licence → Financial Administrationarchimate:realization
sell-licence → financial-administrationsell-licence → issue-invoiceSell Licence → Issue Invoicearchimate:triggering
sell-licence → issue-invoicesell-licence → licence-deliverySell Licence → Licence Deliveryarchimate:association
sell-licence → licence-deliverysell-licence → licence-fileSell Licence → Licence Filearchimate:access
sell-licence → licence-filesell-licence → plan-checkoutSell Licence → Plan Checkoutarchimate:association
sell-licence → plan-checkoutsell-licence → record-transactionSell Licence → Record Transactionarchimate:triggering
sell-licence → record-transactionsell-licence → software-downloadSell Licence → Software Downloadarchimate:association
sell-licence → software-downloadsell-licence → transaction-loggingSell Licence → Transaction Loggingarchimate:association
sell-licence → transaction-loggingsoftware-download → licence-fileSoftware Download → Licence Filearchimate:access
software-download → licence-filesoftware-download → sell-licenceSoftware Download → Sell Licencearchimate:serving
software-download → sell-licencetransaction-logging → record-transactionTransaction Logging → Record Transactionarchimate:serving
transaction-logging → record-transaction