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.
This commit is contained in:
grabowski committed 2026-10-17 16:33:18 +07:00
1 parent ffc6cedbca
commit 3f33babdaa
28 files changed
+528 -604

No files matched your search

+261 -310
View File
@@ -1,10 +1,11 @@
"""Part C: investment, revenue and operating model, timeline, phasing, team and ownership, risks, next steps.
Draft 0.3, October 2026: two versions built from this one file, Plan A (~180M THB, the launch plant with
six cost levers, three presses) and Plan B (~225M THB, the second Duplex system at launch, five presses,
everything in). Both are priced without contingency and with the ramp-up reserve:
docs/finance/total-investment.md "Two plans: A at ~180M THB and B at ~225M THB (October 2026)" and
docs/finance/revenue-model.md "Operating pictures of Plan A and Plan B (October 2026)".
six cost levers, three presses) and Plan B (~210M THB, the same launch plant and three presses with
everything in, none of the levers taken; re-defined by the user on 17 October 2026). In both the second
Duplex system is a growth step from revenue. Both are priced without contingency and with the ramp-up
reserve: docs/finance/total-investment.md "Two plans: A at ~180M THB and B at ~210M THB (October 2026)"
and docs/finance/revenue-model.md "Operating pictures of Plan A and Plan B (October 2026)".
plan_variant.pick() switches the text; it is called inside blocks() only (build_plan.py sets the plan
before it calls blocks()).
"""
@@ -24,10 +25,6 @@ def _block_rows():
"Quoted: 2024 offer EUR 200,500 for the Single 2.1 plus the quoted second press and extruder "
"~USD 115k; expired, re-quote"],
]
if not a:
rows.append(["Newbilt Duplex system 2 (two HRP 12 presses, EX 50 main and EX 35 colour extruder)",
"230k to 300k", "7.6M to 9.9M", "Estimate: two presses at the quoted ~115k per press and "
"extruder set, plus hydraulic unit and EX 35; **no EX 35 price on file**"])
rows += [
["Newbilt Classic, fully automatic press", "290k to 460k", "9.6M to 15.2M", "Placeholder (the old "
"automatic-press band per press); **no Newbilt price on file**"],
@@ -48,8 +45,8 @@ def _block_rows():
"5.6M to 15.2M", "Estimate; the laser confocal and the wide-area profiler (USD 180k to 350k) are "
"bought from revenue (lever 2, section 8.2)"],
["Metrology and QC, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio "
"station", "350k to 810k", "11.6M to 26.7M", "Estimate, phaseable; the launch-plant figure, not "
"re-sized for the two extra presses"]),
"station", "350k to 810k", "11.6M to 26.7M", "Estimate; all of it at launch (Plan A buys the laser "
"confocal and the wide-area profiler from revenue)"]),
["PVC lab, day-one tier", "55k to 150k", "1.8M to 5.0M", "Estimate"],
pick(["Steam, cooling and compressed air: two 500 kg/h boiler modules (priced electric), cooling "
"backbone for four modules (plate heat exchanger, tanks, pumps, mains), two 250 kW chiller "
@@ -58,10 +55,9 @@ def _block_rows():
"ASME-stamped 1.25 MPa boiler bodies installed by a Thai contractor, the compressor from a "
"Chinese brand's Thai office"],
["Steam, cooling and compressed air: two 500 kg/h boiler modules (priced electric), cooling "
"backbone for four modules (plate heat exchanger, tanks, pumps, mains), three 250 kW chiller "
"modules (CH-1 to CH-3), screw compressor, dryer and receiver", "344k to 548k", "11.4M to 18.1M",
"Researched: Thai supplier ranges; the two boiler modules carry the five presses' 750 to 900 "
"kg/h"]),
"backbone for four modules (plate heat exchanger, tanks, pumps, mains), two 250 kW chiller "
"modules (CH-1, CH-2), screw compressor, dryer and receiver", "296k to 470k", "9.8M to 15.5M",
"Researched: utilities rows; boilers and compressor from Thai suppliers, with local service"]),
["Whole-factory HVAC, clean-room adder for galvanics and the cutting room, softener, loop treatment, "
"racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"],
]
@@ -89,16 +85,10 @@ def _block_rows():
rows.append(["Cassette duplication and CD-R duplication", "55k to 190k", "1.8M to 6.3M", "Estimate, "
"sections 4.8 and 4.9: cassette 40k to 150k, CD-R 15k to 40k"])
rows += [
pick(["Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its "
"quoted 5 days)", "150k to 300k", "5.0M to 9.9M", "Estimate"],
["Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its "
"quoted 5 days)", "174k to 348k", "5.7M to 11.5M", "Estimate: the launch plant's 150k to 300k "
"plus 24k to 48k for the extra machinery"]),
pick(["Working capital, PVC stock, spares, lease deposit, first-year rent", "137k to 293k",
"4.5M to 9.7M", "Estimate; land is leased, so no land purchase"],
["Working capital, PVC stock, spares, lease deposit, first-year rent", "201k to 432k",
"6.6M to 14.3M", "Estimate, sized for ~1.25M records a year; land is leased, so no land "
"purchase"]),
["Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its "
"quoted 5 days)", "150k to 300k", "5.0M to 9.9M", "Estimate"],
["Working capital, PVC stock, spares, lease deposit, first-year rent", "137k to 293k",
"4.5M to 9.7M", "Estimate; land is leased, so no land purchase"],
]
if a:
rows.append(["Not bought at launch (levers, section 8.2): rooftop PV and battery (solar PPA), visitor "
@@ -107,17 +97,17 @@ def _block_rows():
rows += [
pick(["**Subtotal, plan investment**", "**~3.56M to 6.25M**", "**~117.4M to 206.1M**",
"**Midpoint ~161.7M THB (~4.90M USD)**"],
["**Subtotal, plan investment**", "**~4.61M to 8.07M**", "**~152.2M to 266.3M**",
"**Midpoint ~209.2M THB (~6.34M USD)**"]),
["**Subtotal, plan investment**", "**~4.24M to 7.50M**", "**~140.0M to 247.6M**",
"**Midpoint ~193.8M THB (~5.87M USD)**"]),
["Ramp-up reserve: staff hired before first revenue, overheads until volume covers them",
"~0.30M to 0.61M", "10M to 20M", "Estimate; cash the investor puts in, so it is in the plan price"],
pick(["**Plan A price**", "**~3.86M to 6.85M**", "**~127M to 226M**",
"**Midpoint ~177M THB (~5.35M USD): ~180M THB**"],
["**Plan B price**", "**~4.92M to 8.67M**", "**~162M to 286M**",
"**Midpoint ~224M THB (~6.79M USD): ~225M THB**"]),
["**Plan B price**", "**~4.55M to 8.11M**", "**~150M to 268M**",
"**Midpoint ~209M THB (~6.33M USD): ~210M THB**"]),
["Contingency: not in the plan price", "", "", pick(
"For information: at 15 %, ~24M THB at the midpoint",
"For information: at 15 %, ~31M THB at the midpoint")],
"For information: at 15 %, ~29M THB at the midpoint")],
]
return rows
@@ -154,56 +144,60 @@ def _levers_table():
"The levers keep every machine of the launch plant.")
def _additions_table():
"""Plan B: what it adds to the launch plant, midpoints, no contingency."""
return T(["Block", "USD", "THB, midpoint"], [
["Launch plant, every block, no contingency", "4.24M to 7.50M", "~193.8M"],
["Second Duplex system: two HRP 12, EX 50 and EX 35 (two presses at the quoted ~115k per press and "
"extruder set, plus hydraulic unit and EX 35; no EX 35 price on file)", "230k to 300k", "+8.7M"],
["Third chiller module, CH-3 (250 kW; the two boiler modules carry 750 to 900 kg/h)", "48k to 78k",
"+2.1M"],
["Freight and installation for the extra machinery", "24k to 48k", "+1.2M"],
["Working capital for ~1.25M records a year instead of 0.85M", "64k to 139k", "+3.4M"],
["**Subtotal**", "**4.61M to 8.07M**", "**~209.2M (~6.34M USD)**"],
def _keeps_table():
"""Plan B: what it keeps that Plan A's six levers move off the launch budget, midpoints, no contingency."""
return T(["In at launch in Plan B", "What it gives the plant", "THB, midpoint (Plan A's lever)"], [
["Rooftop PV and the 271 kWh battery, owned (EPC and Gobel battery)", "The BOI solar measure (only an "
"owned array qualifies; our reading, for the BOI consultant) and no PPA power bill", "~10.7M"],
["Metrology, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio station",
"Every stamper measured fully from the first release, the core of the traceability pitch", "~8.8M"],
["Visitor corridor and accessible entrance", "Public tours and the Payap programmes possible from the "
"start", "~3.6M"],
["Cassette and CD-R duplication", "Both formats sold from launch", "~4.0M"],
["5 t overhead crane, runway, frame premium, machine door, bought", "Its own crane over the press "
"hall; no mobile crane to rent for "
"the installations", "~3.2M"],
["Boilers and compressor from Thai suppliers", "Local service; no import route for the boilers",
"~1.9M"],
["**Together**", "", "**~32M (193.8M minus Plan A's 161.7M)**"],
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~193.8M (~5.87M USD)"],
["Ramp-up reserve", "", "+10M to 20M"],
["**Plan B**", "", "**~224M THB (~6.79M USD)**; ~162M to 286M from the low to the high end"],
], widths_mm=[100, 30, 40],
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'.")
["**Plan B**", "", "**~209M THB (~6.33M USD)**; ~150M to 268M from the low to the high end"],
], widths_mm=[62, 70, 38], font_pt=8.5,
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. "
"Each figure is what the matching Plan A lever saves; rounded, the six add to ~32.2M, and the "
"two subtotals differ by ~32.1M.")
def _tranches():
return T(["Tranche", "Trigger", "Covers", "Approx. share, THB"], [
["0", "Now", "Phase 0 work (section 14.1)", "The Phase 0 block, ~1.3M to 2.6M (1 to 2 %)"],
["1", pick("BOI certificate issued; lease signed; zoning and soil confirmed; pricing validated",
"BOI certificate issued; lease signed; zoning and soil confirmed; pricing and the demand "
"for ~1.25M records a year validated"),
["1", "BOI certificate issued; lease signed; zoning and soil confirmed; pricing validated",
pick("Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt "
"Duplex system and Classic; building design and permit; first boiler and chiller modules "
"(boilers and compressor through the Chinese route)",
"Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, both "
"Newbilt Duplex systems and the Classic; building design and permit; first boiler and chiller "
"modules"),
pick("20 to 30 % (~32M to 49M)", "20 to 30 % (~42M to 63M)")],
"Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt "
"Duplex system and Classic; building design and permit; first boiler and chiller modules "
"(boilers and compressor from Thai suppliers)"),
pick("20 to 30 % (~32M to 49M)", "20 to 30 % (~39M to 58M)")],
["2", "Building permit; vendor build dates confirmed in writing",
pick("Construction, water-treatment building, utility yard, utilities, balance payments as machines "
"are built",
"Construction, water-treatment building, utility yard, utilities including the third chiller "
"module, balance payments as machines are built"),
pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~73M to 94M)")],
"Construction, water-treatment building, utility yard, utilities, balance payments as machines are "
"built",
pick("35 to 45 % (~57M to 73M)", "35 to 45 % (~68M to 87M)")],
["3", "Building watertight; first machinery shipped",
pick("Fit-out, HVAC and clean zones, ZLD and DI water, the rented crane for the installations, the "
"metrology launch tier, factory software and ERPNext, the launch team",
"Fit-out, HVAC and clean zones, ZLD and DI water, rooftop PV and battery, crane, visitor "
"corridor, the full metrology stack, factory software and ERPNext, cassette and CD-R lines, the "
"launch team"),
pick("15 to 20 % (~24M to 32M)", "15 to 20 % (~31M to 42M)")],
pick("15 to 20 % (~24M to 32M)", "15 to 20 % (~29M to 39M)")],
["4", "Cutting room and galvanics commissioned; first stampers made", "Working capital, PVC stock, "
"spares, first-year rent; the ramp-up reserve (10M to 20M THB, in the plan price) is drawn from here "
"on", pick("8 to 12 % (~13M to 19M), plus the reserve", "8 to 12 % (~17M to 25M), plus the reserve")],
"on", pick("8 to 12 % (~13M to 19M), plus the reserve", "8 to 12 % (~16M to 23M), plus the reserve")],
], widths_mm=[14, 46, 78, 32], font_pt=8.5,
caption=pick("Shares of Plan A's investment before the reserve (~161.7M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates).",
"Shares of Plan B's investment before the reserve (~209.2M THB at the midpoint); the THB "
"Shares of Plan B's investment before the reserve (~193.8M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates)."))
@@ -228,20 +222,20 @@ def _operating_table():
]
else:
rows = [
["Records", "1.0M", "1.25M", "1.5M"],
["Records", "0.58M", "0.74M", "0.90M"],
["Blended price, 60 % specials", "3.76", "4.49", "5.27"],
["Direct cost", "2.58", "1.94", "1.30"],
["Contribution per record", "1.18", "2.55", "3.97"],
["Pressing contribution", "1.18M", "3.19M", "5.96M"],
["Title-services contribution", "0.10M", "0.28M", "0.48M"],
["**Total contribution**", "**1.28M**", "**3.47M**", "**6.44M**"],
["Direct cost", "2.70", "2.00", "1.35"],
["Contribution per record", "1.06", "2.49", "3.92"],
["Pressing contribution", "0.61M", "1.83M", "3.51M"],
["Title-services contribution", "0.07M", "0.23M", "0.48M"],
["**Total contribution**", "**0.68M**", "**2.06M**", "**3.99M**"],
["Cash overheads", "0.45M", "0.33M", "0.20M"],
["**EBITDA**", "**0.83M**", "**3.14M**", "**6.24M**"],
["Depreciation", "0.81M", "0.51M", "0.31M"],
["**Operating profit**", "**0.02M**", "**2.63M**", "**5.93M**"],
["Revenue", "3.93M (~130M THB)", "6.05M (~200M THB)", "8.60M (~284M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~10.5 yr", "~2.2 yr (1.6 to 2.8 on 4.92M to "
"8.67M)", "~0.8 yr"],
["**EBITDA**", "**0.23M**", "**1.73M**", "**3.79M**"],
["Depreciation", "0.75M", "0.47M", "0.28M"],
["**Operating profit**", "**-0.52M**", "**1.26M**", "**3.51M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~35 yr", "~3.7 yr (2.6 to 4.7 on 4.55M to "
"8.11M)", "~1.2 yr"],
]
return T(["USD per year, mature", "Adverse", "Central", "Favourable"], rows, widths_mm=[50, 36, 48, 36],
caption="Estimates, docs/finance/revenue-model.md 'Operating pictures of Plan A and Plan B (October "
@@ -257,23 +251,12 @@ def _risk_rows():
"validation gate: regional label conversations, the artist platform's calculator as an interest "
"list, a second Thai data point; no large spending before it clears"],
]
if not a:
rows += [
["High", "Demand for ~1.25M records a year", "The central case needs ~1.25M records sold a year, "
"~0.75M of them specials, against 0.74M for the three-press plant; nothing in the market data so "
"far shows that demand", "Market validation (roadmap item 1) before the round is called; the "
"second Duplex system is commissioned last, so its order is the one that can still move back to a "
"growth step"],
["High", "More capital at risk", "~224M THB in one round, ~27 % more than the three-press Plan A, "
"more of it committed before the market has validated the price and the volume", "Gates and "
"tranches (section 8.3): no order before the BOI certificate and validated pricing and demand"],
]
rows += [
["High", "No contingency in the plan price", pick(
"Quotes landing high are not covered: at 15 % a contingency would be ~24M THB at the midpoint, "
"and the high end of every block comes to ~226M with the reserve",
"Quotes landing high are not covered: at 15 % a contingency would be ~31M THB at the midpoint, "
"and the high end of every block comes to ~286M with the reserve"),
"Quotes landing high are not covered: at 15 % a contingency would be ~29M THB at the midpoint, "
"and the high end of every block comes to ~268M with the reserve"),
"The requests that settle most of the band come before commitment (section 8.4); tranche release; "
"how overruns are funded (outside the plan price or by scope steps) agreed with the investor up "
"front"],
@@ -281,19 +264,14 @@ def _risk_rows():
"The cost structure is mostly fixed; the adverse case loses money: it needs ~0.9M records to cover "
"depreciation and the three presses make 0.58M at that rate; at 60 % specials the Duplex rate and "
"the extra cost of specials decide volume and margin",
"The cost structure is mostly fixed; the adverse case only just covers depreciation (~1.0M records "
"needed, 1.0M made), so any shortfall in price or volume turns it into a loss; the extra cost of "
"specials is not in the direct cost yet"),
"The cost structure is mostly fixed; the adverse case loses money: it needs ~1.1M records to cover "
"depreciation and the three presses make 0.58M at that rate; at 60 % specials the Duplex rate and "
"the extra cost of specials decide volume and margin"),
pick("Central breaks even at ~0.2M records; commission in sequence; the second Duplex waits for "
"demand; treat the adverse column as the honest one",
"Central breaks even at ~0.22M records; commission in sequence; treat the adverse column as the "
"honest one")],
"Central breaks even at ~0.23M records; commission in sequence; the second Duplex waits for "
"demand; treat the adverse column as the honest one")],
]
if not a:
rows.append(["Medium", "Ramp length", "The ramp to ~1.25M records is longer than the three-press "
"plant's to 0.74M; the ramp-up reserve is the same 10M to 20M THB estimate", "Break-even at "
"~0.22M records, so a slow ramp costs payback time more than solvency (our reading); a "
"year-by-year cash model for the ramp is a next step (section 9.5)"])
rows += [
["High", "Galvanics and cutting on the critical path", "No paying release until the cutting room "
"and galvanics make good stampers; a slow start there delays every press", "Commission the "
@@ -302,13 +280,9 @@ def _risk_rows():
["High", "Skills: galvanics process engineer, cutting engineer", "Galvanics is the hardest skill to "
"hire; both roles are now needed at launch", "Recruit or train abroad; BOI work permits; vendor "
"training (Pheenix, Sillitoe, OMS as a reference); Payap programmes as a longer-term pipeline"],
["High", pick("Prices not on file: the Classic and the Pheenix line",
"Prices not on file: the Classic, the Pheenix line and the second EX 35"),
pick("The Classic band is a placeholder borrowed from another vendor's automatic press; the Pheenix "
"line is priced at OMS's reference plus 20 %, without a Pheenix figure",
"The Classic band is a placeholder borrowed from another vendor's automatic press; the Pheenix "
"line is priced at OMS's reference plus 20 %, without a Pheenix figure; the second Duplex "
"system's EX 35 has no price"),
["High", "Prices not on file: the Classic and the Pheenix line",
"The Classic band is a placeholder borrowed from another vendor's automatic press; the Pheenix "
"line is priced at OMS's reference plus 20 %, without a Pheenix figure",
"Newbilt re-quote and Pheenix quote in phase 0; OMS's dedicated offer as the galvanics benchmark"],
["High", "Vendor build times unknown", "The press build carries ~40 % of the schedule; 15 to 18 "
"months would push launch to mid-2029; Pheenix, Sillitoe and Sibert lead times also unquoted",
@@ -324,6 +298,16 @@ def _risk_rows():
"in the calculator at 3.0 THB/kWh, an estimate to quote", "The BOI consultant's reading "
"and PPA offers next to the purchase quote in phase 0; buying the array, as Plan B does, "
"stays the alternative"])
else:
rows.append(["Medium", "The extra ~32M THB earns nothing in the model", "Plan B's operating picture is "
"Plan A's (same presses, records, revenue and EBITDA): the ~32M THB more at launch adds "
"depreciation, so central operating profit is 1.26M against 1.34M USD, payback ~3.7 against "
"~3.1 years and the adverse corner deeper; its case rests on what the table leaves out (the "
"BOI solar measure, cassette and CD-R sales, tours and the Payap programmes, full stamper "
"metrology for the traceability pitch)", "Phase 0 prices each item against its lever (PPA "
"offer next to the purchase quote, the BOI consultant's reading of the solar measure, "
"cassette and CD-R quotes); most items can also come later from revenue, as in Plan A, while "
"the solar measure and the corridor are cheaper to have from the start"])
rows += [
["Medium", "Lease terms and building ownership", "A weak lease makes the building hard to finance "
"and exposes it at expiry", "Registered 30 to 50 year lease with renewal, explicit building "
@@ -347,11 +331,8 @@ def _risk_rows():
"certification body; the modules run above the once-through relief"),
"ASME Section I design with the S stamp and the full dossier; certification body engaged before the "
"order; the same for a Thai-bought boiler"],
["Medium", "Single press vendor (Newbilt)", pick(
"All three presses, the extruders and the hydraulic aggregates come from one small German "
"manufacturer; build time and order book unknown",
"All five presses, the extruders and the hydraulic aggregates come from one small German "
"manufacturer; build time and order book unknown"),
["Medium", "Single press vendor (Newbilt)", "All three presses, the extruders and the hydraulic "
"aggregates come from one small German manufacturer; build time and order book unknown",
"Spares and service terms in the re-quote; the Pheenix automatic press stays the comparison if the "
"Classic quote disappoints"],
["Medium", "Hydraulic ring-main contamination", "One shared oil system: a contamination event "
@@ -402,9 +383,10 @@ def blocks():
"Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, "
"in one capital round and commissioned in sequence, brought down with six cost levers that keep "
"every machine. ",
"This chapter prices **Plan B (~225M THB)**: the launch plant decided in October 2026, with the "
"whole chain from the cutting room to the shrink wrapper, plus the second Duplex system at launch: "
"five presses with everything in, in one capital round and commissioned in sequence. ") +
"This chapter prices **Plan B (~210M THB)**: the launch plant decided in October 2026, one Newbilt "
"Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, "
"in one capital round and commissioned in sequence, with everything in: none of Plan A's six cost "
"levers taken. ") +
"The plan price carries the ramp-up reserve, because that is cash the investor puts in, and **no "
"contingency**. Blocks marked 'estimate' have no vendor confirmation; the rest trace to quotes, "
"published prices or researched ranges. Treat all figures as budgetary with a wide margin (plus or "
@@ -424,10 +406,10 @@ def blocks():
"floor, utility module positions, ring-main tees), not part of this plan.",
"Source: docs/finance/total-investment.md, 'Two plans', and the Plan B preset of the plant and "
"business plan calculator (docs/fleet-calculator.html), whose rows are grouped here; estimates. "
"Further Duplex systems and Classics are growth options: the hall is laid out for five Duplex "
"bays and four Classic positions.")),
"The second Duplex system and further Classics are growth options with room reserved (hall "
"floor, utility module positions, ring-main tees), not part of this plan.")),
P("**Not in the plan price:** a contingency (the blocks are budgetary, so the plan carries no buffer "
"for quotes landing high; at 15 % it would be " + pick("~24M", "~31M") + " THB at the midpoint); CD "
"for quotes landing high; at 15 % it would be " + pick("~24M", "~29M") + " THB at the midpoint); CD "
"replication (section 4.10); financing costs; currency moves; the mobile shelving for the father and "
"mother archive (to quote); and the central hydraulic plant around the Newbilt aggregates (standby "
"pump set, accumulator station, ring main), not costed yet, for a Thai hydraulic power unit builder "
@@ -437,33 +419,34 @@ def blocks():
"later (estimates)" + pick(
". Plan A imports its boiler modules and buys less metrology at launch; the estimate is not "
"re-sized for either.",
". Plan B's second Duplex system adds ~0.23M to 0.30M USD of imported machinery to that.")),
". Plan B is the launch plant that estimate was made for.")),
H2("8.2 Two versions of this plan"),
P("The lead investor asked in October 2026 whether the plant can be built for **180M THB (~5.45M USD), "
"possibly up to 20 % more**. The answer is two versions of this plan, built from the same documents, "
"both priced without contingency and with the ramp-up reserve: **Plan A** keeps every machine of "
"the launch plant and brings it to ~180M THB with six cost levers; **Plan B** adds the second "
"Duplex system at launch, five presses with everything in, at ~225M THB (Plan A plus 25 %). This "
"document is " + label() + ". How the two differ (estimates):"),
"the launch plant and brings it to ~180M THB with six cost levers; **Plan B** builds the same "
"launch plant with everything in, none of the levers taken, at ~210M THB, within 180M plus 20 %. "
"This document is " + label() + ". How the two differ (estimates):"),
T(["Midpoints, estimates", "Plan A" + pick(" (this plan)", ""), "Plan B" + pick("", " (this plan)")], [
["Plan price: ramp-up reserve in, no contingency", "~177M THB (~5.35M USD): ~180M",
"~224M THB (~6.79M USD): ~225M"],
["Low to high end of every block", "~127M to 226M THB", "~162M to 286M THB"],
["Presses", "3: Duplex system 1 (two HRP 12) and one Classic",
"5: two Duplex systems (four HRP 12) and one Classic"],
["Records a year at 60 % specials", "~0.58 to 0.90M, central 0.74M (Duplex-limited)",
"~1.0 to 1.5M, central 1.25M"],
["Revenue, central", "3.65M USD (~120M THB)", "6.05M USD (~200M THB)"],
["EBITDA, central", "1.73M USD", "3.14M USD"],
["Operating profit, adverse case", "-0.39M USD: loses money", "0.02M USD: just covers depreciation"],
"~209M THB (~6.33M USD): ~210M"],
["Low to high end of every block", "~127M to 226M THB", "~150M to 268M THB"],
["Presses", "3: Duplex system 1 (two HRP 12) and one Classic", "The same 3"],
["Records a year at 60 % specials", "~0.58 to 0.90M, central 0.74M (Duplex-limited)", "The same"],
["Revenue, central", "3.65M USD (~120M THB)", "The same (cassette and CD-R not modelled)"],
["EBITDA, central", "1.73M USD", "1.73M USD (calculator: 2.07M against Plan A's 2.04M, no PPA "
"power bill)"],
["Operating profit, adverse case", "-0.39M USD: loses money", "-0.52M USD: loses more (more "
"depreciation on the same EBITDA)"],
["Payback on the plan price, central (EBITDA, mature year)", "~3.1 yr (2.2 to 4.0)",
"~2.2 yr (1.6 to 2.8)"],
"~3.7 yr (2.6 to 4.7; calculator: 2.8 yr against Plan A's 2.4)"],
["What it gives up or takes on", "Six levers: solar through a PPA (very likely without the BOI "
"solar measure), confocal and profiler from revenue, no tours at first, cassette and CD-R later, a "
"rented crane, Chinese boilers and compressor; the second Duplex waits for revenue", "No levers; "
"needs ~1.25M records sold a year, ~0.75M of them specials, which the market data does not show "
"yet; a longer ramp on the same reserve; ~27 % more capital"],
"rented crane, Chinese boilers and compressor; the second Duplex waits for revenue", "No levers: "
"buys at launch what Plan A leases or defers, ~32M THB more (owned solar and battery with the BOI "
"solar measure, the full metrology stack, the visitor corridor, cassette and CD-R, a bought crane, "
"Thai boilers and compressor); the second Duplex waits for revenue"],
], widths_mm=[46, 62, 62], font_pt=8.5,
caption="Estimates: docs/finance/total-investment.md 'Two plans' and docs/finance/revenue-model.md "
"'Operating pictures of Plan A and Plan B'. Section 9 has this plan's operating picture."),
@@ -471,30 +454,33 @@ def blocks():
[P("**Plan A: six levers, every machine kept.** From the launch plant with every block, no "
"contingency, midpoint values:"),
_levers_table(),
P("Plan B takes none of these levers and adds the second Duplex system, a third chiller module, "
"their freight and installation and the working capital for ~1.25M records: ~209.2M THB before "
"the reserve, ~224M with it.")]
P("Plan B takes none of these levers: it buys at launch what they lease or defer, ~32M THB more "
"at the midpoint, so ~193.8M THB before the reserve and ~209M (~210M THB) with it.")]
if a else
[P("**Plan B: the launch plant plus the second Duplex system, no levers.** Midpoint values:"),
_additions_table(),
P("Plan B takes none of Plan A's six levers (~32M THB at the midpoint together): it keeps owned "
"solar and battery, and with them the BOI solar measure, the full metrology stack, the visitor "
"corridor from the start, the bought crane, cassette and CD-R, and Thai-supplied utilities.")]
[P("**Plan B: the launch plant with everything in, no levers.** What Plan B keeps that Plan A's six "
"cost levers lease, defer or source abroad, midpoint values:"),
_keeps_table(),
P("The plant itself is Plan A's: the same three presses, the same output and the same operating "
"picture (section 9). The second Duplex system is a growth step from revenue in both plans, on a "
"reserved floor bay with its utility module positions and ring-main tees.")]
),
CALL("What decides between Plan A and Plan B", [
"**Demand first.** Plan B needs ~1.25 million records sold a year in its central case, about 70 % "
"more than Plan A's 0.74 million, three fifths of them special editions. Market validation "
"(section 14.1, item 1) is the evidence for that, and it is not in yet.",
"**The quotes.** The Newbilt re-quote for the Classic and the EX 35 (in Plan B also the second "
"Duplex system), the Pheenix quote against the OMS reference, the building quote with the soil "
"test, and, for Plan A, the solar PPA offer.",
"**No longer demand.** Both plans are the same three presses making the same ~0.58 to 0.90 million "
"records a year (central 0.74 million); market validation (section 14.1, item 1) gates both alike.",
"**~32M THB more at launch, for what Plan A leases or buys from revenue.** Plan B keeps the BOI "
"solar measure (only an owned array qualifies), measures every stamper fully from the first release "
"(the traceability pitch), opens tours and the Payap programmes from day one, sells cassette and "
"CD-R from the start, owns its crane and buys utilities with local service.",
"**On the modelled numbers the extra earns nothing.** The same EBITDA, more depreciation, a longer "
"payback (~3.7 against ~3.1 years) and a deeper adverse corner: Plan A has the better modelled "
"return, Plan B the more complete plant. Most of Plan B's items can be added to Plan A later from "
"revenue; the BOI solar measure and the corridor are cheaper to have from the start.",
"**The quotes.** The Newbilt re-quote for the Classic and the EX 35, the Pheenix quote against the "
"OMS reference, the building quote with the soil test, and, for Plan A, the solar PPA offer.",
"**Neither price carries a contingency.** Quotes landing high are funded outside the plan price or "
"by scope steps (section 8.4).",
pick("**The second Duplex stays a growth step.** Its floor, utility module positions and ring-main "
"tees are reserved, so adding it from revenue is a step, not a rebuild.",
"**The second Duplex is commissioned last.** If validation does not show the demand, it is "
"the part of Plan B that can still return to a growth step, leaving the three-press launch "
"plant."),
"**The second Duplex stays a growth step.** Its floor, utility module positions and ring-main "
"tees are reserved, so adding it from revenue is a step, not a rebuild.",
]),
P("Figure 11 is the budget check of the plant and business plan calculator with the " + label() +
" preset, contingency kept out of the total as in this plan."),
@@ -502,8 +488,8 @@ def blocks():
"Figure 11. Budget card of the plant and business plan calculator, " + pick(
"Plan A preset: 161.7M THB at the midpoint without contingency, 171.7M to 181.7M with the "
"ramp-up reserve of 10M to 20M, inside 180M at the midpoint",
"Plan B preset: 209.2M THB at the midpoint without contingency, 219.2M to 229.2M with the "
"ramp-up reserve of 10M to 20M, inside 225M at the midpoint") +
"Plan B preset: 193.8M THB at the midpoint without contingency, 203.8M to 213.8M with the "
"ramp-up reserve of 10M to 20M, 16.2M to spare under the 225M mark (180M plus 25 %)") +
". Bars: the investment at the low end, the midpoint and the high end of every block, the reserve "
"hatched, against 180M and 225M THB. Calculator figures (docs/fleet-calculator.html), estimates."),
@@ -514,17 +500,14 @@ def blocks():
"next to the presses. The shares below are estimates for planning the calls on capital, not a "
"payment schedule agreed with any vendor."),
_tranches(),
*([] if a else [P("The second Duplex system is commissioned last (section 11.1). Its order sits with "
"the other long-lead items in tranche 1, and it is the one order that could still be "
"moved to a growth step if the demand case weakens before the round is called.")]),
H2("8.4 What moves the number"),
B([
"**No contingency in the price.** " + pick(
"Plan A's ~177M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~24M THB, and the high end of every block comes to ~226M. ",
"Plan B's ~224M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~31M THB, and the high end of every block comes to ~286M. ") +
"Plan B's ~209M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~29M THB, and the high end of every block comes to ~268M. ") +
"Quotes landing above the midpoint are funded outside the plan price or by scope steps; how they are "
"funded is a decision for the investor before commitment (section 14.2).",
"**The quotes that decide it.** The Classic has no Newbilt price (its band is a placeholder "
@@ -534,10 +517,10 @@ def blocks():
"depends on the soil; and the solar PPA lever depends on an offer. The Newbilt re-quote, the "
"Pheenix quote, the building request with a soil test, the metrology distributor quotes and "
"the PPA offers settle most of the band.",
"the second Duplex system's EX 35 has no price on file (the first is priced as the expired "
"2024 quote's second-extruder option); and the building depends on the soil. The Newbilt "
"re-quote, the Pheenix quote, the building request with a soil test and the metrology "
"distributor quotes settle most of the band."),
"the EX 35 is priced only as the expired 2024 quote's second-extruder option; and the building "
"depends on the soil. The Newbilt re-quote, the Pheenix quote, the building request with a soil "
"test, the metrology distributor quotes and the solar and battery purchase quotes settle most of "
"the band."),
"**BOI promotion.** The machinery duty and import VAT exemption applies across most of the "
"equipment blocks (~0.11M USD of duty and ~0.17M USD of import VAT cash flow on the launch plant, "
"estimates), and the automation and solar spend converts into corporate income tax exemption "
@@ -572,24 +555,19 @@ def blocks():
"at OMS's EUR reference plus 20 %, EUR 280.8k to 385.2k). Sibert's budget and Sillitoe's list price "
"are in USD (Sibert is a UK company, Sillitoe Australian). None of it is hedged, and the orders will "
"not be placed for roughly a year. In the September draft a 10 % move in EUR/THB was worth USD 25k "
"to 35k on the Duplex line alone; " + pick(
"with the Classic and the galvanics line also in EUR, the three EUR lines come to ~0.96M to "
"1.28M USD, so the same move is worth roughly USD 0.10M to 0.13M (estimate).",
"with the second Duplex system, the Classic and the galvanics line also in EUR, the four EUR "
"lines come to ~1.19M to 1.58M USD, so the same move is worth roughly USD 0.12M to 0.16M "
"(estimate).")),
"to 35k on the Duplex line alone; with the Classic and the galvanics line also in EUR, the three EUR "
"lines come to ~0.96M to 1.28M USD, so the same move is worth roughly USD 0.10M to 0.13M "
"(estimate)."),
P("Operationally, roughly two-thirds of direct cost (labour, energy, local cartons, maintenance) is "
"THB, so a 10 % baht appreciation takes **0.09 to 0.17 USD off the gross margin per record** without "
"any operational change, " + pick("enough to push the adverse case further under water. ",
"enough to push the adverse case, which only just covers "
"depreciation, under water. ") +
"any operational change, enough to push the adverse case further under water. "
"Three mitigations are planned: every re-quote states its currency and validity period; decide early "
"whether to quote regional customers in THB; and decide, once the BOI timeline is known, whether to "
"hedge the EUR orders. The hedging decision belongs to the investor."),
# ------------------------------------- 9 revenue and operating model
H1("9. Revenue and operating model"),
P("A first-pass economic model of " + pick("Plan A's three presses", "Plan B's five presses") + " in a "
P("A first-pass economic model of " + pick("Plan A's three presses", "Plan B's three presses") + " in a "
"mature year. Most numbers are estimates from industry pricing norms and the project's own cost "
"research; the point is the shape of the economics and which levers matter, not precision. The price "
"assumption is deliberately held at the conservative Western export level even though the one set "
@@ -621,8 +599,8 @@ def blocks():
"**Per-title services: USD 580 to 1,730 per title** (THB 19k to 57k) for mastering, cutting, "
"stampers and test pressings. The middle of the range is the **artist-demo per-title fee of 37,836 "
"THB**: mastering 10,000, lacquer 5,336, cutting 4,000, plating 14,000, press set-up 3,000 and "
"tests 1,500. " + pick("Plan A models 200 to 400 titles a year", "Plan B models 300 to 400 titles "
"a year (375 central)") +
"tests 1,500. " + pick("Plan A models 200 to 400 titles a year", "Plan B models 200 to 400 titles "
"a year") +
"; mastering is labour-bound, and the plan staffs one to two engineers, which caps this line.",
pick("**Cassettes and CD-Rs** come later in Plan A (a growth step, lever 4) and are not in the "
"operating picture. The September draft illustrated them at 20k to 60k cassettes a year at "
@@ -637,7 +615,7 @@ def blocks():
]),
H2(pick("9.2 Capacity and revenue of Plan A", "9.2 Capacity and revenue of Plan B")),
P(pick(
P(
"Three presses make **~0.58 to 0.90 million records a year on two shifts at 60 % specials** "
"(estimate). Specials run only on the Duplex system (the Classic has one built-in extruder), so its "
"two semi-automatic presses at 60 to 80 records an hour each set the pace, and the Classic (~128 an "
@@ -645,30 +623,15 @@ def blocks():
"effectiveness, 16 hours a day and 300 days a year. At ~20 % specials the same presses made 0.71 to "
"0.97 million. The plant and business plan calculator, at the team's planning rates (3 records a "
"minute per Duplex system, 2 per Classic, 65 % effectiveness), stays balanced at ~0.94 million. "
"The central case takes the middle, 0.74 million.",
"Five presses make **~1.0 to 1.5 million records a year on two shifts at 60 % specials** "
"(estimate). Specials run only on the Duplex systems (the Classic has one built-in extruder), but "
"with two of them the plant is not Duplex-limited: the four semi-automatic presses, 240 to 320 "
"records an hour together, carry the specials, and the Classic (~128 an hour, 28 s cycle, vendor "
"flyer) the rest; at 60 to 70 % effectiveness, 16 hours a day and 300 days a year that is ~1.06 to "
"1.5 million. The plant and business plan calculator, at the team's planning rates (3 records a "
"minute per Duplex system, 2 per Classic, 65 % effectiveness), gives ~1.5 million. The central "
"case takes 1.25 million.")),
T(["USD per year", "Adverse", "Central", "Favourable"], pick([
"The central case takes the middle, 0.74 million."),
T(["USD per year", "Adverse", "Central", "Favourable"], [
["Records", "0.58M", "0.74M", "0.90M"],
["Blended price, 60 % specials", "3.76", "4.49", "5.27"],
["Pressing revenue", "~2.17M", "~3.31M", "~4.72M"],
["Titles × per-title fee", "200 × 580", "300 × 1,155", "400 × 1,730"],
["Title-services revenue", "~0.12M", "~0.35M", "~0.69M"],
["**Revenue**", "**2.28M (~75M THB)**", "**3.65M (~120M THB)**", "**5.41M (~179M THB)**"],
], [
["Records", "1.0M", "1.25M", "1.5M"],
["Blended price, 60 % specials", "3.76", "4.49", "5.27"],
["Pressing revenue", "~3.76M", "~5.61M", "~7.91M"],
["Titles × per-title fee", "300 × 580", "375 × 1,155", "400 × 1,730"],
["Title-services revenue", "~0.17M", "~0.43M", "~0.69M"],
["**Revenue**", "**3.93M (~130M THB)**", "**6.05M (~200M THB)**", "**8.60M (~284M THB)**"],
]), widths_mm=[50, 40, 40, 40],
], widths_mm=[50, 40, 40, 40],
caption="Estimate. Pressing and title revenue are records × price and titles × fee; the totals are "
"those of docs/finance/revenue-model.md. A pure-volume plant runs at the low per-title "
"end; a boutique-heavy mix pushes titles up and volume down."),
@@ -685,8 +648,8 @@ def blocks():
["Energy", "0.12 to 0.23", "3.8 to 7.6", "~1.5 to 2 kWh blended per record at grid/solar mix"],
pick(["Production labour, Plan A", "**0.13 to 0.28**", "4.2 to 9.3", "13 to 19 direct staff, "
"3.7M to 5.4M THB a year, over 0.58 to 0.90M records (0.08 to 0.16 on five presses)"],
["Production labour, Plan B", "**0.08 to 0.16**", "2.6 to 5.4", "13 to 19 direct staff, "
"3.7M to 5.4M THB a year, over 1.0 to 1.5M records (0.13 to 0.28 on three presses)"]),
["Production labour, Plan B", "**0.13 to 0.28**", "4.2 to 9.3", "13 to 19 direct staff, "
"3.7M to 5.4M THB a year, over 0.58 to 0.90M records, as in Plan A"]),
["Stamper amortisation", "0.03 to 0.12", "1.0 to 4.0", "In-house three-generation set at ~USD 60 "
"to 150 marginal over 1,000 to 2,000 "
"pressings"],
@@ -694,7 +657,7 @@ def blocks():
["Reject allowance", "0.12 to 0.17", "3.8 to 5.7", "5 to 10 % reject rate carried by good units"],
pick(["**Total direct cost, Plan A**", "**~1.35 to 2.70**", "**~45 to 89**", "Central 2.00; no "
"extra cost for specials yet"],
["**Total direct cost, Plan B**", "**~1.30 to 2.58**", "**~43 to 85**", "Central 1.94; no "
["**Total direct cost, Plan B**", "**~1.35 to 2.70**", "**~45 to 89**", "Central 2.00; no "
"extra cost for specials yet"]),
], widths_mm=[42, 26, 26, 76], font_pt=8.5,
caption="Estimates, docs/finance/revenue-model.md. THB at 33 per USD."),
@@ -705,12 +668,12 @@ def blocks():
"1.0 to 1.5 million records to 0.58 to 0.90 million. Labour per record rises to **0.13 / 0.19 / "
"0.28 USD** (favourable / central / adverse), and the direct cost to 1.35 / 2.00 / 2.70 USD. The "
"build-up, at northern Thai rates loaded ×1.3 for social security, overtime, bonus and PPE:",
"**Five presses spread the same crews.** Two shifts need the full press, finishing, galvanics, QC "
"and maintenance crews whether the hall holds three presses or five, so the direct payroll stays at "
"3.7M to 5.4M THB a year (113k to 163k USD), and Plan B spreads it over 1.0 to 1.5 million records: "
"**0.08 / 0.11 / 0.16 USD** a record (favourable / central / adverse), against 0.13 / 0.19 / 0.28 "
"on three presses, and a direct cost of 1.30 / 1.94 / 2.58 USD. The build-up, at northern Thai "
"rates loaded ×1.3 for social security, overtime, bonus and PPE:")),
"**Labour per record.** Two shifts need the full press, finishing, galvanics, QC and maintenance "
"crews whatever the press count, so the direct payroll stays at 3.7M to 5.4M THB a year (113k to "
"163k USD), and Plan B spreads it over the same 0.58 to 0.90 million records as Plan A: **0.13 / "
"0.19 / 0.28 USD** a record (favourable / central / adverse), and a direct cost of 1.35 / 2.00 / "
"2.70 USD. The build-up, at northern Thai rates loaded ×1.3 for social security, overtime, bonus "
"and PPE:")),
T(["Role", "Heads", "THB/month each, loaded"], [
["Press and finishing operators", "8 to 12", "~19,500"],
["Galvanics", "2 to 3", "~32,500"],
@@ -733,9 +696,9 @@ def blocks():
"(central) and the low end (3.56M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (3.86M / 5.35M / 6.85M USD from the low to the "
"high end).",
"the high end (8.07M USD) over 10 years (adverse), the midpoint (6.34M USD) over 12.5 years "
"(central) and the low end (4.61M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (4.92M / 6.79M / 8.67M USD from the low to the "
"the high end (7.50M USD) over 10 years (adverse), the midpoint (5.87M USD) over 12.5 years "
"(central) and the low end (4.24M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (4.55M / 6.33M / 8.11M USD from the low to the "
"high end).")),
_operating_table(),
CALL("Reading this table honestly", pick([
@@ -764,39 +727,41 @@ def blocks():
"supply to other plants, dropshipping fees, and the ramp year. BOI tax exemptions shield part of "
"early-year profits where there are any.",
], [
"**Demand comes first.** Plan B earns this only if the records sell: its central case needs ~1.25 "
"million records a year, ~0.75 million of them special editions, against 0.74 million for the "
"three-press Plan A. Nothing in the market data so far shows that demand (roadmap item 1, market "
"validation).",
"**The central case works on ~224M THB.** EBITDA ~3.1M USD (~104M THB) and operating profit ~2.6M "
"USD (~87M THB) a year once the plant runs at volume; it breaks even on operating profit at about "
"**0.22 million records a year, under a fifth of its central output**. Its central EBITDA is ~1.8 "
"times Plan A's for ~27 % more money. On the earlier ~20 % specials share the five-press table "
"showed EBITDA 2.59M at the same 1.25M records: five presses are not Duplex-limited, so more "
"specials raise the price on the same volume.",
"**The adverse case only just covers depreciation** (~1.0 million records needed, 1.0 million "
"made): more presses spread the same crews, overheads and title services over more records. It "
"stacks the low price, the high cost, the high capital and the high overheads at once. At the "
"central cost and volume the price that covers depreciation is ~2.4 USD (~79 THB) a record "
"(arithmetic on the table), below the low price assumed.",
"**The central margin is too good to trust yet.** A central EBITDA margin of ~52 % is far above "
"**The central case works on ~209M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.26M "
"USD (~42M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.23 million records a year, about a third of its central output**. Against the earlier ~20 % "
"specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.",
"**The adverse case loses money.** It would need ~1.1 million records to cover depreciation, and "
"the three presses make 0.58 million at that rate; the operating loss is ~17M THB a year. It stacks "
"the low price, the high cost, the high capital and the high overheads at once. At the central "
"cost and volume the price that covers depreciation is ~2.8 USD (~91 THB) a record (arithmetic on "
"the table), below the low price assumed: price realisation and utilisation decide solvency, not "
"upside.",
"**What the extra ~32M THB buys is not in this table.** Plan B is Plan A's plant with the six levers "
"not taken, so revenue, direct cost and EBITDA are Plan A's; only the depreciation (0.47M against "
"Plan A's 0.39M USD at the centre) and the payback (~3.7 against ~3.1 years) move. Not modelled: "
"cassette and CD-R revenue, tour and Payap revenue, stamper supply to other plants, and the tax "
"benefit of the BOI solar measure.",
"**The central margin is too good to trust yet.** A central EBITDA margin of ~47 % is far above "
"the 15 to 25 % pressing plants earn. The direct cost table counts only per-record consumables and "
"direct payroll and leaves out indirect labour (supervision, planning, warehouse), freight, scrap "
"above the reject allowance, sales commissions and the extra cost of specials. **Treat the adverse "
"column as the honest one until those lines exist.** The plan price carries no contingency either.",
"**This is a sensitivity, not a forecast.** The plant and business plan calculator's Plan B preset, "
"with its own cost build-up (it adds electric steam heat and the cutting engineer, which this "
"table leaves out), gives at 1.25M records and 60 % specials: revenue ~6.09M, EBITDA 3.25M USD, "
"payback 2.0 years on the 209.2M THB investment in a mature year; with a ramp of 35, 70 and 90 % in "
"the first three years and the reserve in year 0, cash payback in year ~3.3, ~32 % IRR and an NPV "
"of ~9.7M USD over ten years, pre-tax and pre-financing (estimates). Not modelled here: cassette "
"table leaves out) and the team's faster Duplex planning rate, at which the three presses are not "
"Duplex-limited, gives at 850k records and 60 % specials: revenue ~4.14M, EBITDA 2.07M USD, "
"payback 2.8 years on the 193.8M THB investment in a mature year; with a ramp of 35, 70 and 90 % in "
"the first three years and the reserve in year 0, cash payback in year ~4.3, ~21 % IRR and an NPV "
"of ~4.1M USD over ten years, pre-tax and pre-financing (estimates). Its EBITDA is 0.03M above "
"Plan A's 2.04M because the owned array carries no PPA power price. Not modelled here: cassette "
"and CD-R lines, stamper supply to other plants, dropshipping fees, and the ramp year. BOI tax "
"exemptions shield part of early-year profits where there are any.",
])),
IMG(pick("renders/calculator/plan-a-cash.png", "renders/calculator/plan-b-cash.png"), 160,
"Figure 12. Ten years of cash in the plant and business plan calculator, " + pick(
"Plan A preset: cash payback in year ~3.9, IRR ~25 %, NPV ~4.9M USD at 10 %",
"Plan B preset: cash payback in year ~3.3, IRR ~32 %, NPV ~9.7M USD at 10 %") +
"Plan B preset: cash payback in year ~4.3, IRR ~21 %, NPV ~4.1M USD at 10 %") +
". Year 0 is the midpoint investment plus the ramp-up reserve; years 1 to 3 sell 35, 70 and 90 % of "
"the mature year's output. Pre-tax, pre-financing, no BOI tax holiday, no terminal value. The "
"calculator's own cost build-up and faster Duplex planning rate, not the table above "
@@ -812,41 +777,41 @@ def blocks():
"staff hired before first revenue and overheads until volume covers them. Fan-funded campaigns on "
"the artist platform open only after the first releases have shipped and lead times are measured.",
"The table above is a mature year. Plan B does not start there. It is commissioned in sequence: "
"first the cutting room and galvanics (the presses need their stampers), then Duplex system 1, "
"the Classic, and Duplex system 2 last. Early production runs slower and rejects more than any of "
"these figures while the process settles, and the crews of a two-shift plant are on the payroll "
"before the volume is. **Plan B's ramp is longer**: it has to sell ~1.25 million records a year, "
"not 0.74 million, before it reaches the table above. The **ramp-up reserve is the same ~10M to "
"20M THB** estimate as for Plan A (inside the plan price); it carries staff hired before first "
"revenue and overheads until volume covers them, and with break-even at ~0.22 million records a "
"slower ramp costs payback time more than solvency (our reading). Fan-funded campaigns on the "
"artist platform open only after the first releases have shipped and lead times are measured.")),
"first the cutting room and galvanics (the presses need their stampers), then the Duplex system, "
"then the Classic, with the cassette and CD-R lines alongside. Early production runs slower and "
"rejects more than any of these figures while the process settles, and the crews of a two-shift "
"plant are on the payroll before the volume is. The **ramp-up reserve of ~10M to 20M THB** "
"(estimate, inside the plan price, the same as in Plan A) is there to carry staff hired before first "
"revenue and overheads until volume covers them. Fan-funded campaigns on the artist platform open "
"only after the first releases have shipped and lead times are measured.")),
P("**A year-by-year cash model for the ramp is a next step, not a claim this plan makes.** It belongs "
"to the financing discussion and needs the vendor build times and the commissioning calendar "
"(section 10) first" + pick(
". The calculator's 35, 70 and 90 % ramp in section 9.4 is a planning assumption, not that model.",
". The calculator's 35, 70 and 90 % ramp in section 9.4 is a planning assumption, the same for "
"both plans, so it does not show Plan B's longer ramp.")),
"(section 10) first. The calculator's 35, 70 and 90 % ramp in section 9.4 is a planning assumption, "
"not that model."),
P(pick(
"**The growth option.** A second Duplex system (two more semi-automatic presses) lifts the plant to "
"~1.0 to 1.5 million records a year at 60 % specials, roughly **+0.4 to 0.6 million records**, for "
"**~USD 230k to 300k** for the press system (estimate: two presses at the quoted ~115k per press "
"and extruder set, plus hydraulic unit and EX 35, no EX 35 price on file). With its chiller module "
"(CH-3, USD 48k to 78k), freight and installation (24k to 48k) and the working capital for the "
"extra records it comes to ~15.4M THB at the midpoint, as Plan B prices it. The hall, the module "
"positions in the boiler hall and chiller compound, and the ring-main tees are reserved for it, so "
"it is a revenue-funded step, not a rebuild.",
"**Growth beyond five presses.** The hall is laid out for five Duplex bays and four Classic "
"positions, and growth adds Duplex systems first, then Classics, from revenue. The boiler hall and "
"chiller compound are built for four modules each: Plan B fills two boiler and three chiller "
"positions, so a further press stage starts with the next module (scale and utility phasing in the "
"planning repository).")),
"extra records it comes to ~15.4M THB at the midpoint (estimate). The hall, the module positions "
"in the boiler hall and chiller compound, and the ring-main tees are reserved for it, so it is a "
"revenue-funded step, not a rebuild.",
"**The growth option, the same as in Plan A.** A second Duplex system (two more semi-automatic "
"presses) adds roughly **+0.4 to 0.6 million records** a year at 60 % specials, for **~USD 230k to "
"300k** for the press system (estimate: two presses at the quoted ~115k per press and extruder set, "
"plus hydraulic unit and EX 35, no EX 35 price on file). With a third chiller module (USD 48k to "
"78k), freight and installation (24k to 48k) and the working capital for the extra records it "
"comes to ~15.4M THB at the midpoint (estimate). The floor bay, the module positions in the boiler "
"hall and chiller compound (built for four modules each; the launch plant fills two of each), and "
"the ring-main tees are reserved for it, so it is a revenue-funded step, not a rebuild. Beyond it, "
"the hall is laid out for five Duplex bays and four Classic positions, and growth adds Duplex "
"systems first, then Classics.")),
# ----------------------------------------------- 10 timeline
H1("10. Timeline: today to first paying release"),
P("Every duration is an estimate. The calendar in the planning repository was drawn in August 2026 and "
"has not yet been re-drawn for the launch plant" + pick("", " or for Plan B's second Duplex system") +
"; nothing in phase 0 has started, so it shifts day for day with the BOI consultant engagement. On "
"has not yet been re-drawn for the launch plant; nothing in phase 0 has started, so it shifts day for day with the BOI consultant engagement. On "
"that calendar, **first paying release lands around Q4 2028 to mid-2029, roughly 27 to 33 months "
"from the start of phase 0.** This plan quotes that as the working figure, not as a re-based date "
"(the executive summary marks it open), and flags the new risk to it: the launch plant puts the "
@@ -868,10 +833,6 @@ def blocks():
"and the Sibert machines have no lead time on file. Build time and order-book position are "
"required fields in every re-quote; it is one line in each email and the highest-value missing "
"fact in the project.",
*([] if a else [
"**Plan B's second Duplex system is commissioned last**, after the Classic, so it is not on the "
"path to the first paying release. It lengthens commissioning and the ramp to full volume; its "
"build time, on top of the first system's at the same vendor, is not quoted yet."]),
]),
T(["#", "Step", "Duration", "Source"], [
["1", "Engage BOI consultant, prepare application", "4 to 5 months", "Estimate"],
@@ -917,7 +878,7 @@ def blocks():
"against a ~36-month full-operation deadline (~18 months). The launch plant puts four vendors' "
"machines, not one, inside the import window" + pick(
", and Plan A adds the Chinese boiler modules. ",
", and Plan B's second Duplex system has to clear customs inside it too. ") +
". ") +
"The margin is consumed by exactly one scenario: filing early to start the clock and then discovering "
"the site does not work. Verify zoning before filing."),
P("**The one lever worth six to nine months** is the BOI sequencing question in section 7: the duty "
@@ -939,10 +900,10 @@ def blocks():
"that the round, once released, buys " + pick(
"Plan A's plant, the launch plant with its six levers, and only growth and the items the levers "
"move later stay revenue-gated.",
"Plan B's five presses with everything in, and only further growth stays revenue-gated.")),
"Plan B's plant, the launch plant with everything in, and only growth stays revenue-gated.")),
T(["Phase", "Content", "Gate"], [
["0. Validate and clear the gates (now)", "Market validation with regional labels and distributors" +
pick("", ", including the demand for ~1.25M records a year") + "; BOI consultant, activity code, "
["0. Validate and clear the gates (now)", "Market validation with regional labels and distributors"
"; BOI consultant, activity code, "
"application; lease terms, zoning, soil test; 60 rai title check; re-quotes and quotes from every "
"launch vendor (section 14.1)", "Runs in parallel; gates everything"],
["1. Quotes and site (during the BOI window)", "Firm quotes with build times; site selection "
@@ -952,9 +913,8 @@ def blocks():
"Pheenix galvanics line, Sillitoe lathe, Sibert line, " + pick(
"Newbilt Duplex and Classic, first two boiler and chiller modules (boilers through the Chinese "
"route)",
"both Newbilt Duplex systems and the Classic, the boiler modules and the first chiller "
"modules"), pick("BOI certificate and validated pricing",
"BOI certificate, validated pricing and demand")],
"Newbilt Duplex and Classic, first two boiler and chiller modules (boilers and compressor "
"from Thai suppliers)"), "BOI certificate and validated pricing"],
["3. Build and commission (~6 to 12 months after commitment)", pick(
"Construction, water-treatment building, utilities, HVAC, clean zones, security, the "
"crane-ready frame (a mobile crane for the installations); the solar array built by the PPA "
@@ -971,9 +931,9 @@ def blocks():
"Second Duplex system; further Classics; the laser confocal and wide-area profiler; the visitor "
"corridor and public tours; cassette and CD-R duplication; an owned crane if needed; the "
"biomass boiler if steam starts electric; the phase 2 building; CD replication if chosen",
"Further Duplex systems first, then Classics (the hall is laid out for five Duplex bays and "
"four Classic positions); the biomass boiler if steam starts electric; the phase 2 building; "
"CD replication if chosen"),
"Second Duplex system, then further Duplex systems and Classics (the hall is laid out for five "
"Duplex bays and four Classic positions); the biomass boiler if steam starts electric; the "
"phase 2 building; CD replication if chosen"),
"Revenue and, for CD replication, a separate decision"],
], widths_mm=[42, 96, 32], font_pt=8.5),
H2("11.1 Commissioning sequence"),
@@ -982,18 +942,15 @@ def blocks():
"Sibert stamper-prep line", "The presses need their stampers; no bridge stampers are planned. "
"First lacquers, fathers, mothers and stampers, and the metal archive "
"from the first title"],
["2", pick("Newbilt Duplex system (two HRP 12, EX 50 and EX 35), with the steam and cooling plant "
"(boiler modules B-1, B-2; chiller modules CH-1, CH-2)",
"Newbilt Duplex system 1 (two HRP 12, EX 50 and EX 35), with the steam and cooling plant "
"(boiler modules B-1, B-2; chiller modules CH-1, CH-2)"),
["2", "Newbilt Duplex system (two HRP 12, EX 50 and EX 35), with the steam and cooling plant "
"(boiler modules B-1, B-2; chiller modules CH-1, CH-2)",
"The semi-automatic presses suit the colour, splatter and boutique runs that carry the premiums, "
"and they teach the crews the process"],
["3", "Newbilt Classic, fully automatic", "Volume runs once the metal path and the press process "
"are stable"],
*([] if a else [
["4", "Newbilt Duplex system 2 (two HRP 12, EX 50 and EX 35), with chiller module CH-3; steam "
"from B-1 and B-2", "The crews know the process from system 1; it carries the specials "
"volume that the central case needs"]]),
["Alongside", "Cassette and CD-R duplication lines", "Independent of the metal path and the "
"presses; short lead times"]]),
], widths_mm=[12, 78, 80]),
P("If commissioning of the metal path slips, Stamper Discs (stampers) and SST in Frankfurt (lacquer "
"cutting, already Poy Records' cutter) stay contacts for overflow and for a slipping commissioning, "
@@ -1026,7 +983,7 @@ def blocks():
"room.", pick("**More capital up front.** ~127M to 226M THB in one round (~177M at the "
"midpoint), against ~57M to 95M THB for the superseded phased entry; more of it is "
"committed before the market has validated the price.",
"**More capital up front.** ~162M to 286M THB in one round (~224M at the midpoint), "
"**More capital up front.** ~150M to 268M THB in one round (~209M at the midpoint), "
"against ~57M to 95M THB for the superseded phased entry; more of it is committed "
"before the market has validated the price.")],
pick(["**Six levers, no machine dropped.** The levers bring the whole chain to ~180M THB, and the "
@@ -1034,18 +991,18 @@ def blocks():
"**What the levers give up.** Owned solar and very likely the BOI solar measure, public tours "
"at first, cassette and CD-R at launch, a bought crane; the boilers are imported from China "
"under the Thai boiler rules. The adverse case still loses money."],
["**Five presses at launch.** The same crews, overheads and title services spread over ~1.25 "
"million records: central EBITDA ~1.8 times the three-press plant's for ~27 % more money, "
"and the adverse case covers its depreciation.",
"**Demand is unproven.** The central case needs ~1.25 million records sold a year, ~0.75 "
"million of them specials; nothing in the market data shows that yet, and the ramp to it is "
"longer."]),
["**Everything in at launch.** Owned solar with the BOI solar measure, the full metrology stack "
"from the first release, tours and the Payap programmes from day one, cassette and CD-R, its "
"own crane and locally serviced utilities; the second Duplex waits for demand and revenue on a "
"reserved floor.",
"**~32M THB more that the model does not repay.** The same EBITDA as Plan A with more "
"depreciation and a longer payback (~3.7 against ~3.1 years); the adverse case still loses "
"money."]),
], widths_mm=[85, 85], font_pt=8.5),
P("**How the plan answers the risks:** commission the metal path first and measure it before the "
"presses depend on it; hire the galvanics and cutting engineers early and train them at the "
"vendors; design zero discharge from the start; and release the round in tranches (section 8.3), "
"so that nothing is ordered before the BOI certificate and validated pricing" + pick(
".", " and demand; the second Duplex system is commissioned last.")),
"so that nothing is ordered before the BOI certificate and validated pricing."),
# --------------------------------------- 12 team, ownership, governance
H1("12. Team, ownership and governance"),
@@ -1077,8 +1034,7 @@ def blocks():
"galvanics, 1 to 2 QC, 2 maintenance), 1 to 2 mastering and cutting engineers, and 3 to 5 in admin, "
"sales and logistics. The revenue model plans on about 20 people at the start (estimate), " + pick(
"and the cassette and CD-R lines add 1 to 2 when they come.",
"plus 1 to 2 for the cassette and CD-R lines; it built that direct crew for the five-press "
"fleet.") +
"plus 1 to 2 for the cassette and CD-R lines from launch.") +
" A process engineer from abroad can be employed on a BOI work permit (section 7)."),
H2("12.2 Ownership and structure"),
P("Amounts and percentages are not yet agreed and are deliberately left open here. The intended "
@@ -1093,11 +1049,10 @@ def blocks():
"whose incentives are aligned with the plant's schedule and quality, within the same province.",
"**Debt-to-equity no higher than 3:1**, maintained for the life of the BOI privileges, which sets "
"the floor on equity in the financing mix: at least a quarter of the funding, " + pick(
"~44M THB of Plan A's ~177M", "~56M THB of Plan B's ~224M") +
"~44M THB of Plan A's ~177M", "~52M THB of Plan B's ~209M") +
" (arithmetic, before financing costs).",
"**A shareholders' agreement** covering board composition, reserved matters (capital calls and "
"tranche releases, the growth options such as " + pick("a second Duplex", "further Duplex systems") +
", CD replication), pre-emption and transfer, information rights, and the founders' roles and "
"tranche releases, the growth options such as a second Duplex, CD replication), pre-emption and transfer, information rights, and the founders' roles and "
"remuneration.",
"**Related-party discipline.** Ploy Printing will be both a shareholder and the plant's main "
"packaging supplier. The supply agreement is priced at arm's length, benchmarked periodically "
@@ -1114,7 +1069,7 @@ def blocks():
"when. The first column is the plan's own honest severity. The September draft's bridge-stamper "
"risk is gone with the bridge stampers; the launch plant brings its own in its place" + pick(
", and Plan A's levers and its price without contingency add theirs.",
", and Plan B's five presses and its price without contingency add theirs.")),
", and Plan B's extra launch capital and its price without contingency add theirs.")),
T(["Severity", "Risk", "What it would do", "Mitigation and status"], _risk_rows(),
widths_mm=[16, 40, 52, 62], font_pt=8),
P("**Open questions with owners** are in the next section. Two standing caveats on the evidence base: "
@@ -1128,11 +1083,9 @@ def blocks():
H2("14.1 Phase 0: the next three to six months"),
T(["#", "Action", "Owner", "Cost", "Retires"], [
["1", "Market validation with regional labels and distributors: the 3.76 to 5.27 USD blended "
"price at 60 % specials, run sizes, and whether faster turnaround earns a premium" + pick(
"", "; and whether demand reaches ~1.25 million records a year, three fifths of them "
"specials") + "; publish the artist platform's calculator early with indicative prices "
"and an interest list", "Simona, Alexander", "Travel", pick("Pricing risk", "Pricing and demand "
"risk")],
"price at 60 % specials, run sizes, and whether faster turnaround earns a premium; publish the "
"artist platform's calculator early with indicative prices and an interest list", "Simona, "
"Alexander", "Travel", "Pricing risk"],
["2", "Engage a BOI-registered consultant: activity sub-code; the order-before-certificate question "
"first; galvanics, cassette and CD-R in the application; CD replication decision; " + pick(
"how the solar PPA affects the solar measure; ", "") + "Payap R&D", "Simona", "USD 5k to 15k",
@@ -1142,9 +1095,7 @@ def blocks():
"structure including Ploy Printing", "Simona, counsel", "USD 5k to 15k", "Zoning, lease, "
"ownership"],
["4", "Soil boring test on the chosen plot", "Alexander", "THB 30k to 50k", "Ground risk"],
["5", "Newbilt re-quote: " + pick("Duplex (EX 50 and EX 35)", "two Duplex systems (EX 50 and EX 35 "
"each)") +
" and Classic, with build time, order-book position, PLC data access, central hydraulic supply "
["5", "Newbilt re-quote: Duplex (EX 50 and EX 35) and Classic, with build time, order-book position, PLC data access, central hydraulic supply "
"and written hydraulic requirements, currency and validity", "Alexander", "Free",
"Classic and EX 35 price, schedule"],
["6", "Pheenix quote for the galvanics line (PASU, PPPU, PDPU, PMPB) with lead time and training; "
@@ -1197,39 +1148,40 @@ def blocks():
"the midpoint), and from the low to the high end of every block the plan comes to ~127M to "
"226M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes and the solar PPA offer decide where in that range it lands.",
"A commitment in principle to **Plan B at ~225M THB** (~224M at the midpoint, the ramp-up "
"A commitment in principle to **Plan B at ~210M THB** (~209M at the midpoint, the ramp-up "
"reserve of 10M to 20M included, no contingency), released in the tranches of section 8.3, "
"with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~56M "
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~31M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~162M to "
"286M THB. Market validation of the demand for ~1.25 million records a year comes first; "
"then the Newbilt re-quote (two Duplex systems with the EX 35, the Classic), the Pheenix "
"quote, the building quote with the soil test and the metrology quotes decide where in that "
"range it lands.")],
"with the financing mix set to hold debt-to-equity at or below 3:1 (equity of at least ~52M "
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~29M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~150M to "
"268M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes and the solar and battery purchase quotes decide where in that range it "
"lands.")],
["Decisions", pick(
"The equity and debt mix, and how quotes landing above the plan price are funded; the six "
"levers, the solar PPA first (it very likely gives up the BOI solar measure); CD replication, "
"yes or no, before the BOI application is finalised; the steam fuel (electric or biomass); "
"the shareholder structure with Ploy Printing and the founders; hedging of the EUR orders.",
"The equity and debt mix, and how quotes landing above the plan price are funded; five "
"presses at launch against the market validation (the second Duplex system is commissioned "
"last and can still return to a growth step); CD replication, yes or no, before the BOI "
"The equity and debt mix, and how quotes landing above the plan price are funded; the ~32M "
"THB of items Plan A leases or defers (owned solar with the BOI solar measure, the full "
"metrology stack, the visitor corridor, cassette and CD-R, the bought crane, Thai boilers and "
"compressor), each weighed against its lever; CD replication, yes or no, before the BOI "
"application is finalised; the steam fuel (electric or biomass); the shareholder structure "
"with Ploy Printing and the founders; hedging of the EUR orders.")],
["Later", pick(
"Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; "
"~15.4M THB at the midpoint with its chiller module, freight and working capital, as Plan B "
"prices it), the laser confocal and wide-area profiler (USD 180k to 350k), the visitor "
"~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), "
"the laser confocal and wide-area profiler (USD 180k to 350k), the visitor "
"corridor, cassette and CD-R, an owned crane if needed, further Classics, the biomass boiler "
"if steam starts electric, and the phase 2 building.",
"Revenue-funded growth: further Duplex systems first, then Classics, in the hall laid out for "
"five Duplex bays and four Classic positions; the biomass boiler if steam starts electric; "
"and the phase 2 building.")],
"Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; "
"~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), "
"then further Duplex systems and Classics in the hall laid out for five Duplex bays and four "
"Classic positions; the biomass boiler if steam starts electric; and the phase 2 building.")],
], widths_mm=[38, 132]),
P("The next version of this plan should carry: the Newbilt, Pheenix, Sillitoe and Sibert quotes with "
"their build times in place of the placeholder and estimated blocks; the building quote with the "
"soil result; " + pick("the solar PPA offer and the BOI consultant's reading of the solar measure; ",
"market evidence for the 1.25 million records a year; ") +
"the BOI consultant's reading of the solar measure on the owned array; ") +
"the negotiated lease; a buyer-side price data point; the investor's CD and fuel decisions; how "
"overruns are funded, since the price carries no contingency; a calendar re-drawn for the launch "
"plant with the metal-path commissioning in it; a year-by-year cash model for the ramp; and the "
@@ -1248,10 +1200,9 @@ def blocks():
["scale.md", "Project sizing on one page: capacity per fleet, building zones, electrical, solar, "
"steam and cooling, utility phasing, people"],
["finance/total-investment.md", "The launch-plant roll-up (October 2026) with the basis of every "
"block; 'Two plans': Plan A at ~180M and Plan B at ~225M THB, "
"the six levers, Plan B's additions and what is not in either "
"price; the superseded investor answer, full vision and phased "
"entry"],
"block; 'Two plans': Plan A at ~180M and Plan B at ~210M THB, "
"the six levers and what is not in either price; the superseded "
"investor answer, full vision and phased entry"],
["finance/revenue-model.md", "Pricing, the Thai market data and factory tour, the Record Industry "
"benchmark, direct cost, the launch-plant operating picture and the "
"operating pictures of Plan A and Plan B"],