Commit Graph
138 Commits
Author SHA1 Message Date
grabowski 705690eb99 Fleet calculator: plant view starts from the front, drag pans at any zoom
Deploy test site / deploy (push) Successful in 55s
User, 18 Oct 2026: show the factory from the front at start, and make the
view movable always, not only after the first zoom.

- CNXIso default rotation 1 (from the south-west: office, car park and
  gate face the viewer) instead of 3; documented setRotation in the
  header. The business plan renders pin setRotation(1) already.
- Drag pans at fit as well (was only when zoomed in); grab cursor at
  every zoom, grabbing while dragging. On touch screens the fitted view
  keeps vertical swipes for page scrolling (touch-action pan-y), so a
  horizontal drag pans; once zoomed in every direction pans, as before.
2026-10-18 14:24:54 +07:00
grabowski e8674795f5 Inline QC station: real 40x40 profiles, labelled investor render
User, 18 Oct 2026: use real 40x40 profiles, make a render with text
pointing out the parts to show the investor; the ring lights looked
like they were floating.

- build_station.py: frame drawn from the real 8-slot 40 series section
  (profile_shape: slots, centre bore, corner cavities; 40x80 with centre
  cavity) and 24 cast angle brackets; top beams now butt between the
  uprights; label-camera posts moved beside the cameras so both ring
  lights clamp straight to them; top line-scan on a side post with
  visible camera plate and light hangers; slide strips on carrier angles,
  pulley axles, end-stop posts, presence-sensor brackets, backlight post,
  cabinet on base crosses, chute on two supports and clear of the rail,
  pneumatics rail, stack light on the back upright, touch screen on the
  front end upright. A connectivity check at the end lists any part that
  does not reach the floor through touching parts: none.
- render_annotated.py (FreeCAD): front three-quarter view, camera backed
  off so nothing is clipped, no navigation cube or preselection, label
  positions projected from the camera and checked with marker renders.
- annotate_render.py (Pillow): title, 16 labels in two columns, leaders
  assigned so none cross -> inline-qc-station-annotated.png.
- render_station.py: same camera and preselection fixes; all six views
  re-rendered.
- BOM: 32 m of 40x40 in 45 pieces; total still USD 16k to 33k.
- inline-optical-qc.md and README updated; .gitignore for the render
  intermediates.
2026-10-18 14:07:41 +07:00
grabowski 609424b598 Inline QC station: concept setup on an aluminium profile frame
User, 18 Oct 2026: create a setup for the inline optical QC, an
aluminium extrusion frame with all sensors and a conveyor mounted to it.

- docs/equipment/inline-qc-station/: FreeCAD script (build_station.py)
  and model (.FCStd) of one station, 1.9 x 0.65 x 1.5 m on 27 m of
  40x40 and 3.8 m of 40x80 profile: rim-belt conveyor (two 6 mm PU round
  belts under the unrecorded rim, open centre), label gate with top and
  bottom colour cameras on the fly, inspection position with a lift and
  rotate chuck (75 mm lift, expanding mandrel, belt-driven servo), top and
  bottom 4k line-scans on opposite radii with coaxial, dark-field and
  backlights, two warp lasers, optional thermal camera, light-tight black
  tunnel with door switch, rodless-cylinder reject pusher with chute and
  bin, outfeed stop, cabinet, PLC, NixOS edge PC, HMI, stack light.
- render_station.py renders six views (open and closed iso, front, plan,
  inspection detail and elevation via clipped temporary documents).
- inline-qc-station-bom.csv: 32 lines with sources; USD 16k to 33k per
  station without the thermal camera.
- inline-optical-qc.md: new section "The station setup" (flow table,
  inspection zone, cycle ~5 to 6 s, control, BOM by group, open points);
  cost table updated (two launch stations ~USD 50k to 105k, still inside
  the metrology launch tier); Duplex/Classic flow now via the conveyor.
- README bullet and tree.
2026-10-18 13:29:55 +07:00
grabowski 5207808b57 Inline optical QC: devices for the record inspection station
User, 17 Oct 2026: research on the inline QC equipment, which devices
can be used for the optical check.

- New docs/equipment/inline-optical-qc.md: defect-by-defect table with
  the optical signature, device and limit (IEC 98 / DIN 45547 hole and
  eccentricity, Stamper Discs targets, Mobineko warp limits), precedents
  (no vinyl product; Dr. Schenk ISM CD scanner as template; Basler/Xiris;
  PRP AQA 2023; CTU thesis), a station design (centring turntable, 4k
  line-scan per side with dark-field, bright-field and transmitted light,
  colour label camera, two laser warp sensors or a line profiler,
  optional thermal camera) with sourced price signals, resolution and
  eccentricity math, throughput, placement at the Duplex cell and the
  Classic, smart-camera vs open GenICam/Aravis/OpenCV/anomalib on NixOS,
  specials, Thai channels, next steps.
- Estimate USD 12k-30k hardware per station, ~USD 40k-100k for the two
  launch stations; inside the existing metrology launch tier, no plan
  price change.
- Backlinks: quality-automation.md layer 1, digital-factory.md QC
  integration row, README bullet and tree.
2026-10-17 23:47:12 +07:00
grabowski 984ced2485 Biomass steam in both plans, PV on the factory roof only
Deploy test site / deploy (push) Successful in 49s
User, 17 Oct 2026: "only put solar on the factory, prepare the other
buildings for solar, option a and b should operate on biomass".

- Steam: two 500 kg/h biomass modules (Getabec class, 6M to 10M THB) plus
  a fuel store and handling block (1M to 2M, estimate) in both plans; the
  electric bank becomes the alternative. ~0.67M THB of fuel a year against
  ~4.9M for electric steam; grid demand ~264 kW instead of ~980 kW.
- Solar: ~520 kWp on the factory roof (the biomass-case optimum is ~500 to
  550 kWp, hourly sketch in sustainability.md "PV size with biomass
  steam"); office roof and parking canopies built PV-ready (~120 kWp
  later). ~87 % used on site, ~61 % of the plant's electricity.
- Calculator: biomass default, bFuel row, pvKWp 520, pvSelf 87, iso fills
  the factory roof first and shows the other roofs as PV-ready.
- Numbers: launch plant ~168M / 232M / 296M with contingency; Plan A
  ~182M (~2M above 180M: the Chinese-route lever priced only electric
  boilers; a Chinese biomass quote is the way back), Plan B ~217M (label
  ~215M), ~35M more. Calculator EBITDA A 2.17M, B 2.23M USD.
- CSV, total-investment, revenue-model, sustainability, scale, biomass,
  site-candidates, boi, steam-cooling, construction RFQ (canopies
  PV-ready), README, roadmap; business plan draft 0.3 rebuilt (A and B
  63 pages) with new renders.
2026-10-17 20:24:55 +07:00
grabowski 9ff5feef11 Solar on every roof, BOI solar correction, open source section
Deploy test site / deploy (push) Successful in 54s
Solar (user, 17 Oct 2026: "use as much roof space as possible")
- PV on every roof and canopy: ~640 kWp on the Payap scenario plot
  (factory roof ~523, canopies ~54, flat office roof ~65 kWp around the
  AC units); ~300 kWp on the Mueang Chi hall. Calculator: pvKWp 640,
  new pvSelf 85 % (zero export, hourly sketch), PV cost per kWp times the
  array, office-roof PV in the iso view, roofs drawn full.
- 12.8M to 16.6M THB at 20 to 26 THB/W; CSV baseline 34.37M to 56.34M;
  launch plant ~168M / 231M / 294M THB with contingency; Plan B ~216M
  (label ~215M), ~39M above Plan A; Plan A unchanged (it leases the
  array), its solar lever ~17.5M. PV payback ~4.2 to 5.9 years.
- Permits (rooftop solar no factory licence since 28 Dec 2024, ERC
  exemption under 1,000 kVA, PEA zero export) and PPA discounts sourced
  in sustainability.md.

BOI correction
- Announcement 3/2568 (in force 1 July 2025) ended BOI promotion for
  solar installations; only the battery may qualify (12M THB per MW cap).
  Removed the "BOI solar measure" from boi.md, total-investment,
  revenue-model, sustainability, site-candidates and both plan versions;
  Plan B's case for owning the array is the PPA bill it avoids
  (~0.07M USD a year).

Open source (user, 17 Oct 2026)
- digital-factory.md "Open source throughout, and working with other
  plants": everything we run and build is open source on NixOS, our code
  published (licence to decide), vendor firmware the stated exception;
  later the stack and factory-automation services for other pressing
  plants, not in the revenue.
- Business plan section 5.6 plus an executive-summary bullet, reading
  guide and not-modelled mentions; draft 0.3 rebuilt (A 60, B 61 pages),
  renders re-made with the roofs full.
2026-10-17 17:22:57 +07:00
grabowski ab303618d8 Solar and battery re-priced from Thai market data (October 2026)
Deploy test site / deploy (push) Successful in 46s
- Rooftop PV, 300 kWp (size still illustrative): 20 to 26 THB/W installed
  with the Deye hybrid inverters, 6.0M to 7.8M THB (was 25 to 35 THB/W,
  7.5M to 10.5M). Sources in the utilities CSV: DEDE Thailand PV Status
  report (Mahidol survey: 22 to 25 THB/W for factory systems of 10 kW to
  1 MW, 2023), CapSolar 2026 (20 to 25 under 1 MWp), Saimai Solar's list
  (300 kW for 5.4M THB), Deye hybrid inverter retail (160,500 THB per
  50 kW).
- Battery 271 kWh, now installed: 2.0M to 3.5M THB (was the bare Gobel
  list price, 1.4M to 2.0M, which matches DEDE's 5,000 to 7,000 THB/kWh
  for LiFePO4); adds enclosure, fire protection, controls and installation,
  below CapSolar's 12,000 to 15,000 THB/kWh for a fully installed factory
  BESS because the hybrid inverters do the conversion (estimate).
- Utilities baseline 27.57M to 47.50M THB; launch plant ~160M / 222M /
  283M THB with contingency; Plan B ~208M (~149M to 266M), ~31M more than
  Plan A; Plan A's total unchanged, its solar lever ~9.7M. PV payback
  ~3.8 to 5.4 years (sustainability.md). Calculator, README, roadmap,
  revenue model and both business plan versions (renders included)
  updated.
2026-10-17 16:41:14 +07:00
grabowski 3f33babdaa Plan B re-defined: the launch plant with everything in (~210M THB); front view on the cover
Deploy test site / deploy (push) Successful in 52s
- Plan B now starts like Plan A with one Duplex system and one Classic,
  but takes none of the six levers: owned solar and battery (with the BOI
  solar measure), the full metrology stack, the visitor corridor, cassette
  and CD-R, the bought crane and Thai-supplied utilities (user, 17 October
  2026). ~193.8M THB before the reserve, ~209M with it (~150M to 268M),
  ~32M (~18 %) more than Plan A; the second Duplex is a growth step from
  revenue in both (~15.4M THB, estimate).
- total-investment.md "Two plans" re-based (heading and anchor now
  "B at ~210M THB", README and roadmap links updated); revenue-model.md
  operating pictures: same volume and EBITDA as Plan A, depreciation on
  Plan B's capital (operating profit 1.26M USD central, payback ~3.7 yr);
  the extra earns nothing in the modelled table, which the docs say.
- Calculator: Plan B preset = the launch plant with contingency kept out
  (EBITDA 2.07M USD, cash payback year ~4.3, IRR ~21 %); budget card marks
  180M and 180M plus 25 %; preset label "Plan B (~210M, all in)".
- Business plan draft 0.3, both versions rebuilt: every Plan B branch of
  the three content files rewritten; renders regenerated with the
  isometric view turned to the front of the site (road, car park, office,
  corridor facade) for the cover and Figures 8 to 10.
2026-10-17 16:33:18 +07:00
grabowski ffc6cedbca Business plan: isometric calculator views instead of FreeCAD, software section with screenshots
- Cover and section 6.2 now use the isometric plant view of the plant and
  business plan calculator, drawn with each version's own preset: the
  cover (roofs, no labels), Figure 8 the site from above, Figure 9 the
  ground floor cut open, Figure 10 the press hall close up. The FreeCAD
  aerial render, the Mueang Chi site plan and the hall layout sketch are
  no longer in the plan; the captions say the calculator draws the Payap
  scenario model while the 6.2 text and zone table are the Mueang Chi
  hall.
- New section 5.5 "The software: plant overview, factory console and
  artist platform" with six screenshots of the demos: the plant overview
  (simulated SCADA), the factory console press floor and its ERPNext
  link, the artist ordering offer, fan funding and the record passport.
  Simulated data is marked as such; the platform name stays undecided.
- Figures renumbered (budget card 11, cash 12) and named in the
  section 15 source table. Renders in docs/renders/calculator/ and
  docs/renders/demos/; README bullet updated.
2026-10-17 16:06:04 +07:00
grabowski bd357ab03f Business plan draft 0.3 in two versions: Plan A ~180M and Plan B ~225M THB
Deploy test site / deploy (push) Successful in 52s
- One build makes both documents: plan_variant.py switches the
  plan-specific text (pick / is_a / label); build_plan.py writes
  CNX-Vinyl-Business-Plan-A and -B (docx), export_pdf.py exports both PDFs
  with the table of contents filled in. Draft 0.2 (single launch-plant
  plan with contingency) is removed; it stays in the history.
- Plan A: the launch plant with every machine and six cost levers, ~177M
  THB with the ramp-up reserve, no contingency. Plan B: the second Duplex
  at launch, five presses, ~224M THB on the same basis. Each version reads
  as a complete plan with one table comparing it with the other; the
  216M investor-question text is gone, Pheenix is priced at OMS's
  reference plus 20 %.
- Calculator renders in both documents, each from its own preset: the
  plant at a glance (Figure 4), the budget check (Figure 5) and ten years
  of cash (Figure 6), in docs/renders/calculator/.
- Calculator budget card: the verdict and third KPI now name the tightest
  budget the midpoint fits (Plan A: 3.3M to spare under 180M; Plan B:
  0.8M under 225M) instead of always 225M.
- Fixes: CD replication cross-references point to section 4.10; the
  blended price in section 3.3 and roadmap item 1 is 3.76 to 5.27 USD at
  60 % specials (3.50 to 4.60 at a standard-heavy mix).
2026-10-17 15:42:35 +07:00
grabowski f2ff1eac1f Two plans for the investor: Plan A ~180M, Plan B ~225M THB; Pheenix at OMS +20 %
Deploy test site / deploy (push) Successful in 53s
User (October 2026): price the Pheenix galvanics line at OMS's reference
plus 20 %, and work on a new business plan in two versions, one at
roughly 180M THB and one at +25 %; the plans do not include contingency;
Plan A keeps every machine and uses cost levers only.

- total-investment.md: Pheenix block 324k to 445k USD (OMS 4-cell wet
  room with know-how transfer, EUR 234k to 321k, plus 20 %; was 320k to
  650k estimate); launch plant now ~161M to 285M THB with contingency,
  midpoint ~223M. New section "Two plans": Plan A = launch plant with
  solar PPA, metrology launch tier, corridor later, cassette and CD-R
  later, rented crane, Chinese boilers and compressor: subtotal ~161.7M
  + ramp-up reserve 10 to 20M = ~177M THB (127M to 226M). Plan B = second
  Duplex at launch (five presses), everything in: subtotal ~209.2M +
  reserve = ~224M THB (162M to 286M). Contingency listed as not in
  either price (~24M / ~31M at 15 %). The 180M / 216M answer marked
  superseded.
- revenue-model.md: operating pictures of both plans at 60 % specials.
  Plan A central EBITDA 1.73M USD, operating profit 1.34M, payback ~3.1
  yr on the plan price; adverse loses money. Plan B (1.0 / 1.25 / 1.5M
  records) central EBITDA 3.14M, operating profit 2.63M, payback ~2.2 yr;
  adverse just covers depreciation; needs ~1.25M records sold.
- Calculator: Pheenix price basis "OMS +20 %" and "OMS directly"; new
  contingency switch (in the total / shown separately); presets Plan A
  and Plan B (replace "investor levers" and "five-press"); budget card
  against 180M and 225M.
- galvanics.md price note, README, roadmap.

Checks: calculator regression updated and passing (0 fails, no page
errors), node --check on all scripts, site build (no dead links), no em
dashes added.
2026-10-17 14:47:43 +07:00
grabowski f7e20e1015 Make a record: USD / THB / EUR selector and English / Thai language switch
Deploy test site / deploy (push) Successful in 1m45s
User (October 2026): currency selector on the first page (USD / THB /
EUR) and a language selector for Thai on the make-a-record demo.

- Top bar: one currency control (replaces the THB/USD switch on the
  price step) and an EN / Thai control, visible from step 1; both persist
  (localStorage, #cur= / #lang= in the URL, hash wins). Prices stay
  computed in THB: USD = THB / 33, EUR = THB / 38.115 (1 EUR = 1.155
  USD); the fan price is entered in the chosen currency and stored in
  THB, the campaign rule max(100, break-even) unchanged.
- Thai: every visible string, tooltip, aria label, file check, quote
  line, production update, passport, investor note and tour caption
  (dictionary T = {en, th}, t(key, vars), data-i18n attributes; 636
  keys), system Thai fonts, Thai dates with Gregorian years, and a footer
  note that the Thai is a draft translation for review. Template PDFs
  stay English (Helvetica has no Thai glyphs).
- Top bar wraps to two rows below 1000 px (steps were cut off between 761
  and 990 px before).
- README and landing entries mention the currencies and Thai.

Checks (headless Edge): doc example unchanged in THB (37,836 per title,
232 per copy at 100, break-even 41, goal 100, ~548 kept, 640 hint);
conversions exact; 390 / 768 / 1024 / 1440 px, light and dark, EN and
TH, all currencies, steps 1 to 5: no page errors, overflow or untranslated
leftovers; tour in Thai; node --check; no em dashes.
2026-10-16 22:03:50 +07:00
grabowski 3f1e4452b8 Press hall: five Duplex bays and four Classic positions (balanced at 60 % specials)
Deploy test site / deploy (push) Successful in 44s
User (October 2026): "change the hall layout" after the finding that the
60/40 floor split leaves the Classics about half loaded at 60 %+
specials (specials run only on the Duplex systems).

- Press hall now keeps five Duplex bays (four along the visitor
  corridor, the fifth at the head of the second row) and four Classic
  positions: 550 + 200 = ~750 m2 of ~870 m2, ~73/27 by floor, 10 to 4 by
  presses; launch plant fills one of each, growth adds Duplex first.
- Full hall: ~2.9 to 4.4M records a year at 60 % specials, Classics ~80
  to 100 % loaded (60/40 gave ~2.3 to 3.6M); ~3.2 to 4.4M at ~20 %;
  fourteen presses as before: ~2.1 to 2.5 t/h steam, up to ~1.8 MW
  cooling, a utility phase of its own.
- pressing-line.md, scale.md, site-candidates.md, crane-workshop-tours.md,
  roadmap.md, README (FreeCAD model still the earlier layout, not
  redrawn); calculator preset "Full hall (5 D + 4 C)" and ladder; plant
  view reserves 5 Duplex bays and 4 Classic positions; business plan
  draft 0.2 rebuilt.

Checks: renderer 720 checks and functional checks pass, calculator
regression 0 fails, level checks clean; PDF 47 pages, TOC filled.
2026-10-16 20:57:51 +07:00
grabowski b3e8e4272b Specials share 60 %+: revenue model, calculator and business plan re-based
Deploy test site / deploy (push) Successful in 52s
User (October 2026): "lets say 60+% special prints" (the plant focuses on
special prints, not mono colours).

- Specials (splatter, marble, colour effects) run only on the Duplex
  systems, so at 60 % the Duplex sets the launch plant's output: ~0.58 /
  0.74 / 0.90M records a year (was 0.71 / 0.84 / 0.97 at ~20 %), the
  Classic at about two thirds load. Full 60/40 hall: ~2.3 to 3.6M (Duplex
  -limited, Classics about half loaded); five-press fleet unchanged. A
  hall balanced by output at 60 % would give Duplex ~70 to 75 % of the
  floor (estimate; noted, not applied).
- Blended price 3.76 / 4.49 / 5.27 USD (standard 3.40 / 3.80 / 4.25 plus
  the 0.60 / 1.15 / 1.70 specials premium on 60 %). Launch operating
  picture: revenue 2.28 / 3.65 / 5.41M USD, EBITDA 0.23 / 1.73 / 3.79M,
  operating profit -0.66 / 1.21 / 3.46M, payback ~3.8 yr central,
  break-even ~0.25M records; adverse needs ~1.1M records to cover
  depreciation. Specials' extra direct cost (coloured compound, purge,
  trim only into black) is not in the cost table yet: flagged as an
  upper bound until compound quotes.
- Calculator default specials share 20 -> 60 % (planning rates keep the
  launch plant balanced at 850k: revenue 4.14M, EBITDA 2.07M, payback
  3.3 yr, cash payback year ~4.8, IRR ~18 %).
- revenue-model.md, scale.md, pressing-line.md, README; business plan
  draft 0.2 rebuilt (sections 1, 4, 9, risks).

Checks: calculator regression 0 fails, no page errors, node --check on
all scripts; PDF 47 pages, table of contents filled; no em dashes added.
2026-10-16 20:45:39 +07:00
grabowski d8b2c1e2db Press hall laid out 60/40 for Duplex systems (special pressings first)
Deploy test site / deploy (push) Successful in 46s
User (October 2026): "the factory should have more space for duplex
setups than classic, we will mainly focus on special prints and not mono
colours plan it to be 60/40 duplex classic".

- Press hall (~870 m2) planned 60/40 by floor: four Duplex bays along the
  visitor corridor and six Classic positions in the second row (440 + 300
  = ~740 m2 at 110 / 50 m2), the rest open for mould carts and staging;
  the launch plant fills one of each, growth adds Duplex systems first.
  Replaces "room for ten more Classics".
- Full hall: 8 semi-automatic presses + 6 Classics, 57/43 by press count,
  ~1,250 to 1,410 records/h gross, ~3.6 to 4.7M a year on the scale.md
  basis (was 4.7 to 5.8M for 2 Duplex + 11 Classics); ~2.1 to 2.5 t/h
  steam and up to ~1.8 MW cooling, still a utility phase of its own.
  By hourly output the six automatic Classics still press more than the
  eight semi-automatic presses (estimate).
- pressing-line.md, scale.md (capacity table, utilities), site-candidates
  .md, crane-workshop-tours.md, roadmap.md, README (the FreeCAD Payap
  model still draws the earlier layout; noted, not redrawn).
- Calculator: preset "Full hall 60/40 (4 D + 6 C)", fleet ladder Duplex
  first (1+1, 2+1, 3+2, 4+3, 4+6) plus the same floor Classic-led (2+11)
  and Duplex-only (7+0) for comparison; plant view reserves 4 Duplex
  bays and 6 Classic positions.
- Business plan draft 0.2 rebuilt (capacity table row, plot fit, layout).

Checks: renderer 720 checks pass (node budget 2,700 for the Duplex-heavy
stress preset, 60 fps), calculator regression 0 fails, level selector and
page checks clean at 390 / 1024 / 1440 px dark and light; PDF 47 pages
with a filled table of contents.
2026-10-16 20:09:56 +07:00
grabowski 4beda7f27a Plant view: toilets in the factory, link lands on doors, no separate trimmer
Deploy test site / deploy (push) Successful in 45s
User feedback on the isometric view (October 2026):
- "the production hall is missing toilets": two sets. At the staff
  entry: women 2 WC, men 1 WC and 1 urinal, an accessible WC, basins.
  At the east end of the back aisle in the finishing block: women 2 WC,
  men 1 WC and 1 urinal, basins (proposed, not yet in the parametric
  plans). site-candidates.md gets a Toilets bullet with the Thai minimum
  (Ministerial Regulation No. 39 B.E. 2537, table 2; separate toilets for
  men, women and disabled staff under the welfare regulation B.E. 2548).
- "the door and the corridor is not aligned": the covered link now lands
  on doors at both ends, centred on it (factory entrance at the start of
  the visitor corridor, office lobby door on the north face, windows
  cleared); the corridor glass starts after the door; the stray staff
  door with no path is gone; the link deck ramps up to the factory floor.
- "we also dont need a extra trimmer with the optical, this is included
  in the duplex and the classics": the finishing block keeps only the
  optical inspection station; site-candidates.md, the tour route and the
  process flow say the presses trim inline.

Checks: renderer 720 checks and functional checks pass (max 2,485 SVG
nodes); calculator regression 0 fails; level selector works in the page;
no page errors or overflow at 390 / 1024 / 1440 px, dark and light.
2026-10-16 19:40:05 +07:00
grabowski 8e4559ee36 Plant view: GF / 1F / Roof levels, lamps off the drive areas, pipe bridges land on walls
Deploy test site / deploy (push) Successful in 48s
User feedback on the isometric view (October 2026):
- "a light pole in the middle of the truck apron": a PAVED list of the
  drive areas (gate road, aprons, east road, lane, access road, car
  park, yard); every lamp now stands on a kerb or verge (the apron lamp
  to the south kerb, three more moved off drive areas, one added on the
  east road); one LAMPS list feeds poles and light pools.
- "the office building also has 2 levels, can we make a selector for GF
  1 2": the Roof / Inside toggle becomes GF | 1F | Roof. 1F shows the
  office first floor (+4.0 m: offices, meeting and training, meeting
  room, IT and server, toilets, pantry, flexible room, stair and lift)
  and the finishing and print block's upper floor (+3.8 m: print room in
  reserve, print stock, packaging materials, stair and goods lift), the
  rest ghosted. Office ground floor re-split after the floor plans
  (site-candidates.md). setMode('inside'/'roof') still works; new
  setLevel / getLevel / onLevel; the level survives calculator updates.
- "the pipe bridge to the pump and HX room also stops mid air": both
  pipe bridges now drop down the wall faces at the factory and at the
  yard building to low-level wall sleeves, with a second support post.

Checks: renderer 720 checks (presets x GF/1F/Roof x 390/1024/1440 x
dark/light) and functional checks pass; calculator regression 0 fails;
level selector works in the page; screenshots reviewed in all rotations.
2026-10-16 18:52:17 +07:00
grabowski 073f20a132 Plant view: cars under the canopies, PV on the car park, yard lamps, silo order
Deploy test site / deploy (push) Successful in 47s
User feedback on the isometric view (October 2026):
- "the cars are above the car park roof": cars and scooters were their
  own sprites and the depth sort put some above the canopy; they are now
  drawn inside the canopy sprite before the posts and the roof, so the
  roof always covers them in every rotation.
- "a light pole in the middle of the yard": the two yard lamps at the
  service-lane edge (one in front of the boiler hall) move to the yard's
  back fence; one LAMPS list feeds both the poles and the light pools.
- "add solar panels to the car park": the car and scooter canopies now
  take PV first (107 modules, ~48 kWp; construction RFQ has canopy PV),
  the factory roof the rest (560 of 667 modules at 300 kWp); canopy
  tooltips give their kWp.
- "arrange the pvc storage outside to be black, red, yellow": the silos
  read black, black, red, yellow from the default north-east view.

Renderer checks rerun (288 + functional, no failures); calculator
regression 62 checks pass; 390 / 1024 / 1440 px, dark and light, no page
errors or overflow.
2026-10-16 18:10:53 +07:00
grabowski d7380919e4 Steam and cooling, plant operation: show the launch plant (1 Duplex + 1 Classic)
Deploy test site / deploy (push) Successful in 43s
User (October 2026): "launch plant should be 1x duplex system and 1x
classic". The calculator already did; these two pages did not.

- steam-cooling.html: default case is now "Launch plant" (D1-A, D1-B,
  Classic; B-1 and B-2; CH-1 and CH-2: 450 to 540 kg/h on 1,000 kg/h,
  391.5 kW on 500 kW). Other cases: Duplex first (commissioning), Second
  Duplex (growth option, five presses), One module down (launch plant
  with B-2 and CH-2 out). Idle boxes say "reserved position" / "growth
  option". Phasing table: launch plant, second Duplex, options;
  galvanics cooling is launch scope. Five-press figures labelled as the
  growth case or backbone sizing; chiller cost per the CSV 2-module row.
- plant-operation.html: the launch plant: Classic C2 removed everywhere
  (press, trimmer, routes, conveyor, lamps, texts), Classic re-centred;
  one PDPU (2 cells) as in total-investment; boilers 2 x 500 kg/h,
  chillers 2 x 250 kW; title arrivals scaled to three presses; phone
  legend in one column.
- Landing entries and README bullets for both pages.

Verified headless (Edge): skill checks pw_sc_check and pw_plant_check
with launch-plant expectations, 90-day runs, perf unchanged; 390 / 1024
/ 1440 px dark and light without page errors or overflow.
2026-10-16 16:58:37 +07:00
grabowski 71e30b0633 Plant view: isometric tile-game render of the configured plant
Deploy test site / deploy (push) Successful in 45s
User request (October 2026): a SimCity / Factorio style render in the
calculator for an overview of the factory, solar and utilities.

New card "The plant at a glance" at the top of the plant and business
plan calculator: an isometric SVG scene (CNXIso, inlined with its iso-
prefixed CSS) of the Payap-scenario site driven by the calculator state:
Duplex systems and Classics (r.D, r.C; overflow into the phase 2
building), galvanics in-house or "stampers bought in", cutting in-house
or "cut abroad", metrology tier, cassette and CD-R benches, solar buy /
PPA / none (300 kWp, 271 kWh battery), electric or biomass steam (fuel
store, chip pile, smoking stack), boiler and chiller modules out of the
four positions each (r.nb, r.nc), crane, visitor corridor.

Roof / Inside cutaway, four rotations with a north arrow, zoom, pan,
pinch, tap for figures from the docs; dusk in the dark theme, day in the
light theme; CSS-only animation that pauses off-screen and respects
reduced motion. The scene only rebuilds when its config changes.

Verified headless on Edge: 390 / 1024 / 1440 px, dark and light, no page
errors, no overflow, presets map to the scene (lean, five-press, full
hall); the calculator's 62-check regression still passes; node --check
on all scripts. Renderer built and tested separately (288 checks).
2026-10-16 16:55:34 +07:00
grabowski 485b3b630a Plant and business plan calculator: configuration, investment, budget, ten-year cash
Deploy test site / deploy (push) Successful in 44s
User request (October 2026): an interactive business plan calculator
where the plant configuration is chosen and everything follows. Built
into the fleet calculator (same page and URL, one model):

- Plant configuration card: galvanics in-house or bought stampers (and
  Pheenix estimate vs OMS reference), mastering and cutting in-house or
  outsourced, metrology full or launch tier, cassette and CD-R, solar
  buy / PPA / none, electric or biomass steam, Thai or Chinese utilities,
  crane buy or rent, visitor corridor now or later, ramp-up reserve;
  stamper supply to other plants; disabled-not-hidden controls.
- Investment built from the total-investment blocks (low / mid / high,
  sources and kind badges); boiler and chiller modules sized from the
  fleet and flagged past the four positions; phase 2 building past the
  870 m2 press hall. Default reproduces 160.9 / 226.7 / 292.5M THB.
- Budget card against 180M and 216M THB; "Investor levers" preset gives
  193.6M mid, 203.6 to 213.6M with the reserve.
- Money follows the configuration: outsourced title steps passed through
  at cost (fee split 51.1 / 37.0 / 11.9 %), electric steam energy and
  demand charge, PPA power price, optional cassette/CD-R revenue.
- Ten-year cash view: editable ramp and discount rate, payback, NPV, IRR,
  chart and table; pre-tax, pre-financing sketch.
- Presets: launch plant, investor levers, lean, five-press, full hall.
- Verified headless on Edge: 62 checks, 390 / 1024 / 1440 px, dark and
  light, no overflow, no page errors.

Business plan 9.4 cross-check updated to the calculator's figures
(EBITDA 1.68M, payback 4.1 yr; cash payback year ~5.7, IRR ~13 %);
docx and pdf rebuilt. README and landing entry renamed.
2026-10-16 16:15:22 +07:00
grabowski d42e99389b Business plan draft 0.2: re-based on the launch plant
The investor business plan (docx + pdf) rebuilt for the launch plant
decided in October 2026: one Duplex system and one Classic, Pheenix
galvanics with zero discharge, the Sibert line, a Sillitoe cutting room,
modular steam and cooling (rooms for four), cassette and CD-R; no bridge
stampers, no outsourced cutting; second Duplex as a growth option.

- Part A: executive summary (what changed since 0.1, the numbers, the
  180M / 216M answer, first release marked open), reading guide, two
  price points (ResurRec and Record Industry), anatomy rewritten for
  Sillitoe, Pheenix, Sibert, Duplex + Classic, lead times without bridge
  stampers, new 4.8 artist platform, cassette 4.9, CD 4.10.
- Part B: traceability with ERPNext as system of record, metrology launch
  tier as the investor's choice, QC, efficiency (PEA tariff, utility
  modules, fuel open, Chinese boilers and DIW rules), site (Mueang Chi,
  Payap zoning result), building blocks, safety, BOI and licences with
  galvanics in the first factory licence.
- Part C: launch-plant investment table, the investor's question and
  levers, tranches, currency, operating picture of the launch plant,
  timeline with the metal path on the critical path, commissioning
  sequence and why the whole chain at launch, team, 22 risks, 17 phase 0
  actions, the ask.
- plan_lib: grid column widths so LibreOffice keeps table widths.
- export_pdf.py: LibreOffice UNO export that fills the table of
  contents (47 pages).
- README: total investment, revenue model and business plan bullets.
2026-10-16 16:01:25 +07:00
grabowski 794cde228c Re-base scale, pressing line, roadmap, revenue model and calculator on the launch plant
Deploy test site / deploy (push) Successful in 48s
Launch plant (user, October 2026): one Duplex system and one Classic,
with cutting and galvanics in-house, everything in one capital round.

- scale.md: capacity table now launch plant 0.71-0.97M records/yr, the
  second Duplex as a growth option; launch utilities (450-540 kg/h on
  B-1/B-2, ~390 kW on 2 x 250 kW); calculator figure ~0.94M.
- pressing-line.md: launch plant section on top; five-press fleet kept as
  the layout fleet the hall and backbone are built for.
- roadmap.md: long-lead orders for the launch plant, no bridge stampers
  or outsourced cutting, commissioning order, what stays revenue-gated.
- revenue-model.md: operating picture of the launch plant: central
  revenue ~3.75M USD, EBITDA ~1.6M, operating profit ~1.1M, payback ~4
  yr on 216M THB, break-even ~0.3M records; adverse corner cannot cover
  depreciation. Five-press table kept and labelled.
- fleet-calculator.html: start fleet 1 Duplex + 1 Classic, target 850k,
  capex base 6.55M (cases 8.9 / 6.55 / 4.9M), Duplex beyond one, chiller
  500 kW, imported machinery 2.3M, ladder from the launch plant.
- total-investment.md: superseded note updated.
2026-10-16 15:34:19 +07:00
grabowski 7344f12dc8 Chinese suppliers for boilers, compressed air and hydraulics
Checked October 2026 on the investor's budget question. New
docs/suppliers/china-utilities.md: boiler makers (ZOZEN, Sitong,
Fangkuai, Taiguo, Yuanda, Yongxing, Taishan, Nobeth) with fit for 500
kg/h at 1.25 MPa, claimed certificates, Thai references and listing
prices; the Thai rules for an imported boiler (MR and MOI notification
B.E. 2549: ASME/JIS/EN or equivalent, certification-body verification,
once-through relief does not reach 10.5 bar, licensed controller, annual
inspection); compressor makers with Thai offices (Kaishan, Denair) and
sizing; hydraulic pump sets and accumulators (Huade, Yuci, Hengli, WMD,
Renowell, Inovance, NXQ makers), the shared-ring-main risks and Thai HPU
builders; duty and freight; open RFQs.

Result: about 2M THB at the midpoint (~2.5M with contingency), ~1 % of
the 216M target, mostly the boilers; Newbilt aggregates stay Newbilt's.
total-investment notes it and lists the uncosted central hydraulic
plant; utilities CSV gets the Chinese candidates and route estimates;
backlinks from equipment-suppliers, pressing-line, README.
2026-10-16 15:21:38 +07:00
grabowski 553b4a93d1 Launch plant roll-up and the investor's 180M THB question
Decided (user, October 2026): the plant launches with everything in one
capital round, commissioned in sequence: one Newbilt Duplex system, one
Classic, a Pheenix galvanics line with ZLD water, the Sibert line, a
Sillitoe cutting room, and the modular steam and cooling plant (2 x 500
kg/h boilers, 2 x 250 kW chillers, rooms for four each). No bridge
stampers, no outsourced cutting; cassette and CD-R stay; the second
Duplex and further Classics are growth options, not in the investment.

total-investment.md: new 'Launch plant' roll-up, 4.9M to 8.9M USD,
161M to 292M THB incl. 15 % contingency (midpoint ~227M), with what is
left out (ramp-up reserve ~10-20M THB, CD replication, financing, FX,
archive shelving) and the BOI assumption. The investor's question (180M
THB, maybe +20 % = 216M): fits at the low end only; at the midpoint four
levers that keep every machine (solar via PPA, metrology launch tier,
galvanics near OMS's reference, visitor corridor later) give ~193M, plus
reserve ~203-213M, inside 216M; 180M needs low quotes. The quotes that
decide it: Newbilt (Duplex, Classic), Pheenix galvanics, building with
soil test, metrology. Old full vision and phased entry marked superseded
until the mirrors are re-based.

Utilities CSV: chiller bank two modules (4.9-7.9M THB), boiler note for
B-1 and B-2 at launch, ZLD and DI rows now launch scope (carried with
galvanics); baseline 28.47M-48.73M THB. README project status.
2026-10-16 14:53:19 +07:00
grabowski 07ef9c0b9a Order demos: spine choice, artwork templates, PDF and AI uploads
Deploy test site / deploy (push) Successful in 50s
User request (October 2026): the order tool needs a thin / thick spine
selection, templates for the jacket and label upload, and must accept AI
and PDF files.

Both artist demos (artist-order, make-a-record):
- Spine: thin 3 mm (one record) or thick 5 mm (two records, or a thick
  insert); a double album in a single jacket takes 5 mm, thin is then
  disabled; 7", gatefold (7 or 9 mm) and own jacket disable the row with
  the reason. Quote line 'Thick 5 mm spine' (R.spine 12 / 10 THB per
  copy, estimate from QRP 0.90 vs 0.55 USD and Kudos 137.50 GBP/order).
  Mock-up draws the spine edge to scale; caption names it.
- Templates: vector PDFs written in the browser for the current choice:
  jacket spread (back, spine, front; 633/635 x 315 mm for 12" from
  Mighty Media Discs), gatefold with an inside page, labels with a page
  per side and the dinked hole; trim and bleed boxes set, 3 mm bleed,
  5 mm safe area, folds, crop marks, guidance notes.
- Uploads accept PDF, AI (PDF-compatible) and images. PDFs are read in
  the browser (object streams inflated with DecompressionStream): page
  boxes, pages, PDF/X, creator, colour spaces, font embedding; checks
  against the chosen spine (a 5 mm spread on a 3 mm order is flagged),
  bleed, CMYK, fonts; old PostScript-only AI files are refused with the
  fix. Image spreads are measured the same way. Preview via pdf.js
  (jsDelivr, loaded only when a PDF arrives); the front panel goes into
  the mock-up.

artist-platform.md: new section 'Artwork templates and files' with the
sources; preflight step links it; RI 'left out' list updated. README
demo bullet. Checked headless on Edge: fixtures (3/5 mm spreads, no
bleed, AI, legacy AI, front only, labels, 150 dpi PNG), downloaded
templates parsed with PyMuPDF, 390/1024/1280 px no overflow, dark and
light, no page errors; pw_mr_check --tour and pw_ri unchanged
(37,836 / 232).
2026-10-16 12:34:58 +07:00
grabowski 5c303dfc61 ERPNext is the only system of record; we build tools on it
Deploy test site / deploy (push) Successful in 46s
User (October 2026): we only build tools and interfaces that interact
with ERPNext; invoices, stock and the rest are kept there, except
telemetry and other machine data.

digital-factory.md: standing decision, decisions 2, 3, 6, 7 and 10
rewritten (ERPNext holds every record of the business and of production,
including artist gates, metal-part genealogy as serial numbers with
parents, and quality inspections; the machine-data store keeps only
cycle and record rows, the hash chain and time series, keyed to ERPNext
names; ERPNext first, then custom fields or document types in cnx_erp,
then a tool, never a second business database). Systems table,
architecture labels, factory application section (modules as a table:
records in ERPNext, what we build, machine data outside; our only tables
are the machine-data ones), ownership table, integration rules 4 and 8,
phasing and estimates (cnx_erp app 2 to 3 person-months; total 3.5 to 6).
artist-platform.md: campaigns are an ERPNext document from launch, pledges
post as advance payment entries; traceability, README, facility security
(archive location on the serial number), production timeline (sets per
mother on the mother's serial number), crane-workshop spares store,
total-investment.

Factory console: KPI row no longer touches the postings card (user
screenshot); ERPNext page, order card, sidenote and ledger say every
record lives in ERPNext and only machine data stays outside; new
postings for artist gates, stamper metrology inspections, stamper set
serial numbers (grown, retired with play count). Checked headless:
Edge dark and light, 1440/1024/390, no overflow or page errors, rows
aligned, pw_fc, pw_wo, pw_feed and pw_erp pass.
2026-10-16 12:14:52 +07:00
grabowski a101c9f7db Factory console: ERPNext link page and ERPNext documents on orders
Deploy test site / deploy (push) Successful in 45s
Follows the decision that the whole plant runs ERPNext and every tool
we build interacts with it (e12ad2e).

- New page #erp (nav: ERPNext): every posting the floor makes, derived
  from the same event log: sales orders in by webhook, work orders,
  job cards per station, serial numbers for lacquers, fathers and
  mothers (warehouse Archive), purchase receipts, quality inspections
  and stock entries per compound batch, manufacture entries per run,
  downtime entries per stop, delivery notes and invoices. Outbox status
  per row (sent within a minute, held during the nightly backup
  01:00 to 01:15), KPIs, who-owns-what table, counts by document type.
  Rows use fixed ch grid columns; on phones a two-line row.
- Order page: ERPNext card (customer, sales order, work order with
  produced quantity, job cards completed, batches, delivery note and
  invoice). Work order page: its job card, quality inspection or asset
  maintenance log.
- Names follow ERPNext's default naming series and are simulated;
  nothing uses the simulation's random stream, so the seed is unchanged.
- Phones: the nav strip scrolls the current tab into view. Work order
  IDs on the order page no longer wrap (wider fixed column).

digital-factory.md demo paragraph. Checked: node --check, Edge dark and
light at 1440/1024/390 (no overflow, no page errors, rows aligned), and
the pw_fc, pw_wo and pw_feed regressions.
2026-10-16 11:37:10 +07:00
grabowski e12ad2ed7b ERPNext runs the whole plant; every tool we build integrates with it
Decided by the user (October 2026): the whole plant runs ERPNext, and
all tooling we develop has to interact with it.

digital-factory.md: standing decision in the summary; decision 10
(ERPNext owns the business documents, the factory application owns the
floor; ERPNext names are the shared keys); new section 'ERPNext: the
plant's ERP' with the ownership table (customers, prices, sales orders,
items and BOMs, work orders and job cards per station, batches and
quality inspections per compound lot, serial numbers for metal parts,
downtime entries, delivery notes, assets, accounting, payroll vs. cycles,
per-record inspection, genealogy and the hash-chained log staying in the
factory application), the integration rules (one typed Frappe REST
client in cnx-factory, an integration user per tool, webhooks in,
transactional outbox with idempotent postings so the floor never waits
on the ERP, business-sized postings, customisation as a Frappe app in
Gitea, nightly reconciliation, no public ERPNext endpoint, new tools use
the same client), hosting on NixOS (no nixpkgs module, NixOS/nixpkgs
#241921; Avunu frappe-nix as the start, frappe_docker as
oci-containers fallback; MariaDB + Redis; vinyl-erp on site behind the
gateway proxy; OIDC sign-on; upgrades on a restored copy), Thai
localisation (Ecosoft erpnext_thailand: VAT, WHT, PND, billing notes;
Ecosoft as partner to quote; payroll and BOI reporting to check),
phasing (dev ERPNext now; accounting and assets from the first capex
invoice; manufacturing at commissioning) and estimates. ERPNext added
to the architecture diagram, services, machines (vinyl-erp), module
list, backup, cost, build order and open decisions; the old 'ERP out of
scope, decide after launch' line replaced.

artist-platform.md: price list, customers, sales orders, campaign
pledges as payment entries, through the plant's outbox. traceability.md:
one ERP, one set of keys. README summary. total-investment.md added
scope: ERPNext (to quote, not in the sum, no licence fee).
2026-10-16 11:29:26 +07:00
grabowski 655d5705c4 Supplier: LPI Rack Range (Thailand), racking and mobile shelving
Added at the user's request (October 2026): LPI Rack Range (Thailand)
Corp., Ltd., Bangkok head office, plants in Bangplee Industrial Estate
and Bangpla (Samut Prakan); office mobile shelving for documents, pallet
racking (selective, drive-in, mobile, shuttle, pallet flow), picking
shelves and mezzanines, mould-and-die racking, mini-load AS/RS; no specs
or prices published (lpi.co.th, checked October 2026).

equipment-suppliers.md section 8 entry; the Thai supplier the archive
shelving is quoted against (facility-security.md open points, supplier
map archive line); racking candidate in the utilities CSV.
2026-10-16 11:25:15 +07:00
grabowski 4f02d9a7a9 Archive room: mobile shelving for the father and mother archive
Deploy test site / deploy (push) Successful in 43s
Planned (October 2026, user): the archive in the office gets mobile
archive shelving, A-Z Solutions (Vienna) as the reference
(a-z-solutions.eu, checked October 2026: hand wheel or electric drive,
lockable, rails need early floor planning; no published prices).

facility-security.md, new section under Protecting the irreplaceable:
what it holds (fathers and mothers, ~1,200 to 2,400 parts a year; a
reference pressing per title only as a proposal), sizing estimates (about
0.2 kg per part, ~3 mm and ~75 kg per shelf metre; in the Payap office's
~4 x 5.75 m room two fixed runs, four double carriages and one aisle hold
~150 shelf metres, ~50,000 parts, 20+ years), what it asks of the
building (ground slab at full rating, ~11 kN/m2 under the block; rails in
the screed fixed before the floor finish; geared hand wheel; gas,
climate, leak sensor, access control; barcoded box addresses), open
points (quotes from A-Z and a Thai supplier, storage format from the
galvanics vendors, fathers in a second compartment or off site).

Mirrors: site-candidates.md (office ground floor), phase 1 RFQ (archive
keeps the full slab rating if the slab is zoned), digital-factory.md
(archive location as box and shelf position, sets per mother),
equipment-suppliers.md (section 8 entry), total-investment.md added scope
(to quote, not in the sum).
2026-10-16 11:18:09 +07:00
grabowski 475623e9f2 Archive the father as well as the mother; how many represses a mother carries
Decided (October 2026): the plant keeps the father and the mother of every
side. production-timeline.md (repress section) records the decision and the
rule of thumb with sources: about 10 stamper sets per mother before it
degrades (Third Man Pressing FAQ, a Nashville plater via WPLN), fewer in
quality-minded sources (5 VinyLab, 6 to 8 Stereo Review 1962); a father
grows about 5 to 10 mothers. So a mother covers roughly ten represses
(10,000 to 20,000 records a side) and a worn one is replaced from the
archived father without a new cut. galvanics.md: 4 archived parts per
title, ~1,200 to 2,400 a year; new open question to all galvanics
candidates (sets per mother, mothers per father, storage).
artist-platform.md repress paragraph.

Demos: make-a-record and artist-order say father and mother are archived;
factory console archives the father on represses too, counts stamper sets
per mother (shown in the genealogy and the customer's metal card), and the
metal archive counts fathers and mothers.
2026-10-16 11:17:13 +07:00
grabowski 1cceedc8a4 Factory console: inspection feeds in fixed columns
Deploy test site / deploy (push) Successful in 45s
The live inspection feeds (floor, quality, press, customer's latest
copies) were one run-on string, so a shorter press ID (C1 vs D1-A)
shifted everything after it and the cycle time showed twice. Each row
is now a grid of fixed columns sized in characters of the mono font:
time, stamper, press, order, result, with a header row (the row keeps
the mono font so its columns match; only the labels change font). On
phones the order column (factory) or press column (customer) drops.
The full record key stays in the stamper cell's tooltip.

Work order cards: station chip left, work order ID right-aligned in the
header, the assignee moves to the time line, so card headers no longer
shift with the ID length.
2026-10-16 10:58:35 +07:00
grabowski f9b8407561 Factory console: work orders for the operators
Deploy test site / deploy (push) Successful in 51s
New "Work orders" section in the factory console (#work), derived from
the same simulated records as the rest of the page, one work order per
station and job:
- order stages: mastering, lacquer cutting, electroforming, stamper prep,
  test pressings, press run, packing, dispatch
- stamper changes (planned when a set nears its life, in progress during
  the change), fault clearing on a stopped press (maintenance)
- material lab: lab gate per compound lot, release test pressing, and the
  held lot's re-dry and retest (button starts it)
- audio QC: each sampled copy's listening check

Board: In progress (press floor first) / Next up (planned press runs and
stamper changes with time and press, jobs arriving at the next station)
/ Done today, filter per station, KPIs. Each work order opens a kiosk
view: the steps an operator follows (badge in, scan what the step asks
for, with the IDs to scan, confirm), confirmation times and who did it,
the order, lot or press it belongs to, and what it writes to the log.
Order detail lists the order's work orders by station. Mastering and
cutting are booked to the engineers, the lab, QC and maintenance to
technicians, the rest to numbered operators; jobs finishing at night are
booked to the late shift.

README, digital-factory.md demo paragraph and the landing page mention
the work orders.
2026-10-16 10:41:29 +07:00
grabowski dd7b749af9 Factory console: demo fleet of one Duplex system and one Classic
Deploy test site / deploy (push) Successful in 51s
Three presses for now (D1-A, D1-B on one Newbilt Duplex system, C1
Classic) instead of the plan's two Duplex systems. Order arrivals scaled
to the smaller fleet (about 3,000 to 4,600 good records a day); press
row fills the width; landing page text updated.
2026-10-16 10:29:39 +07:00
grabowski 9ed51f4b22 Factory console and customer order status: investor demo
Deploy test site / deploy (push) Successful in 51s
New page docs/factory-console.html (site /demos/factory/): the factory
application of digital-factory.md on a simulated plant day, with a
switch to the customer portal of the same orders.

Factory console (sidebar: Floor, Orders, Quality, Lab, Metal, Ledger):
- floor: five presses of the launch fleet (two Newbilt Duplex systems,
  one Classic) with the mounted order, live good / rejected counters,
  stamper plays against life, cycle time and steam; KPIs for the day;
  live optical inspection stream with record keys; alerts (stops, lab
  holds, stampers near end of life, listening reviews, long gate waits);
  stations (cutting, galvanics, stamper prep, lab, packing); orders by
  stage; good records per day
- orders list with stage filters and search; order detail with stage
  track, approvals, metal genealogy and stamper metrology, press run
  telemetry, compound lot certificate, rejects by reason, audio samples,
  packing and shipping, and the order's events
- press detail with telemetry sparklines; quality (rejects by reason,
  yield per press, audio comparison); lab (compound lots with results
  against illustrative limits, one lot on hold with re-dry and retest,
  regrind batches, hoppers); metal (baths, mounted stampers, metrology,
  archive); hash-chained event log

Customer portal (four demo customers: pressing now, waiting to approve
the test pressing, in plating, delivered): progress through every step
and the three gates, copies pressed so far with the latest copies and
their record keys, approving the test pressing books the press slot
(greedy plan of the queue gives the start time and press), and a quality
report that fills in step by step: files, lacquers, metal parts with
metrology, test pressings, the compound lot's lab results, pressing and
inspection, listening checks, packing.

Simulation: 60 days warmed up at load (about 0.7 s), then 1x to 3600x.
Stages and durations from the production timeline, Newbilt cycle times,
two shifts 06:00 to 22:00, unplanned stops, stamper life 1,000 to 2,000
plays, audio sampling first-off plus about 1 in 50 (1 in 25 near end of
life), compound lots through the lab gate and release test pressing.
All orders, values and IDs are simulated; limits are illustrative.

Linked from digital-factory.md (the factory application), traceability.md
(customer-facing view), the README and the landing page.
2026-10-16 10:17:19 +07:00
grabowski 5090609df3 Calculators: options from Record Industry's calculator; its prices as a benchmark
Deploy test site / deploy (push) Successful in 45s
Reviewed Record Industry's (Haarlem, NL) public vinyl calculator: a
seven-step wizard with a live itemised cost list priced on its server.
Read its prices for a reference 12" LP at 200 / 300 / 500 / 1,000 copies
and for each option worth copying (checked October 2026).

Both artist demos (make-a-record and artist-order):
- audio arrives as digital files, analog tape (+ tape transfer) or a cut
  lacquer (no blanks, cutting or mastering; mastering choice disabled with
  the reason; cutting and mastering stages skipped in the timeline; the
  passport starts at "Lacquer received")
- labels printed, plain white or plain black (credit line; the label
  artwork drop is disabled for plain labels; the mock-up shows the plain
  label)
- press cleaning before a colour run, on by default, disabled for black
- 7" dinked (large centre hole), 7" only, drawn in the mock-up
- download card and barcode sticker extras
- run-out inscription (A-Z, 0-9, up to 15), scribed along the dead wax in
  the mock-up and named in the passport
- new rates (tape 3,800, cleaning 2,300 per title; plain labels -12 per
  disc; download card 43, barcode 6 per copy) are estimates with Record
  Industry's prices as the basis, each listed in the detailed demo
- make-a-record investor notes: Record Industry's 9 to 11 week quote after
  test-pressing approval against the 7 to 9 week CNX quote, and its 2 %
  reject allowance against 100 % optical inspection

Defaults unchanged (37,836 THB per title, 232 per copy at 100, break-even
41, goal 100, 548 kept).

Docs: artist-platform.md (choices table, benchmark section: what was
taken, what was left out, commercial terms worth deciding);
revenue-model.md (second Western data point: 219 THB a copy at 300
ex-works, per-title and per-copy reading against the assumptions, not a
re-base); production-timeline.md (its published lead times).
2026-10-16 09:42:57 +07:00
grabowski 83f1aa94dc Make a record: launching a campaign no longer starts the simulation
Deploy test site / deploy (push) Successful in 52s
After Launch the campaign page opens at day 0 with Play ready; the
artist (or presenter) starts it. The quick "Run the demo campaign" path
behaves the same; only the guided tour presses play itself.
2026-10-16 09:36:53 +07:00
grabowski e36d7b00a0 Fan funding: the price sets the fans needed; limited edition as a switch
Deploy test site / deploy (push) Successful in 1m4s
The artist sets only the fan price; the number of fans needed follows from
it: the plant's 100-copy minimum, or the break-even if that is higher. The
goal selector of 6a62505 is removed from both demos.

make-a-record.html:
- step 4 leads with "Your price to fans" (input, slider from 300 THB,
  presets 800 to 2,000) and a live "You need N fans to press it, X THB in
  pre-orders", plus the price below which the minimum no longer covers
  the costs (about 640 THB at the defaults)
- limited edition is now a switch, off by default; the edition size stays
  visible but disabled until it is on, and switching it on adds the
  numbered edition to the record
- "per title" renamed for end users: "One-off, for this release", "once +
  per copy", "One-off setup", with a note that one-off costs count sides,
  not songs (a double LP has four)
- the tour lowers the price to 500 THB and back to show the fans needed
  rising from 100 to 152
artist-order.html: goal field removed, "Fans needed" label and hint.
artist-platform.md: the price-sets-the-goal decision (October 2026).
2026-10-16 08:54:15 +07:00
grabowski 6a62505aa6 Fan funding: the artist chooses the campaign goal in fans
Deploy test site / deploy (push) Successful in 1m9s
The goal is no longer fixed at the larger of the plant minimum and the
break-even; that is now the floor, and the artist sets any goal above it.

- make-a-record.html: "Goal: how many fans you need" with number input,
  slider and chips (Lowest, 150, 200, 300, 500, 1,000); chips below the
  floor or above the edition cap stay visible but disabled with the
  reason; the goal also shows as the pre-order amount (fans x fan price);
  typing below the floor snaps back with a note; the campaign, the
  outcome and the stage run against the chosen goal; the tour shows the
  goal being raised to 150
- artist-order.html: goal field in the campaign card, same floor rule
- artist-platform.md: the floor rule and that a higher goal is all or
  nothing as well

Defaults unchanged (goal 100 = the plant minimum at 1,200 THB, break-even
41, 548 THB kept a copy).
2026-10-15 16:40:49 +07:00
grabowski 4b20ca4f48 Side length per format: team table with songs a side; palette control
Deploy test site / deploy (push) Successful in 47s
Side length "at most" per format is now the table the team supplied
(October 2026, from recordplayerexpert.com, songs counted at an average
4:32): 12" 22 / 15 min, 10" 15 / 12 min, 7" 7 / 5 min at 33 1/3 / 45 rpm.
Changes against the earlier microcut.studio figures: 10" 33 1/3 16 -> 15,
10" 45 11 -> 12, 7" 45 6 -> 5. The comfortable column stays the lower end
of microcut.studio's ranges.

- artist-platform.md: table with a songs column, both sources, and the
  three formats where cutting rooms disagree (10" 45 is now more generous
  than microcut.studio and Diggers Factory) as re-check points for the
  cutting engineer
- artist-order.html: LIM and the side-length table (songs column, sources)
- make-a-record.html: LIM; format cards show the at-most time and about
  how many songs a side; step 2 hint adds the songs; the last control in
  each colour row is now a labelled "Palette" pill with a colour wheel,
  showing the chosen colour and "Your colour" when a custom colour is set
2026-10-15 16:36:11 +07:00
grabowski 607f6631a7 Make a record: investor demo of the artist platform, end-user flow
Deploy test site / deploy (push) Successful in 53s
New static page docs/make-a-record.html (test site /demos/make-a-record/):
the artist platform as a customer would see it, polished for presenting.

- five steps (design, music and art, price, fan funding, track) with a
  sticky stage: to-scale mock-up (record spins at 33 1/3 or 45 rpm on
  hover), spec chips, price per copy, ship month and the next action
- design as option cards and swatches; options that do not apply stay
  visible and disabled (weight and gatefold off 12", colour pickers for
  black vinyl)
- masters and artwork read in the browser as in the detailed demo, side
  bars per side, checks in plain words, approval 1 of 3
- price with the curve, itemised lines folded under one summary, lead time
  as two bars (approvals, then the 7 to 9 week quote)
- fan funding: goal, break-even and what the artist keeps, money rules;
  the campaign on a phone with a pre-order ticker, funded or missed ends,
  production timeline with the artist's approvals, updates feed
- record passport for one delivered copy (stamper, press, cycle time and
  side; stage dates; optical inspection and sampled audio), per
  traceability.md and quality-automation.md, IDs simulated; repress card
- "Investor notes" switch with the business case per step (market
  research, vault, short-run economics and the Thai price gap, plant-owned
  vs broker and the Qrates lesson, traceability and represses); guided
  tour of about a minute (#tour, #notes in the URL)
- light/dark theme shared with the other pages; phone layout with a
  bottom bar

Same price list (demo-0.1) and stage table as artist-order.html, so the
defaults reproduce the artist platform example: 37,836 THB per title,
232 THB per copy at 100, break-even 41, goal 100, 548 THB kept a copy.

artist-platform.md: investor demo paragraph. traceability.md: the record
passport as the per-copy customer view. README bullet and layout line,
site DEMOS line and landing-page entry.
2026-10-15 16:13:29 +07:00
grabowski 5daf54a90b Payap parts model: saved view (camera on the utility yard)
Model content unchanged; only the save timestamp and camera differ.
2026-10-14 21:14:25 +07:00
grabowski e49abf89d3 Utilities: build the backbone once, add modules with the presses; four-module boiler hall and chiller compound
Deploy test site / deploy (push) Successful in 57s
Phased build list for steam, cooling and hydraulics (launch, Duplex 1,
Duplex 2, Classic, options): everything cheap to oversize and costly to
retrofit (rooms, pads, headers and ring mains with a valved branch per
press position, tanks, HX frame, feeders, one sequencer) is built for the
five-press fleet at launch; boilers, chillers and hydraulic pump sets come
in identical modules as presses arrive. The Single 2.1 aggregate is
proposed as the first central pump set; per-branch isolation and filters.

Rooms sized for four modules each (user decision, estimates until vendor
footprints): boiler hall ~18 x 9 m for four 500 kg/h positions (fired case,
AIX DZL0.5 body), open screened chiller compound ~12.5 x 10.8 m with four
pads (250 kW at 40 C ~ Carrier 30RB 080-090), ~40 m2 pump and HX room; the
cooling tower pad of the water-cooled concept is dropped. Yard 178 -> ~379
m2. Four boilers carry ~8 presses with N+1; four 250 kW chillers carry the
five presses with CH-4 as reserve and no growth position unless the pads
take the ~350 kW frame (RFQ option).

- scale.md: yard table and basis, utility phasing section
- pressing-line.md: hydraulics phasing and re-quote questions
- steam-cooling.html: B-4 position, phasing and rooms card, details, RFQ
  questions (pw_sc_check clean)
- construction RFQ: yard table, sealed area 6,549 m2 (68 %)
- total-investment: added-scope row +73k to +122k USD (building rate on
  the ~200 m2 the yard grows by)
- Payap parts model: yard rebuilt from Params (blr_n, blr_inst, ch_*,
  bh_*, cy_*, pr_*), renders updated
2026-10-14 21:02:30 +07:00
grabowski 7688d03be6 Payap scenario: Part/Draft model with roof, rooftop PV and PV parking canopies
New FreeCAD model docs/cnx_vinyl_parametric_payap_parts.FCStd: the Payap
scenario rebuilt from plain Part solids and Draft (arrays, labels,
dimensions) on the same Params sheet, no BIM objects, plus:

- monopitch roof 10 deg, low eave 7.0 m south, high side 11.4 m north
  (phase 1 RFQ geometry); gables and the fire wall follow the roof
- rooftop PV: 901 x 580 W placeholder modules, ~523 kWp, 17 rows in
  blocks of four with walkways, 1 m edge strip, 2.5 m clear over the
  fire wall (estimate)
- car canopy (10 bays, 72 modules) and scooter canopy (30 spaces,
  22 modules), ~54 kWp, RFQ footprints and heights
- module counts and kWp as sheet expressions; ~577 kWp in all

FreeCAD 26.3 RC1 does not propagate spreadsheet edits: CNX_apply_Params
macro touches the dependents and recomputes; parametric test (factory
length, pitch, car bays, walkway) matches the sheet counts.

site-candidates.md: roof/PV/canopy section with the export, battery and
BOI questions a 577 kWp array raises; mirrors in sustainability.md and
scale.md; README layout lines.
2026-10-14 20:32:43 +07:00
grabowski 1946553dd1 Artist ordering demo: colour pickers disabled for black vinyl
Deploy test site / deploy (push) Successful in 43s
With black vinyl the colour pickers are greyed out and cannot be used;
with solid colour only the first is active, marbled and splatter use
both. The weight buttons are disabled for 10" and 7" (140 or 180 g is a
12" option). Both rows were meant to hide, but .row display:flex
overrode the hidden attribute; a [hidden] rule now guards that too.
2026-10-14 19:41:45 +07:00
grabowski 2a3da0778f Artist ordering demo: mock-up drawn to scale for 12", 10" and 7"
Deploy test site / deploy (push) Successful in 46s
The record and jacket in the mock-up (sidebar and fan campaign page) now
scale with the chosen format: record diameters 302 / 250 / 175 mm
(IEC 60098), jackets 314 / 260 / 184 mm, labels 100 / 100 / 90 mm, so a
7" label is relatively larger as on the real disc. Smaller formats show
a dashed 12" jacket outline for scale and a caption with the sizes.
2026-10-14 19:33:36 +07:00
grabowski a07faf6ef0 Artist ordering demo: configure, check, offer, fan-funded campaign
Deploy test site / deploy (push) Successful in 53s
New static page docs/artist-order.html (test site /demos/artist-order/)
walking the artist platform flow end to end:

- record configurator (format, speed, discs, weight, colour, packaging,
  extras, mastering, test pressings) with a live mock-up
- track list or dropped masters read in the browser (WAV/FLAC/AIFF
  headers, sample peak and clipping), side length against the format,
  jacket and label preflight (size, dpi, CMYK), rights and gate 1
- itemised offer (per title / per copy, pass-through jacket), price per
  copy against quantity, lead time from the production timeline
- direct order or fan-funded campaign: goal = max(minimum run,
  break-even), what the artist keeps, the money rules, a simulated
  campaign (sells out / just makes it / falls short) with refund or
  go-ahead-at-minimum, and the production tracker with the three gates
  and the fan update feed

Price list demo-0.1 splits the doc's 38,000 THB per title and 132 THB per
copy into lines (estimates, each listed with its basis); defaults
reproduce the artist platform example (break-even 41, goal 100, ~548 THB
kept per copy at 100).

artist-platform.md: demo paragraph, side length per format table with
sources, VAT note on the campaign example. README bullet and layout line,
site DEMOS line and landing-page entry.
2026-10-14 19:24:49 +07:00
grabowski b650503ea1 Payap zoning record: type 72 condition verbatim
The annex row for type 72 in the very high density residential zone
carries the orange "permitted with conditions" mark; the condition as
printed is "ให้ดำเนินการหรือประกอบกิจการได้เฉพาะดัดแปลงหรือซ่อมแซม"
(may operate only for modification or repair). Added verbatim to the
source record.
2026-10-14 12:05:16 +07:00
grabowski 3984d0c93b Payap: the point given fails zoning (DPT, checked 14 October 2026)
Point 18.797678 N, 99.038272 E, queried on the DPT land-use plan map:
Chiang Mai comprehensive city plan in force from 25 May 2026, zone
ย.7-1, very high density residential. The zone prohibits every factory
under the Factory Act except the types in the plan's annex, and
prohibits warehouse and silo businesses.

Annex for this zone: type 107 (CD production, whose definition names
gramophone records and recorded tapes) is not permitted here, only in
the low density residential, special industrial, agricultural land
reform and rural and agricultural zones; type 72 (sound recording,
record players, gramophone records) only for modification or repair;
plastics products and metal plating are not on the list. A record
pressing plant cannot get a factory licence at that point.

Caveats recorded: point, not parcel; DPT data is preliminary, the
provincial office confirms; the pharmaceutical neighbour may be in
another zone or type. Since type 107 is permitted in the plan's low
density residential and rural zones, other Payap land is worth checking
before the lead is dropped.

- docs/land-listings/payap/: source record (zone rules, annex rows,
  the 51 types permitted in the zone) and the Thai panel text.
- site-candidates.md: plot point, zoning row, status, the result with
  caveats, check 1 marked failed for this point.
- README: project status line, layout line for land-listings/.
2026-10-14 11:58:23 +07:00