Deploy test site / deploy (push) Successful in 55s
User, 19 Oct 2026: build a high-end investor pitch deck; the whole plant, web slides on the test site with presenter mode plus a PDF, 12 to 15 slides, both plans, for a BOI / bank / institutional reader. - docs/pitch/index.html (site /pitch/): title, opportunity, the chain under one roof, how a record is made (9 stages, 3 gates, traceability, ERPNext), platform, site and building, sustainability and region, investment A vs B by block with the six levers (no contingency in either price), operating picture with the adverse case, ten-year cash and returns (calculator presets), BOI promotion and the 3:1 debt-to-equity condition (financing structure to be agreed), schedule, risks, team and vendors, the ask (phase 0 then tranches). - Every figure carries a source line (business plans draft 0.3 and the owning docs); speaker notes per slide; P opens a synced presenter window, O the overview, F fullscreen, #n deep links. - img/: six WebP pictures (calculator renders, order tool, fan funding, record passport); CNX-Vinyl-Investor-Deck.pdf, 15 pages 16:9, images re-encoded to 1.5 MB. - site/build.sh copies docs/pitch/ to /pitch/ (new DIRS list); the deploy also triggers on docs/pitch/**; landing page and README entries. - Checks: 15 slides at 1920/1440/1280/390 px without overflow, navigation, presenter sync both ways, PDF pages and text, no em dashes.
189 lines
8.4 KiB
HTML
189 lines
8.4 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<title>CNX Vinyl · internal test site</title>
|
|
<script>
|
|
(function(){var t=null;try{t=localStorage.getItem("cnx-theme")}catch(e){}
|
|
if(t!=="light"&&t!=="dark")t=window.matchMedia&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";
|
|
document.documentElement.setAttribute("data-theme",t);})();
|
|
</script>
|
|
<style>
|
|
:root {
|
|
--bg: #0a0f1a; --panel: #0f1626; --stroke: #2a3a56;
|
|
--fg: #d6deeb; --mute: #8a97b0; --accent: #3ddc84;
|
|
}
|
|
:root { color-scheme: dark; }
|
|
html[data-theme=light] {
|
|
color-scheme: light;
|
|
--bg: #f4f6fa; --panel: #ffffff; --stroke: #cfd8e6;
|
|
--fg: #1b2533; --mute: #5b6880; --accent: #0e8f4f;
|
|
}
|
|
main { position: relative; }
|
|
.themebtn {
|
|
position: absolute; top: 48px; right: 20px; background: var(--panel); color: var(--fg);
|
|
border: 1px solid var(--stroke); border-radius: 5px; padding: 6px 12px; font: inherit; font-size: 14px; cursor: pointer;
|
|
}
|
|
.themebtn:hover { border-color: var(--accent); }
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0; background: var(--bg); color: var(--fg);
|
|
font: 16px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
}
|
|
main { max-width: 760px; margin: 0 auto; padding: 48px 20px; }
|
|
h1 { margin: 0; font-size: 28px; letter-spacing: 0.02em; }
|
|
.tag {
|
|
display: inline-block; margin-top: 6px; padding: 2px 8px;
|
|
border: 1px solid var(--stroke); border-radius: 4px;
|
|
color: var(--mute); font-size: 13px;
|
|
}
|
|
p.lead { color: var(--mute); margin: 18px 0 32px; }
|
|
h2 {
|
|
font-size: 13px; text-transform: uppercase; letter-spacing: 0.08em;
|
|
color: var(--mute); margin: 32px 0 12px;
|
|
}
|
|
ul { list-style: none; margin: 0; padding: 0; }
|
|
li a {
|
|
display: block; padding: 14px 16px; margin-bottom: 10px;
|
|
background: var(--panel); border: 1px solid var(--stroke); border-radius: 6px;
|
|
color: var(--fg); text-decoration: none;
|
|
}
|
|
li a:hover, li a:focus-visible { border-color: var(--accent); }
|
|
li strong { display: block; color: var(--accent); font-weight: 600; }
|
|
li span { color: var(--mute); font-size: 14px; }
|
|
footer { margin-top: 40px; color: var(--mute); font-size: 13px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<button class="themebtn" id="themeBtn" type="button">Light mode</button>
|
|
<h1>CNX Vinyl</h1>
|
|
<span class="tag">internal test site</span>
|
|
<p class="lead">
|
|
Demos and static pages from the CNX Vinyl planning repository, a vinyl
|
|
pressing plant planned near Chiang Mai. Shared by link only and not
|
|
indexed. Figures in the demos are planning estimates.
|
|
</p>
|
|
|
|
<h2>Investor deck</h2>
|
|
<ul>
|
|
<li>
|
|
<a href="pitch/">
|
|
<strong>Investment proposal (slides)</strong>
|
|
<span>The plant in 15 slides for BOI, bank and institutional
|
|
readers: the opportunity, the full chain under one roof, the
|
|
platform, site and utilities, Plans A and B by block, the operating
|
|
picture with its adverse case, cash and returns, BOI promotion and
|
|
its conditions, schedule, risks, team and the ask. Press P for the
|
|
presenter view; a PDF is linked in the control bar.</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>Demos</h2>
|
|
<ul>
|
|
<li>
|
|
<a href="demos/plant-operation/">
|
|
<strong>Plant overview (simulated SCADA)</strong>
|
|
<span>The launch plant animated at real cycle times: one Newbilt
|
|
Duplex system and one Classic press, Pheenix Alpha electroforming and
|
|
Sibert stamper prep, from PVC intake and the material lab through pressing,
|
|
inspection, packaging and fulfillment, with the artist gates,
|
|
utilities and energy alongside. Real time up to a day in 24 s;
|
|
every station is clickable; on a phone, turn it sideways and pinch
|
|
to zoom.</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="demos/fleet-calculator/">
|
|
<strong>Plant and business plan calculator</strong>
|
|
<span>Set the records a year and configure the plant: presses,
|
|
galvanics in-house or bought stampers, cutting in-house or
|
|
outsourced, metrology, solar, steam fuel and more. It builds the
|
|
investment from the launch-plant blocks, checks it against the
|
|
investor's 180M and 216M THB, runs the money a year and a ten-year
|
|
cash sketch, and lists what the plant needs, from the launch plant
|
|
to a fully equipped press hall. Every assumption is editable and a
|
|
scenario can be shared by link.</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="demos/steam-cooling/">
|
|
<strong>Steam and cooling plant</strong>
|
|
<span>The utilities for the launch plant (one Duplex system and one
|
|
Classic on two boiler and two chiller modules, rooms built for four)
|
|
as a clickable process diagram: boiler bank, steam header and
|
|
condensate return, chiller bank, plate heat exchanger and a branch to
|
|
every press position. Switch between the launch plant, the Duplex
|
|
commissioned first, the second Duplex growth option and one module
|
|
down to see demand against installed capacity.</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="demos/make-a-record/">
|
|
<strong>Make a record (investor demo)</strong>
|
|
<span>The artist platform as a customer sees it: design a record
|
|
against a to-scale mock-up, check the music and artwork, see one
|
|
clear price, let fans fund the pressing, follow production through
|
|
the artist approvals and open the record passport of one delivered
|
|
copy. Switch on investor notes for the business case behind each
|
|
step, or press Tour for a one-minute walk-through. Prices in THB,
|
|
USD or EUR; English or Thai.</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="demos/factory/">
|
|
<strong>Factory console and order status (investor demo)</strong>
|
|
<span>The factory application on a simulated plant day: a Newbilt
|
|
Duplex system and a Classic with live counters, work orders for
|
|
every station, every record through optical
|
|
inspection, audio samples, the material lab gate, stamper
|
|
metrology and the hash-chained event log. Switch to the customer
|
|
portal to follow the same orders: steps and approvals, copies
|
|
pressed so far, lab and inspection results. Simulated data.</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="demos/order/">
|
|
<strong>Order a record (step by step)</strong>
|
|
<span>The order tool as a step-by-step configurator: size, discs,
|
|
vinyl colour and effects, labels, sleeves, jacket and finish,
|
|
extras, mastering and cutting, test pressings, shipping, track list
|
|
and artwork, each step with its choices, beside a large live picture
|
|
of the record that changes with every choice and a running price and
|
|
ship date. Ends in a review that lists what is still missing and the
|
|
itemised quote. Indicative demo prices; nothing is uploaded or
|
|
sent.</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="demos/artist-order/">
|
|
<strong>Artist ordering and fan funding</strong>
|
|
<span>Configure a record, type the track list or drop the master
|
|
files and artwork (checked in the browser, nothing is uploaded), get
|
|
an itemised offer with the price per copy against quantity and the
|
|
lead time, then order directly or run a fan-funded campaign to a
|
|
funded or missed end and follow the production through the artist
|
|
approvals. Indicative demo prices.</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<footer>Built from <code>site/</code> in the cnx_vinyl repository.</footer>
|
|
</main>
|
|
<script>
|
|
(function(){
|
|
var b=document.getElementById("themeBtn"),de=document.documentElement;
|
|
function set(t,save){de.setAttribute("data-theme",t);if(save){try{localStorage.setItem("cnx-theme",t)}catch(e){}}
|
|
b.textContent=t==="light"?"☾ Dark mode":"☀ Light mode";b.title="Switch to "+(t==="light"?"dark":"light")+" mode";}
|
|
set(de.getAttribute("data-theme")||"dark",false);
|
|
b.addEventListener("click",function(){set(de.getAttribute("data-theme")==="light"?"dark":"light",true);b.blur();});
|
|
var mq=window.matchMedia&&matchMedia("(prefers-color-scheme: light)");
|
|
if(mq&&mq.addEventListener)mq.addEventListener("change",function(e){var s=null;try{s=localStorage.getItem("cnx-theme")}catch(_){}if(!s)set(e.matches?"light":"dark",false);});
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|