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 proposals |
| π Chaotic shop planning | ASAP scheduling with finite capacity, 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: ASAP scheduling with finite capacity, inter-operation delays (global setting or per operation pair, in shop hours), 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
- Press brake punch designer: parametric profile or manufacturer library, bent-part simulation, PDF export, browsable press brake tooling catalog
- Turning tool configurator (ISO 5608 / 6261 / 1832): code assembled step by step, holder β insert compatibility check, optional creation of the matching stock item
- Tool stock: each tool can be linked to the stock item that carries its quantity and minimum
- Detailed quotes: multiple lines, options, variants
- Cost calculation: material + labor + subcontracting
- Opportunity tracking: from lead to delivery
- Order acknowledgments sent to the customer
- Multi-currency and multi-language support
- Customer history: all orders at a glance
- Dimension-based management: Sheet 2000x1000x3mm, Tube Γ50x3...
- Traceability: batches, serial numbers, material certificates attached to documents
- Stock movements: receipts, issues, transfers, weighted average cost (CUMP)
- Physical inventory: guided counting, valued summary, variance table
- Replenishment: minimum + reserved needs β stock β on order, one draft purchase order per supplier
- Suppliers: pricing, lead times, evaluation
- Invoicing: invoices, credit notes, returns
- VAT: multi-rate management
- Payments: settlement tracking
- Analytics: profitability by project, customer, period
- Email: SMTP configured from the application, sending log, PDF attached automatically
- Leave balances per employee, leave type and reference period (CP, RTT, time off in lieu...)
- Absence requests with an approval workflow
- Payroll export (CSV / XLSX): absences, clocked hours and production hours per employee, in a neutral format that any payroll software can map
- Skills matrix: authorizations per employee and per machine, with expiry tracking
- Employee file: confidential documents (contract, payslips, certificates) restricted to the employee and HR
- 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: preparation screen by cutting resource, material and thickness β nesting computation available in the commercial edition
- 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 (French 2026 reform): Factur-X / EN 16931 output, PDP gateway with SUPER PDP and Qonto drivers β invoice issuing and lifecycle tracking, supplier invoice inbox matched against purchase receipts, statuses reported back to suppliers, directory lookup
- 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
Goal: faster planning, less 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
Goal: traceability records ready for an ISO 9001 audit
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
Goal: 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 13, PHP 8.4+
- Frontend: React 19 (rich components), Blade (layout/shell), Alpine.js (micro-interactions)
- Bundler: Vite
- UI: AdminLTE 4 / Bootstrap 5.3 β light, dark and "pro" modes, 18 themes and a primary colour chosen by each user (Profile β Appearance)
- 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 wem:pdp:sync |
E-invoicing: sync issued invoice statuses and receive supplier invoices (required for platforms without webhooks). --tenant=, --events, --inbound. |
php artisan wem:pdp:sync --inbound |
php artisan wem:pdp:directory |
E-invoicing directory: list/open/close our receiving line, look up a customer's billing address by SIREN or name. --open=, --date=, --close=, --lookup=, --search=. |
php artisan wem:pdp:directory --lookup=123456789 |
php artisan wem:pdp:seed-sandbox |
Dev only. Write the SUPER PDP sandbox identity (overwrites the company identity). --force. |
php artisan wem:pdp:seed-sandbox |
php artisan hr:recompute-absence-days |
Recompute the day cost of every absence request (after a leave-balance migration or a public-holiday change). --dry-run. |
php artisan hr:recompute-absence-days --dry-run |
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 e-invoicing sync every 15 minutes (wem:pdp:sync), 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
On Windows, run php artisan schedule:run every minute from the Task Scheduler, and keep the
queue worker alive as a service (NSSM, for example).
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 |
amir13861010 Contributor 1 commit |
Lumpe1975 Contributor 7 commits |
+1 more See all β |
Check our Contributing Guide and make your first contribution!
Thanks to the researchers who reported vulnerabilities responsibly. Each report made Ξ£EM safer for every workshop running it.
| Researcher | Advisories |
|---|---|
| @redhotchilihacker1 | GHSA-cqq2-7c22-p2gg, GHSA-cvm4-63hj-966j, GHSA-8fp9-7236-m69r, GHSA-fp5p-mpqh-7fvx, GHSA-rqxq-q992-xj2h |
| @DifficultSnow | GHSA-c2xh-26jp-56fx |
| @sec-reex | GHSA-5x85-8gmm-7v5w |
| @germadarangalvarez-ops | GHSA-chhq-7p67-2ff9 (CVE-2026-49827) |
| @nedlir | GHSA-pp68-5pc2-hv7w (CVE-2026-22788), GHSA-64rv-f829-x6m4 (CVE-2026-22789) |
| @Lumpe1975 | GHSA-9r9x-268j-qjwv, GHSA-4424-c6rm-xgq2 |
Found a vulnerability? Please report it privately, see SECURITY.md.
- β 220+ Stars
- π΄ 99 Forks
- π₯ 8+ Active Contributors
- π 2,200+ Commits
- π 26 Releases (latest: v3.0.0)
- π§ͺ 85+ PHPUnit test files
- π¦ Open Source under the LGPL v3 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 with PHPUnit, React screens with Vitest)
- π Complete API documentation (docs/API.md)
- π¦ Stock: projected-stock curve, low-stock notifications
- π₯ HR: absence notifications, absences taken into account in planning capacity
- π³ 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
Since v2.2.0, the project is licensed under the GNU LGPL v3 or later - See LICENSE, COPYING and NOTICE. Releases up to v2.1.0 were published under the MIT License and remain available under it. The Nest2Prod name and logos are trademarks and are not covered by the code license - See TRADEMARKS.md.
You are free to:
- β Use it commercially, including internally and for your customers
- β Modify the code
- β Distribute it, as long as you provide the source of your changes to the code itself
- β Build separate extensions under the license of your choice
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