Modern inventory & warehouse management system. Open-source, self-hostable, SaaS-ready.
- 📦 Artikelverwaltung — CRUD mit Barcode/EAN-Scan, Kategorien, Varianten, Import/Export
- 🏭 Lagerverwaltung — Mehrere Lager, Lagerplätze, Bestandsübersicht
- 📋 Inventur — Digital: Erstellen → Zählen → Differenz → Abschließen
- 🔄 Bewegungshistorie — Vollständiges Audit-Log aller Lagerbewegungen
- 🚚 Lieferanten — Kontakte, Artikel-Zuordnung, Einkaufspreise
- 👥 Benutzerverwaltung — Rollen, Einladungen, Firmenwechsel
- 🔐 SSO — OIDC/OAuth2 (Authentik-kompatibel) + lokale Auth
- 🏢 Multi-Tenant — Mehrere Unternehmen pro Instanz
- 📱 Responsive — Desktop-first, Mobile für Inventur-Scan optimiert
- 🌙 Dark Mode — via CSS Variables
- 🐳 Docker-ready — Multi-stage Build, docker-compose
# 1. Clone
git clone https://github.com/ntx007/lagora.git
cd lagora
# 2. Configure
cp .env.example .env
# Edit .env: set JWT_SECRET, etc.
# 3. Start
docker compose up -d
# 4. Seed demo data (optional)
docker compose exec api node --import tsx/esm packages/db/src/seed.tsDemo credentials:
[email protected]/admin123[email protected]/manager123
- Node.js 20+
- pnpm 10+
- PostgreSQL 16+
# Install dependencies
pnpm install
# Set up environment
cp .env.example .env
# Edit .env with your local settings
# Run database migrations
pnpm --filter @lagora/db db:migrate
# Seed demo data
pnpm --filter @lagora/db db:seed
# Start dev servers
pnpm devFrontend: http://localhost:5173
API: http://localhost:3001
API Health: http://localhost:3001/health
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite, TypeScript 5, Tailwind CSS 4 |
| Routing | TanStack Router |
| State | TanStack Query + Zustand |
| Forms | React Hook Form + Zod |
| Tables | TanStack Table |
| Charts | Recharts |
| Backend | Node.js, Hono, TypeScript |
| ORM | Drizzle ORM |
| Database | PostgreSQL 16+ |
| Auth | JWT + OIDC (Authentik) |
| Build | Turborepo + pnpm workspaces |
lagora/
├── apps/
│ ├── web/ # React frontend
│ └── api/ # Hono backend
├── packages/
│ ├── db/ # Drizzle schema + migrations
│ └── shared/ # Shared types + validators
├── docker-compose.yml
├── Dockerfile
└── .env.example
All configuration via environment variables. See .env.example for full reference.
| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | — |
JWT_SECRET |
Secret for JWT signing (min 16 chars) | — |
OIDC_ENABLED |
Enable OIDC/SSO login | false |
OIDC_ISSUER |
OIDC provider URL (e.g. Authentik) | — |
STORAGE_TYPE |
File storage: local or s3 |
local |
SAAS_MODE |
Enable multi-tenant SaaS features | false |
cp .env.example .env
# Configure .env
docker compose up -dSee docs/kubernetes.md (coming soon)
The official instance is deployed via Docker on a dedicated host behind a reverse proxy (SWAG/nginx).
REST API with OpenAPI schema available at /api/docs (coming soon).
Key endpoints:
POST /api/auth/login— Login with email/passwordGET /api/auth/me— Current userGET /api/articles— List articles (with pagination, search, filter)POST /api/articles— Create articleGET /api/warehouses— List warehousesPOST /api/inventories— Create inventoryPOST /api/inventories/:id/start— Start inventoryPOST /api/inventories/:id/complete— Complete & apply stock changesGET /api/stock/movements— Movement historyGET /api/dashboard/stats— Dashboard KPIs
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Commit with conventional commits:
git commit -m "feat: add barcode scanner" - Push and open a Pull Request
MIT — see LICENSE
Built with ❤️ — Open-source, self-hostable, production-ready.
