Files
cnx_vinyl/docs/artist-platform.md
T
grabowski a07faf6ef0
Deploy test site / deploy (push) Successful in 53s
Artist ordering demo: configure, check, offer, fan-funded campaign
New static page docs/artist-order.html (test site /demos/artist-order/)
walking the artist platform flow end to end:

- record configurator (format, speed, discs, weight, colour, packaging,
  extras, mastering, test pressings) with a live mock-up
- track list or dropped masters read in the browser (WAV/FLAC/AIFF
  headers, sample peak and clipping), side length against the format,
  jacket and label preflight (size, dpi, CMYK), rights and gate 1
- itemised offer (per title / per copy, pass-through jacket), price per
  copy against quantity, lead time from the production timeline
- direct order or fan-funded campaign: goal = max(minimum run,
  break-even), what the artist keeps, the money rules, a simulated
  campaign (sells out / just makes it / falls short) with refund or
  go-ahead-at-minimum, and the production tracker with the three gates
  and the fan update feed

Price list demo-0.1 splits the doc's 38,000 THB per title and 132 THB per
copy into lines (estimates, each listed with its basis); defaults
reproduce the artist platform example (break-even 41, goal 100, ~548 THB
kept per copy at 100).

artist-platform.md: demo paragraph, side length per format table with
sources, VAT note on the campaign example. README bullet and layout line,
site DEMOS line and landing-page entry.
2026-10-14 19:24:49 +07:00

419 lines
21 KiB
Markdown
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.
# 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.
**Demo.** The [artist ordering demo](artist-order.html) (test site
`/demos/artist-order/`) walks this whole flow on one static page:
configure a record, type the track list or drop the master files and
artwork (read in the browser and never uploaded: format, sample rate, bit
depth, sample peak and clipping, side length against the format, print
resolution and colour space), approve gate 1, get the itemised offer with
its price curve and lead time, then order directly or set up a campaign
and run it to a funded or a missed end, with the production steps and the
three gates after it. Its price list (version `demo-0.1`) splits the
illustration rates below into lines; every split is an estimate and the
page lists each rate with its basis.
## 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.
### Side length per format
The audio check compares each side with the format's limit. Until the
cutting engineer sets CNX's own figures, the demo uses published
cutting-room guidance (checked October 2026):
| Format | Comfortable | At most |
|---|---|---|
| 12", 33⅓ rpm | 18 min | 22 min |
| 12", 45 rpm | 12 min | 15 min |
| 10", 33⅓ rpm | 12 min | 16 min |
| 10", 45 rpm | 8 min | 11 min |
| 7", 33⅓ rpm | 5 min | 7 min |
| 7", 45 rpm | 4.5 min | 6 min |
Source: the microcut.studio format guide
(https://microcut.studio/guides/vinyl-format-guide-12-10-7/, lower end of
each range). Diggers Factory lists hard maxima of 22, 12, 17, 10, 6 and 5
minutes for the same formats (stricter on 12" at 45 rpm), and A to Z Media
14 to 18 minutes as ideal on a 12" LP. Loud or bass-heavy music needs
shorter sides: Diggers Factory's dance-music figures are about 60 % of its
standard ones (11:27 against 19:23 on a 12" LP), which the demo applies as
a factor of 0.6. The engineer check, not this table, decides whether a
side is cuttable.
### 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.
VAT is not in this example. With CNX as seller of record (open decision
1), a 1,200 THB fan price includes about 79 THB of VAT (7/107), which
comes out of the artist's margin; the demo can show the numbers with and
without it.
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.