Enterprise-grade Business Management Platform built with Domain-Driven Design and Hexagonal Architecture
Skeleton is a modular business management platform designed for small and medium businesses — from retail shops and service companies to manufacturing firms. The system adapts to your business model: enable the contexts you need, disable the rest.
- Retail & Trade: orders, invoices, inventory, catalog, procurements
- Manufacturing: bills of materials, production orders, work orders, raw material tracking
- Services: contracts, documents, approvals, time tracking
- Accounting & Finance: double-entry bookkeeping, journal entries, reconciliation, full reporting
| Code | Language | Flag |
|---|---|---|
en |
English | 🇬🇧 |
uk |
Українська | 🇺🇦 |
de |
Deutsch | 🇩🇪 |
Business context documentation is available in all 3 languages in docs/contexts/. The frontend (Office) supports all 3 languages with runtime switching.
The system is composed of 17 autonomous bounded contexts, each responsible for a cohesive business capability. Contexts communicate exclusively through domain events — no direct imports between contexts.
Business documentation is available in 3 languages: en, uk, de.
| Context | Capability | Docs |
|---|---|---|
| Identity | Authentication, RBAC, sessions, JWT | en |
| Parties | Customers, suppliers, partners, employees, loyalty, credit limits | en |
| Ordering | Orders, order lines, quotes, cancellation, status transitions | en |
| Invoicing | Invoices, credit notes, payments, installments | en |
| Accounting | Chart of accounts, double-entry, journal entries, periods, reconciliation | en |
| Catalog | Products, categories, variants, pricing rules | en |
| Inventory | Warehouses, stock, movements, reservations, stock takes | en |
| Procurements | Purchase orders, goods receipts, supplier ordering | en |
| Manufacturing | Bills of materials, production orders, work orders | en |
| Contracts | Contract lifecycle, amendments, auto-renewal, approvals | en |
| Documents | Templates, signatures, approval workflows | en |
| Reports | Dashboard, revenue, accounting reports, analytics | en |
| Notifications | Email, templates, preferences, background delivery | en |
| Audit | Cross-context action audit trail | en |
| Tasks | Background jobs, schedules, retry logic | en |
| Files | Upload, processing, storage | en |
| Status | Health checks, system info | en |
The Reports context provides 14 built-in reports covering operational and financial analytics:
| Report | Description |
|---|---|
| Dashboard | Key metrics: revenue, orders, customers, stock alerts |
| Revenue | Revenue trends by day/week/month |
| Top Customers | Customer ranking by purchase volume |
| Accounts Summary | Balances by account type |
| Low Stock Alerts | Items below reorder point |
| Aging Receivables | Overdue invoices grouped by 30/60/90+ days |
| Customer Acquisition | New customers over time |
| Order Status | Order distribution by status |
| Trial Balance | Opening/turnover/closing balances per account |
| General Ledger | Posted journal entries with cursor pagination |
| Profit & Loss | Revenue vs expenses, net profit |
| Balance Sheet | Assets, liabilities, equity snapshot |
| Cash Flow | Operating/investing/financing flows |
| Tax Report | Tax liabilities, payments, amounts due |
Detailed business-oriented documentation for each context — what it does, why it matters, and how it works — is available in docs/contexts/ in 3 languages:
docs/contexts/
├── en/ # English
├── uk/ # Українська
└── de/ # Deutsch
Generate PDFs for all or a specific language:
make context-docs # All languages
make context-docs-en # English only
make context-docs-uk # Ukrainian only
make context-docs-de # German only
# ... etc.| Document | Description |
|---|---|
| ARCHITECTURE.md | System architecture, CQRS, hexagonal, bounded contexts |
| BOUNDED_CONTEXTS.md | Detailed technical description of each bounded context |
| CONTEXT_MATURITY.md | Context maturity status, gaps, sprint history |
| RBAC.md | Access control model: roles, permissions, matrix, wildcards |
| EVENT_BUS.md | Event bus, cross-context communication |
| SETUP.md | Project setup and running |
| DEVELOPMENT.md | Development workflow, conventions |
| DATABASE.md | DB schema, migrations, ER diagram, conventions |
| API.md | REST API documentation |
ADR records in docs/adr/, index — docs/adr/README.md.
skeleton/
├── backend/ # Go API server
│ ├── cmd/api/ # Entry point + Wire injector
│ ├── internal/ # Bounded contexts (DDD)
│ │ ├── di/ # Wire DI provider sets
│ │ ├── accounting/ # Accounts, transactions, journal entries
│ │ ├── audit/ # Audit trail
│ │ ├── catalog/ # Product catalog
│ │ ├── contracts/ # Contract lifecycle, amendments
│ │ ├── documents/ # Templates, signatures, approvals
│ │ ├── files/ # File uploads, processing
│ │ ├── identity/ # Auth, RBAC, sessions
│ │ ├── inventory/ # Stock, warehouses, movements
│ │ ├── invoicing/ # Invoices, payments, credit notes
│ │ ├── manufacturing/ # BOMs, production orders, work orders
│ │ ├── notifications/ # Email, templates, preferences
│ │ ├── ordering/ # Orders, quotes
│ │ ├── parties/ # Customers, suppliers, partners, employees
│ │ ├── procurements/ # Purchase orders, goods receipts
│ │ ├── reports/ # Dashboard, analytics, accounting reports
│ │ ├── status/ # Health checks, system info
│ │ └── tasks/ # Background jobs, schedules
│ ├── pkg/ # Shared packages
│ │ ├── eventbus/ # In-memory + Redis event bus
│ │ ├── money/ # Money value object (int64 cents)
│ │ ├── pagination/ # Cursor-based pagination
│ │ ├── apierror/ # RFC 7807 error responses
│ │ └── ...
│ ├── migrations/ # 17 SQL migrations by context
│ └── scripts/seed/ # Seed verification
├── web/ # Frontend applications
│ ├── office/ # Back-office UI (Angular 21 + PrimeNG 21)
│ └── commerce/ # E-commerce UI (Angular 21 + PrimeNG 21)
├── docs/ # Documentation
│ ├── contexts/ # Business context docs (9 languages)
│ │ ├── en/ # English
│ │ ├── uk/ # Українська
│ │ ├── de/ # Deutsch
│ │ ├── fr/ # Français
│ │ ├── es/ # Español
│ │ ├── pt/ # Português
│ │ ├── zh/ # 中文
│ │ ├── ko/ # 한국어
│ │ ├── ja/ # 日本語
│ │ └── pdf/ # Generated PDFs
│ └── ...
├── docker-compose.yml # Development environment
└── Makefile # Build automation
git clone https://github.com/basilex/skeleton.git
cd skeleton
# Start PostgreSQL + Redis
docker-compose up -d
# Apply migrations
for f in backend/migrations/*.up.sql; do
docker exec -i skeleton-postgres psql -U skeleton -d skeleton < "$f"
done
# Run API
cd backend && go run ./cmd/api/- Email:
admin@skeleton.local - Password:
03041965 - Role:
super_admin(full access*:*)
All endpoints require JWT authentication and RBAC permissions. Key routes:
# Auth
POST /api/v1/auth/login # Login
POST /api/v1/auth/register # Register
POST /api/v1/auth/refresh # Refresh token
# Parties
CRUD /api/v1/customers # Customers
CRUD /api/v1/suppliers # Suppliers
# Ordering
CRUD /api/v1/orders # Orders
POST /api/v1/orders/:id/lines # Add order line
POST /api/v1/orders/:id/cancel # Cancel order
CRUD /api/v1/quotes # Quotes
# Invoicing
CRUD /api/v1/invoices # Invoices
CRUD /api/v1/credit-notes # Credit notes
# Accounting
CRUD /api/v1/accounts # Chart of accounts
CRUD /api/v1/journal-entries # Journal entries
CRUD /api/v1/accounting-periods # Accounting periods
CRUD /api/v1/reconciliations # Reconciliations
# Catalog
CRUD /api/v1/catalog/items # Products
CRUD /api/v1/catalog/categories # Categories
CRUD /api/v1/catalog/variants # Variants
CRUD /api/v1/catalog/pricing-rules # Pricing rules
# Inventory
CRUD /api/v1/warehouses # Warehouses
CRUD /api/v1/stock # Stock levels
CRUD /api/v1/stock-takes # Stock takes
# Procurement
CRUD /api/v1/purchase-orders # Purchase orders
POST /api/v1/purchase-orders/:id/submit # Submit PO
POST /api/v1/purchase-orders/:id/confirm # Confirm PO
CRUD /api/v1/goods-receipts # Goods receipts
# Manufacturing
CRUD /api/v1/boms # Bills of materials
CRUD /api/v1/production-orders # Production orders
CRUD /api/v1/work-orders # Work orders
# Contracts & Documents
CRUD /api/v1/contracts # Contracts
CRUD /api/v1/documents # Documents
CRUD /api/v1/templates # Document templates
# Reports
GET /api/v1/reports/dashboard # Dashboard metrics
GET /api/v1/reports/trial-balance # Trial balance
GET /api/v1/reports/general-ledger # General ledger
GET /api/v1/reports/profit-and-loss # Profit & loss
GET /api/v1/reports/balance-sheet # Balance sheet
GET /api/v1/reports/cash-flow # Cash flow
GET /api/v1/reports/tax # Tax report
Full API documentation: docs/API.md
| Decision | Approach |
|---|---|
| Architecture | Hexagonal (ports & adapters) + CQRS |
| Domain model | DDD: aggregates, value objects, domain events |
| Database | PostgreSQL 16+ with pgx driver, golang-migrate |
| Access control | RBAC with wildcards (*:*, users:*, users:read) |
| Pagination | Cursor-based (UUID v7) |
| Money | int64 cents (never float) |
| DI | Google Wire (compile-time) |
| Event Bus | In-memory + Redis (pub/sub) |
| HTTP | Gin with middleware: auth, RBAC, rate limit, recovery |
make help # All commands
make dev # Docker-compose up
make backend # Wire generate + run API
make backend-wire # Regenerate Wire DI
make test # Tests
make test-coverage # Tests with coverage
make context-docs # Generate PDFs for all languages
make context-docs-en # Generate PDFs for English only
make context-docs-clean # Remove generated PDFsFull reference: docs/MAKEFILE_REFERENCE.md
MIT License — see LICENSE.