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).
1307 lines
110 KiB
Python
1307 lines
110 KiB
Python
"""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)".
|
||
plan_variant.pick() switches the text; it is called inside blocks() only (build_plan.py sets the plan
|
||
before it calls blocks()).
|
||
"""
|
||
from plan_lib import H1, H2, H3, P, B, N, T, KV, IMG, CALL, PB
|
||
from plan_variant import pick, is_a, is_b, label, name
|
||
|
||
|
||
# ------------------------------------------------------------ 8.1 blocks
|
||
def _block_rows():
|
||
"""This plan's blocks: the calculator rows of its preset, grouped (USD and THB, low to high)."""
|
||
a = is_a()
|
||
rows = [
|
||
["Phase 0: BOI consultant, legal and lease work, soil test, re-quotes", "40k to 80k", "1.3M to 2.6M",
|
||
"Estimate"],
|
||
["Newbilt Duplex system 1 (two HRP 12 presses, EX 50 main and EX 35 colour extruder, trimmer, label "
|
||
"oven, shrink wrapper, grinder, label punch)", "350k to 370k", "11.6M to 12.2M",
|
||
"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**"],
|
||
["Pheenix galvanics line (PASU, PPPU, one PDPU, PMPB)", "324k to 445k", "10.7M to 14.7M",
|
||
"**OMS's reference plus 20 %**: OMS's 4-cell wet room with the EUR 10k know-how transfer, EUR 234k "
|
||
"to 321k (letter of 9 October 2026), × 1.2 = EUR 280.8k to 385.2k; **no Pheenix price on file**"],
|
||
["Galvanics water: zero-discharge (ZLD) evaporator and DI water", "97k to 258k", "3.2M to 8.5M",
|
||
"Researched: utilities rows, launch scope"],
|
||
["Water-treatment building next to galvanics (~12 × 10 m, proposed)", "52k to 87k", "1.7M to 2.9M",
|
||
"Estimate at the building rate below"],
|
||
["Sibert stamper prep: VSF back-finisher, VSP punch, VSC coiner", "250k", "8.3M", "Sibert's budget "
|
||
"confirmation, 5 October 2026; its time, spares, shipping and travel sit in the freight and "
|
||
"working-capital lines"],
|
||
["Cutting room: Sillitoe SDMS lathe, spare cutterhead and support, mastering console and chain, "
|
||
"monitoring, room build-out", "200k to 350k", "6.6M to 11.6M", "SDMS list price USD 125k (ex tax "
|
||
"and shipping); the rest estimate"],
|
||
pick(["Metrology and QC, launch tier: XRF, inline vision on the presses, audio station", "170k to 460k",
|
||
"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"]),
|
||
["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 "
|
||
"modules (CH-1, CH-2), screw compressor, dryer and receiver", "239k to 416k", "7.9M to 13.7M",
|
||
"Researched: utilities rows; boilers and compressor through the Chinese route (lever 6): "
|
||
"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"]),
|
||
["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"],
|
||
]
|
||
if not a:
|
||
rows.append(["Rooftop PV (EPC) and the 271 kWh Gobel battery, owned", "269k to 380k", "8.9M to 12.5M",
|
||
"Researched: utilities rows; owned, so the BOI solar measure applies"])
|
||
rows += [
|
||
["Building ~1,500 m² plus civil and site works", "650k to 1,100k", "21.4M to 36.3M", "Estimate at "
|
||
"12,000 to 20,000 THB/m² plus ~20 % site works; soil is the main variable"],
|
||
pick(["Crane rented for the installations (mobile crane); frame, runway and machine door stay "
|
||
"crane-ready", "39k to 91k", "1.3M to 3.0M", "Estimate: 40 % of the crane block (lever 5)"],
|
||
["Overhead crane, runway, frame premium, machine door", "97k to 227k", "3.2M to 7.5M", "Estimate"]),
|
||
["Maintenance workshop and machine bay fit-out", "30k to 76k", "1.0M to 2.5M", "Estimate"],
|
||
]
|
||
if not a:
|
||
rows.append(["Visitor corridor and accessible entrance", "67k to 148k", "2.2M to 4.9M", "Estimate"])
|
||
rows += [
|
||
["Utility yard built for four boiler and four chiller modules", "73k to 122k", "2.4M to 4.0M",
|
||
"Estimate"],
|
||
["Factory software, ERPNext, artist platform public side", "115k to 310k", "3.8M to 10.2M",
|
||
"Estimate: factory software 60k to 170k, ERPNext implementation 15k to 50k, artist platform "
|
||
"40k to 90k"],
|
||
]
|
||
if not a:
|
||
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"]),
|
||
]
|
||
if a:
|
||
rows.append(["Not bought at launch (levers, section 8.2): rooftop PV and battery (solar PPA), visitor "
|
||
"corridor, cassette and CD-R duplication", "none", "none", "The PPA installer owns and "
|
||
"finances the array; the rest are growth steps from revenue"])
|
||
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)**"]),
|
||
["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**"]),
|
||
["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")],
|
||
]
|
||
return rows
|
||
|
||
|
||
def _levers_table():
|
||
"""Plan A: the six levers from the launch plant with every block, midpoints, no contingency."""
|
||
return T(["Step", "Saves", "Subtotal after it", "What it gives up"], [
|
||
["Launch plant, every block, no contingency", "", "~193.8M THB (~5.87M USD)", ""],
|
||
["1. Rooftop solar and battery through a solar PPA (the installer owns and finances the array; the "
|
||
"plant buys the power)", "~10.7M", "~183.1M", "Owned solar and very likely the BOI solar measure with "
|
||
"its tax benefit (our reading, for the BOI consultant); "
|
||
"adds the PPA power price to the energy bill, ~0.03M USD a "
|
||
"year in the calculator at 3.0 THB/kWh (estimate, to "
|
||
"quote)"],
|
||
["2. Metrology launch tier: XRF, inline vision and audio station at launch; laser confocal and "
|
||
"wide-area profiler (USD 180k to 350k) bought from revenue", "~8.8M", "~174.4M", "Every stamper and "
|
||
"record is still measured (XRF, inline vision on the presses, audio station); the confocal and the "
|
||
"profiler come later"],
|
||
["3. Visitor corridor built later", "~3.6M", "~170.8M", "No public tours at first: the tour route and "
|
||
"the Payap programmes around it start later"],
|
||
["4. Cassette and CD-R duplication later", "~4.0M", "~166.8M", "No cassette or CD-R at launch; a growth "
|
||
"step"],
|
||
["5. Crane rented for the installations (mobile crane)", "~3.2M", "~163.6M", "No overhead crane at "
|
||
"first; frame, runway and machine door stay crane-ready, so it can be bought later if needed"],
|
||
["6. Boilers and compressor through the Chinese route", "~1.9M", "**~161.7M (~4.90M USD)**",
|
||
"Imported boilers take the Thai route (Ministry of Industry boiler notification B.E. 2549: design "
|
||
"and import rules, a certification body registered with the Department of Industrial Works) with an "
|
||
"ASME S stamp at 1.25 MPa"],
|
||
["Ramp-up reserve", "", "+10M to 20M", ""],
|
||
["**Plan A**", "", "**~177M THB (~5.35M USD)**", "~127M to 226M from the low to the high end of every "
|
||
"block"],
|
||
], widths_mm=[56, 16, 32, 66], font_pt=8.5,
|
||
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. "
|
||
"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)**"],
|
||
["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'.")
|
||
|
||
|
||
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"),
|
||
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)")],
|
||
["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)")],
|
||
["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)")],
|
||
["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")],
|
||
], 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 "
|
||
"figures are the shares applied to it (arithmetic, estimates)."))
|
||
|
||
|
||
# ------------------------------------------------------- 9.4 operating picture
|
||
def _operating_table():
|
||
if is_a():
|
||
rows = [
|
||
["Records", "0.58M", "0.74M", "0.90M"],
|
||
["Blended price, 60 % specials", "3.76", "4.49", "5.27"],
|
||
["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.23M**", "**1.73M**", "**3.79M**"],
|
||
["Depreciation", "0.62M", "0.39M", "0.24M"],
|
||
["**Operating profit**", "**-0.39M**", "**1.34M**", "**3.55M**"],
|
||
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
|
||
["Payback on the plan price (EBITDA, mature year)", "~30 yr", "~3.1 yr (2.2 to 4.0 on 3.86M to "
|
||
"6.85M)", "~1.0 yr"],
|
||
]
|
||
else:
|
||
rows = [
|
||
["Records", "1.0M", "1.25M", "1.5M"],
|
||
["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**"],
|
||
["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"],
|
||
]
|
||
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 "
|
||
"2026)'. Title services at 60 to 70 % contribution after lacquers, styli and nickel. "
|
||
"Contribution per record and total contribution are the table's own arithmetic.")
|
||
|
||
|
||
def _risk_rows():
|
||
a = is_a()
|
||
rows = [
|
||
["High", "Pricing power in the region is unproven", "The single biggest assumption in the revenue "
|
||
"model; a turnaround advantage nobody pays a premium for is a cost, not a moat", "Market "
|
||
"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"),
|
||
"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"],
|
||
["High", "Utilisation and price", pick(
|
||
"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"),
|
||
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")],
|
||
]
|
||
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 "
|
||
"metal path first and measure it; vendor training; Stamper Discs and SST as contacts for a "
|
||
"slipping commissioning, not a plan"],
|
||
["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"),
|
||
"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",
|
||
"Required field in every re-quote, now"],
|
||
["High", "Zoning of the chosen plot unverified", "A site reset costs ~6 months; the Payap point "
|
||
"already fails zoning; Mueang Chi is unverified", "Verify on the land-use map and with counsel "
|
||
"before the BOI filing; industrial estate as "
|
||
"fallback"],
|
||
]
|
||
if a:
|
||
rows.append(["Medium", "Solar PPA and the BOI solar measure", "The PPA very likely gives up the BOI "
|
||
"solar measure (owned solar and its tax benefit) and adds a power price, ~0.03M USD a year "
|
||
"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"])
|
||
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 "
|
||
"ownership and assignment rights; Thai counsel in phase 0"],
|
||
["Medium", "Soil conditions", "Piling could add several hundred to 1,000+ THB/m² across building, "
|
||
"paving and fill", "Soil boring test in phase 0 (THB 30k to 50k)"],
|
||
["Medium", "Galvanics permitting", "Effluent and hazardous-substance permitting are the most likely "
|
||
"regulatory friction, now in the first factory licence", "Zero-discharge design and the "
|
||
"water-treatment building from the "
|
||
"start; industrial estate option; "
|
||
"lessor's consent on Payap land"],
|
||
["Medium", "Utilities fuel choice open", "Biomass heat costs a quarter to a tenth of electric steam "
|
||
"at reported fuel prices; electric steam needs a larger grid connection, biomass a secured fuel "
|
||
"supply", "Decide before the boiler request and the grid application; quote electric and fired "
|
||
"variants of the same modules"],
|
||
["Medium", "Boiler import compliance (DIW)", pick(
|
||
"This plan imports its boiler modules from China: an imported boiler must meet ASME, JIS, EN or "
|
||
"equivalent and be verified by a DIW-registered certification body; the modules run above the "
|
||
"once-through relief",
|
||
"An imported boiler must meet ASME, JIS, EN or equivalent and be verified by a DIW-registered "
|
||
"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"),
|
||
"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 "
|
||
"reaches every press", "ISO 4406 target, flushing to ISO 23309, particle counts at acceptance "
|
||
"and after flushing, non-bypass branch filters, isolation per press, online particle counter, "
|
||
"kidney loop; central plant still to be quoted"],
|
||
["Medium", "Currency", "EUR on Newbilt and Pheenix, USD on Sibert and Sillitoe, THB costs, USD/EUR "
|
||
"revenue; a 10 % baht move is worth 0.09 to 0.17 USD per record on margin", "Currency and validity "
|
||
"in every quote; THB "
|
||
"pricing regionally; "
|
||
"hedging decision with "
|
||
"the investor"],
|
||
["Medium", "Vinyl demand is cyclical", "Global capacity has been added; the model assumes the plant "
|
||
"sells what it presses", pick("Mixed fleet suits boutique work that is less cyclical; cassette and "
|
||
"CD-R lines diversify once added; growth options wait for demand",
|
||
"Mixed fleet suits boutique work that is less cyclical; cassette and "
|
||
"CD-R lines diversify; further growth waits for demand")],
|
||
["Medium", "Reject rate in early production", "Early runs, and the first stampers from a new "
|
||
"galvanics room, will be worse than the 5 to 10 % allowance while the process settles", "Vendor "
|
||
"commissioning, stamper metrology, materials lab from day one, QC layers, conservative launch "
|
||
"promises; the ramp-up reserve"],
|
||
["Medium", "Competitive response", "The incumbent may add plating, or a second entrant may appear; "
|
||
"the domestic price ceiling may compress on our arrival", "Compete on capability (traceability, "
|
||
"QC, climate), export customers, and "
|
||
"the collaboration under discussion"],
|
||
pick(["Low", "Solar integration under the PPA", "Rack voltage vs inverter window, certifications and "
|
||
"warranty move to the installer, but the plant still depends on the array", "Engineering checks "
|
||
"of the installer's design in phase 0; large float"],
|
||
["Low", "Solar and battery integration", "Rack voltage vs inverter window; unpublished "
|
||
"certifications; mixed-vendor warranty", "Engineering checks and certificate requests in phase "
|
||
"0; large float"]),
|
||
["Low", "Cassette supply chain", pick("Blank tape and shells come from few suppliers, once the lines "
|
||
"are added", "Blank tape and shells come from few suppliers"),
|
||
"Hold stock; qualify two sources"],
|
||
["Low", "CD replication scope creep", "Adds USD 1.5M to 4.0M and a second commissioning programme",
|
||
"Decide before BOI filing; treat as a separate project if chosen"],
|
||
]
|
||
return rows
|
||
|
||
|
||
def blocks():
|
||
a = is_a()
|
||
return [
|
||
# ------------------------------------------------- 8 investment
|
||
H1("8. Investment"),
|
||
P(pick(
|
||
"This chapter prices **Plan A (~180M 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, 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. ") +
|
||
"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 "
|
||
"minus 30 to 50 % on the estimates) until requests for quotation replace them. Exchange rates: "
|
||
"1 USD = 33 THB, 1 EUR = 1.155 USD, 1 GBP = 1.35 USD."),
|
||
P("The September 2026 draft of this plan priced a phased entry (one press, bridge stampers, outsourced "
|
||
"cutting) and a five-press full vision. Both are superseded, as is the launch-plant budget with a "
|
||
"15 % contingency of the previous draft; they are not repeated here, and the planning repository "
|
||
"keeps them for the record."),
|
||
|
||
H2(pick("8.1 Plan A, all blocks", "8.1 Plan B, all blocks")),
|
||
T(["Block", "USD", "THB", "Basis"], _block_rows(), widths_mm=[52, 30, 30, 58], font_pt=8.5,
|
||
caption=pick(
|
||
"Source: docs/finance/total-investment.md, 'Two plans', and the Plan A preset of the plant and "
|
||
"business plan calculator (docs/fleet-calculator.html), whose rows are grouped here; estimates. "
|
||
"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.",
|
||
"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.")),
|
||
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 "
|
||
"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 "
|
||
"to quote. The blocks are vendor prices without Thai duty or import VAT, so they assume BOI "
|
||
"promotion: without it, ~5 % duty on ~2.3M USD of imported machinery (~0.11M USD, the launch "
|
||
"plant's estimate) comes on top, plus ~0.17M USD of import VAT paid at the border and reclaimed "
|
||
"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.")),
|
||
|
||
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):"),
|
||
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"],
|
||
["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)"],
|
||
["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"],
|
||
], 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."),
|
||
*(
|
||
[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.")]
|
||
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.")]
|
||
),
|
||
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.",
|
||
"**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."),
|
||
]),
|
||
P("Figure 5 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."),
|
||
IMG(pick("renders/calculator/plan-a-budget.png", "renders/calculator/plan-b-budget.png"), 160,
|
||
"Figure 5. 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") +
|
||
". 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."),
|
||
|
||
H2("8.3 Tranches"),
|
||
P("The plan is one capital round, but it is not one payment. Capital is released against milestones, "
|
||
"so each tranche is spent only once the previous gate has cleared. Because cutting and galvanics are "
|
||
"commissioned first and have their own build times, their orders sit in the first long-lead tranche "
|
||
"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. ") +
|
||
"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 "
|
||
"borrowed from another vendor's automatic press); the Pheenix line is priced at OMS's reference "
|
||
"plus 20 %, without a Pheenix figure; " + pick(
|
||
"the EX 35 is priced only as the expired 2024 quote's second-extruder option; the building "
|
||
"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."),
|
||
"**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 "
|
||
"headroom. The application precedes every purchase order. " + pick(
|
||
"The solar measure is based on the plant's own solar investment, so Plan A's solar PPA would "
|
||
"likely give that headroom up (our reading, a question for the BOI consultant).",
|
||
"Plan B owns its solar array, so it keeps the solar measure."),
|
||
"**The ground.** Soft paddy soil under the building, paving and fill platform is the single largest "
|
||
"cost variable in the building package, and the cheapest to resolve: a soil boring test costs "
|
||
"THB 30k to 50k.",
|
||
pick("**Chinese suppliers: taken where they pay.** Plan A buys the boiler modules and the "
|
||
"compressor through the Chinese route (~1.9M THB at the midpoint, about 1 % of the price); the "
|
||
"Newbilt hydraulic aggregates stay Newbilt's. Chillers and HVAC, the larger blocks, are not "
|
||
"checked yet; that is the next Chinese lever to test.",
|
||
"**Chinese suppliers: ~1 %.** Plan B prices Thai-supplied utilities. The Chinese route for the "
|
||
"boiler modules and the compressor would take ~1.9M THB off at the midpoint (Plan A takes "
|
||
"it); chillers and HVAC, the larger blocks, are not checked yet."),
|
||
pick("**Solar PPA.** The largest single lever (~10.7M THB at the midpoint) moves the array off the "
|
||
"capital budget and adds a power price to the energy line instead (~0.03M USD a year in the "
|
||
"calculator at 3.0 THB/kWh, an estimate to quote).",
|
||
"**Solar bought, not leased.** Plan B owns the array and the battery (8.9M to 12.5M THB). A "
|
||
"solar PPA would take ~10.7M THB off the price at the midpoint and add a power price to the "
|
||
"energy line instead, very likely without the BOI solar measure."),
|
||
"**Every band narrows only with quotes.** The supplier map in the planning repository lists who to "
|
||
"ask, and the re-quotes are phase 0 work (section 14).",
|
||
]),
|
||
|
||
H2("8.5 Currency exposure"),
|
||
P("Revenue will be mostly USD and EUR from export customers; the cost base is mostly THB; the equipment "
|
||
"is priced in several currencies. Newbilt quotes in EUR, and the Pheenix line is expected in EUR "
|
||
"(European vendor, no quote yet; the currency is a stated field in the request; the plan prices it "
|
||
"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).")),
|
||
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. ") +
|
||
"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 "
|
||
"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 "
|
||
"of Thai market data (section 3.3) says domestic prices are several times higher: re-basing the "
|
||
"whole model on one supplier's price list in a market with one supplier would be worse than leaving "
|
||
"it low."),
|
||
|
||
H2("9.1 Pricing assumptions"),
|
||
B([
|
||
"**Blended pressing price: USD 3.76 to 5.27 per record** (THB 124 to 174) at the planned **60 % "
|
||
"specials** (splatter, marble and colour effects; the plant focuses on special prints, not mono "
|
||
"colours): standard USD 3.40 / 3.80 / 4.25 plus a specials premium of 0.60 / 1.15 / 1.70 on 60 % "
|
||
"of the records, covering pressing, labels, inner sleeve and assembly into the jacket; deluxe "
|
||
"packaging passed through at cost plus margin. At ~20 % specials the same prices blend to 3.50 to "
|
||
"4.60. Western plants charge roughly USD 2.90 to 5.80 for standard black at volume, with premiums "
|
||
"of 0.60 to 1.70 for colour and splatter, 180 g and small runs. What specials cost extra "
|
||
"(coloured compound, colour-change purge, trim that only goes back into black) is not yet in the "
|
||
"direct cost, so the specials gain is an upper bound until the compound quotes arrive.",
|
||
"**Western benchmark, October 2026.** Record Industry (Haarlem) publishes its prices online: 300 "
|
||
"copies of a black 140 g LP with stampers, test pressings, printed labels, a paper inner sleeve, a "
|
||
"printed jacket and shrink wrap come to **1,721 EUR all-in (~219 THB a copy)**, ex VAT and freight. "
|
||
"Its per-title items (set-up, small-run charge, cutting, stampers, test pressings) total about 580 "
|
||
"to 600 EUR, the low end of this plan's title assumption; black pressing with printed labels and a "
|
||
"paper inner sleeve comes to about 2.43 USD a copy at 300, below the 2.90 to 5.80 range.",
|
||
"**Thai market.** The ResurRec invoices of August 2026 come to **650 to 950 THB a copy all-in at "
|
||
"300**, about 3 to 4.3 times Record Industry's ex-works price. The artist ordering demo's price "
|
||
"list comes to **~343 THB a copy at 300** with vinyl mastering: above the European ex-works price, "
|
||
"well below the Thai market. Both price levels stay open until market validation (roadmap item 1).",
|
||
"**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)") +
|
||
"; 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 "
|
||
"USD 2.50 to 4.00 and 10k to 40k CD-Rs at USD 1.50 to 3.00; estimates with no market data "
|
||
"behind them yet.",
|
||
"**Cassettes and CD-Rs** are add-on lines in the plant from launch, not in the operating "
|
||
"picture. The September draft illustrated them at 20k to 60k cassettes a year at USD 2.50 to "
|
||
"4.00 and 10k to 40k CD-Rs at USD 1.50 to 3.00; estimates with no market data behind them "
|
||
"yet."),
|
||
"**Dropshipping fees** per parcel and **stamper supply to other plants** are on top and not "
|
||
"modelled.",
|
||
]),
|
||
|
||
H2(pick("9.2 Capacity and revenue of Plan A", "9.2 Capacity and revenue of Plan B")),
|
||
P(pick(
|
||
"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 "
|
||
"hour, 28 s cycle, vendor flyer) presses the standard 40 % at about two thirds load; at 60 to 70 % "
|
||
"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([
|
||
["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],
|
||
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."),
|
||
|
||
H2("9.3 Direct cost per record"),
|
||
T(["Cost element", "USD/record", "THB/record", "Basis"], [
|
||
["PVC compound", "0.29 to 0.46", "9.6 to 15.2", "~150 to 160 g effective virgin at 1.75 to 2.90 "
|
||
"USD/kg; regrind loop covers scrap"],
|
||
["Labels", "0.03 to 0.09", "1.1 to 3.0", "Printed pairs, volume"],
|
||
["Inner sleeve", "0.09 to 0.17", "3.0 to 5.7", "Poly-lined"],
|
||
["Jacket (standard)", "0.40 to 0.92", "13.3 to 30.4", "Ploy Printing and local carton partners; "
|
||
"largely pass-through"],
|
||
["Shrink wrap", "0.02 to 0.03", "0.8 to 1.1", "Film"],
|
||
["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)"]),
|
||
["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"],
|
||
["Maintenance, spares, consumables", "0.12 to 0.23", "3.8 to 7.6", "Estimate"],
|
||
["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 "
|
||
"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."),
|
||
P(pick(
|
||
"**Why labour per record is higher than in the September draft.** 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) while the volume falls from "
|
||
"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:")),
|
||
T(["Role", "Heads", "THB/month each, loaded"], [
|
||
["Press and finishing operators", "8 to 12", "~19,500"],
|
||
["Galvanics", "2 to 3", "~32,500"],
|
||
["QC", "1 to 2", "~26,000"],
|
||
["Maintenance", "2", "~32,500"],
|
||
["**Direct production payroll**", "**13 to 19**", "**~312,000 to 449,000 a month**"],
|
||
], widths_mm=[80, 30, 60]),
|
||
P("Mastering and cutting engineers are title-services labour, not per-record (a cutting engineer earns "
|
||
"about 50,000 THB a month base, team figure); admin, sales and logistics sit in overheads. Group "
|
||
"health insurance with a yearly check-up (~0.35M THB a year for ~20 staff) and unified workwear "
|
||
"(~0.3M THB a year) come on top of the ×1.3 and are not yet in the per-record figure."),
|
||
|
||
H2(pick("9.4 Operating picture of Plan A", "9.4 Operating picture of Plan B")),
|
||
P("Built from the components above. Three scenarios, each internally consistent: adverse pairs low "
|
||
"volume with the low price, the high cost, the high capital and the high overheads; favourable does "
|
||
"the opposite; central takes midpoints. Cash overheads (admin, sales, insurance, facility running, "
|
||
"IT, professional fees, marketing, the land lease) are estimated at USD 0.20M to 0.45M a year and "
|
||
"paired high-to-adverse. Depreciation is on this plan's blocks: " + pick(
|
||
"the high end (6.25M USD) over 10 years (adverse), the midpoint (4.90M USD) over 12.5 years "
|
||
"(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 "
|
||
"high end).")),
|
||
_operating_table(),
|
||
CALL("Reading this table honestly", pick([
|
||
"**The central case works on ~177M THB.** EBITDA ~1.7M USD (~57M THB) and operating profit ~1.3M "
|
||
"USD (~44M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
|
||
"**0.2 million records a year, about a quarter 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 ~0.9 million records to cover depreciation, and "
|
||
"the three presses make 0.58 million at that rate. 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.7 USD (~88 THB) a record (arithmetic on the table), below the low price "
|
||
"assumed: price realisation and utilisation decide solvency, not upside.",
|
||
"**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 A preset, "
|
||
"with its own cost build-up (it adds electric steam heat, the cutting engineer and the PPA power "
|
||
"price, ~0.03M USD a year, which this 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.04M USD, payback 2.4 years on the 161.7M 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.9, ~25 % IRR and an NPV of ~4.9M USD over ten years, pre-tax and "
|
||
"pre-financing (estimates). Not modelled here: cassette and CD-R lines (later in Plan A), stamper "
|
||
"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 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 "
|
||
"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 6. 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 %") +
|
||
". 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 "
|
||
"(docs/fleet-calculator.html); a sketch, not a forecast, estimates."),
|
||
|
||
H2("9.5 The ramp"),
|
||
P(pick(
|
||
"The table above is a mature year. Plan A does not start there. It is commissioned in sequence: "
|
||
"first the cutting room and galvanics (the presses need their stampers), then the Duplex system, "
|
||
"then the Classic. 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) 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.",
|
||
"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.")),
|
||
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.")),
|
||
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).")),
|
||
|
||
# ----------------------------------------------- 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 "
|
||
"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 "
|
||
"metal path on the critical path."),
|
||
CALL("The critical path", [
|
||
"**BOI certificate → long-lead orders → vendor builds → sea freight → commissioning of the cutting "
|
||
"room and galvanics → first stampers → press commissioning → test pressings → first paying "
|
||
"release.** Everything else, including the entire building, has float against that chain.",
|
||
"**Galvanics and cutting now come before the first paying release.** There are no bridge stampers "
|
||
"and no outsourced cutting in the launch plant, so the presses cannot press a paying title until "
|
||
"the cutting room cuts lacquers and the galvanics line grows fathers, mothers and stampers that "
|
||
"pass inspection. The August calendar did not contain this step; whether it fits inside the 2 to "
|
||
"3 months of installation and commissioning depends on build times nobody has quoted and on two "
|
||
"hires.",
|
||
"**The press build time is still assumed.** 9 to 12 months is an industry-typical figure for a "
|
||
"built-to-order system from a small German manufacturer, and it carries about 40 % of the "
|
||
"schedule. If the real figure is 15 to 18 months, launch moves to mid-2029.",
|
||
"**The other vendors are unquoted too.** The Sillitoe lathe is built to order, and the Pheenix line "
|
||
"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"],
|
||
["2", "BOI review to certificate", "4 to 6 months", "BOI: ~40 working days decision, 4 to 6 "
|
||
"months in practice"],
|
||
["3", "Company incorporation under the certificate", "1 to 2 months", "Roadmap"],
|
||
["4", "Press order to vendor-ready", "**9 to 12 months**", "**Assumed; not yet quoted.** Pheenix, "
|
||
"Sillitoe and Sibert build times also unquoted"],
|
||
["5", "Sea freight Europe to Thailand", "6 to 8 weeks", "Newbilt quote includes freight"],
|
||
["6", "Install, commission, train", "2 to 3 months", "Newbilt includes 5 days; rest at ~USD 97/h "
|
||
"plus travel"],
|
||
["6a", "Commission the cutting room and galvanics; first stampers pass inspection", "**Not yet "
|
||
"estimated**", "**New with the launch plant**; must finish before step 7"],
|
||
["7", "Test pressings, QC baseline, reject shakedown", "1.5 to 2 months", "Roadmap"],
|
||
["", "**Total**", "**~27 to 33 months**", "August 2026 calendar, before step 6a"],
|
||
], widths_mm=[10, 68, 34, 58]),
|
||
T(["Track (in parallel)", "Needed by", "Float", "Becomes critical if"], [
|
||
["Land lease, zoning, soil test", "Design start, ~Q1 2027", "~4 months", "Zoning fails and a new "
|
||
"site is needed (~6 months reset); the plot Payap first offered already fails zoning"],
|
||
["Construction, incl. the water-treatment building and utility yard", "Machinery arrival, "
|
||
"~Q3 2028", "~3 to 5 months", "Soft soil forces piling, or permits stall; the galvanics room, "
|
||
"clean zone and ZLD plant are now needed first, ahead of the press hall"],
|
||
["Factory licence (Ror.Ngor. 4) with galvanics in the first licence", "First production, Q4 2028",
|
||
"~4 months", "Galvanics effluent and hazardous-substance registration are now in the first "
|
||
"licence scope: the most likely regulatory friction point; ZLD design in the application from "
|
||
"the start"],
|
||
pick(["Solar through the PPA (the installer builds and owns the array)", "Fit-out, ~Q2 2028",
|
||
"Large", "Not a risk; the PPA offer is phase 0 work; battery lead time is 50 to 60 days"],
|
||
["Solar and battery (purchase)", "Fit-out, ~Q2 2028", "Large", "Not a risk; battery lead time "
|
||
"is 50 to 60 days"]),
|
||
pick(["Cassette and CD-R lines", "Later (growth step)", "Not on the launch calendar", "Not a risk; "
|
||
"short lead "
|
||
"times"],
|
||
["Cassette and CD-R lines", "Fit-out, ~Q2 2028", "Large", "Not a risk; short lead times"]),
|
||
["Hiring: galvanics process engineer and cutting engineer", "Before the metal path commissions",
|
||
"**None: now on the critical path**", "Galvanics is the hardest skill to hire; both people must "
|
||
"be hired and trained (at the vendors) before step 6a"],
|
||
["Hiring and training: the rest of the launch team", "Commissioning, ~Q3 2028", "~2 months",
|
||
"Two shifts are needed from the start of volume production"],
|
||
], widths_mm=[42, 36, 28, 64]),
|
||
P("**BOI windows are comfortable** on the August calendar: machinery clears customs ~Q3 2028 against a "
|
||
"30-month import window ending ~Q4 2029 (~15 months of margin), and first production ~Q4 2028 "
|
||
"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 "
|
||
"exemption attaches at importation, not at contract signature, so if an order and deposit can be "
|
||
"placed while the application is in review, the press build overlaps the BOI process. It is a "
|
||
"question for the BOI consultant, not a claim. The land lease cannot pull the launch forward on its "
|
||
"own: construction has float against the vendor chain, and only the orders move the end date."),
|
||
P("**What a delay costs.** A month lost engaging the BOI consultant costs a month of launch. A month "
|
||
"lost on land or construction costs nothing until the float is gone. A month lost getting the "
|
||
"vendor build times in writing, or hiring the galvanics and cutting engineers, costs nothing today "
|
||
"and may cost months of surprise later."),
|
||
|
||
# ------------------------------------ 11 phasing and commissioning sequence
|
||
H1("11. Phasing and commissioning sequence"),
|
||
P("The plant launches with the whole chain in one capital round. That replaces the September draft's "
|
||
"phased entry, in which galvanics, cutting and the automatic press followed from revenue. The "
|
||
"gates have not moved: no machinery order before the BOI certificate, no large spending before the "
|
||
"market validates the price, no coppice planning before the land-title check. What changed is "
|
||
"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.")),
|
||
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, "
|
||
"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 "
|
||
"between the Mueang Chi lease, other Payap land and the industrial estate; resolve the 35 % vs "
|
||
"45 % humidity floor", "BOI filed"],
|
||
["2. Commit", "Incorporate under the certificate; sign the lease; order every long-lead item: "
|
||
"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")],
|
||
["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 "
|
||
"installer; machinery installation and vendor commissioning; traceability and ERPNext live "
|
||
"before the machines; hire and train",
|
||
"Construction, water-treatment building, utilities, HVAC, clean zones, solar and battery, "
|
||
"security, crane, visitor corridor; machinery installation and vendor commissioning; "
|
||
"traceability and ERPNext live before the machines; hire and train"),
|
||
"Building permit, vendor build dates confirmed"],
|
||
["4. Launch (the whole chain in-house)", "Commission in sequence (table below); test pressings, QC "
|
||
"baselines, reject shakedown; first paying releases; per-lot PVC gate live; qualify Thai "
|
||
"compound", "Commissioning complete"],
|
||
["5. Expand (revenue-gated)", pick(
|
||
"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"),
|
||
"Revenue and, for CD replication, a separate decision"],
|
||
], widths_mm=[42, 96, 32], font_pt=8.5),
|
||
H2("11.1 Commissioning sequence"),
|
||
T(["Step", "What is commissioned", "Why in this order"], [
|
||
["1", "Cutting room (Sillitoe SDMS) and galvanics (Pheenix line with ZLD and DI water), with the "
|
||
"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)"),
|
||
"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"]]),
|
||
], 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, "
|
||
"not a plan."),
|
||
|
||
H2("11.2 Why the whole chain at launch"),
|
||
P("This is the decision with the most consequences in the plan, and the investor should see both sides:"),
|
||
T(["For", "Against, and the risks it takes on"], [
|
||
["**No bridge stampers.** A plant that buys every stamper set abroad waits on two international "
|
||
"freight legs per job and on one small overseas supplier; that is the bottleneck this plant "
|
||
"exists to remove.", "**Supplier advice.** Sibert, which sells into the galvanics line, advised "
|
||
"after Haarlem, against its own interest, to get presses, boilers, operators "
|
||
"and live feedback loops right first and to earn some return before every "
|
||
"manufacturing step is in place."],
|
||
["**Title services and repress economics.** Cutting and plating in-house earn the per-title fees "
|
||
"(the middle price is 37,836 THB a title), and the archived father and mother of every side let "
|
||
"a repress, or a worn mother, be regrown without a recut.", "**Galvanics skill.** It is the "
|
||
"hardest skill to hire, and the "
|
||
"process engineer probably comes "
|
||
"from abroad or is trained abroad. "
|
||
"The first paying release now waits "
|
||
"for it."],
|
||
["**The Thai market gap is metalwork, not presses.** The incumbent turns away small runs and adds "
|
||
"weeks above 3,000 units, most plausibly because every stamper set is an import (section 3.3).",
|
||
"**Permitting.** Galvanics effluent and hazardous-substance registration move into the first "
|
||
"factory licence, the most likely regulatory friction point in the project; zero discharge from "
|
||
"the start, and on Payap land the lessor's consent as well."],
|
||
["**The cutting room is a smaller decision than it was.** The Sillitoe SDMS lists at USD 125k with "
|
||
"automation in the box, and the Payap programmes in mastering and lathe cutting need a working "
|
||
"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), "
|
||
"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 "
|
||
"second Duplex waits for demand and revenue on a reserved floor.",
|
||
"**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."]),
|
||
], 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.")),
|
||
|
||
# --------------------------------------- 12 team, ownership, governance
|
||
H1("12. Team, ownership and governance"),
|
||
H2("12.1 The people"),
|
||
T(["Who", "Role"], [
|
||
["Simona Meesaiyati", "Project Lead: management and the audio side."],
|
||
["Alexander Grabowski", "Technical Consultant: the technical side (equipment selection and vendors, "
|
||
"utilities, the building model, the traceability and QC specification, the factory software)."],
|
||
["buildfor.life", "Supports the project in a consulting capacity."],
|
||
["Ploy Printing (Ploy Karnpim Limited Partnership, Chiang Mai)", "Packaging partner and intended "
|
||
"strategic co-investor: jackets, sleeves, inserts, J-cards and CD packaging on offset, digital, "
|
||
"risograph, UV and latex presses, with existing vinyl packaging production."],
|
||
["Payap University (Chiang Mai)", "Partnership under discussion (October 2026): joint student "
|
||
"programmes around the plant in mastering and lathe cutting, IT and business administration, "
|
||
"starting small (memorandum, internships, short certificate courses). Nothing is agreed yet; "
|
||
"scope, form and money are open. It is a hiring pipeline for the hardest roles, not a substitute "
|
||
"for hiring them: the teacher comes before the students."],
|
||
["To be hired, at launch", "**Galvanics process engineer** and **cutting engineer** (both on the "
|
||
"critical path, section 10; a cutting engineer earns about 50,000 THB a month base, team "
|
||
"figure); plant manager; galvanics operators; QC lead; maintenance; press and finishing operators "
|
||
"for two shifts; sales and customer service for labels, artists and the traceability portal."],
|
||
["External", "BOI-registered consultant; Thai counsel for the lease, company and shareholder "
|
||
"agreement; optional vinyl manufacturing consultancy for layout, installation and training "
|
||
"(GBP 10k to 20k packages); vendor commissioning and training (Newbilt, Pheenix, Sibert, "
|
||
"Sillitoe); property insurer."],
|
||
], widths_mm=[48, 122]),
|
||
P("Headcount: the plant runs the whole chain on two shifts, so it needs most of the mature crew from "
|
||
"the start: a direct production payroll of 13 to 19 (8 to 12 press and finishing operators, 2 to 3 "
|
||
"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.") +
|
||
" 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 "
|
||
"structure is:"),
|
||
B([
|
||
"**One Thai limited company** holds the plant, the lease, the equipment and the BOI promotion. BOI "
|
||
"promotion permits 100 % foreign ownership of the promoted manufacturing activity, so the "
|
||
"shareholding can be set on commercial terms rather than to satisfy the Foreign Business Act.",
|
||
"**Shareholders:** the lead investor; Ploy Printing as strategic co-investor; and the founders. "
|
||
"Ploy Printing's participation, whether in cash, in kind (print capacity, premises, working "
|
||
"capital in packaging) or both, is to be discussed; its strategic value is a packaging partner "
|
||
"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") +
|
||
" (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 "
|
||
"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 "
|
||
"against other printers, with quality and lead-time terms written down, and Ploy Printing abstains "
|
||
"from board decisions on its own contract. This protects both the lead investor and Ploy Printing, "
|
||
"and it is what a BOI or bank reviewer will look for.",
|
||
"**Any label, content or retail activity (Poy Records as a brand) sits in a separate entity**, so "
|
||
"the manufacturing company's BOI application stays clean.",
|
||
]),
|
||
|
||
# ------------------------------------------------------ 13 risks
|
||
H1("13. Risks and open questions"),
|
||
P("Every plan has risks; the point of listing them is to say which are being retired, by what, and "
|
||
"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.")),
|
||
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: "
|
||
"the Thai market data is one buyer, one plant and one afternoon, and the underlying invoices and "
|
||
"tour notes should be archived with this plan before it goes in front of a bank; and the industry "
|
||
"interest in traceability at Making Vinyl Europe 2026 is supplier-side evidence, not buyer price "
|
||
"validation."),
|
||
|
||
# ------------------------------------------------- 14 next steps
|
||
H1("14. Next steps and the ask"),
|
||
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")],
|
||
["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",
|
||
"Sequencing, scope"],
|
||
["3", "Thai counsel: lease heads of terms (term, renewal, building ownership, assignment) and zoning "
|
||
"of the chosen plot for pressing, a steam boiler and electroplating; company and shareholder "
|
||
"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 "
|
||
"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; "
|
||
"OMS dedicated offer as the reference; ZLD and DI water vendor", "Alexander", "Free",
|
||
"Galvanics priced on a reference only"],
|
||
["7", "Sillitoe quote and build time (SDMS, spare cutterhead, support terms, DMM question)",
|
||
"Alexander", "Free", "Cutting room, schedule"],
|
||
["8", "Sibert itemised quotation and order terms against the USD 250k budget: lead time, "
|
||
"installation time, spares, shipping, travel", "Alexander", "Free", "Stamper prep, schedule"],
|
||
["9", "Building request for quotation to two or three Thai pre-engineered building contractors, "
|
||
"with the soil result", "Alexander", "Free", "Building estimate"],
|
||
["10", pick(
|
||
"Utility requests: Chinese boiler makers for the plan's boiler modules (ZOZEN, Sitong, Fangkuai, "
|
||
"Taiguo; 1.25 MPa, ASME S stamp, electric and fired variants) with a Thai installer; compressors "
|
||
"from Kaishan and Denair's Thai offices; Thai suppliers for the rest; chillers and HVAC, Chinese "
|
||
"makers included; the 35 % vs 45 % humidity floor; a Thai hydraulic builder for the central "
|
||
"plant",
|
||
"Utility requests: Thai suppliers; Chinese boiler makers (ZOZEN, Sitong, Fangkuai, Taiguo; "
|
||
"1.25 MPa, ASME S stamp, electric and fired variants) and compressors from Kaishan and Denair's "
|
||
"Thai offices for comparison; chillers and HVAC, Chinese makers included; the 35 % vs 45 % "
|
||
"humidity floor; a Thai hydraulic builder for the central plant"),
|
||
"Alexander", "Free", "Utilities band, fuel choice"],
|
||
["11", pick("Metrology distributor quotes (XRF, inline vision, audio station; confocal and profiler "
|
||
"for later)", "Metrology distributor quotes (XRF, confocal, profiler, inline vision, "
|
||
"audio station)"), "Alexander", "Free", "Metrology band"],
|
||
["12", pick("Solar PPA offers (the plan's lever) next to a purchase quote; the installer's battery "
|
||
"and inverter design checked", "Solar and battery purchase quotes, with a PPA offer for "
|
||
"comparison; battery and inverter engineering "
|
||
"checks"), "Alexander", "Free",
|
||
pick("Solar lever, PPA price", "Solar block")],
|
||
["13", pick("Cassette and CD-R equipment quotes from two vendors each, for the growth step; tape and "
|
||
"shell supply", "Cassette and CD-R equipment quotes from two vendors each; tape and "
|
||
"shell supply"), "Alexander", "Free", "New-scope estimates"],
|
||
["14", "Search for the galvanics process engineer and the cutting engineer; next meeting with Payap "
|
||
"on the programmes", "Simona, Alexander", "None yet", "Skills risk"],
|
||
["15", "60 rai title check for the coppice plan", "Simona", "Small", "Biomass path"],
|
||
["16", "Optional: vinyl manufacturing consultancy for a layout and installation review",
|
||
"Alexander", "GBP 10k to 20k", "Layout risk"],
|
||
["17", "Archive the Thai invoices and tour notes with this plan", "Simona", "None", "Evidence base"],
|
||
], widths_mm=[8, 84, 26, 24, 28], font_pt=8),
|
||
H2("14.2 What the investor is asked for"),
|
||
KV([
|
||
["Now", "Approval of Phase 0 spending of ~USD 40k to 80k (~1.3M to 2.6M THB, part of the plan "
|
||
"price), so the quotes, the soil test, the BOI consultant and counsel can start."],
|
||
["On the gates clearing", pick(
|
||
"A commitment in principle to **Plan A at ~180M THB** (~177M 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 ~44M "
|
||
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~24M THB more at "
|
||
"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 "
|
||
"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.")],
|
||
["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 "
|
||
"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 "
|
||
"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.")],
|
||
], 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 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 "
|
||
"shareholder terms. Each of those is a phase 0 output."),
|
||
|
||
# --------------------------------------------------- 15 appendix
|
||
H1("15. Appendix: sources and planning documents"),
|
||
P("This plan is compiled from the project's planning repository (cnx_vinyl, on the project's Gitea "
|
||
"server git.b4l.co.th), which is the source of truth and holds the detail behind every section. "
|
||
"Paths are relative to docs/:"),
|
||
T(["Document", "Content"], [
|
||
["roadmap.md", "Next steps in dependency order, from the gates through the launch plant's "
|
||
"commissioning sequence to the revenue-gated growth options"],
|
||
["project-timeline.md", "Calendar to first paying release, critical path and float (August 2026 "
|
||
"calendar, to be re-drawn for the launch plant)"],
|
||
["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"],
|
||
["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"],
|
||
["finance/utilities-investment.csv", "Thai supplier candidates and budgetary ranges for steam, "
|
||
"cooling, air, water, HVAC, solar and battery"],
|
||
["finance/phase1-construction-rfq.md", "Contractor price request with quantities from the "
|
||
"parametric model"],
|
||
["fleet-calculator.html", "Plant and business plan calculator: target output and specials share to "
|
||
"the Duplex/Classic mix, people, utilities, investment and the operating "
|
||
"picture, with the Plan A and Plan B presets"],
|
||
["equipment/pressing-line.md and equipment/newbilt/", "Press fleet strategy, hydraulic ring mains; "
|
||
"Newbilt offer, site requirements, service "
|
||
"rates, 2026 product flyers"],
|
||
["equipment/galvanics.md (with pheenix-alpha/, sibert/, oms/)", "Pheenix electroforming line, "
|
||
"Sibert stamper prep, OMS reference "
|
||
"prices (the Pheenix price basis), "
|
||
"cycle times, the metal archive"],
|
||
["suppliers/vendor-landscape.md, equipment-suppliers.md", "Per-vendor narrative (lathes, cutting "
|
||
"services) and the full needs list with "
|
||
"contacts"],
|
||
["suppliers/making-vinyl-europe-2026-exhibitors.md", "Making Vinyl Europe 2026 briefing and what "
|
||
"came after the show"],
|
||
["suppliers/china-utilities.md", "Chinese boilers, compressed air and hydraulics; Thai rules for "
|
||
"imported boilers; what the Chinese route saves"],
|
||
["digital-factory.md", "Data platform: ERPNext as the only system of record, machine data, the "
|
||
"factory application, the NixOS fleet"],
|
||
["artist-platform.md (demos artist-order.html, make-a-record.html)", "Upload and itemised price "
|
||
"calculator, fan-funded "
|
||
"campaigns"],
|
||
["process-flow.md, production-timeline.md", "The chain and its checks; order turnaround stage by "
|
||
"stage, lead times and the repress path"],
|
||
["traceability.md, quality-automation.md", "The traceability specification; metrology, layered "
|
||
"record QC, the materials lab"],
|
||
["sustainability.md, biomass.md, steam-cooling.html", "Solar, heat recovery, water, zero discharge, "
|
||
"the grid tariff; the biomass fuel strategy; "
|
||
"the steam and cooling plant"],
|
||
["facility-security.md, worker-safety.md", "Climate control, security, fire and life safety, the "
|
||
"archive room; training, clean rooms, PPE"],
|
||
["crane-workshop-tours.md", "Overhead crane, maintenance workshop, visitor corridor"],
|
||
["site-candidates.md and land-listings/", "Mueang Chi, the industrial estate and Payap land; the "
|
||
"checks before choosing; zoning records"],
|
||
["payap-partnership.md", "Joint student programmes with Payap University"],
|
||
["boi.md", "BOI promotion strategy, requirements, process, open items"],
|
||
["cnx_vinyl_parametric.FCStd, cnx_vinyl_parametric_payap.FCStd and renders/", "Parametric building "
|
||
"and site models on "
|
||
"the candidate "
|
||
"plots, and their "
|
||
"renders"],
|
||
], widths_mm=[62, 108], font_pt=8.5),
|
||
P("Vendor PDFs and spreadsheets are primary sources and reflect the state of negotiations at their file "
|
||
"dates. Treat prices and lead times as snapshots, not commitments."),
|
||
]
|