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: sheet layout grouped by material and thickness, parts placed by their bounding rectangle
- 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 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 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) |
Found a vulnerability? Please report it privately, see SECURITY.md.
- β 220+ Stars
- π΄ 99 Forks
- π₯ 8+ Active Contributors
- π 2,200+ Commits
- π 21 Releases (latest: v1.19)
- π§ͺ 85+ 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, 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
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