Files
cnx_vinyl/docs/business-plan/build/content_c.py
T
grabowski 984ced2485
Deploy test site / deploy (push) Successful in 49s
Biomass steam in both plans, PV on the factory roof only
User, 17 Oct 2026: "only put solar on the factory, prepare the other
buildings for solar, option a and b should operate on biomass".

- Steam: two 500 kg/h biomass modules (Getabec class, 6M to 10M THB) plus
  a fuel store and handling block (1M to 2M, estimate) in both plans; the
  electric bank becomes the alternative. ~0.67M THB of fuel a year against
  ~4.9M for electric steam; grid demand ~264 kW instead of ~980 kW.
- Solar: ~520 kWp on the factory roof (the biomass-case optimum is ~500 to
  550 kWp, hourly sketch in sustainability.md "PV size with biomass
  steam"); office roof and parking canopies built PV-ready (~120 kWp
  later). ~87 % used on site, ~61 % of the plant's electricity.
- Calculator: biomass default, bFuel row, pvKWp 520, pvSelf 87, iso fills
  the factory roof first and shows the other roofs as PV-ready.
- Numbers: launch plant ~168M / 232M / 296M with contingency; Plan A
  ~182M (~2M above 180M: the Chinese-route lever priced only electric
  boilers; a Chinese biomass quote is the way back), Plan B ~217M (label
  ~215M), ~35M more. Calculator EBITDA A 2.17M, B 2.23M USD.
- CSV, total-investment, revenue-model, sustainability, scale, biomass,
  site-candidates, boi, steam-cooling, construction RFQ (canopies
  PV-ready), README, roadmap; business plan draft 0.3 rebuilt (A and B
  63 pages) with new renders.
2026-10-17 20:24:55 +07:00

1389 lines
121 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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 (~215M THB, the same launch plant and three presses with
everything in, none of the levers taken; re-defined by the user on 17 October 2026). In both the second
Duplex system is a growth step from revenue. Both are priced without contingency and with the ramp-up
reserve: docs/finance/total-investment.md "Two plans: A at ~180M THB and B at ~215M 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"],
]
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; all of it at launch (Plan A buys the laser "
"confocal and the wide-area profiler from revenue)"]),
["PVC lab, day-one tier", "55k to 150k", "1.8M to 5.0M", "Estimate"],
["Steam: two 500 kg/h biomass boiler modules (B-1, B-2; Getabec class), installed with fuel feed, "
"grate and dust control", "182k to 303k", "6.0M to 10.0M", "Researched: utilities rows, the biomass "
"package for ~1 t/h (engineering estimate); both plans run on biomass (decided 17 October 2026); the "
"electric bank (Thai 4.5M to 7.0M, Chinese route 2.8M to 5.5M) is the alternative, not the plan"],
["Biomass fuel store and handling: covered fuel store, chip bay, ash bins, a compact loader",
"30k to 61k", "1.0M to 2.0M", "Estimate, utilities rows: 42 m² store drawn (~6 to 7 weeks of fresh "
"chips), ~80 m² for a 3-month monsoon stock"],
pick(["Cooling and compressed air: 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",
"153k to 248k", "5.05M to 8.2M", "Researched: utilities rows; the compressor through the Chinese "
"route (lever 6), from a Chinese brand's Thai office"],
["Cooling and compressed air: 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",
"159k to 258k", "5.25M to 8.5M", "Researched: utilities rows; the compressor from a Thai supplier, "
"with local service"]),
["Whole-factory HVAC, clean-room adder for galvanics and the cutting room, softener, loop treatment, "
"racking", "297k to 627k", "9.8M to 20.7M", "Researched: utilities rows"],
]
if not a:
rows.append(["Solar PV (EPC) on the factory roof, ~520 kWp, and the 271 kWh Gobel battery, owned (the "
"office roof and the canopies PV-ready, panels later)",
"376k to 516k", "12.4M to 17.0M",
"Researched: utilities rows; PV at 20 to 26 THB/W installed, inverters included (10.4M to "
"13.5M), battery 2.0M to 3.5M; ~87 % of the yield used on site under zero export (estimate); "
"owned, so the plant keeps the whole bill saving (no BOI promotion for solar installations "
"since 1 July 2025, section 8.4)"])
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; includes making the office "
"roof and the canopies PV-ready (structure, conduit; small, estimate)"],
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 += [
["Freight, installation, commissioning, training (Pheenix, Sibert, Sillitoe, Newbilt beyond its "
"quoted 5 days)", "150k to 300k", "5.0M to 9.9M", "Estimate"],
["Working capital, PVC stock, spares, lease deposit, first-year rent", "137k to 293k",
"4.5M to 9.7M", "Estimate; land is leased, so no land purchase"],
]
if a:
rows.append(["Not bought at launch (levers, section 8.2): solar PV on the factory roof (~520 kWp) "
"and the 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.68M to 6.44M**", "**~121.6M to 212.6M**",
"**Midpoint ~167.1M THB (~5.06M USD)**"],
["**Subtotal, plan investment**", "**~4.42M to 7.79M**", "**~146.0M to 257.1M**",
"**Midpoint ~201.6M THB (~6.11M 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.99M to 7.05M**", "**~132M to 233M**",
"**Midpoint ~182M THB (~5.52M USD): ~180M THB, ~2M above 180M**"],
["**Plan B price**", "**~4.73M to 8.40M**", "**~156M to 277M**",
"**Midpoint ~217M THB (~6.56M USD): ~215M THB**"]),
["Contingency: not in the plan price", "", "", pick(
"For information: at 15 %, ~25M THB at the midpoint",
"For information: at 15 %, ~30M 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", "", "~201.6M THB (~6.11M USD)", ""],
["1. Solar on the factory roof (~520 kWp) and the battery through a solar PPA (the installer owns "
"and finances the array; the plant buys the power)", "~14.7M", "~186.9M", "Owned solar and its whole "
"bill saving: adds the PPA power price to the energy bill, ~0.06M USD (~1.9M THB) a year in the "
"calculator for ~633 MWh used on site 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", "~178.1M", "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", "~174.5M", "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", "~170.5M", "No cassette or CD-R at launch; a growth "
"step"],
["5. Crane rented for the installations (mobile crane)", "~3.2M", "~167.3M", "No overhead crane at "
"first; frame, runway and machine door stay crane-ready, so it can be bought later if needed"],
["6. Compressor through the Chinese route (a Chinese brand's Thai office)", "~0.25M",
"**~167.1M (~5.06M USD)**", "A Chinese brand's screw compressor (Kaishan or Denair, both with Thai "
"offices) instead of a Thai supplier's. The route priced only electric boilers; Chinese biomass "
"boilers (ZOZEN, Sitong, Taiguo, Yongxing) are not priced yet, and a quote ~2M THB or more below the "
"Thai biomass package would put Plan A back under 180M"],
["Ramp-up reserve", "", "+10M to 20M", ""],
["**Plan A**", "", "**~182M THB (~5.52M USD)**", "**~2M above 180M at the midpoint** (177M to 187M "
"with the reserve's 10M to 20M); ~132M to 233M 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 _keeps_table():
"""Plan B: what it keeps that Plan A's six levers move off the launch budget, midpoints, no contingency."""
return T(["In at launch in Plan B", "What it gives the plant", "THB, midpoint (Plan A's lever)"], [
["Solar PV on the factory roof (~520 kWp; the office roof and the canopies PV-ready) and the 271 kWh "
"battery, owned (EPC and Gobel battery)",
"No PPA power bill: the whole saving on the ~633 MWh used on site (~2.3M to 2.5M THB a year) stays "
"with the plant instead of ~1.9M THB (~0.06M USD) a year going to a PPA installer; payback ~4.1 to "
"5.8 years (estimates)", "~14.7M"],
["Metrology, full stack: XRF, laser confocal, wide-area profiler, inline vision, audio station",
"Every stamper measured fully from the first release, the core of the traceability pitch", "~8.8M"],
["Visitor corridor and accessible entrance", "Public tours and the Payap programmes possible from the "
"start", "~3.6M"],
["Cassette and CD-R duplication", "Both formats sold from launch", "~4.0M"],
["5 t overhead crane, runway, frame premium, machine door, bought", "Its own crane over the press "
"hall; no mobile crane to rent for "
"the installations", "~3.2M"],
["Screw compressor from a Thai supplier", "Local service", "~0.25M"],
["**Together**", "", "**~34.5M (201.6M minus Plan A's 167.1M)**"],
["Launch plant, every block, no contingency: Plan B's subtotal", "", "~201.6M (~6.11M USD)"],
["Ramp-up reserve", "", "+10M to 20M"],
["**Plan B**", "", "**~217M THB (~6.56M USD)**; ~156M to 277M from the low to the high end"],
], widths_mm=[62, 70, 38], font_pt=8.5,
caption="Midpoint values without contingency, estimates; docs/finance/total-investment.md 'Two plans'. "
"Each figure is what the matching Plan A lever saves; rounded, the six add to ~34.6M, and the "
"two subtotals differ by ~34.5M. Steam is biomass in both plans, so the boilers are not a "
"difference between them.")
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", "BOI certificate issued; lease signed; zoning and soil confirmed; pricing validated",
"Deposits on every long-lead order: Pheenix galvanics line, Sillitoe lathe, Sibert line, Newbilt "
"Duplex system and Classic; building design and permit; the two biomass boiler modules and the first "
"two chiller modules",
pick("20 to 30 % (~33M to 50M)", "20 to 30 % (~40M to 60M)")],
["2", "Building permit; vendor build dates confirmed in writing",
"Construction, water-treatment building, utility yard, utilities, balance payments as machines are "
"built",
pick("35 to 45 % (~58M to 75M)", "35 to 45 % (~71M to 91M)")],
["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, solar PV on the factory roof and the "
"battery, crane, visitor corridor, the full metrology stack, factory software and ERPNext, cassette and CD-R lines, the "
"launch team"),
pick("15 to 20 % (~25M to 33M)", "15 to 20 % (~30M to 40M)")],
["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 20M), plus the reserve", "8 to 12 % (~16M to 24M), plus the reserve")],
], widths_mm=[14, 46, 78, 32], font_pt=8.5,
caption=pick("Shares of Plan A's investment before the reserve (~167.1M THB at the midpoint); the THB "
"figures are the shares applied to it (arithmetic, estimates).",
"Shares of Plan B's investment before the reserve (~201.6M 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.64M", "0.40M", "0.25M"],
["**Operating profit**", "**-0.41M**", "**1.33M**", "**3.54M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~31 yr", "~3.2 yr (2.3 to 4.1 on 3.99M to "
"7.05M)", "~1.1 yr"],
]
else:
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.78M", "0.49M", "0.29M"],
["**Operating profit**", "**-0.55M**", "**1.24M**", "**3.50M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback on the plan price (EBITDA, mature year)", "~37 yr", "~3.8 yr (2.7 to 4.9 on 4.73M to "
"8.40M)", "~1.2 yr"],
]
return T(["USD per year, mature", "Adverse", "Central", "Favourable"], rows, widths_mm=[50, 36, 48, 36],
caption="Estimates, docs/finance/revenue-model.md 'Operating pictures of Plan A and Plan B (October "
"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"],
]
rows += [
["High", "No contingency in the plan price", pick(
"Quotes landing high are not covered: at 15 % a contingency would be ~25M THB at the midpoint, "
"and the high end of every block comes to ~233M with the reserve",
"Quotes landing high are not covered: at 15 % a contingency would be ~30M THB at the midpoint, "
"and the high end of every block comes to ~277M 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 ~1.0M 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 loses money: it needs ~1.1M records to cover "
"depreciation and the three presses make 0.58M at that rate; at 60 % specials the Duplex rate and "
"the extra cost of specials decide volume and margin"),
pick("Central breaks even at ~0.2M records; commission in sequence; the second Duplex waits for "
"demand; treat the adverse column as the honest one",
"Central breaks even at ~0.24M records; commission in sequence; the second Duplex waits for "
"demand; treat the adverse column as the honest one")],
]
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", "Prices not on file: the Classic and the Pheenix line",
"The Classic band is a placeholder borrowed from another vendor's automatic press; the Pheenix "
"line is priced at OMS's reference plus 20 %, without a Pheenix figure",
"Newbilt re-quote and Pheenix quote in phase 0; OMS's dedicated offer as the galvanics benchmark"],
["High", "Vendor build times unknown", "The press build carries ~40 % of the schedule; 15 to 18 "
"months would push launch to mid-2029; Pheenix, Sillitoe and Sibert lead times also unquoted",
"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 price", "The PPA gives up owning the bill saving and adds a power "
"price, ~0.06M USD (~1.9M THB) a year in the calculator at 3.0 THB/kWh, an estimate to "
"quote. No BOI benefit is lost: the BOI dropped solar installations from its promotion on "
"1 July 2025 (Announcement 3/2568); a PPA developer may itself be promoted (activity 7.1.2, "
"an 8-year corporate income tax exemption), which may or may not show in its price",
"PPA offers next to the purchase quote in phase 0, the developer's BOI promotion raised in "
"the price negotiation; buying the array, as Plan B does, stays the alternative"])
else:
rows.append(["Medium", "The extra ~35M THB earns little in the model", "Plan B's operating picture is "
"Plan A's (same presses, records, revenue and EBITDA; the calculator puts it ~0.06M USD a "
"year ahead, the PPA bill its owned array avoids): the ~35M THB more at launch adds "
"depreciation, so central operating profit is 1.24M against 1.33M USD, payback ~3.8 against "
"~3.2 years and the adverse corner deeper; its case rests on that bill and on what the "
"table leaves out (cassette and CD-R sales, tours and the Payap programmes, full stamper "
"metrology for the traceability pitch)", "Phase 0 prices each item against its lever (PPA "
"offer next to the purchase quote, cassette and CD-R quotes); most items can also come "
"later from revenue, as in Plan A, while the corridor is cheaper to have from the start"])
rows += [
["Medium", "Lease terms and building ownership", "A weak lease makes the building hard to finance "
"and exposes it at expiry", "Registered 30 to 50 year lease with renewal, explicit building "
"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", "Biomass steam: fuel, permits and the burning season", "Fuel price and supply set the "
"steam cost (planning price 1.35 to 2 THB/kg delivered; ~460 t of fresh chips a year at ~850k "
"records, ~0.67M THB, estimate); boiler registration and the air-emission limits for a solid-fuel "
"boiler come into the permit work (to confirm); the stack is a visible point source in Chiang Mai's "
"burning season", "Fuel contracts and a 3-month monsoon stock (~80 m² of covered store); the team's "
"60 rai of own fuelwood later, after the land-title check; the dust collector and the 14 m stack "
"drawn from the start, dust control part of the plant's story; a certified boiler attendant from "
"the maintenance team; electric modules stay the fallback" + pick(
"; a Chinese biomass boiler quote ~2M THB or more below the Thai package would bring Plan A back "
"under 180M", "")],
["Medium", "Boiler registration and import rules (DIW)", "Every steam boiler is registered with the "
"Department of Industrial Works and run by a certified attendant; a boiler bought abroad must also "
"meet ASME, JIS, EN or equivalent and be verified by a DIW-registered certification body" + pick(
", which applies if Plan A takes a Chinese biomass boiler", ""),
"A Thai-fabricated biomass package (Getabec class) as the base; for an import, ASME Section I design "
"with the S stamp and the full dossier, the certification body engaged before the order"],
["Medium", "Single press vendor (Newbilt)", "All three presses, the extruders and the hydraulic "
"aggregates come from one small German manufacturer; build time and order book unknown",
"Spares and service terms in the re-quote; the Pheenix automatic press stays the comparison if the "
"Classic quote disappoints"],
["Medium", "Hydraulic ring-main contamination", "One shared oil system: a contamination event "
"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; under PEA's zero export ~13 % of the ~520 kWp array's "
"yield is curtailed (estimate)", "Engineering checks and certificate requests in phase 0; PEA "
"interconnection approval (3 to 6 months) filed alongside procurement; 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. At the midpoint that is ~182M THB, **~2M above 180M** (section 8.2). ",
"This chapter prices **Plan B (~215M THB)**: the launch plant decided in October 2026, one Newbilt "
"Duplex system and one Classic with the whole chain from the cutting room to the shrink wrapper, "
"in one capital round and commissioned in sequence, with everything in: none of Plan A's six cost "
"levers taken. ") +
"In both plans the steam comes from biomass and PV sits on the factory roof only (~520 kWp; the "
"office roof and the canopies are built PV-ready), as decided on 17 October 2026. "
"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. "
"The second Duplex system and further Classics are growth options with room reserved (hall "
"floor, utility module positions, ring-main tees), not part of this plan.")),
P("**Not in the plan price:** a contingency (the blocks are budgetary, so the plan carries no buffer "
"for quotes landing high; at 15 % it would be " + pick("~25M", "~30M") + " 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 buys less metrology at launch; the estimate is not re-sized for it.",
". Plan B is the launch plant that estimate was made for.")),
H2("8.2 Two versions of this plan"),
P("The lead investor asked in October 2026 whether the plant can be built for **180M THB (~5.45M USD), "
"possibly up to 20 % more**. The answer is two versions of this plan, built from the same documents, "
"both priced without contingency and with the ramp-up reserve: **Plan A** keeps every machine of "
"the launch plant and brings it to ~180M THB with six cost levers, ~182M at the midpoint, which is "
"**~2M above 180M** (the low end of the reserve, 177M, fits); **Plan B** builds the same launch plant "
"with everything in, none of the levers taken, at ~215M THB: ~217M at the midpoint, ~0.6M above "
"180M plus 20 % (216M) and inside 225M. Both burn biomass for steam and carry PV on the factory roof "
"only. "
"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", "~182M THB (~5.52M USD): ~180M, ~2M above "
"180M at the midpoint",
"~217M THB (~6.56M USD): ~215M"],
["Low to high end of every block", "~132M to 233M THB", "~156M to 277M THB"],
["Presses", "3: Duplex system 1 (two HRP 12) and one Classic", "The same 3"],
["Steam and solar", "Biomass steam (two 500 kg/h modules); ~520 kWp on the factory roof through a "
"solar PPA", "Biomass steam, the same; the ~520 kWp array and the battery owned"],
["Records a year at 60 % specials", "~0.58 to 0.90M, central 0.74M (Duplex-limited)", "The same"],
["Revenue, central", "3.65M USD (~120M THB)", "The same (cassette and CD-R not modelled)"],
["EBITDA, central", "1.73M USD", "1.73M USD (calculator: 2.23M against Plan A's 2.17M, no PPA "
"power bill)"],
["Operating profit, adverse case", "-0.41M USD: loses money", "-0.55M USD: loses more (more "
"depreciation on the same EBITDA)"],
["Payback on the plan price, central (EBITDA, mature year)", "~3.2 yr (2.3 to 4.1)",
"~3.8 yr (2.7 to 4.9; calculator: 2.7 yr against Plan A's 2.3)"],
["What it gives up or takes on", "Six levers: solar through a PPA (a power bill of ~0.06M USD a "
"year), confocal and profiler from revenue, no tours at first, cassette and CD-R later, a "
"rented crane, a Chinese compressor; the second Duplex waits for revenue", "No levers: "
"buys at launch what Plan A leases or defers, ~35M THB (~19 %) more (owned solar and battery, "
"~520 kWp on the factory roof with no PPA bill, the full metrology stack, the visitor corridor, "
"cassette and CD-R, a bought crane, a Thai compressor); the second Duplex waits for revenue"],
], widths_mm=[46, 62, 62], font_pt=8.5,
caption="Estimates: docs/finance/total-investment.md 'Two plans' and docs/finance/revenue-model.md "
"'Operating pictures of Plan A and Plan B'. Section 9 has this plan's operating picture."),
*(
[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: it buys at launch what they lease or defer, ~34.5M THB more "
"at the midpoint, so ~201.6M THB before the reserve and ~217M (~215M THB) with it.")]
if a else
[P("**Plan B: the launch plant with everything in, no levers.** What Plan B keeps that Plan A's six "
"cost levers lease, defer or buy through the Chinese route, midpoint values:"),
_keeps_table(),
P("The plant itself is Plan A's: the same three presses, the same output and the same operating "
"picture (section 9). The second Duplex system is a growth step from revenue in both plans, on a "
"reserved floor bay with its utility module positions and ring-main tees.")]
),
CALL("What decides between Plan A and Plan B", [
"**No longer demand.** Both plans are the same three presses making the same ~0.58 to 0.90 million "
"records a year (central 0.74 million); market validation (section 14.1, item 1) gates both alike.",
"**~35M THB more at launch, for what Plan A leases or buys from revenue.** Plan B owns its array "
"and keeps the whole bill saving (no PPA bill), measures every stamper fully from the first release "
"(the traceability pitch), opens tours and the Payap programmes from day one, sells cassette and "
"CD-R from the start, owns its crane and buys its compressor with local service. Steam is biomass "
"in both.",
"**On the modelled numbers the extra earns little.** The same EBITDA in the revenue model (the "
"calculator puts Plan B ~0.06M USD a year ahead, the PPA bill its owned array avoids), more "
"depreciation, a longer payback (~3.8 against ~3.2 years) and a deeper adverse corner: Plan A has the better modelled "
"return, Plan B the more complete plant. Most of Plan B's items can be added to Plan A later from "
"revenue; the corridor is cheaper to have from the start, and every year the array is leased "
"costs the PPA bill.",
"**The quotes.** The Newbilt re-quote for the Classic and the EX 35, the Pheenix quote against the "
"OMS reference, the building quote with the soil test, and, for Plan A, the solar PPA offer and a "
"Chinese biomass boiler quote: ~2M THB or more below the Thai package would put Plan A back under "
"180M.",
"**Neither price carries a contingency.** Quotes landing high are funded outside the plan price or "
"by scope steps (section 8.4).",
"**The second Duplex stays a growth step.** Its floor, utility module positions and ring-main "
"tees are reserved, so adding it from revenue is a step, not a rebuild.",
]),
P("Figure 11 is the budget check of the plant and business plan calculator with the " + label() +
" preset, contingency kept out of the total as in this plan."),
IMG(pick("renders/calculator/plan-a-budget.png", "renders/calculator/plan-b-budget.png"), 160,
"Figure 11. Budget card of the plant and business plan calculator, " + pick(
"Plan A preset: 167.1M THB at the midpoint without contingency, 177.1M to 187.1M with the "
"ramp-up reserve of 10M to 20M; against 180M it is 2.1M over at the midpoint, and it fits 225M "
"with 42.9M to spare",
"Plan B preset: 201.6M THB at the midpoint without contingency, 211.6M to 221.6M with the "
"ramp-up reserve of 10M to 20M, 8.4M to spare under the 225M mark (180M plus 25 %)") +
". Bars: the investment at the low end, the midpoint and the high end of every block, the reserve "
"hatched, against 180M and 225M THB. Calculator figures (docs/fleet-calculator.html), estimates."),
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(),
H2("8.4 What moves the number"),
B([
"**No contingency in the price.** " + pick(
"Plan A's ~182M THB is the midpoint of every block with the ramp-up reserve and no buffer, ~2M "
"above 180M: at 15 % a contingency would add ~25M THB, and the high end of every block comes to "
"~233M. ",
"Plan B's ~217M THB is the midpoint of every block with the ramp-up reserve and no buffer: at "
"15 % a contingency would add ~30M THB, and the high end of every block comes to ~277M. ") +
"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; a Chinese biomass boiler quote decides whether Plan A "
"comes back under 180M.",
"the EX 35 is priced only as the expired 2024 quote's second-extruder option; and the building "
"depends on the soil. The Newbilt re-quote, the Pheenix quote, the building request with a soil "
"test, the metrology distributor quotes and the solar and battery purchase quotes settle most of "
"the band."),
"**BOI promotion.** The machinery duty and import VAT exemption applies across most of the "
"equipment blocks (~0.11M USD of duty and ~0.17M USD of import VAT cash flow on the launch plant, "
"estimates), and the automation and metrology spend converts into corporate income tax exemption "
"headroom (the Smart and Sustainable Industry upgrade measure). The application precedes every "
"purchase order. Solar is not part of it in either plan: since 1 July 2025 the BOI no longer "
"promotes solar installations, rooftop or farm (Announcement 3/2568, amending the alternative-energy "
"measure of Announcement 15/2565). What that measure keeps for energy is battery storage with its "
"inverters, the eligible investment for the corporate income tax exemption capped at 12M THB per MW "
"(our reading, to confirm with the BOI consultant). " + pick(
"In Plan A the battery comes with the PPA and belongs to the installer, so the plant claims "
"nothing for it; the installer may itself be promoted as a power producer (activity 7.1.2, an "
"8-year corporate income tax exemption), and whether that shows in the PPA price is for the "
"negotiation.",
"Plan B owns the 271 kWh battery (2.0M to 3.5M THB installed), so it may qualify; the case for "
"owning the array itself is the power bill (below)."),
"**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.",
"**Biomass steam in both plans.** Steam comes from two 500 kg/h biomass modules (Getabec class, "
"6M to 10M THB installed with fuel feed, grate and dust control) and a fuel store with handling "
"(1.0M to 2.0M THB); the electric bank (Thai 4.5M to 7.0M, Chinese route 2.8M to 5.5M) is the "
"alternative, not the plan. At ~850k records the boilers burn ~460 t of fresh chips (or ~300 t of "
"air-dry wood) a year, ~0.67M THB at ~0.7 THB/kWh of heat, where electric steam would cost ~4.9M "
"THB in power and demand charge: **biomass saves ~4.2M THB (~0.13M USD) a year** (estimates; "
"biomass.md planning price 1.35 to 2 THB/kg delivered). Without electric boilers the grid demand "
"falls from ~980 kW to ~264 kW, so the transformer and the PEA deposit can be smaller (not "
"re-priced, an upside). It brings fuel contracts and a monsoon stock, ash handling, the 14 m flue "
"stack and dust collector, more maintenance and a certified boiler attendant (section 13). The "
"revenue model does not split energy by fuel; the calculator does (section 9.4).",
pick("**Chinese suppliers: the compressor now, a biomass boiler quote next.** Plan A buys the "
"compressor through a Chinese brand's Thai office (~0.25M THB at the midpoint). The Chinese "
"route priced only electric boiler modules; Chinese makers build biomass boilers too (ZOZEN "
"DZL, Sitong DZL/SZL, Taiguo, Yongxing), none priced yet. **A quote ~2M THB or more below the "
"Thai biomass package would put Plan A back under 180M**, so it is the first utilities request "
"(section 14.1, item 10). 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: small so far.** Plan B prices Thai-supplied utilities. The Chinese route "
"for the compressor would take ~0.25M THB off at the midpoint (Plan A takes it); Chinese "
"biomass boilers are not priced yet; chillers and HVAC, the larger blocks, are not checked "
"yet."),
pick("**Solar PPA.** The largest single lever (~14.7M THB at the midpoint) moves the array, ~520 kWp "
"on the factory roof, and the battery off the capital budget and adds a power price to the "
"energy line instead: ~633 MWh a year used on site at 3.0 THB/kWh, ~1.9M THB or ~0.06M USD a "
"year in the calculator, an estimate to quote (~21 % off the tariff; MEAei names 10 to 15 % as "
"usual, CapSolar 10 to 30 %). The plant's bill with biomass steam (~0.36M THB a month before "
"solar: ~1,036 MWh a year and ~264 kW of demand at the PEA tariff, our arithmetic, estimate) is "
"well above the 100,000 THB a month CapSolar asks of a PPA site.",
"**Solar bought, not leased.** Plan B owns the array, ~520 kWp on the factory roof, and the "
"271 kWh battery: 12.4M to 17.0M THB (PV at 20 to 26 THB/W installed, inverters included, 10.4M "
"to 13.5M; battery 2.0M to 3.5M). Factories on PEA's grid run zero export, so ~87 % of the ~730 "
"to 780 MWh a year is used on site (~633 MWh in the calculator) and the rest curtailed; that "
"covers ~61 % of the "
"launch plant's ~1,036 MWh a year of electricity, saves ~2.3M to 2.5M THB a year and pays back "
"in ~4.1 to 5.8 years (estimates). A solar PPA would take ~14.7M THB off the price at the "
"midpoint and add a power price to the energy line instead: owned, the ~633 MWh used on site "
"save the full ~3.7 THB/kWh; through a PPA at ~3.0 THB/kWh (estimate, to quote) only ~0.7 "
"THB/kWh, so the PPA bill is ~1.9M THB (~0.06M USD) a year."),
"**The array is sized to the load, not to the roof area.** With biomass steam the plant's running "
"load is ~230 kW; an hourly sketch (two shifts on 300 days, ~60 kW off-shift base, the 271 kWh battery, the "
"PEA time-of-use tariff with Ft, 23,000 THB/kWp, 25 years at 8 %) puts the best array at **~500 to "
"550 kWp**: above ~550 kWp more of the yield is curtailed under zero export and the extra panels "
"lose money. The factory roof on the Payap scenario plot the calculator draws carries ~520 kWp "
"(~523 kWp in the site model), so PV goes there only. The office roof (~65 kWp) and the car and "
"scooter canopies (~54 kWp) are built PV-ready (structure rated for the panels, conduit to the "
"main board, a spare way for a later inverter), and ~120 kWp go on them when the load rises with "
"the second Duplex system, for ~2.4M to 3.1M THB at 20 to 26 THB/W. On the Mueang Chi hall of "
"section 6.2 the factory roof takes ~247 kWp, its canopies PV-ready too. ~430 kVA of inverters "
"stays under the ERC's 1,000 kVA line (estimates).",
"**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; with the Classic and the galvanics line also in EUR, the three EUR "
"lines come to ~0.96M to 1.28M USD, so the same move is worth roughly USD 0.10M to 0.13M "
"(estimate)."),
P("Operationally, roughly two-thirds of direct cost (labour, energy, local cartons, maintenance) is "
"THB, so a 10 % baht appreciation takes **0.09 to 0.17 USD off the gross margin per record** without "
"any operational change, enough to push the adverse case further under water. "
"Three mitigations are planned: every re-quote states its currency and validity period; decide early "
"whether to quote regional customers in THB; and decide, once the BOI timeline is known, whether to "
"hedge the EUR orders. The hedging decision belongs to the investor."),
# ------------------------------------- 9 revenue and operating model
H1("9. Revenue and operating model"),
P("A first-pass economic model of " + pick("Plan A's three presses", "Plan B's three presses") + " in a "
"mature year. Most numbers are estimates from industry pricing norms and the project's own cost "
"research; the point is the shape of the economics and which levers matter, not precision. The price "
"assumption is deliberately held at the conservative Western export level even though the one set "
"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 200 to 400 titles "
"a year") +
"; mastering is labour-bound, and the plan staffs one to two engineers, which caps this line.",
pick("**Cassettes and CD-Rs** come later in Plan A (a growth step, lever 4) and are not in the "
"operating picture. The September draft illustrated them at 20k to 60k cassettes a year at "
"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, **stamper supply to other plants**, and **automation services "
"and the open plant stack for other pressing plants** (section 5.6) 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(
"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."),
T(["USD per year", "Adverse", "Central", "Favourable"], [
["Records", "0.58M", "0.74M", "0.90M"],
["Blended price, 60 % specials", "3.76", "4.49", "5.27"],
["Pressing revenue", "~2.17M", "~3.31M", "~4.72M"],
["Titles × per-title fee", "200 × 580", "300 × 1,155", "400 × 1,730"],
["Title-services revenue", "~0.12M", "~0.35M", "~0.69M"],
["**Revenue**", "**2.28M (~75M THB)**", "**3.65M (~120M THB)**", "**5.41M (~179M THB)**"],
], 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.13 to 0.28**", "4.2 to 9.3", "13 to 19 direct staff, "
"3.7M to 5.4M THB a year, over 0.58 to 0.90M records, as in Plan A"]),
["Stamper amortisation", "0.03 to 0.12", "1.0 to 4.0", "In-house three-generation set at ~USD 60 "
"to 150 marginal over 1,000 to 2,000 "
"pressings"],
["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.35 to 2.70**", "**~45 to 89**", "Central 2.00; no "
"extra cost for specials yet"]),
], widths_mm=[42, 26, 26, 76], font_pt=8.5,
caption="Estimates, docs/finance/revenue-model.md. THB at 33 per USD."),
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:",
"**Labour per record.** Two shifts need the full press, finishing, galvanics, QC and maintenance "
"crews whatever the press count, so the direct payroll stays at 3.7M to 5.4M THB a year (113k to "
"163k USD), and Plan B spreads it over the same 0.58 to 0.90 million records as Plan A: **0.13 / "
"0.19 / 0.28 USD** a record (favourable / central / adverse), and a direct cost of 1.35 / 2.00 / "
"2.70 USD. The build-up, at northern Thai rates loaded ×1.3 for social security, overtime, bonus "
"and PPE:")),
T(["Role", "Heads", "THB/month each, loaded"], [
["Press and finishing operators", "8 to 12", "~19,500"],
["Galvanics", "2 to 3", "~32,500"],
["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.44M USD) over 10 years (adverse), the midpoint (5.06M USD) over 12.5 years "
"(central) and the low end (3.68M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (3.99M / 5.52M / 7.05M USD from the low to the "
"high end).",
"the high end (7.79M USD) over 10 years (adverse), the midpoint (6.11M USD) over 12.5 years "
"(central) and the low end (4.42M USD) over 15 years (favourable). Payback is counted on the "
"whole plan price including the ramp-up reserve (4.73M / 6.56M / 8.40M USD from the low to the "
"high end).")),
_operating_table(),
CALL("Reading this table honestly", pick([
"**The central case works on ~182M 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 ~1.0 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 the biomass fuel for the steam, ~0.67M THB a year, the cutting "
"engineer, and the PPA power price of ~0.06M 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.17M USD, payback 2.3 years on the "
"167.1M 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.8, ~26 % IRR and an NPV of ~5.4M 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, automation services and the open plant stack for other pressing plants "
"(section 5.6), dropshipping fees, and the ramp year. BOI tax exemptions shield part of "
"early-year profits where there are any.",
], [
"**The central case works on ~217M THB.** EBITDA ~1.73M USD (~57M THB) and operating profit ~1.24M "
"USD (~41M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.24 million records a year, about a third of its central output**. Against the earlier ~20 % "
"specials share (0.84M records, EBITDA 1.63M) more specials earn a higher price on fewer records.",
"**The adverse case loses money.** It would need ~1.1 million records to cover depreciation, and "
"the three presses make 0.58 million at that rate; the operating loss is ~18M THB a year. It stacks "
"the low price, the high cost, the high capital and the high overheads at once. At the central "
"cost and volume the price that covers depreciation is ~2.8 USD (~92 THB) a record (arithmetic on "
"the table), below the low price assumed: price realisation and utilisation decide solvency, not "
"upside.",
"**What the extra ~35M THB buys is not in this table.** Plan B is Plan A's plant with the six levers "
"not taken, so revenue, direct cost and EBITDA are Plan A's; only the depreciation (0.49M against "
"Plan A's 0.40M USD at the centre) and the payback (~3.8 against ~3.2 years) move. Not modelled: "
"cassette and CD-R revenue, tour and Payap revenue, stamper supply to other plants, automation "
"services and the open plant stack for other pressing plants (section 5.6), and the PPA power bill "
"the owned array avoids (~0.06M USD a year in the calculator).",
"**The central margin is too good to trust yet.** A central EBITDA margin of ~47 % is far above "
"the 15 to 25 % pressing plants earn. The direct cost table counts only per-record consumables and "
"direct payroll and leaves out indirect labour (supervision, planning, warehouse), freight, scrap "
"above the reject allowance, sales commissions and the extra cost of specials. **Treat the adverse "
"column as the honest one until those lines exist.** The plan price carries no contingency either.",
"**This is a sensitivity, not a forecast.** The plant and business plan calculator's Plan B preset, "
"with its own cost build-up (it adds the biomass fuel for the steam, ~0.67M THB a year, and the "
"cutting engineer, 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.23M USD, payback 2.7 years on the 201.6M THB investment in a mature year; with a "
"ramp of 35, 70 and 90 % in the first three years and the reserve in year 0, cash payback in year "
"~4.2, ~22 % IRR and an NPV of ~4.7M USD over ten years, pre-tax and pre-financing (estimates). Its "
"EBITDA is 0.06M above Plan A's 2.17M because the owned array carries no PPA power price. Not modelled here: cassette "
"and CD-R lines, stamper supply to other plants, automation services and the open plant stack for "
"other pressing plants (section 5.6), dropshipping fees, and the ramp year. BOI tax "
"exemptions shield part of early-year profits where there are any.",
])),
IMG(pick("renders/calculator/plan-a-cash.png", "renders/calculator/plan-b-cash.png"), 160,
"Figure 12. Ten years of cash in the plant and business plan calculator, " + pick(
"Plan A preset: cash payback in year ~3.8, IRR ~26 %, NPV ~5.4M USD at 10 %",
"Plan B preset: cash payback in year ~4.2, IRR ~22 %, NPV ~4.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 the Duplex system, "
"then the Classic, with the cassette and CD-R lines alongside. Early production runs slower and "
"rejects more than any of these figures while the process settles, and the crews of a two-shift "
"plant are on the payroll before the volume is. The **ramp-up reserve of ~10M to 20M THB** "
"(estimate, inside the plan price, the same as in Plan A) is there to carry staff hired before first "
"revenue and overheads until volume covers them. Fan-funded campaigns on the artist platform open "
"only after the first releases have shipped and lead times are measured.")),
P("**A year-by-year cash model for the ramp is a next step, not a claim this plan makes.** It belongs "
"to the financing discussion and needs the vendor build times and the commissioning calendar "
"(section 10) first. The calculator's 35, 70 and 90 % ramp in section 9.4 is a planning assumption, "
"not that model."),
P(pick(
"**The growth option.** A second Duplex system (two more semi-automatic presses) lifts the plant to "
"~1.0 to 1.5 million records a year at 60 % specials, roughly **+0.4 to 0.6 million records**, for "
"**~USD 230k to 300k** for the press system (estimate: two presses at the quoted ~115k per press "
"and extruder set, plus hydraulic unit and EX 35, no EX 35 price on file). With its chiller module "
"(CH-3, USD 48k to 78k), freight and installation (24k to 48k) and the working capital for the "
"extra records it comes to ~15.4M THB at the midpoint (estimate). The hall, the module positions "
"in the boiler hall and chiller compound, and the ring-main tees are reserved for it, so it is a "
"revenue-funded step, not a rebuild.",
"**The growth option, the same as in Plan A.** A second Duplex system (two more semi-automatic "
"presses) adds roughly **+0.4 to 0.6 million records** a year at 60 % specials, for **~USD 230k to "
"300k** for the press system (estimate: two presses at the quoted ~115k per press and extruder set, "
"plus hydraulic unit and EX 35, no EX 35 price on file). With a third chiller module (USD 48k to "
"78k), freight and installation (24k to 48k) and the working capital for the extra records it "
"comes to ~15.4M THB at the midpoint (estimate). The floor bay, the module positions in the boiler "
"hall and chiller compound (built for four modules each; the launch plant fills two of each), and "
"the ring-main tees are reserved for it, so it is a revenue-funded step, not a rebuild. Beyond it, "
"the hall is laid out for five Duplex bays and four Classic positions, and growth adds Duplex "
"systems first, then Classics.")),
# ----------------------------------------------- 10 timeline
H1("10. Timeline: today to first paying release"),
P("Every duration is an estimate. The calendar in the planning repository was drawn in August 2026 and "
"has not yet been re-drawn for the launch plant; 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.",
]),
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; the biomass boiler's registration and its air-emission limits go into the same permit "
"work (to confirm)"],
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; PEA interconnection approval takes 3 to "
"6 months, filed alongside procurement; battery lead time is 50 to 60 days"],
["Solar and battery (purchase)", "Fit-out, ~Q2 2028", "Large", "Not a risk; rooftop solar "
"outside industrial estates needs no factory licence since 28 December 2024; PEA "
"interconnection approval takes 3 to 6 months, filed alongside procurement; 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. " +
"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 plant, the launch plant with everything in, and only growth stays revenue-gated.")),
T(["Phase", "Content", "Gate"], [
["0. Validate and clear the gates (now)", "Market validation with regional labels and distributors"
"; 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, Newbilt Duplex and Classic, the two "
"biomass boiler modules and the first two chiller modules", "BOI certificate and validated "
"pricing"],
["3. Build and commission (~6 to 12 months after commitment)", pick(
"Construction, water-treatment building, utilities (the biomass boilers and fuel store), HVAC, "
"clean zones, security, the crane-ready frame (a mobile crane for the installations); the "
"factory-roof 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 (the biomass boilers and fuel store), HVAC, "
"clean zones, factory-roof 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; PV on "
"the PV-ready office roof and canopies when the load rises; the phase 2 building; CD "
"replication if chosen",
"Second Duplex system, then further Duplex systems and Classics (the hall is laid out for five "
"Duplex bays and four Classic positions); PV on the PV-ready office roof and canopies when the "
"load rises; 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", "Newbilt Duplex system (two HRP 12, EX 50 and EX 35), with the steam and cooling plant "
"(biomass boiler modules B-1, B-2 with the fuel store; 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 [
["Alongside", "Cassette and CD-R duplication lines", "Independent of the metal path and the "
"presses; short lead times"]]),
], widths_mm=[12, 78, 80]),
P("If commissioning of the metal path slips, Stamper Discs (stampers) and SST in Frankfurt (lacquer "
"cutting, already Poy Records' cutter) stay contacts for overflow and for a slipping commissioning, "
"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.** ~132M to 233M THB in one round (~182M 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.** ~156M to 277M THB in one round (~217M 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 (~182M at "
"the midpoint, ~2M above 180M; a Chinese biomass boiler quote could close the gap), and the "
"second Duplex waits for demand and revenue on a reserved floor.",
"**What the levers give up.** Owned solar (a PPA bill of ~0.06M USD a year instead), public tours "
"at first, cassette and CD-R at launch, a bought crane, a Thai-serviced compressor. The adverse "
"case still loses money."],
["**Everything in at launch.** Owned solar on the factory roof (~520 kWp) with no PPA "
"bill, the full metrology stack "
"from the first release, tours and the Payap programmes from day one, cassette and CD-R, its "
"own crane and a locally serviced compressor; the second Duplex waits for demand and revenue on a "
"reserved floor.",
"**~35M THB more that the model does not repay.** The same EBITDA as Plan A with more "
"depreciation and a longer payback (~3.8 against ~3.2 years); the adverse case still loses "
"money."]),
], widths_mm=[85, 85], font_pt=8.5),
P("**How the plan answers the risks:** commission the metal path first and measure it before the "
"presses depend on it; hire the galvanics and cutting engineers early and train them at the "
"vendors; design zero discharge from the start; and release the round in tranches (section 8.3), "
"so that nothing is ordered before the BOI certificate and validated pricing."),
# --------------------------------------- 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 from launch.") +
" A process engineer from abroad can be employed on a BOI work permit (section 7)."),
H2("12.2 Ownership and structure"),
P("Amounts and percentages are not yet agreed and are deliberately left open here. The intended "
"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(
"~46M THB of Plan A's ~182M", "~54M THB of Plan B's ~217M") +
" (arithmetic, before financing costs).",
"**A shareholders' agreement** covering board composition, reserved matters (capital calls and "
"tranche releases, the growth options such as a second Duplex, CD replication), pre-emption and transfer, information rights, and the founders' roles and "
"remuneration.",
"**Related-party discipline.** Ploy Printing will be both a shareholder and the plant's main "
"packaging supplier. The supply agreement is priced at arm's length, benchmarked periodically "
"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 extra launch capital and its price without contingency add theirs.")),
T(["Severity", "Risk", "What it would do", "Mitigation and status"], _risk_rows(),
widths_mm=[16, 40, 52, 62], font_pt=8),
P("**Open questions with owners** are in the next section. Two standing caveats on the evidence base: "
"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; publish the "
"artist platform's calculator early with indicative prices and an interest list", "Simona, "
"Alexander", "Travel", "Pricing risk"],
["2", "Engage a BOI-registered consultant: activity sub-code; the order-before-certificate question "
"first; galvanics, cassette and CD-R in the application; CD replication decision; " + pick(
"whether the battery would qualify for BOI as battery storage (12M THB per MW cap, Announcement "
"3/2568) if bought instead of leased with the PPA; ",
"whether the battery qualifies for BOI as battery storage (12M THB per MW cap, Announcement "
"3/2568); ") +
"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 biomass steam boiler (with its air-emission limits) 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: Duplex (EX 50 and EX 35) and Classic, with build time, order-book position, PLC data access, central hydraulic supply "
"and written hydraulic requirements, currency and validity", "Alexander", "Free",
"Classic and EX 35 price, schedule"],
["6", "Pheenix quote for the galvanics line (PASU, PPPU, PDPU, PMPB) with lead time and training; "
"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 and the office roof and canopies PV-ready", "Alexander", "Free",
"Building estimate"],
["10", pick(
"Utility requests: biomass boiler packages from Getabec and from Chinese makers (ZOZEN, Sitong, "
"Taiguo, Yongxing; ASME S stamp, with a Thai installer), the Chinese quote first, because ~2M "
"THB or more below the Thai package puts Plan A back under 180M; electric modules as the "
"fallback quote; fuel supply offers (chips and wood, delivered price, a monsoon stock); "
"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: biomass boiler packages from Getabec and, for comparison, Chinese makers "
"(ZOZEN, Sitong, Taiguo, Yongxing); electric modules as the fallback quote; fuel supply offers "
"(chips and wood, delivered price, a monsoon stock); Thai suppliers for the rest, 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 supply"],
["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 for the ~520 kWp factory roof (the plan's lever) next to a purchase "
"quote; the installer's battery and inverter design checked", "Solar and battery purchase "
"quotes for the ~520 kWp factory roof, 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 own fuelwood (the coppice plan)", "Simona", "Small",
"Own fuel later, an upside"],
["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** (~182M 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 ~46M "
"THB). Told plainly: at the midpoint the plan is **~2M above 180M** (177M to 187M with the "
"reserve's 10M to 20M); the price carries no contingency (at 15 % it would be ~25M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~132M to "
"233M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes, the solar PPA offer and a Chinese biomass boiler quote decide where in "
"that range it lands and whether it comes back under 180M.",
"A commitment in principle to **Plan B at ~215M THB** (~217M 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 ~54M "
"THB). Told plainly: the price carries no contingency (at 15 % it would be ~30M THB more at "
"the midpoint), and from the low to the high end of every block the plan comes to ~156M to "
"277M THB. The Newbilt re-quote, the Pheenix quote, the building quote with the soil test, "
"the metrology quotes and the solar and battery purchase quotes decide where in that range it "
"lands.")],
["Decisions", pick(
"The equity and debt mix, and how quotes landing above the plan price are funded; the six "
"levers, the solar PPA first (~14.7M THB off the price for a power bill of ~0.06M USD a year); "
"whether to buy a Chinese biomass boiler if its quote brings the plan under 180M; CD "
"replication, yes or no, before the BOI application is finalised; the biomass fuel contracts; "
"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; the ~35M "
"THB of items Plan A leases or defers (owned solar on the factory roof with no PPA bill, the "
"full metrology stack, the visitor corridor, cassette and CD-R, the bought crane, the Thai "
"compressor), each weighed against its lever; CD replication, yes or no, before the BOI "
"application is finalised; the biomass fuel contracts; 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, estimate), "
"the laser confocal and wide-area profiler (USD 180k to 350k), the visitor "
"corridor, cassette and CD-R, an owned crane if needed, further Classics, PV on the PV-ready "
"office roof and canopies (~120 kWp, ~2.4M to 3.1M THB, estimate), and the phase 2 building.",
"Revenue-funded growth: the second Duplex system (~USD 230k to 300k for the press system; "
"~15.4M THB at the midpoint with its chiller module, freight and working capital, estimate), "
"then further Duplex systems and Classics in the hall laid out for five Duplex bays and four "
"Classic positions; PV on the PV-ready office roof and canopies (~120 kWp, ~2.4M to 3.1M THB, "
"estimate); 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, with whether the installer's own BOI promotion shows in "
"its price; ",
"the BOI consultant's reading on the battery (battery storage, capped at 12M THB "
"per MW); ") +
"the negotiated lease; a buyer-side price data point; the investor's CD decision; the biomass boiler "
"quotes (Getabec and a Chinese maker) and fuel supply offers; 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 ~215M THB, "
"the six levers and what is not in either price; the superseded "
"investor answer, full vision and phased entry"],
["finance/revenue-model.md", "Pricing, the Thai market data and factory tour, the Record Industry "
"benchmark, direct cost, the launch-plant operating picture and the "
"operating pictures of Plan A and Plan B"],
["finance/utilities-investment.csv", "Thai supplier candidates and budgetary ranges for steam "
"(the biomass package and the fuel store; the electric bank "
"as the alternative), 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 and the isometric plant "
"view (Figures 8 to 12)"],
["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 (electric priced; biomass makers named, not "
"priced), compressed air and hydraulics; Thai rules for imported "
"boilers; what the Chinese route saves"],
["digital-factory.md (demos plant-operation.html, factory-console.html)", "Data platform: ERPNext "
"as the only system of record, machine data, the factory application, the "
"NixOS fleet; the plant overview and factory console demos (Figures 2 to 4)"],
["digital-factory.md, 'Open source throughout, and working with other plants'", "Open source and "
"services to other plants: every server on NixOS, declared in one clan repository; ERPNext on "
"Frappe and the open machine-data stack; our own code published as open source; the closed "
"exceptions (firmware and HMIs inside the machines and instruments); and, later, automation "
"services and an open plant stack for other pressing plants (section 5.6; not in this plan's "
"revenue)"],
["artist-platform.md (demos artist-order.html, make-a-record.html)", "Upload and itemised price "
"calculator, fan-funded "
"campaigns, the record "
"passport (Figures 5 to 7)"],
["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, steam-cooling.html", "Solar, heat recovery, water, zero discharge, the grid "
"tariff; the steam and cooling plant"],
["biomass.md", "Biomass steam for both plans: what the boilers burn (~300 t of air-dry wood or ~460 t "
"of fresh chips a year at ~850k records), the fuel prices (1.35 to 2 THB/kg delivered, "
"0.5 to 0.9 THB/kWh of heat; sources in finance/biomass/), the northern fuel market, "
"the 60 rai of own fuelwood and its title check, logistics on site (fuel store, ash)"],
["sustainability.md ('PV size with biomass steam', the hourly PV sizing sketch), "
"finance/utilities-investment.csv "
"(solar rows), boi.md", "PV on the factory roof (~520 kWp; the office roof and the canopies "
"PV-ready) and its sources: the hourly sizing sketch (two shifts, 300 days, the 271 kWh battery, "
"PEA time-of-use with Ft, 23,000 THB/kWp over 25 years at 8 %: best array ~500 to 550 kWp, "
"estimate); the installed price of "
"20 to 26 THB/W (DEDE's Thailand PV Status survey, CapSolar 2026, Saimai Solar's 2026 list); zero "
"export for factories on PEA's grid (CapSolar, rooftop solar regulations, 2026; Sahawatthanakit, "
"2026); the permits (Ministerial Regulation No. 3 B.E. 2567, in force 28 December 2024; ERC's "
"1,000 kVA line; PEA interconnection; CapSolar, factory solar and the RG.4 permit, 2026); the BOI: "
"no promotion for solar installations since 1 July 2025, battery storage kept at a 12M THB per MW "
"cap (Announcement 3/2568; B Global Law, 18 January 2026; Smarter Energy Solution, 2026), and a PPA "
"developer's own promotion under activity 7.1.2 (CapSolar, BOI solar incentives, 2026)"],
["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 (draft 0.2's "
"figures; this draft "
"uses the "
"calculator's view)"],
], 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."),
]