Specials share 60 %+: revenue model, calculator and business plan re-based
Deploy test site / deploy (push) Successful in 52s

User (October 2026): "lets say 60+% special prints" (the plant focuses on
special prints, not mono colours).

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

Checks: calculator regression 0 fails, no page errors, node --check on
all scripts; PDF 47 pages, table of contents filled; no em dashes added.
This commit is contained in:
grabowski committed 2026-10-16 20:45:39 +07:00
1 parent d8b2c1e2db
commit b3e8e4272b
9 files changed
+158 -90

No files matched your search

Binary file not shown.
Binary file not shown.
+21 -16
View File
@@ -53,8 +53,10 @@ def blocks():
"partner Ploy Printing, and fulfilment including direct-to-fan dropshipping.",
"**Three presses at launch:** one Newbilt Duplex system (two semi-automatic presses with a main "
"and a colour extruder, for colour, splatter and short runs) and one Newbilt Classic fully "
"automatic press for long standard runs. Together about 0.71 to 0.97 million records a year on "
"two shifts (estimate). A second Duplex system is a growth option with its floor, utility "
"automatic press for long standard runs. Special prints are the focus (60 % and more of the "
"records), and specials run only on the Duplex, so together they make about 0.58 to 0.90 million "
"records a year on two shifts (0.71 to 0.97 million at a standard-heavy mix; estimates). A second "
"Duplex system is a growth option with its floor, utility "
"positions and pipe connections reserved, not part of the investment.",
"**The metal path in-house:** a Sillitoe SDMS cutting room, a Pheenix Alpha galvanics line with "
"zero-discharge water treatment, and the Sibert stamper-prep line. The father and the mother of "
@@ -111,9 +113,10 @@ def blocks():
]),
H2("The numbers"),
KV([
["Capacity", "Launch plant ~0.71M to 0.97M records/yr (2 semi-automatic presses + 1 Classic, "
"2 shifts; estimate; the press fleet calculator gives ~0.94M at our planning "
"rates). Second Duplex as growth option: ~1.0M to 1.5M"],
["Capacity", "Launch plant ~0.58M to 0.90M records/yr at 60 % specials (2 semi-automatic "
"presses + 1 Classic, 2 shifts; the Duplex sets the pace; estimate; the press fleet "
"calculator gives ~0.94M at our planning rates). Second Duplex as growth option: "
"~1.0M to 1.5M"],
["Site", "~1,500 m² main building plus a ~379 m² utility yard built for four boiler and four "
"chiller modules, on leased land (~4 rai minimum, 6 to 8 rai with expansion); second "
"building as expansion"],
@@ -127,13 +130,13 @@ def blocks():
"open quotes land low**"],
["Land lease", "Not negotiated; the plan carries an estimated THB 0.3M to 1.0M per year "
"(USD 9k to 30k), section 6.1"],
["Operating result, mature year", "Central case: revenue ~USD 3.75M (~THB 124M), EBITDA ~USD 1.63M "
"(~THB 54M), operating profit ~USD 1.11M (~THB 37M), payback "
"~4 years (3.0 to 5.5 on the 4.9M to 8.9M band); break-even "
"on operating profit at ~0.3M records a year. **The adverse "
"case loses money:** EBITDA ~USD 0.22M, operating loss ~USD "
"0.67M (~THB 22M). Utilisation and price decide the outcome, "
"not upside (section 9)"],
["Operating result, mature year", "Central case at 60 % specials: revenue ~USD 3.65M (~THB 120M), "
"EBITDA ~USD 1.73M (~THB 57M), operating profit ~USD 1.21M (~THB "
"40M), payback ~3.8 years (2.8 to 5.1 on the 4.9M to 8.9M band); "
"break-even on operating profit at ~0.25M records a year. **The "
"adverse case loses money:** EBITDA ~USD 0.23M, operating loss "
"~USD 0.66M (~THB 22M). Utilisation and price decide the "
"outcome, not upside (section 9)"],
["First paying release", "**Open.** The August 2026 calendar gives Q4 2028 to mid-2029 (27 to 33 "
"months from the start of phase 0), but it was drawn for a one-press "
"launch. Commissioning the cutting room and galvanics before the presses "
@@ -545,15 +548,17 @@ def blocks():
"be flat, non-slip and solvent-resistant."),
T(["Stage", "Fleet", "Rough output per year"], [
["Launch plant", "1 Duplex system (2 semi-automatic) + 1 Classic, 2 shifts",
"~0.71 to 0.97 million records"],
"~0.58 to 0.90 million records at 60 % specials (0.71 to 0.97 at ~20 %)"],
["Growth option: second Duplex", "4 semi-automatic + 1 Classic, 2 shifts; room reserved, not in "
"the investment", "~1.0 to 1.5 million records"],
["Full hall (option)", "4 Duplex systems + 6 Classics, the press hall laid out 60/40 for Duplex "
"(special pressings first); a utility phase of its own", "~3.6 to 4.7 million records (estimate)"],
"(special pressings first); a utility phase of its own", "~2.3 to 3.6 million records at 60 % "
"specials (estimate)"],
], widths_mm=[40, 80, 50],
caption="Basis: semi-automatic 60 to 80 records/h assumed; Classic ~128/h (vendor flyer); 16 h/day, "
"300 days/yr, 60 to 70% overall equipment effectiveness. The launch plant is 248 to 288 "
"records/h at nameplate, ~149 to 202/h after effectiveness; the press fleet calculator at "
"300 days/yr, 60 to 70% overall equipment effectiveness; specials (60 % and more) only on the Duplex. "
"The launch plant is 248 to 288 records/h at nameplate, but at 60 % specials the Duplex caps "
"it at 200 to 267/h, ~120 to 187/h after effectiveness; the press fleet calculator at "
"the team's planning rates gives ~0.94 million. Neither option is in the revenue model "
"or the investment."),
P("**On the 60 to 70% effectiveness figure.** Newbilt publishes 95% yield and 95% uptime for the "
+51 -40
View File
@@ -194,11 +194,15 @@ def blocks():
H2("9.1 Pricing assumptions"),
B([
"**Blended pressing price: USD 3.50 to 4.60 per record** (THB 115 to 150), across run sizes and the "
"standard/colour mix, covering pressing, labels, inner sleeve and assembly into the jacket; deluxe "
"packaging passed through at cost plus margin. 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.",
"**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. "
@@ -222,19 +226,21 @@ def blocks():
]),
H2("9.2 Capacity and revenue of the launch plant"),
P("Three presses make **~0.71 to 0.97 million records a year on two shifts** (estimate): the two "
"semi-automatic presses of the Duplex system at 60 to 80 records an hour each and the Classic at "
"~128 an hour (28 s cycle, vendor flyer), at 60 to 70 % effectiveness, 16 hours a day and 300 days "
"a year. The press fleet calculator, at the team's planning rates (3 records a minute per Duplex "
"system, 2 per Classic, 65 % effectiveness), gives ~0.94 million. The central case takes the "
"middle, 0.84 million."),
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 press fleet 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.71M", "0.84M", "0.97M"],
["Blended price", "3.50", "4.05", "4.60"],
["Pressing revenue", "~2.49M", "~3.40M", "~4.46M"],
["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.60M (~86M THB)**", "**3.75M (~124M THB)**", "**5.15M (~170M THB)**"],
["**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 "
@@ -250,21 +256,22 @@ def blocks():
"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"],
["Production labour, launch plant", "**0.12 to 0.23**", "4.0 to 7.6", "13 to 19 direct staff, "
"3.7M to 5.4M THB a year, over 0.71 to 0.97M records (0.08 to 0.16 on the five-press fleet)"],
["Production labour, launch plant", "**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 the five-press fleet)"],
["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"],
["**Total direct cost, launch plant**", "**~1.34 to 2.65**", "**~44 to 87**", "Central 1.98"],
["**Total direct cost, launch plant**", "**~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("**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.71 to 0.97 million. Labour per record rises to **0.12 / 0.16 / "
"0.23 USD** (favourable / central / adverse), and the direct cost to 1.34 / 1.98 / 2.65 USD. The "
"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:"),
T(["Role", "Heads", "THB/month each, loaded"], [
["Press and finishing operators", "8 to 12", "~19,500"],
@@ -286,41 +293,44 @@ def blocks():
"paired high-to-adverse. Depreciation is 8.9M USD over 10 years (adverse), the 216M THB target "
"(~6.55M USD) over 12.5 years (central), and 4.9M USD over 15 years (favourable)."),
T(["USD per year, mature", "Adverse", "Central", "Favourable"], [
["Records", "0.71M", "0.84M", "0.97M"],
["Blended price", "3.50", "4.05", "4.60"],
["Direct cost", "2.65", "1.98", "1.34"],
["Contribution per record", "0.85", "2.07", "3.26"],
["Pressing contribution", "0.60M", "1.74M", "3.17M"],
["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.67M**", "**1.96M**", "**3.65M**"],
["**Total contribution**", "**0.68M**", "**2.06M**", "**3.99M**"],
["Cash overheads", "0.45M", "0.33M", "0.20M"],
["**EBITDA**", "**0.22M**", "**1.63M**", "**3.45M**"],
["**EBITDA**", "**0.23M**", "**1.73M**", "**3.79M**"],
["Depreciation", "0.89M", "0.52M", "0.33M"],
["**Operating profit**", "**-0.67M**", "**1.11M**", "**3.12M**"],
["Revenue", "2.60M (~86M THB)", "3.75M (~124M THB)", "5.15M (~170M THB)"],
["Payback (EBITDA, mature year)", "never", "~4 yr (3.0 to 5.5 on 4.9M to 8.9M)", "~1.4 yr"],
["**Operating profit**", "**-0.66M**", "**1.21M**", "**3.46M**"],
["Revenue", "2.28M (~75M THB)", "3.65M (~120M THB)", "5.41M (~179M THB)"],
["Payback (EBITDA, mature year)", "never", "~3.8 yr (2.8 to 5.1 on 4.9M to 8.9M)", "~1.3 yr"],
], widths_mm=[50, 36, 48, 36],
caption="Estimates, docs/finance/revenue-model.md 'Operating picture of the launch plant (October "
"2026)'. Title services at 60 to 70 % contribution after lacquers, styli and nickel."),
CALL("Reading this table honestly", [
"**The central case works on 216M THB.** EBITDA ~1.6M USD (~54M THB) and operating profit ~1.1M "
"USD (~37M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.3 million records a year, a little over a third of capacity**.",
"**The central case works on 216M THB.** EBITDA ~1.7M USD (~57M THB) and operating profit ~1.2M "
"USD (~40M THB) a year once the plant runs at volume. It breaks even on operating profit at about "
"**0.25 million records a year, about a third of its 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 cannot cover depreciation at any volume three presses make.** It would need "
"~1.5 million records. It stacks the low price, the high cost, the high capital and the high "
"~1.1 million records. It stacks the low price, the high cost, the high capital and the high "
"overheads at once. At the central cost and volume, the price that covers depreciation is only "
"~2.7 to 3.0 USD (~90 to 98 THB) a record, 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 ~43 % is far above "
"**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 and sales commissions. **Treat the adverse column as the honest one "
"until those lines exist.**",
"**This is a sensitivity, not a forecast.** The plant and business plan calculator, with its own "
"cost build-up (it adds electric steam heat and the cutting engineer, which this table leaves "
"out), gives at 850k records: revenue 3.75M, EBITDA 1.68M, operating profit 1.13M USD, payback "
"4.1 years on a mature year; with a ramp of 35, 70 and 90 % in the first three years, cash "
"payback in year ~5.7 and ~13 % IRR over ten years, pre-tax and pre-financing (estimates). "
"out) and the team's faster Duplex planning rate, at which the launch plant is not Duplex-limited, "
"gives at 850k records and 60 % specials: revenue 4.14M, EBITDA 2.07M, operating profit 1.52M "
"USD, payback 3.3 years on a mature year; with a ramp of 35, 70 and 90 % in the first three "
"years, cash payback in year ~4.8 and ~18 % IRR over ten years, pre-tax and pre-financing "
"(estimates). "
"Not modelled here: cassette and CD-R lines, stamper supply to "
"other plants, dropshipping fees, and the ramp year. BOI tax exemptions shield part of early-year "
"profits where there are any.",
@@ -571,8 +581,9 @@ def blocks():
"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"],
["High", "Utilisation and price", "The cost structure is mostly fixed; the adverse case loses "
"money even at the full volume of three presses (it needs ~1.5M records to cover depreciation)",
"Central breaks even at ~0.3M records; commission in sequence; growth options wait for demand; "
"money even at the full volume of three presses (it needs ~1.1M records to cover depreciation); "
"at 60 % specials the Duplex rate and the extra cost of specials decide volume and margin",
"Central breaks even at ~0.25M records; commission in sequence; growth options wait for demand; "
"treat the adverse column as the honest one"],
["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 "