Print Farm Management + Order Fulfillment Platform
A comprehensive platform for makers and small 3D print farms. Manage your product catalog, track orders from multiple sales channels, and coordinate print jobs across your printer fleet.
Runs as a desktop app (macOS/Windows via Wails) or as a self-hosted web app (Docker).
- Product Catalog (Projects): Define your products with SKUs, pricing, printer constraints, and default settings. Track profitability per product.
- Order Management: Unified order system with integrations for Etsy, Squarespace, and manual orders.
- Task-Based Workflow: Tasks are work instances created when fulfilling orders. Each task tracks print jobs, progress, and completion.
- Multi-Printer Control: Manage OctoPrint, Bambu Lab, and Klipper/Moonraker printers from one interface with automatic network discovery.
- Design Versioning: Immutable design versions with 3MF file parsing (print time, weight, filament usage).
- Material & Cost Tracking: Material catalog, spool inventory, per-product cost rollups, and profit margin calculations.
- Expense Tracking: Log expenses with receipt OCR, categorize by type (filament, tools, advertising, subscriptions), and track profitability.
- Sales Analytics: Track sales by channel, view revenue trends, and analyze profit-per-hour metrics.
- Real-Time Status: Live printer status and job progress via WebSocket.
- Timeline View: Gantt-style visualization of orders, tasks, and print jobs.
Sales Channels (Etsy, Squarespace, Direct)
↓
Orders → Order Items
↓
Tasks (work instances) → Print Jobs
↓
Projects (product catalog)
- Projects = Your product catalog. Each project defines a product you sell (name, SKU, pricing, designs, printer requirements).
- Tasks = Work instances created when processing orders. A task references a project and contains print jobs.
- Print Jobs = Individual prints sent to printers. Track status, progress, material usage, and outcomes.
| Layer | Technology |
|---|---|
| Backend | Go 1.24, Chi router |
| Frontend | React 19, TypeScript, Tailwind CSS 4, TanStack Query v5 |
| Database | SQLite (embedded, WAL mode) |
| Real-time | WebSocket |
| Desktop | Wails v2 |
| Build | Vite 7 |
| Deployment | Docker |
- Go 1.24+
- Node.js 20+
- (Optional) Wails CLI for desktop builds
make deps# Run backend and frontend together
make dev
# Or run separately:
make backend # Go server on :8080
make frontend # Vite dev server on :5173Navigate to http://localhost:5173
The SQLite database is created automatically at ~/.daedalus/daedalus.db with migrations applied on startup.
# Development with hot reload
wails dev
# Production build
wails build -platform darwin # macOS
wails build -platform windows # WindowsThe built app is output to build/bin/.
├── cmd/server/ # Go entry point (standalone server)
├── main.go # Wails desktop app entry point
├── app.go # Wails app lifecycle
├── internal/
│ ├── api/ # HTTP handlers & router
│ ├── service/ # Business logic
│ ├── repository/ # Data access layer
│ ├── model/ # Domain types
│ ├── database/ # SQLite init & migrations
│ ├── printer/ # Printer integrations (OctoPrint, Bambu, Moonraker)
│ ├── realtime/ # WebSocket hub
│ ├── storage/ # File storage
│ ├── etsy/ # Etsy API client (OAuth + PKCE)
│ ├── squarespace/ # Squarespace API client
│ ├── bambu/ # Bambu Lab cloud integration
│ ├── receipt/ # Receipt OCR parsing
│ └── threemf/ # 3MF file format parsing
├── web/ # React frontend
│ └── src/
│ ├── api/ # API client
│ ├── components/ # Shared React components
│ ├── hooks/ # TanStack Query hooks
│ ├── pages/ # Route pages
│ ├── contexts/ # React contexts
│ ├── types/ # TypeScript types
│ └── lib/ # Utilities
├── Makefile # Build automation
├── Dockerfile # Multi-stage production build
└── wails.json # Wails desktop app config
GET /api/projects- List all productsPOST /api/projects- Create productGET /api/projects/{id}- Get product detailsPATCH /api/projects/{id}- Update product (name, SKU, pricing, etc.)DELETE /api/projects/{id}- Delete productGET /api/projects/{id}/summary- Product analytics (revenue, costs, profit)GET /api/projects/{id}/tasks- List tasks for this product
GET /api/tasks- List tasks (filterable by status, project, order)POST /api/tasks- Create task manuallyGET /api/tasks/{id}- Get task with jobsPATCH /api/tasks/{id}- Update taskPATCH /api/tasks/{id}/status- Update task statusDELETE /api/tasks/{id}- Delete taskPOST /api/tasks/{id}/start- Start taskPOST /api/tasks/{id}/complete- Complete taskPOST /api/tasks/{id}/cancel- Cancel taskGET /api/tasks/{id}/progress- Get task progress
GET /api/orders- List orders (filterable by status, channel)POST /api/orders- Create manual orderGET /api/orders/{id}- Get order with items and tasksPATCH /api/orders/{id}- Update orderPOST /api/orders/{id}/items- Add item to orderPOST /api/orders/{id}/items/{itemId}/process- Create task from order itemPOST /api/orders/{id}/ship- Mark order shipped
GET /api/projects/{id}/parts- List partsPOST /api/projects/{id}/parts- Create partGET /api/parts/{id}/designs- List design versionsPOST /api/parts/{id}/designs- Upload new design (multipart)GET /api/designs/{id}/download- Download design file
GET /api/printers- List printersPOST /api/printers- Register printerGET /api/printers/states- Get all printer statesGET /api/printers/{id}/state- Get single printer stateGET /api/printers/{id}/jobs- Printer job historyPOST /api/printers/discover- Network discovery
POST /api/print-jobs- Create jobPOST /api/print-jobs/{id}/start- Send to printerPOST /api/print-jobs/{id}/pause- Pause printPOST /api/print-jobs/{id}/resume- Resume printPOST /api/print-jobs/{id}/cancel- Cancel printPOST /api/print-jobs/{id}/outcome- Record resultPOST /api/print-jobs/{id}/retry- Retry failed job
GET /api/materials- List materialsPOST /api/materials- Create materialGET /api/spools- List spoolsPOST /api/spools- Create spool
GET /api/expenses- List expensesPOST /api/expenses/receipt- Upload receipt (OCR processing)PATCH /api/expenses/{id}- Update/confirm expenseGET /api/sales- List salesPOST /api/sales- Record sale
GET /api/stats/financial- Revenue, costs, marginsGET /api/stats/time-series- Dashboard chart dataGET /api/stats/expenses-by-category- Cost breakdownGET /api/stats/sales-by-channel- Revenue by channelGET /api/stats/sales-by-project- Revenue by product
GET /api/channels- List connected channelsGET /api/integrations/etsy/auth- Start Etsy OAuth flowGET /api/integrations/etsy/status- Etsy connection statusPOST /api/integrations/etsy/sync- Sync Etsy ordersGET /api/integrations/squarespace/status- Squarespace connection statusPOST /api/integrations/squarespace/sync- Sync Squarespace orders
GET /api/timeline- Get timeline items (orders, tasks, jobs)GET /api/timeline/orders/{id}- Order timeline detailGET /api/timeline/tasks/{id}- Task timeline detail
GET /ws- Real-time events (printer status, job updates, order sync)
| Platform | Protocol | Features |
|---|---|---|
| OctoPrint | REST API | Full control, file upload, status polling |
| Bambu Lab | MQTT (LAN + Cloud) | Status streaming, device pairing, AMS support |
| Moonraker/Klipper | REST API | Full control, timelapse, temperature |
| Manual | None | Log jobs manually |
- Go to Printers page
- Click Add Printer or use Discover to scan your network
- Enter connection details:
- OctoPrint:
http://<ip>+ API key - Bambu Lab: Printer IP + access code (or cloud pairing)
- Moonraker:
http://<ip> - Manual: No connection required
- OctoPrint:
Track expenses by category for accurate cost analysis:
- Filament - Creates spools in inventory
- Parts - Replacement parts, hardware
- Tools - Equipment, maintenance
- Shipping - Packaging, postage
- Marketplace Fees - Etsy fees, payment processing
- Subscriptions - Software, services
- Advertising - Ads, marketing
- Other - Miscellaneous
make buildProduces:
bin/server- Standalone Go binaryweb/dist/- Static frontend assets
make testdocker build -t daedalus .
docker run -p 8080:8080 -v daedalus-data:/app/data daedalus| Variable | Default | Description |
|---|---|---|
DATABASE_PATH |
~/.daedalus/daedalus.db |
SQLite database file path |
PORT |
8080 |
Backend server port |
UPLOAD_DIR |
./uploads |
File storage directory |
STATIC_DIR |
./web/dist |
Frontend static files |
REQUIRE_AUTH |
false |
Enable authentication |
JWT_SECRET |
- | Secret for JWT signing (required if auth enabled) |
ETSY_CLIENT_ID |
- | Etsy OAuth app ID |
ETSY_REDIRECT_URI |
- | Etsy OAuth callback URL |
SQUARESPACE_API_KEY |
- | Squarespace API key |
FRONTEND_URL |
http://localhost:5173 |
Frontend URL (for CORS in dev) |
MIT