MRP Codex
Foundation release for a modular Manufacturing Resource Planning platform built with React, Express, Prisma, SQLite, and a single-container Docker deployment.
Current foundation scope includes:
- authentication and RBAC
- company branding and theme settings
- CRM customers and vendors with create/edit/detail workflows
- CRM search, filtering, status tagging, and reseller hierarchy
- CRM contact history, account contacts, and shared attachments
- inventory item master and BOM foundation
- file storage and PDF rendering
Workspace
client: React, Vite, Tailwind frontendserver: Express API, Prisma, auth/RBAC, file storage, PDF renderingshared: shared TypeScript contracts and constants
Local Development
- Use Node.js 22 for local development if you want Prisma migration commands to behave the same way as Docker.
- Install dependencies with
npm.cmd install. - Copy
.env.exampleto.envand adjust values if needed. - Generate Prisma client with
npm run prisma:generate. - Apply committed migrations with
npm run prisma:deploy. - Start the workspace with
npm run dev.
The frontend runs through Vite in development and is served statically by the API in production.
Seeded admin credentials for first login:
- email:
admin@mrp.local - password:
ChangeMe123!
Docker
Build and run:
docker build -t mrp-codex .
docker run -p 3000:3000 -v mrp_data:/app/data mrp-codex
Command-line build notes:
- The Dockerfile is intended to be built directly from the repo root with
docker build puppeteerbrowser download is disabled during image build because the runtime image installs system Chromium- You can override the Node base image version if needed:
docker build --build-arg NODE_VERSION=22 -t mrp-codex .
The container startup script runs npx prisma migrate deploy automatically before launching the server.
This Docker path is currently the most reliable way to ensure the database schema matches the latest CRM and inventory migrations on Windows.
Persistence And Backup
- SQLite database path:
/app/data/prisma/app.db - Uploaded files:
/app/data/uploads - Backup the entire mounted
/app/datavolume to preserve both records and attachments.
CRM
The current CRM foundation supports:
- customer and vendor list, detail, create, and edit flows
- search by text plus status and state/province filters
- customer reseller flag, reseller discount, and parent-child hierarchy
- contact-history timeline entries for notes, calls, emails, and meetings
- multiple account contacts with role and primary-contact tracking
- shared file attachments on customer and vendor records
- commercial terms fields including payment terms, currency, tax exempt, and credit hold
Recent CRM features depend on the committed Prisma migrations being applied. If you update the code and do not run migrations, the UI may render fields that are not yet present in the database.
Inventory
The current inventory foundation supports:
- protected item master list, detail, create, and edit flows
- SKU, description, type, status, unit-of-measure, sellable/purchasable, default cost, and notes fields
- BOM header and BOM line editing directly on the item form
- BOM detail display with component SKU, name, quantity, unit, notes, and position
- seeded sample inventory items and a starter assembly BOM during bootstrap
This module introduces inventory.read and inventory.write permissions. After updating the code, restart the server against the migrated database so bootstrap can upsert the new permissions onto the default administrator role.
Branding
Brand colors and typography are configured through the Company Settings page and the frontend theme token layer. Update runtime branding in-app, or adjust defaults in the theme config if you need a new baseline brand.
Logo uploads are stored through the authenticated file pipeline and are rendered back into the settings UI through an authenticated blob fetch, so image preview works after save and refresh.
Migrations
- Create a local migration:
npm run prisma:migrate - Apply committed migrations in production:
npm run prisma:deploy - If Prisma migration commands fail on a local Node 24 Windows environment, use Node 22 or Docker for migration execution. The committed migration files in
server/prisma/migrationsremain the source of truth.
As of March 14, 2026, the latest committed domain migrations include:
- CRM status and list filters
- CRM contact-history timeline
- reseller hierarchy and reseller discount support
- CRM commercial terms and account contacts
- CRM lifecycle stages and operational metadata
- inventory item master and BOM foundation
UI Notes
- Dark mode persistence is handled through the frontend theme provider and should remain stable across page navigation.
- The shell layout is tuned for wider desktop use than the original foundation build, and now exposes CRM, inventory, settings, and planning modules from the same app shell.
- The client build still emits a Vite chunk-size warning because the app has not been code-split yet.
PDF Generation
Puppeteer is used by the backend to render HTML templates into professional PDFs. The Docker image includes Chromium runtime dependencies required for headless execution.