diff --git a/README.md b/README.md index 8535ea2..a02e10a 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,11 @@ The detail lives in dedicated documents: - [Process flow](docs/process-flow.md): the whole chain from audio file to delivered record as a chart and stage table, with every check and the three artist approval gates (printable diagram alongside) +- [Artist platform](docs/artist-platform.md): upload a master and + artwork, get a transparent itemised offer from the price calculator + (for artists, labels and any other customer), and optionally launch a + fan-funded campaign that the plant presses and ships to each fan once + enough have pre-ordered, with refunds if not - [Plant operation page](docs/plant-operation.html): a single static page animating the whole plant as a simulated SCADA overview, from PVC intake and the material lab through extruder, press, trim, optical inspection, @@ -155,6 +160,7 @@ docs/ ├── finance/ Project cost overviews, revenue model, │ construction RFQ ├── suppliers/ Supplier contacts, vendor landscape, supplier map +├── artist-platform.md Upload, price calculator, fan-funded pressing ├── biomass.md Biomass fuel strategy and the 60 rai coppice idea ├── boi.md BOI promotion strategy and requirements ├── crane-workshop-tours.md Overhead crane, workshop, visitor corridor diff --git a/docs/artist-platform.md b/docs/artist-platform.md new file mode 100644 index 0000000..e782b37 --- /dev/null +++ b/docs/artist-platform.md @@ -0,0 +1,376 @@ +# Artist Platform: Upload, Price Calculator and Fan-Funded Pressing + +A web platform where anyone who wants records made, from a bedroom +artist to a label, can: + +1. **Configure a record in a calculator** and get a transparent, + itemised offer: what every line costs, which costs are per title and + which per copy, how the price per copy falls with quantity, and when + it ships. +2. **Upload the master and the artwork**, and have both checked before + anyone pays for anything. +3. **Either order directly**, as any label would, **or launch a + fan-funded campaign**: a page the artist shares with fans, who + pre-order their copy. If enough fans commit before the deadline, the + plant presses and ships each fan's copy. If not, every fan is + refunded and nobody is left with a garage full of records. + +The calculator is for every customer. The campaign is the part that +opens vinyl to artists who could never front the cost of a run. Both sit +on top of what the plan already has: the stages and the three artist +gates in [process flow](process-flow.md), the lead times in +[production timeline](production-timeline.md), the order intake, client +vault and customer portal in [digital factory](digital-factory.md), and +the dropshipping already in the fulfillment step. Every figure on this +page without a source is an estimate. + +## Why it fits this plant + +- **The bottom of the Thai market is unserved.** The one Thai plant we + have seen quotes a 150-unit minimum that is "rarely accepted because + the cost is way too high", so runs under 300 are effectively + unavailable ([revenue model](finance/revenue-model.md)). The reason is + a per-title cost (imported stampers, outsourced cutting) that does not + shrink with the run. In-house cutting and plating collapses it, which + makes short runs viable for CNX in a way they are not for an importer + of metalwork. Short runs need a channel; this is it. +- **Fan funding removes the artist's risk.** What stops an indie artist + ordering 200 records is not the price per copy, it is paying for all + 200 up front without knowing whether they sell. A campaign turns that + around: the fans pay first, the run is exactly as big as the demand. +- **CNX owns the presses.** The known platforms of this kind are brokers + over a network of other people's plants. A plant-owned platform + controls its own price, schedule and quality, and keeps the margin on + manufacturing instead of a commission. +- **Transparency is already the brand.** The plan is built on + traceability that customers can see. The same event log can tell a fan + "cut on 12 March, plated, test pressing approved by the artist, + pressing now, ships next week", automatically and truthfully. + +## Who else does this, and the lesson + +| | Model | Notes | +|---|---|---| +| **Qrates** (Japan, global) | Crowdfunding plus pressing through partner plants, with a profit calculator for the artist | Its site carries a notice (October 2026) that the service is suspended "due to unforeseen financial difficulties"; artists report funded projects caught in the wind-down | +| **Diggers Factory** (France) | Upload tracks and artwork, set a sales goal; if missed, the project is cancelled and everyone refunded, or the artist funds the rest; about 8 weeks of manufacturing after success (2023 description); also sells direct pressing paid up front | An on-demand network rather than a single plant | +| **elasticStage** (UK) | Each record made when it is ordered, no minimum, no campaign | Its own on-demand production technology; a different answer to the same problem | + +**The Qrates lesson is the design rule for the money**: fan payments are +held apart from the company's own money and are never working capital, +so that if anything goes wrong, fans can be refunded and artists keep +their projects. See "Payments" below. + +## The calculator + +### What the customer chooses + +| Choice | Options | +|---|---| +| Format | 12" LP, 10", 7"; single or double disc; 33⅓ or 45 rpm | +| Weight | 140 g, 180 g | +| Colour | Black, solid colour, marbled or splatter (the semi-automatic line's speciality) | +| Quantity | Free entry, with the price-per-copy curve shown live | +| Labels | Printed, pressed into the record (the only kind this plant makes) | +| Inner sleeve | Paper, poly-lined | +| Jacket | None (customer supplies), plain, printed single, printed gatefold; printed by the local packaging partner | +| Extras | Insert, hype sticker, shrink wrap, numbered edition | +| Audio services | Customer supplies a vinyl-ready master, or CNX vinyl mastering per side | +| Metal | Lacquer cutting and stampers (in-house; bridge stampers from Stamper Discs until the galvanics line exists) | +| Test pressings | Number of copies for the artist | +| Delivery | Bulk to one address, dropship to each buyer, or collect at the plant | + +### What the customer gets back + +- **Every line itemised**, grouped into **per title** (mastering, + cutting, stampers, test pressings, setup) and **per copy** (pressing, + labels, sleeve, jacket, extras), with pass-through items such as the + printed jacket marked as such. +- **The price per copy against quantity** as a curve, so it is obvious + why 100 copies cost more each than 500, and where the steps are. +- **A lead time in weeks** from the quote table in + [production timeline](production-timeline.md): counted from + test-pressing approval, with the stages before it shown separately as + "typically X weeks, subject to your approvals", exactly as that page + says a quote should be made. +- **An offer** with a validity date and the price-list version it was + computed from. + +### How it computes + +Price = sum of the per-title lines + quantity × sum of the per-copy lines, +with quantity tiers where a supplier's price steps (jacket print runs). +All rates come from **one versioned price list** in the factory +application, and every offer records the version it used, so any old +offer can be reproduced to the baht. That follows the append-only rule +the factory application already applies to everything else. + +Transparency rules, so the word means something: + +- every line visible, no fees that appear later; +- pass-through costs (the jacket) shown at what the partner charges plus + a stated handling margin; +- quoted in THB for Thai customers and in USD for export customers, the + currency choice the [revenue model](finance/revenue-model.md) already + recommends deciding early. + +### What it looks like with numbers + +An illustration of the **shape**, using the midpoints of the working +assumptions in the revenue model: **38,000 THB per title** (mastering, +cutting, stampers, test pressings; range 19,000 to 57,000), **132 THB per +copy** for pressing, labels, inner sleeve and assembly (range 115 to 150), +plus **~100 THB per copy for a printed jacket and shrink** at short run +(estimate, until the packaging partner quotes). Black 12", 140 g: + +| Copies | Per-title share per copy | Per copy | Per copy, all in | Order total | +|---|---|---|---|---| +| 100 | 380 | 232 | **~612 THB** | ~61,200 THB | +| 200 | 190 | 232 | **~422 THB** | ~84,400 THB | +| 300 | 127 | 232 | **~359 THB** | ~107,600 THB | +| 500 | 76 | 232 | **~308 THB** | ~154,000 THB | +| 1,000 | 38 | 232 | **~270 THB** | ~270,000 THB | + +**Do not read the level off this table.** At these Western-benchmark +rates the 300-copy price lands near 360 THB, while the Thai market pays +650 to 950 THB for 300 today. That is the very gap the revenue model +flags as its biggest open question. The real price list is set after +market validation ([roadmap](roadmap.md) item 1); the calculator only +makes whatever prices are chosen legible. + +## Fan-funded campaigns + +### Before the campaign goes live + +Nothing goes in front of fans that the plant cannot make: + +1. **Upload**: master files (WAV/FLAC/AIFF) with checksums at both ends, + resumable for album-size uploads, straight into the encrypted client + vault (module 2 of the factory application). +2. **Automatic audio checks**, reported to the artist within minutes: + format, sample rate and bit depth, clipping and true peak, **side + length against the chosen format**, and low-frequency phase problems + that make a groove hard to cut. +3. **Automatic artwork preflight**: label and jacket files against the + templates (size, centre hole and safe area for the pressed-in label, + bleed, resolution, colour space), with a rendered mock-up of the + jacket and the vinyl colour. +4. **Engineer check**: a cutting engineer confirms side length and level + are cuttable. On a Sillitoe lathe this is a number from the software's + virtual groove (disk capacity in percent) without a test cut; see + [vendor landscape](suppliers/vendor-landscape.md). +5. **Rights**: the artist confirms they own or have licensed the + recordings and the compositions (covers need a mechanical licence), + and an automatic audio fingerprint check (open tools such as + Chromaprint/AcoustID) catches obvious bootlegs before a person looks. +6. **Gate 1, master plan approved**, recorded as the event the + [process flow](process-flow.md) already defines, plus the approved + artwork proof that packaging QC later checks print against. + +### The campaign page + +- Artwork mock-up, story, track list, **short audio previews** (a few + seconds to a minute per track at reduced quality, rendered by the plant + from the master; the full master never leaves the vault, which matters + because pre-release audio is a leak target per + [facility security](facility-security.md)) +- Price per copy, shipping by destination, goal, progress, deadline, + **estimated ship month** (campaign close plus the quoted lead time), + and what happens if the goal is missed +- Sharing built for where the fans are: a link, a QR code for gigs and + merch tables, and **LINE** alongside the international networks; Thai + and English +- Duration chosen by the artist, **14 to 45 days** (estimate) + +### The goal + +The goal is the larger of two numbers: + +- **the plant's minimum campaign run**, set by setup and stamper + economics on the semi-automatic line (**100 copies** as a planning + figure, to be decided), and +- **the artist's break-even**: the copies at which the fan price covers + the per-title costs, the per-copy costs and the payment fees. + +With the illustration above and a fan price of 1,200 THB (an example, +not a recommendation) and payment fees of about 3.5%: break-even is +38,000 / (1,200 − 42 − 232) ≈ **41 copies**, so the goal is the 100-copy +minimum. At 100 copies the artist keeps about **546 THB a copy**, at 300 +about **799 THB**, because the per-title cost spreads. The calculator +shows the artist this before launch, for any price they type in. Shipping +is charged to the fan separately at checkout, at cost. + +Over-subscription is good news: the run is pressed at the final number +plus the artist's own copies and the spares the reject allowance already +covers. An artist can cap a campaign for a limited, numbered edition. + +### Payments + +The decision that matters most, and the one Qrates got wrong. + +| | A. Charge at pledge, refund on failure | B. Save card, charge at success | +|---|---|---| +| How | Fan pays when pledging; money held in a ring-fenced account; automatic refund if the goal is missed | Card stored by the payment provider; charged only when the campaign succeeds | +| Thai fit | Works with **PromptPay QR**, cards and wallets, which is how Thai fans pay | Cards only; excludes PromptPay | +| Risk | CNX holds fan money for the campaign's length: must be ring-fenced and legally clean | Some charges fail at the end, so a campaign that "succeeded" can come up short | +| Note | Refund paths differ by payment method; confirm each with the provider | A card authorisation cannot simply be held: Opn (Omise) allows an authorise-and-capture pause of up to 7 days, far short of a campaign | + +**Recommended: A**, with three rules. Fan money sits in a **separate +account** and is never used for operations until the campaign succeeds. +**CNX is the seller of record** to the fan (CNX makes and sells the +record, the artist licenses the music and receives the margin), which +keeps VAT, consumer protection and refunds in one place. And before the +first campaign, **a Thai legal opinion** on whether holding pre-order +money for a third party's project needs anything beyond that, for +example under the Bank of Thailand's payment-service rules. Card data +never touches CNX servers: the provider's hosted payment page or fields +keep it out of scope. + +### When the campaign succeeds + +The campaign becomes a production order and runs the normal chain: +vinyl mastering if ordered and **gate 2** (master approved by the +artist), cutting (only now, because a lacquer has to be plated within +one to three days), stampers, test pressings and **gate 3** (artist +approves the test pressing; a photo or short video of it to the fans is +cheap marketing), the run, packaging, and **dropshipping one parcel per +fan** with tracking, which is fulfillment step 9 as already planned. + +Fans follow it on the campaign page, fed from the factory application's +event log: the progress is the plant's own record, not a status someone +remembers to update. If a stage slips, the estimated ship month moves +and every fan is told. + +An optional **"test pressing first"** campaign does mastering, cutting and +test pressings before launch, so fans hear and see the real record. The +artist pays the per-title services up front for it; it suits artists +with an audience but no track record. + +### When it does not succeed + +Automatic refunds to every fan, or, if the artist chooses, the artist +pays the shortfall and the run goes ahead at the minimum (the Diggers +Factory option). The artist's uploaded master and artwork stay in the +vault for a second attempt. + +### After the first run: repress on demand + +Once a title exists, its mother sits in the archive and a repress takes +**1.5 to 2.5 weeks** of plant time +([production timeline](production-timeline.md)). The campaign page can +reopen as "pre-order the repress, pressed when 100 more are in", which +turns one release into a recurring one. This is the part a plant with +in-house plating can offer and a broker cannot. + +## For labels and regular customers + +The same calculator and upload path, with an account: + +- negotiated rates as a customer-specific price-list version; +- direct orders with a deposit instead of a campaign; +- the three gates approved in the customer portal + ([digital factory](digital-factory.md), modules 1 to 3 and 10); +- bulk delivery, dropshipping, or both. + +## How it is built + +Same stack and same rules as the factory application in +[digital factory](digital-factory.md): Rust (axum, SQLx, minijinja, +HTMX) on PostgreSQL, in the `cnx-factory` repository, packaged as a +flake, deployed by the clan. The platform extends modules 1 (orders and +releases), 2 (audio intake and the client vault), 3 (the gates) and 10 +(customer portal) with a price list and calculator, campaigns, pledges, +payments and per-fan shipments. + +**Where the public side runs.** The digital factory plan accepts that a +WAN outage at the plant stops the customer portal. That is acceptable for +a label checking an order, not for a campaign page in the hour an artist +posts it, or for payment-provider webhooks. Proposal: + +- the **public process** (calculator, campaign pages, checkout, payment + webhooks, upload staging) runs on a fleet machine with a public + address, `web01` or a sibling declared in the clan the same way, with + its own small PostgreSQL for campaigns and pledges; +- the **plant core stays the authority** for everything with a + production identity: when a campaign succeeds it becomes an order on + `vinyl-core`, and from then on the fan-facing progress is read through + the plant, as the portal is. Design decision 7 ("the portal is a view, + not a copy") still holds for production data; campaigns and pledges are + new data that start life in public; +- **uploads** land encrypted in a staging area on the public machine, are + pulled over the mesh into the client vault, checksum-verified on both + sides, and deleted from staging; **previews** are rendered on the plant + and published outwards, so a full master never rests outside the + vault. + +No SaaS beyond the payment provider (Opn/Omise, 2C2P or a bank gateway, +to be chosen), in line with the plan's standing rule that every plant +service runs on the NixOS fleet. + +**Personal data.** Fans' names and addresses are personal data under +PDPA, with CNX as controller as the seller of record. An artist gets +fan contact details only where the fan ticked a consent box; that list +is worth a lot to an artist, and consent is what makes it legal to hand +over. + +## The calculator is also a research instrument + +Every configuration anyone builds, anonymously logged, is a data point on +what people actually want to order: run size, colour, weight, packaging, +how many walk away at which price. The revenue model's open **run-size** +question ([roadmap](roadmap.md) item 1) is exactly that distribution. So +the calculator should go public **long before the plant exists**, with +indicative prices and a "tell me when it opens" list, and no payments. + +## Phasing + +| Roadmap phase | Platform step | +|---|---| +| 0 to 1, validate | Public calculator with indicative prices and an interest list; configuration logging feeds market validation | +| 3, build | Direct orders, uploads, automatic checks and gates, as part of factory application v1 | +| 4, launch | Campaigns go live **after** the first paying releases have shipped and lead times have been measured. No fan money is taken against a plant that has not yet delivered | +| 5, expand | Repress pre-orders, numbered editions, international shipping at scale, cassette and CD formats from the business plan's scope | + +## Rough cost (estimate) + +| Item | THB | USD | +|---|---|---| +| Public side on top of the factory application: calculator, campaigns, payments, uploads and previews, preflight, fan accounts | 1.3M – 3.0M | 40k – 90k | +| Hosting | on the existing fleet | negligible | +| Payment fees | per transaction, inside the fan price | about 3 to 4% on cards, less on PromptPay (to be confirmed with the provider) | + +Not yet in the roll-up in +[total investment](finance/total-investment.md); listed there as added +scope. + +## Risks + +- **Most crowdfunding campaigns fail**, and each failed one still costs + CNX checking and setup time. A small non-refundable setup fee, credited + against the order if the campaign succeeds, is one answer; decide it + before launch. +- **Lumpy demand.** Campaigns end on dates nobody controls. The scheduler + in the factory application should see live campaigns, weighted by how + close they are to their goal, and cap how many can close in the same + week. +- **Fans are not labels.** They expect a perfect record and a date. + Clear wording on what vinyl sounds like, the artist's test-pressing + approval, and honest ship months carry most of this. +- **Rights.** Someone will upload music that is not theirs. Warranty, + fingerprint check, a human look, and a takedown route. +- **Money.** Covered by the payment rules above; the legal opinion comes + before the first campaign, not after. + +## Open decisions + +1. **Seller of record**: CNX (recommended) or the artist. +2. **Payment model**: charge-and-refund into a ring-fenced account + (recommended) or save-card-and-charge; legal opinion either way. +3. **Fee model**: margin inside the published price list only + (recommended, it is what "transparent" means) or a separate platform + commission. +4. **Minimum campaign run**: 100 copies as the planning figure. +5. **Public price list**: fully public rates, or public list prices with + account-specific rates for labels. +6. **Hosting split**: public process on a fleet machine as proposed, or + everything on the plant core at launch volumes. +7. **Name**: under CNX Vinyl, Poy Records, or its own brand. diff --git a/docs/digital-factory.md b/docs/digital-factory.md index 1a98a8d..849edf6 100644 --- a/docs/digital-factory.md +++ b/docs/digital-factory.md @@ -508,7 +508,11 @@ Modules, in build order: against the BOM, carrier and tracking per shipment or dropship end customer. 10. **Customer portal**: per-order timeline of everything above, scoped so - one customer sees only its own orders; PDF export of the trace. + one customer sees only its own orders; PDF export of the trace. The + public front of order intake (price calculator, uploads with + automatic checks, fan-funded campaigns) is planned in + [artist platform](artist-platform.md), including why its public + side should not depend on the plant's WAN link. 11. **Reports and signals**: yield per stamper, reject rate drift, audio score trend versus play count (the automatic retirement signal), energy per record, environment excursions overlaid on runs (the diff --git a/docs/finance/revenue-model.md b/docs/finance/revenue-model.md index 8098aaf..e8d9fbe 100644 --- a/docs/finance/revenue-model.md +++ b/docs/finance/revenue-model.md @@ -381,6 +381,10 @@ effectively unavailable in Thailand. That floor exists because per-title cost — an imported stamper set plus outsourced mastering — is irreducible for them. In-house cutting and plating collapses it, which makes short runs viable for CNX in a way they structurally are not for ResurRec. +The channel planned for that segment is the +[artist platform](../artist-platform.md): a transparent price calculator +and fan-funded campaigns that press only when enough fans have +pre-ordered. **What it does to the volume-versus-boutique question.** The model assumes 1.0–1.5M records/yr across 300–600 titles, an average of 1,700–5,000 units diff --git a/docs/finance/total-investment.md b/docs/finance/total-investment.md index 047eea8..5220a2a 100644 --- a/docs/finance/total-investment.md +++ b/docs/finance/total-investment.md @@ -44,7 +44,8 @@ software lines, and the contingency on top). | Overhead crane, runway, frame premium, machine door | 97k – 227k | 3.2M – 7.5M | estimate, [crane, workshop and tours](../crane-workshop-tours.md) | | Maintenance workshop and machine bay fit-out | 30k – 76k | 1.0M – 2.5M | estimate, same | | Visitor corridor and accessible entrance | 67k – 148k | 2.2M – 4.9M | estimate, same | -| **Added so far** | **~195k – 450k** | **~6.4M – 14.9M** | about 5 to 6% on the full-vision subtotal | +| Artist platform, public side (calculator, campaigns, payments) | 40k – 90k | 1.3M – 3.0M | estimate, [artist platform](../artist-platform.md) | +| **Added so far** | **~235k – 540k** | **~7.7M – 17.9M** | about 6 to 7% on the full-vision subtotal | ## Phased entry diff --git a/docs/process-flow.md b/docs/process-flow.md index 92fd2ef..93f90e7 100644 --- a/docs/process-flow.md +++ b/docs/process-flow.md @@ -11,6 +11,11 @@ A printable diagram of this flow lives alongside this document: [process-flow.png](process-flow.png), and [process-flow.pdf](process-flow.pdf). +Orders reach stage 1 either directly or through the +[artist platform](artist-platform.md), where the upload, the automatic +audio and artwork checks and gate 1 happen before a fan-funded campaign +is allowed to go live. + ```mermaid flowchart TD A[1. Audio intake] --> G1{Artist gate:
master plan approved} diff --git a/docs/production-timeline.md b/docs/production-timeline.md index 8a7f017..8d9bd01 100644 --- a/docs/production-timeline.md +++ b/docs/production-timeline.md @@ -216,6 +216,11 @@ stages quoted separately as "typically X weeks, subject to your approvals". Every plant that quotes from order date and gets caught by a slow artist ends up explaining itself. +The price calculator on the [artist platform](artist-platform.md) quotes +from this table in exactly this form, and a fan-funded campaign shows its +fans an estimated ship month built the same way: campaign close, plus the +typical pre-approval stages, plus the quote above. + ## Honest caveats - **No order has ever run through this plant.** These are planning diff --git a/docs/roadmap.md b/docs/roadmap.md index 650699f..ccc6d19 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -18,7 +18,11 @@ These three run in parallel and gate everything downstream: per-title services and run size; the tour showed no plating and no HVAC anywhere in the incumbent's operation, which is the strongest argument yet for pulling galvanics forward from Phase 5. Carry the - open run-size question into these conversations. + open run-size question into these conversations. The + [artist platform](artist-platform.md)'s price calculator, published + early with indicative prices and an interest list but no payments, + collects that run-size distribution from everyone who configures a + record. 2. **BOI track**: engage a BOI-registered consultant, confirm the activity sub-code, and structure the application so the solar, automation, and R&D measures stack (see [boi.md](boi.md)). The application precedes @@ -92,7 +96,9 @@ These three run in parallel and gate everything downstream: 19. First test pressings, QC baselines, reject-rate shakedown 20. First paying releases; validate turnaround and quality against the - regional pitch + regional pitch. Fan-funded campaigns on the + [artist platform](artist-platform.md) open only after these first + releases have shipped and lead times are measured 21. PVC lab per-lot gate live; begin qualifying Thai/regional compound against the European references