Skip to content

Repository files navigation

Gable Documentation

Documentation for the Gable open-source LBM (lumber & building-materials) ERP ecosystem.

Gable is an operations platform purpose-built for lumber and building-materials dealers — quoting, orders, inventory, purchasing, delivery and routing, POS, B2B portal, and accounting — as a modern, self-hostable alternative to legacy systems like Epicor BisTrack, ECI Spruce, and DMSi Agility.

This repository is the documentation home. The code lives elsewhere; see Where things live.


Start here

New to the project? Read in this order:

  1. Getting started — prerequisites, clone, make upmake migrateDEMO_SEED=1 make seed, run the API and the SPA. Ten minutes.
  2. Architecture — what the ~40 backend modules are, how they talk to each other, and what the API surfaces are.
  3. How to contribute — branch model, pre-flight gates, how contributions are licensed.

About to touch money? Money and rounding is not optional reading. Money is not represented uniformly across modules, and four rounding and tax defects are known-open.

About to deploy this anywhere? Self-hosting — and specifically the AUTH_MODE=dev warning, which is the single setting most likely to turn a demo into an incident.


Contents

Guides — task-oriented

Page What it covers
Getting started Prerequisites, local setup, the real Make targets and ports
Self-hosting Deployment shape, required configuration, known-open hardening gaps
Running the tests Every gate CI enforces, and how DB-backed tests skip without Postgres

Architecture — how the system is put together

Page What it covers
Overview Module boundaries as built, inter-module communication, API strategy, hosting
Modularization blueprint The installable-apps platform: design, conversion recipe, phases
External services roadmap Forward-looking decision capture for routing, geocoding and AI at production grade

Reference — look it up

Page What it covers
Money and rounding The cents/dollars split, rounding rules, and four known-open defects
Licensing Per-component licensing in practice; how to tell which license governs a file
Database ERD Physical data model and entity-relationship diagrams
Design system Colours, typography, component patterns

Contributing

Page What it covers
How to contribute Branch model, pre-flight checklist, CLA, issue routing
Contributing with Claude The agent kit: installation, worked examples, ground rules — the lowest-risk first contribution in the ecosystem
Code of Conduct Contributor Covenant 2.1

Where things live

Documentation is here; everything it describes is in a sibling repository.

Repository Contents
gable The ERP monorepo — Go backend, Lit frontend, migrations. The source of truth for behaviour.
openlbm The OpenLBM Standard — the six license texts, the normative Definitions Core, the Gable Charter. Canonical for licensing.
gable-sdk Module SDK and API client — the permissive Connector seam
gable-portal Contractor / B2B portal
gable-ai-lm AI_LM satellite — load management
brand Marks and brand assets

When a doc here and the code there disagree, the code is right. Please open a PR against these docs when you find drift.

The stack, in one table

Layer Technology
Backend Go 1.25 (stdlib net/http.ServeMux + pgx v5)
Database PostgreSQL 16
Frontend Lit 3 web components + TypeScript 5.9 + Vite 7 + Tailwind 3.4
Packaging Docker

Things that are easy to get wrong

Documented here because they cause real bugs, and because a plausible-sounding wrong answer is worse than no answer.

Claim you will see somewhere Reality
"Money is stored in cents." The target, not the current state. ERP orders/invoices and account use int64 cents; portal, quotes and DailyTill use float64 dollars. See Money and rounding.
"Modules communicate over an event bus." Future design. No NATS client is imported anywhere. Every cross-module effect is a synchronous Go call.
"Everything is an installable app." Partially built. Two modules are converted to manifests; the rest are declared centrally in backend/cmd/server/catalog.go. See the blueprint.
"AUTH_MODE=dev is a deployment option." It disables authentication and authorization entirely. Local development only. See Self-hosting.
"Postgres is on 5432." The dev database is on 5434 — that is the docker-compose.yml mapping and the backend's default.
"govulncheck gates the merge." Advisory only. Coverage is reported and not enforced either.

Contributing to these docs

Same model as the code: open your PR against staging, which maintainers fast-forward to main.

Two rules specific to documentation:

  1. Verify against the source, not against another doc. This repository documents software that lives somewhere else, which is the whole difficulty — a page here can be beautifully written and completely wrong because the code moved. Clone gable and grep it. Cite file:line for claims about behaviour. If a documented command fails when you run it, that failure is the bug.

  2. Every Markdown file needs an SPDX header:

    <!--
    SPDX-License-Identifier: LicenseRef-OpenLBM-Docs-1.0
    SPDX-FileCopyrightText: 2026 FutureBuild, Inc. and OpenLBM contributors
    -->

    Files with --- frontmatter put the tags as # comments inside the frontmatter block. Images get a <filename>.license sidecar. reuse lint checks this.

This repository ships a Claude Code agent kit in .claude/ that loads automatically when you open the project — skills for improving docs, filing issues, describing a workflow, checking licensing, and running the pre-flight. You don't have to use it, and you remain responsible for what you submit. Installation and worked examples: Contributing with Claude.

There is also a pre-flight script in this repository:

python3 tools/check-docs.py --gable /path/to/gable

It checks that every relative link resolves, every file carries an SPDX header, every make target and npm run script named here is real, and every cited gable path exists. Then run reuse lint. CI runs both — the last two gates need a gable checkout, and CI does that checkout rather than letting them skip.

Full details: How to contribute.


Licensing

Everything in this repository is LicenseRef-OpenLBM-Docs-1.0 — attribution and share-alike. Reuse and adapt it, even commercially: credit "the OpenLBM/Gable project", link the source, indicate changes, and distribute adaptations under the same terms. The full text is in LICENSE and LICENSES/; REUSE.toml covers the tree in machine-readable form.

The Gable and OpenLBM marks are not covered by that license. Trademark use is governed separately by LicenseRef-OpenLBM-Trademark.

The wider project is licensed per component — different directories under different OpenLBM Profiles. How that works in practice: Licensing. The canonical, authoritative Standard is published at https://github.com/FutureBuildAIinc/openlbm.


Security

To report a vulnerability, follow SECURITY.md in the reference repository — do not open a public issue.

About

Gable documentation (OpenLBM-Docs)

Topics

Resources

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages