- Added delete and approve functionality for purchase orders in the procurement dashboard. - Integrated toast notifications for user feedback on actions. - Updated the purchase orders table to include action buttons for viewing, editing, approving, and deleting orders. refactor: improve stage editor panel UI and functionality - Refactored StageEditorPanel to use a dialog for better user experience. - Enhanced input handling and added custom fields management. - Improved layout and organization of inputs and outputs sections. fix: streamline template builder page layout - Adjusted layout of the template builder page for better responsiveness and usability. - Ensured the StageEditorPanel is displayed correctly when a node is selected. feat: implement vendor code generation logic - Created a new utility function to generate unique vendor codes based on the vendor name. - Updated the vendor creation form to auto-generate vendor codes and display them to the user. - Removed manual vendor code input requirement, improving user experience and reducing errors.
ERP System — Inventory & Supply Chain (Phase 1)
A modular ERP built in phases. Phase 1 delivers Inventory & Supply Chain: master data, procurement, goods receipt, and stock management with FIFO costing, multi-warehouse, single-tenant.
Monorepo: a .NET 10 REST API backend and a Next.js frontend, with all documentation under docs/.
Repository layout
erp-monorepo/
├── Backend/ # ASP.NET Core Web API (.NET 10, PostgreSQL) + PROGRESS.md
├── Frontend/ # Next.js (App Router, TypeScript) + PROGRESS.md
└── docs/ # all documentation — START AT docs/00-CORE.md
Start here
All work begins at docs/00-CORE.md — the hub. It defines structure, tech stack, backend setup, and routes you to the right doc.
| Doc | Purpose |
|---|---|
docs/00-CORE.md |
Hub: structure, stack, backend init, routing |
docs/01-DOC-GUIDE.md |
Doc map, reading order, tracking conventions |
docs/10-BACKEND-PHASE1.md |
Backend spec: SRS + ER model + architecture |
docs/11-BACKEND-PHASE1.md |
Backend API reference (complete req/res) |
docs/20-FRONTEND.md |
Frontend user-flows + rules + validation posture |
Backend/PROGRESS.md, Frontend/PROGRESS.md |
Change checklists (git-shared) |
Prerequisites
- .NET 10 SDK (
dotnet --version→10.0.x) - PostgreSQL running on localhost
dotnet-eftool (dotnet tool install --global dotnet-ef)- Node.js (for the frontend)
Run the backend
# create the database in your local Postgres first, e.g.:
# createdb -U postgres ERPCore (or: CREATE DATABASE "ERPCore"; in psql)
cd Backend/ERPCore
# set Username/Password in appsettings.Development.json to your local Postgres login
dotnet ef database update
dotnet run
- Swagger UI:
https://localhost:<port>/swagger - Health:
https://localhost:<port>/health→Healthy
Full setup (packages, folder scaffold, Program.cs wiring) is in docs/00-CORE.md §5.
Run the frontend
cd Frontend
cp .env.local.example .env.local # set NEXT_PUBLIC_API_BASE_URL=https://localhost:<port>
npm install
npm run dev
Configuration & secrets
- Three appsettings files: base (
appsettings.json, placeholders only),Development(localhost),Production(env vars). - Local dev only currently. Before any shared/staging/production use, move secrets to User Secrets (dev) and environment variables (prod), keep
appsettings.Development.json/appsettings.Production.jsonout of git, and rotate any credential ever committed.
Tech stack
Backend: .NET 10, ASP.NET Core Web API, EF Core 10, PostgreSQL (Npgsql), JWT bearer auth, Serilog, Swashbuckle/Swagger, HealthChecks. Layering: Controller → Service → Repository → UnitOfWork, DTOs at the controller boundary, FIFO in a domain service. Frontend: Next.js (App Router) + TypeScript, plain React hooks, dependency-free validation (client for UX; server is authoritative).
Conventions
- Documentation: one source of truth per topic; edit in place; navigate from
docs/00-CORE.md. - Progress: update the relevant
PROGRESS.mdin the same commit as the code (docs/01-DOC-GUIDE.md §6).
Roadmap (future phases)
Sales & CRM · Manufacturing & Production · QC/QA · Accounting · HRM. Phase 1 reserves the integration seams (GL-ready journal entries, reservation status, goods-issue movement, inspection hold, user identity) so later phases integrate without a schema migration.