Deploy test site / deploy (push) Successful in 1m2s
User, 20 Oct 2026: can the deck also be made in a light and dark mode; the new order tool should also offer fan funding, so the platform screenshots match and use the same calculator; the main investor holds at least 60 %, so 40 % is for sale. Order tool (docs/order.html, /demos/order/): - New step 15 "How to pay": pay the plant directly (deposit) or let fans fund it; step 16 becomes "Review & launch" with the campaign simulation and its three outcomes. - Campaign maths ported from make-a-record (fan price, length, cap, own copies, VAT; fans needed = max(100, break-even); keep at the goal and with more fans; price hint); R gains fee (3.5 %), VAT and campaign length with sources; no price changed. - Quote card shows fan price, fans needed and the artist's keep on the fan route; route and campaign in the #q= hash; deep links #s=<step>&p=<preset>&route=fans. - Parity with make-a-record: 206/206 checks over 40 configurations; default quotes unchanged (37,836 / 217 / 102,936 THB; partner mastering 43,676). Investor deck (docs/pitch/): - Light and dark theme like the other site pages (cnx-theme, T key and button), presenter and overview follow; charts from CSS variables; text pairs at WCAG AA in both themes; tool screenshots in both themes. - Two PDFs: dark and light (print-friendly), each ~1.5 MB. - Platform slide: both pictures from the order tool (Splatter 12" order step and its fan-funding view: 100 fans at 1,200 THB, break-even 46, ~480 THB a copy kept). - BOI and financing slide: shareholding bar, lead investor at least 60 %, at most 40 % for co-investors (~32M / ~22M THB at the ~54M equity floor, arithmetic only); the ask offers up to 40 %. Docs: artist-platform.md (fan funding in the order tool), README and landing page entries.
193 lines
8.6 KiB
HTML
193 lines
8.6 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, Plan B (slides)</strong>
|
|
<span>The plant in 16 slides for BOI, bank and institutional
|
|
readers, proposing Plan B (~215M THB), the plan the main investor
|
|
wants, with Plan A as the comparison: the opportunity, the full
|
|
chain under one roof, the platform, site and utilities, Plan B by
|
|
block and why Plan B, the operating picture with its adverse case,
|
|
cash and returns, BOI promotion and its conditions, schedule,
|
|
risks, team and the ask. Light and dark (press T), P for the
|
|
presenter view; a PDF of each theme 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. Then how to pay: directly, or a fan-funded campaign with
|
|
the fans needed and what the artist keeps. 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>
|