Build log
What is shipping
A compact delivery log first, then the full product plan. Every entry links back to its source commit. All times are CET.
Current deployment
fix: isolate mobile menu from FAQ details styles
Commit 780d88a: fix: isolate mobile menu from FAQ details styles
Last 6 hours
Work completed in this build window
Newest first. Open any commit in Gitea for the exact diff.
780d88afix: isolate mobile menu from FAQ details stylesCommit 780d88a: fix: isolate mobile menu from FAQ details styles
2f6b6a6fix: size landing mobile menu controlCommit 2f6b6a6: fix: size landing mobile menu control
b8e9e35feat: improve landing mobile menu and BenchyCommit b8e9e35: feat: improve landing mobile menu and Benchy
151f9f2feat: complete sheets and production reprintsCommit 151f9f2: feat: complete sheets and production reprints
4bd587dfeat: add workshop production queueCommit 4bd587d: feat: add workshop production queue
10c28f4feat: record actual production in reusable sheetCommit 10c28f4: feat: record actual production in reusable sheet
b60175efeat: lead workshop reports with operating KPIsCommit b60175e: feat: lead workshop reports with operating KPIs
48fe412fix: align live calculator margin and price behaviorCommit 48fe412: fix: align live calculator margin and price behavior
Progress
Completed
Multipart products: reusable parts with per-part quantities and immutable calculator snapshots, plus shared assembly and packaging costs that combine into one product total.Calculator live result column: a sticky, itemized cost breakdown updates as inputs change, while invalid submitted forms keep the server error state instead of showing an estimateWorkshop setup uses explicit reusable form sheets for adding printers, electricity, filament and extra items; it keeps table-or-empty-state flows, named Prusa/Bambu or custom printer presets and one workshop-wide electricity priceCalculator and Setup hide manual wattage whenever a named printer preset is selected, apply the preset’s editable baseline automatically, and reveal watts only for CustomISO currency selectors show code, official name and symbol where available across Setup, Quotes and Sales; legacy lowercase ISO values remain accepted and normalize safelySEO-oriented global footer with descriptive product/tool link lists and language selector, plus a simplified non-duplicated tools header on public pagesPublic tools navigation in the landing header, landing footer and shared application shell, with a Prusa and Bambu Lab printer selector for energy estimatesPublic marketplace-profit mini-tool: calculates marketplace fee, net profit and target-profit list price, then pre-fills calculator sale assumptionsPublic printer-energy mini-tool: calculates kWh and per-print/month/year electricity cost, then pre-fills the anonymous calculator without persistenceOpen-source, self-hosted positioning and OpenPrintCosts product identity across the public landing and SSR shellConversion-focused public landing with an original CSS 3D Benchy print visualShared responsive OpenPrintCosts design system: shell, tokens, cards, forms, empty states, action bars, feedback and data tablesAccessible table filtering and stable sorting that still works without JavaScriptPublic anonymous cost calculator with multi-material, complementary materials, energy, wear, labor, fees, VAT, margins and profitPopular printer presets with editable estimated wattage and hourly wear costNo anonymous calculator persistence and no remote G-code upload or server-side slicingLocal browser-only import of explicit sliced G-code metadata for material use and print time, without inferenceFree and Pro workshop feature gates, unlimited members, role-based authorization and tenant isolationProducts, catalogue, projects, quotes, sales and upgrade pages migrated to the shared visual systemCatalan, Spanish and English server-rendered UI, browser negotiation, persistent selector and English fallbackProduction static assets with WhiteNoise and compile-time translation validationImmutable Pro calculator project snapshots with material identity, price and calculation inputs/resultsServer-rendered synchronized quote creation, scoped to the selected workshop and its projectsServer-rendered synchronized quote editing, scoped to the selected workshop and restricted to owners and managersServer-rendered conversion of an accepted quote into one immutable, tenant-scoped production saleAtomic filament consumption for accepted quote sales, with immutable sale-linked stock movements and insufficient-stock protectionServer-rendered sale status updates, scoped to owners and managers without changing commercial snapshotsServer-rendered sale date updates, validated and scoped to owners and managers without changing commercial snapshotsServer-rendered printable customer quotes, scoped to workshop members and stripped of internal costs, inventory and metadataOne-sale-per-quote invariant across the sales API and database, including concurrent duplicate protectionQuote-linked sales protected from bypassing atomic filament consumption through the generic sales APIConverted quotes locked as customer-facing historical source terms while retaining the safe printable viewDeterministic translated shared-shell coverage for the English accessibility fallbackAtomic filament consumption for direct project sales, with immutable sale-linked stock movements, idempotent retries and insufficient-stock rollbackServer-rendered direct project sale creation for owners and managers, with immutable cost snapshots and atomic assigned-filament consumptionCatalan and Spanish direct-sale insufficient-stock feedback, with transactional rollback coverageAccessible Catalan, Spanish and English feedback for insufficient stock when converting an accepted quote, with transactional rollback coverageServer-rendered monthly workshop report with sales, margins, materials and printers, explicit workshop selection, month filtering and tenant isolationQuantity-accurate monthly material reporting from immutable project snapshots and immutable sale quantitiesExplicit SSR quote lifecycle actions from draft to sent and then accepted or declined, with revision updates and tenant-scoped manager permissionsSSR and API sale cancellation with one-time restoration of immutable, sale-linked filament consumptionForward-only sale fulfilment transitions in SSR and API, with date corrections and explicit cancellationActual-versus-estimated sale production records with measured material, energy, labor, extra cost, failures and reprints, while quoted snapshots remain immutableMeasured material splits captured against saved project lines and auditable monthly variance by printer, project and materialAutomatic expiry for overdue sent quotes, with SSR/API status reconciliation, protected acceptance and conversion, and translated workshop feedbackVerified regression coverage for Pro-gated catalogue and sync workflows plus Free-plan upgrade feedbackDjango and pytest coverage for accounts, plan gates, calculator arithmetic, catalogue, products, commerce, design system and i18n
Next
Planned work
- Connected public mini-tools: slicer job intake, batch-price calculator and material-variant comparison, each able to create or update calculator and product data
- Multipart products: a reusable product BOM with separate printable parts, quantities, printer/material assignments and combined cost, price and margin
- Production operations beyond quotes: printer capacity, batches, due dates, job status, reprints and delivery planning
- Commercial and portability gaps: client-ready PDF/email quotes, configurable marketplace fee rules, CSV/JSON export-import, documented self-host installation and an open integration API
- Verify this production deployment and perform public desktop and mobile QA
- Production SMTP configuration and end-to-end email delivery verification
- PostgreSQL backups, a tested restore procedure and monitoring/alerting
- Billing provider integration and subscription lifecycle after commercial decisions are confirmed
