ERP modular untuk operasional perusahaan, dibangun dengan Go, React, dan arsitektur SaaS database-per-tenant.
Documentation · Report a bug · Request a feature
Codeverta ERP adalah aplikasi enterprise terpadu untuk mengelola penjualan, pembelian, stok, akuntansi, manufaktur, CRM, HR, project, dan administrasi organisasi melalui satu antarmuka.
Backend menggunakan satu codebase Go dan frontend React yang sama untuk semua tenant. Dalam mode SaaS, setiap tenant memiliki database, user, transaksi, konfigurasi, dan namespace file sendiri.
Important
Mode database-per-tenant sudah memiliki fondasi isolasi request dan database, tetapi masih bersifat opt-in. Baca batas implementasi dan checklist go-live sebelum mengaktifkannya di production.
- Selling — customer, quotation, sales order, sales invoice, POS, pricing rule, dan loyalty.
- Buying — supplier, material request, purchase order, purchase invoice, dan penerimaan barang.
- Stock — item, warehouse, UOM, price list, item price, delivery note, dan stock entry.
- Accounting — chart of accounts, general ledger, journal entry, payment, tax, budget, dan financial report.
- Manufacturing — BOM, operation, workstation, work order, raw material, costing, dan quality inspection.
- CRM — lead, opportunity, customer, address, contact, dan customer group.
- HR — employee, attendance, leave, payroll, dan struktur organisasi.
- Projects — project, task, timesheet, dan pelacakan pekerjaan.
- Platform — user, role, permission, role profile, module profile, audit log, notification, dan impersonation.
- Security — JWT/refresh token, WebAuthn, login throttling, rate limit, request size limit, dan audit trail.
- Realtime & integrations — WebSocket notification, email, object storage, webhook, dan payment integration.
- Desktop — aplikasi native ringan untuk macOS, Windows, dan Linux melalui Tauri.
Internet
│
▼
DNS / TLS / HAProxy
│
┌────────────┴────────────┐
▼ ▼
React Admin UI Go + Gin API
│
Tenant Resolver
│
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
platform_db erp_alpha erp_beta
tenant registry tenant Alpha tenant Beta
Prinsip SaaS yang dipakai:
ONE APPLICATION · ONE CODEBASE · ONE DEPLOYMENT · ONE DATABASE PER TENANT
Detail desain tersedia di Database-per-Tenant Architecture.
| Area | Teknologi |
|---|---|
| Frontend | React 19, TypeScript, Vite 7, Tailwind CSS, Radix UI/shadcn, TanStack Table |
| Backend | Go 1.25, Gin, GORM |
| Database | MariaDB 11.8 / MySQL-compatible database |
| Cache & jobs | Redis |
| Reverse proxy | HAProxy |
| Desktop | Tauri 2 |
| Testing | Vitest, Testing Library, Go testing |
| Deployment | Docker Compose, multi-stage Docker images |
.
├── apps/
│ ├── admin/ # React admin dashboard dan Tauri app
│ └── backend/ # Go API, CLI, model, controller, dan modules
│ ├── cmd/erp/ # Platform dan tenant CLI
│ ├── internal/tenancy/ # Resolver, context, pool, namespace
│ ├── internal/platform/ # Platform auth, provisioning, entitlement
│ └── modules/ # Vertical ERP modules
├── docs/ # Dokumentasi teknis dan operasional
├── haproxy/ # Shared HTTP routing
├── docker-compose.yml # Deployment default/legacy
├── docker-compose.multitenant.yml # Overlay database-per-tenant
└── pnpm-workspace.yaml # Monorepo workspace
Pilih salah satu metode berikut:
-
Docker Compose — direkomendasikan untuk mencoba aplikasi
- Docker Engine atau Docker Desktop;
- Docker Compose v2.
-
Native development
- Node.js 24;
- pnpm 11.3;
- Go 1.25;
- MariaDB/MySQL;
- Redis.
git clone https://github.com/codeverta/enterprise.codeverta.com.git
cd enterprise.codeverta.comcp .env.example .env
cp apps/backend/.env.example apps/backend/.env
cp apps/admin/.env.example apps/admin/.envUntuk Docker Compose default, pastikan frontend menggunakan shared proxy:
# apps/admin/.env
VITE_BASE_API_URL=http://localhost
VITE_COS_CDN_BASE_URL=http://localhostGanti seluruh placeholder secret sebelum deployment di luar development. Minimal, buat JWT_SECRET sepanjang 64 karakter atau lebih:
openssl rand -base64 64docker compose up -d --buildPeriksa container:
docker compose ps
docker compose logs -f backend-goBuka aplikasi di http://localhost.
Untuk menghentikan aplikasi tanpa menghapus data:
docker compose downCaution
Jangan menambahkan -v pada docker compose down jika database masih diperlukan. Opsi tersebut menghapus volume data MariaDB.
Pastikan MariaDB dan Redis lokal sudah aktif, lalu sesuaikan koneksi di apps/backend/.env:
SQL_DSN=codeverta:change-me@tcp(127.0.0.1:3306)/codeverta_erp?charset=utf8mb4&parseTime=True&loc=Local
REDIS_CONN_STRING=redis://127.0.0.1:6379/0Install dependency:
corepack enable
corepack prepare pnpm@11.3.0 --activate
pnpm install --frozen-lockfileJalankan backend dan frontend pada terminal terpisah:
pnpm dev:backendpnpm dev:adminAlamat development:
- Admin UI: http://localhost:5174
- Backend API: http://localhost:8084
Gunakan Compose overlay setelah semua secret multi-tenant diisi:
docker compose \
-f docker-compose.yml \
-f docker-compose.multitenant.yml \
up -d --buildBuat administrator platform pertama:
docker compose \
-f docker-compose.yml \
-f docker-compose.multitenant.yml \
exec backend-go ./erp platform create-admin \
--email platform-admin@example.com \
--password 'PASSWORD-ADMIN-PLATFORM'Buat tenant pertama:
docker compose \
-f docker-compose.yml \
-f docker-compose.multitenant.yml \
exec backend-go ./erp tenant create alpha \
--name "PT Alpha" \
--domain alpha.erp.example.com \
--plan starter \
--admin admin@alpha.example.comCLI menghasilkan database, user database, schema ERP, dan admin awal tenant. Jika --admin-password tidak diberikan, password aman ditampilkan satu kali.
Panduan environment, platform_db, CLI/API, custom domain, migration, pool, keamanan, dan troubleshooting tersedia di Multi-Tenant Operations Guide.
| Perintah | Fungsi |
|---|---|
pnpm dev |
Menjalankan frontend dan backend secara paralel |
pnpm dev:admin |
Menjalankan Vite admin UI |
pnpm dev:backend |
Menjalankan Go API |
pnpm build |
Build admin web |
pnpm --filter admin-page test |
Menjalankan test frontend |
pnpm --filter admin-page lint |
Menjalankan lint frontend |
pnpm dev:desktop |
Menjalankan aplikasi desktop development |
pnpm desktop:data |
Debug user, reset password, backup, dan restore database offline |
pnpm build:desktop |
Build binary desktop pada OS aktif |
pnpm run tauri:build:macos |
Build .app dan .dmg macOS |
pnpm run tauri:build:windows |
Build installer Windows pada runner Windows |
pnpm run tauri:build:linux |
Build .deb dan .AppImage pada runner Linux |
pnpm --filter admin-page test -- src/modules/selling/pages/SalesOrderPage.test.tsxcd apps/backend
JWT_SECRET=dummy_secret_for_test_12345678901234567890123456789012345678901234567890 \
go test -v ./internal/tenancyCI menjalankan build frontend, verifikasi Go module, seluruh Go test, dan build backend pada setiap push/pull request ke main dan develop.
Dashboard React yang sama tersedia sebagai aplikasi Tauri:
pnpm dev:desktop
pnpm build:desktopPaket distribusi harus dibuat pada OS target:
pnpm build:desktop:macos
pnpm build:desktop:windows
pnpm build:desktop:linuxBaca Desktop/Tauri Guide untuk konfigurasi API, mode offline, backup/restore, signed auto-update, release notes, dan packaging lintas OS.
Build native untuk tiga platform tersedia melalui workflow Desktop Builds. Jalankan workflow secara manual dari tab Actions, atau buat tag versi seperti v0.0.1. Hasil .dmg/.app macOS, .exe/.msi Windows, dan .deb/.AppImage Linux tersedia sebagai artifact workflow.
| Dokumen | Isi |
|---|---|
| Documentation website | Panduan penggunaan ERP |
| Multi-Tenant Operations | Instalasi SaaS, tenant CLI/API, domain, migration, dan troubleshooting |
| Database-per-Tenant Architecture | Keputusan arsitektur, isolation, security, dan scaling |
| Core Extraction | Boundary core ERP dan aturan ekstensi |
| DocType Lifecycle | Lifecycle metadata DocType |
| Desktop/Tauri | Development dan release aplikasi desktop |
Kontribusi melalui issue dan pull request dipersilakan sesuai kebijakan repository:
- buat issue atau pilih issue yang tersedia;
- fork repository dan buat branch terpisah;
- pertahankan boundary module dan tenant isolation;
- tambahkan test terarah untuk perubahan;
- jalankan lint/build/test yang relevan;
- buka pull request dengan penjelasan masalah, solusi, dan cara verifikasi.
Untuk perubahan backend, hindari global database connection pada business query. Database harus berasal dari tenant request/job context.
Jangan melaporkan credential, token, atau data customer di public issue. Hindari menyalakan endpoint/job legacy dalam strict tenant mode sebelum alur tersebut mempunyai tenant mapping yang dapat diverifikasi.
Prinsip keamanan utama:
- tenant dipilih dari hostname yang terdaftar dan terverifikasi;
- tenant ID pada JWT harus sama dengan tenant hostname;
- password database tenant dienkripsi;
- cache, file, job, dan WebSocket wajib memiliki namespace tenant;
- platform admin terpisah dari user ERP tenant;
- query ERP tidak boleh fallback ke
platform_db.
Repository ini belum memiliki file LICENSE. Sampai lisensi resmi ditambahkan, hak penggunaan, modifikasi, dan distribusi tidak boleh diasumsikan sebagai lisensi open-source.
Built by Codeverta