Designed by sheet metal and mechanical professionals, for professionals, Ξ£EM answers the specific challenges of your trade:
- Industrial sheet metal: bending, laser/plasma cutting, punching, welding
- Precision mechanics: turning, milling, grinding
- Mold manufacturing: design, machining, fitting
- Industrial subcontracting: multi-customer management, varied series
| Problem | Ξ£EM Solution |
|---|---|
| π Complex quotes with many operations | Detailed BOMs, machining routings, automatic time/cost calculation |
| β±οΈ Real-time production tracking not possible | Live dashboard, shop-floor time tracking, progress by work order |
| π¦ Raw material management (sheets, bars, tubes) | Stock by dimensions, material traceability, replenishment alerts |
| π Chaotic shop planning | Visual planning per machine, priority management, machine load |
| π Unclear project profitability | Actual vs. forecast cost tracking, margin analysis per order |
| π Limited customer/supplier traceability | Full history, attached documents, technical notes |
- Machining routings: define operations (cutting, bending, welding, machining...)
- Bills of Materials (BOM): raw materials, components, sub-assemblies
- Shop planning: visualize load per machine/work center
- Work orders: automatic generation from quotes
- Production time tracking: real-time tracking by operation
- Quality control: control sheets, non-conformities
- Detailed quotes: multiple lines, options, variants
- Cost calculation: material + labor + subcontracting
- Opportunity tracking: from lead to delivery
- Multi-currency and multi-language support
- Customer history: all orders at a glance
- Dimension-based management: Sheet 2000x1000x3mm, Tube Γ50x3...
- Material traceability: heat numbers, material certificates
- Stock movements: receipts, issues, transfers, inventories
- Alerts: minimum thresholds, automatic replenishment
- Suppliers: pricing, lead times, evaluation
- Invoicing: deposits, progress billing, credit notes
- VAT: multi-rate management, declarations
- Payments: settlement tracking, reminders
- Analytics: profitability by project, customer, period
- Unified attachments: products, quotes, orders, delivery notes, invoices, purchases, non-conformities, stock movements, companies and opportunities share one file store
- Private storage: files live outside the web root and are served through authenticated routes
- Viewers loaded on demand (opening a PDF never downloads the 3D engine):
- 3D meshes: STL, OBJ, PLY, 3MF, glTF (three.js)
- 3D CAD: STEP, IGES, BREP via OpenCascade compiled to WebAssembly β no server-side converter
- 2D CAD: DXF, plus PDF, images and spreadsheets
- Maintenance plans and work orders per machine
- Andon alerts: real-time escalation from the shop floor
- Shop reports: booked vs. estimated time, scrap, machine load
- Kanban and GTD boards, Gantt chart, machine load planning
- Nesting: part layout attached to order lines
- Attendance and energy consumption tracking
- Non-conformities, inspection projects, audit planner, FMEA
- Control device calibration with automatic alerts
- EHS: incidents, risks, trainings, regulatory conformities
- GDPR: soft deletes, activity log, anonymization service, data export and erasure, automatic weekly purge, self-service requests
- Electronic invoicing: Factur-X / EN 16931 output, PDP gateway (Qonto driver) and inbound Factur-X reading for supplier invoices
- FEC export for French accounting
- Nest2Prod: order push and sheet stock synchronization
- LDAP / Active Directory user import
- REST API (Laravel Sanctum) and an integrated AI assistant
- Automatic backups (spatie/laravel-backup) and Laravel Pulse application monitoring
Context: 15 people, bending + laser cutting + welding
Ξ£EM usage:
- Quotes with detailed routings (laser β deburring β bending β welding)
- Planning across 3 press brakes and 2 lasers
- Sheet stock management by format and thickness
- Real-time tracking of work orders in progress
Result: +30% planning productivity, -20% dormant stock
Context: Automotive subcontracting, medium series
Ξ£EM usage:
- BOMs with certified raw materials
- Machining routings (turning β milling β heat treatment β grinding)
- Integrated quality control (inspection sheets per work order)
- Full traceability from material to finished part
Result: ISO 9001 compliance, perfect traceability
Context: Plastic injection molds, complex projects
Ξ£EM usage:
- Multi-phase quotes (study, roughing, finishing, trials)
- Subcontracting management (heat treatments, polishing)
- Real-time project profitability tracking
- Centralized technical documentation
Result: Better cost control, on-time delivery
- Email: contact@wem-project.org
- Password: password
WEM.mp4
Start in 3 minutes:
git clone https://github.com/SMEWebify/WebErpMesv2.git
cd WebErpMesv2
docker compose up --buildβ‘οΈ Access http://localhost:45060
# Clone and configure
git clone https://github.com/SMEWebify/WebErpMesv2.git
cd WebErpMesv2
cp .env.example .env
# Install dependencies
composer install
npm install
# Configure the application
php artisan key:generate
php artisan migrate --seed
# Run
npm run dev
php artisan serveβ‘οΈ Access http://localhost:8000
π Detailed guides:
Important: Before adding lines to a quote, configure:
- Default VAT: Go to Accounting β VAT and mark an item as default
- Default Unit: Go to Methods β Units and mark an item as default
Without these settings, you cannot add lines to quotes.
WebErpMesv2/
βββ app/
β βββ Http/Controllers/ # API and web controllers (quotes, production, CRM)
β βββ Models/ # Business entities (orders, products, stocks)
β βββ Services/ # Business logic (stock, files, integrations, GDPR)
βββ database/
β βββ migrations/ # Database schemas (BOMs, routings, stock movements)
βββ resources/
β βββ js/ # React components
β βββ views/ # Blade templates
βββ tests/ # Test suite
βββ docker/ # Docker configuration
Key Technologies:
- Backend: Laravel 12, PHP 8.2+
- Frontend: React 19 (rich components), Blade (layout/shell), Alpine.js (micro-interactions)
- Bundler: Vite
- CSS: Bootstrap 5 / AdminLTE 4
- Database: MySQL/PostgreSQL
- Cache & queues: Redis
- Real-time: Laravel Echo
- 2D/3D viewers: three.js, occt-import-js (OpenCascade WASM), dxf-parser
- DevOps: Docker, Nginx
Livewire and Vue.js have been removed: rich screens are React components mounted from Blade shells.
Run the complete test suite:
php artisan testRun specific tests:
php artisan test --filter TestNameThese commands are defined in this repository and complement the default Laravel tooling.
| Command | Description | Example |
|---|---|---|
php artisan wem:diagnostics |
Check common local setup requirements (PHP version, extensions, app key, cache/storage permissions, Redis, DB, broadcasting). | php artisan wem:diagnostics |
php artisan wem:files:import |
One-shot migration of legacy public/ attachments into the private file store. --dry-run, --skip-move. |
php artisan wem:files:import --dry-run |
php artisan wem:n2p:push-order {orderId} {--sync} |
Push a specific order to Nest2Prod (sync option bypasses the queue). | php artisan wem:n2p:push-order 123 --sync |
php artisan wem:n2p:sync-sheet-stock |
Synchronize sheet stock with Nest2Prod. --days=30, --sync. |
php artisan wem:n2p:sync-sheet-stock --days=7 |
php artisan preorders:scan-output |
Scan the output folder and import CSV files as pre-orders. --path=, --pattern=, --done-path=. |
php artisan preorders:scan-output |
php artisan stock:recalculate-cump |
Recompute the full weighted-average-cost history for every product location. --dry-run. |
php artisan stock:recalculate-cump --dry-run |
php artisan stock:rebuild-reservations |
Rebuild stock reservations for purchased components. --product=. |
php artisan stock:rebuild-reservations |
php artisan quality:dispatch-calibration-alerts |
Notify responsible users when quality control device calibration is due or overdue. | php artisan quality:dispatch-calibration-alerts |
php artisan emails:send-auto-reports |
Send scheduled automatic email reports based on user preferences. | php artisan emails:send-auto-reports |
php artisan ldap:import-users |
Import LDAP users into the Laravel database. | php artisan ldap:import-users |
php artisan rgpd:export-contact {id} |
Export every piece of data held about a contact as JSON (GDPR art. 20). | php artisan rgpd:export-contact 42 |
php artisan rgpd:erase-contact {id} |
Handle a GDPR erasure request for a B2B contact. | php artisan rgpd:erase-contact 42 |
php artisan rgpd:purge |
Purge personal data past its retention period (expired tokens, old email logs, soft-deleted records). | php artisan rgpd:purge |
php artisan wem:nesting:seed-svg |
Attach demo nesting vectors to order lines. --count=, --force. |
php artisan wem:nesting:seed-svg |
php artisan loadtest:seed |
Generate a realistic dataset for load testing. --scale=. |
php artisan loadtest:seed --scale=0.5 |
The scheduler (routes/console.php) drives the daily backups (backup:run, backup:clean,
backup:monitor), the weekly GDPR purge (rgpd:purge) and the monthly activity-log cleanup.
Register it once on the server:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
A queue worker is required for asynchronous work (emails, integrations, exports):
php artisan queue:work redis --sleep=3 --tries=3Note: do not run
php artisan route:cacheβ it freezes the locale resolved at cache time and breaks the localized routes.
Ξ£EM is open source! Your domain expertise is valuable.
Developers:
- Fix bugs β
good first issue - Add features β see Roadmap
- Improve documentation β Contributing Guide
Industry professionals:
- Test and provide feedback
- Propose domain improvements
- Share your use cases
- Translate the interface
# Fork the repository and clone it
git clone https://github.com/YOUR_USERNAME/WebErpMesv2.git
# Create a feature branch
git checkout -b feature/amazing-feature
# Make your changes and commit
git commit -m "Add amazing feature"
# Push and create a Pull Request
git push origin feature/amazing-featureThanks to everyone who keeps this project alive!
SMEWebify Creator & Lead Maintainer 1,225+ commits |
sunxiaoguang Core Contributor 11 commits |
saosangmo Active Contributor 8 commits |
RobertoBochet Contributor 3 commits |
globalcitizen Contributor 1 commit |
nedlir Contributor |
+1 more See all β |
Check our Contributing Guide and make your first contribution!
- β 180+ Stars
- π΄ 88 Forks
- π₯ 7+ Active Contributors
- π 2,200+ Commits
- π 21 Releases (latest: v1.19)
- π§ͺ 60+ PHPUnit test files
- π¦ Open Source under MIT License
- π User Guide
- π§ Development Setup
- π Production Deployment
- ποΈ Architecture Overview
- π€ Contributing Guide
- π Security Policy
Check our roadmap to see what's coming next and how you can help!
Current priorities:
- π§ͺ Test coverage improvement (backend business rules; no frontend tests yet)
- π Complete API documentation (docs/API.md)
- π¦ Stock: projected-stock curve, physical inventory screen, automatic replenishment alerts
- π³ Multi-tenant Docker deployment (one container + one database per customer)
- π GitHub Discussions - Questions, ideas, feedback
- π Issue Tracker - Bugs and feature requests
- π§ Email - Direct support
- π Online demo - Try it for free
Project under the MIT license - See LICENSE
You are free to:
- β Use commercially
- β Modify the code
- β Distribute
- β Use privately
Thanks to:
- All our contributors
- The workshops that test and provide feedback
- The Laravel and React communities
- Everyone who starred β the project
Ξ£EM was born from hands-on experience in industrial sheet metal. Every feature meets a real workshop need.
Are you a sheet metal worker, mechanic, machinist?
Your feedback is invaluable to improve the tool β Contact us
Are you a developer passionate about industry?
Join us β Contributing Guide
Made with β€οΈ for sheet metal and mechanical professionals
β Star the project β’
π΄ Fork β’
π€ Contribute β’
π¬ Try the demo