Commit Graph
11 Commits
Author SHA1 Message Date
grabowski 07ef9c0b9a Order demos: spine choice, artwork templates, PDF and AI uploads
Deploy test site / deploy (push) Successful in 50s
User request (October 2026): the order tool needs a thin / thick spine
selection, templates for the jacket and label upload, and must accept AI
and PDF files.

Both artist demos (artist-order, make-a-record):
- Spine: thin 3 mm (one record) or thick 5 mm (two records, or a thick
  insert); a double album in a single jacket takes 5 mm, thin is then
  disabled; 7", gatefold (7 or 9 mm) and own jacket disable the row with
  the reason. Quote line 'Thick 5 mm spine' (R.spine 12 / 10 THB per
  copy, estimate from QRP 0.90 vs 0.55 USD and Kudos 137.50 GBP/order).
  Mock-up draws the spine edge to scale; caption names it.
- Templates: vector PDFs written in the browser for the current choice:
  jacket spread (back, spine, front; 633/635 x 315 mm for 12" from
  Mighty Media Discs), gatefold with an inside page, labels with a page
  per side and the dinked hole; trim and bleed boxes set, 3 mm bleed,
  5 mm safe area, folds, crop marks, guidance notes.
- Uploads accept PDF, AI (PDF-compatible) and images. PDFs are read in
  the browser (object streams inflated with DecompressionStream): page
  boxes, pages, PDF/X, creator, colour spaces, font embedding; checks
  against the chosen spine (a 5 mm spread on a 3 mm order is flagged),
  bleed, CMYK, fonts; old PostScript-only AI files are refused with the
  fix. Image spreads are measured the same way. Preview via pdf.js
  (jsDelivr, loaded only when a PDF arrives); the front panel goes into
  the mock-up.

artist-platform.md: new section 'Artwork templates and files' with the
sources; preflight step links it; RI 'left out' list updated. README
demo bullet. Checked headless on Edge: fixtures (3/5 mm spreads, no
bleed, AI, legacy AI, front only, labels, 150 dpi PNG), downloaded
templates parsed with PyMuPDF, 390/1024/1280 px no overflow, dark and
light, no page errors; pw_mr_check --tour and pw_ri unchanged
(37,836 / 232).
2026-10-16 12:34:58 +07:00
grabowski 5c303dfc61 ERPNext is the only system of record; we build tools on it
Deploy test site / deploy (push) Successful in 46s
User (October 2026): we only build tools and interfaces that interact
with ERPNext; invoices, stock and the rest are kept there, except
telemetry and other machine data.

digital-factory.md: standing decision, decisions 2, 3, 6, 7 and 10
rewritten (ERPNext holds every record of the business and of production,
including artist gates, metal-part genealogy as serial numbers with
parents, and quality inspections; the machine-data store keeps only
cycle and record rows, the hash chain and time series, keyed to ERPNext
names; ERPNext first, then custom fields or document types in cnx_erp,
then a tool, never a second business database). Systems table,
architecture labels, factory application section (modules as a table:
records in ERPNext, what we build, machine data outside; our only tables
are the machine-data ones), ownership table, integration rules 4 and 8,
phasing and estimates (cnx_erp app 2 to 3 person-months; total 3.5 to 6).
artist-platform.md: campaigns are an ERPNext document from launch, pledges
post as advance payment entries; traceability, README, facility security
(archive location on the serial number), production timeline (sets per
mother on the mother's serial number), crane-workshop spares store,
total-investment.

Factory console: KPI row no longer touches the postings card (user
screenshot); ERPNext page, order card, sidenote and ledger say every
record lives in ERPNext and only machine data stays outside; new
postings for artist gates, stamper metrology inspections, stamper set
serial numbers (grown, retired with play count). Checked headless:
Edge dark and light, 1440/1024/390, no overflow or page errors, rows
aligned, pw_fc, pw_wo, pw_feed and pw_erp pass.
2026-10-16 12:14:52 +07:00
grabowski e12ad2ed7b ERPNext runs the whole plant; every tool we build integrates with it
Decided by the user (October 2026): the whole plant runs ERPNext, and
all tooling we develop has to interact with it.

digital-factory.md: standing decision in the summary; decision 10
(ERPNext owns the business documents, the factory application owns the
floor; ERPNext names are the shared keys); new section 'ERPNext: the
plant's ERP' with the ownership table (customers, prices, sales orders,
items and BOMs, work orders and job cards per station, batches and
quality inspections per compound lot, serial numbers for metal parts,
downtime entries, delivery notes, assets, accounting, payroll vs. cycles,
per-record inspection, genealogy and the hash-chained log staying in the
factory application), the integration rules (one typed Frappe REST
client in cnx-factory, an integration user per tool, webhooks in,
transactional outbox with idempotent postings so the floor never waits
on the ERP, business-sized postings, customisation as a Frappe app in
Gitea, nightly reconciliation, no public ERPNext endpoint, new tools use
the same client), hosting on NixOS (no nixpkgs module, NixOS/nixpkgs
#241921; Avunu frappe-nix as the start, frappe_docker as
oci-containers fallback; MariaDB + Redis; vinyl-erp on site behind the
gateway proxy; OIDC sign-on; upgrades on a restored copy), Thai
localisation (Ecosoft erpnext_thailand: VAT, WHT, PND, billing notes;
Ecosoft as partner to quote; payroll and BOI reporting to check),
phasing (dev ERPNext now; accounting and assets from the first capex
invoice; manufacturing at commissioning) and estimates. ERPNext added
to the architecture diagram, services, machines (vinyl-erp), module
list, backup, cost, build order and open decisions; the old 'ERP out of
scope, decide after launch' line replaced.

artist-platform.md: price list, customers, sales orders, campaign
pledges as payment entries, through the plant's outbox. traceability.md:
one ERP, one set of keys. README summary. total-investment.md added
scope: ERPNext (to quote, not in the sum, no licence fee).
2026-10-16 11:29:26 +07:00
grabowski 475623e9f2 Archive the father as well as the mother; how many represses a mother carries
Decided (October 2026): the plant keeps the father and the mother of every
side. production-timeline.md (repress section) records the decision and the
rule of thumb with sources: about 10 stamper sets per mother before it
degrades (Third Man Pressing FAQ, a Nashville plater via WPLN), fewer in
quality-minded sources (5 VinyLab, 6 to 8 Stereo Review 1962); a father
grows about 5 to 10 mothers. So a mother covers roughly ten represses
(10,000 to 20,000 records a side) and a worn one is replaced from the
archived father without a new cut. galvanics.md: 4 archived parts per
title, ~1,200 to 2,400 a year; new open question to all galvanics
candidates (sets per mother, mothers per father, storage).
artist-platform.md repress paragraph.

Demos: make-a-record and artist-order say father and mother are archived;
factory console archives the father on represses too, counts stamper sets
per mother (shown in the genealogy and the customer's metal card), and the
metal archive counts fathers and mothers.
2026-10-16 11:17:13 +07:00
grabowski 5090609df3 Calculators: options from Record Industry's calculator; its prices as a benchmark
Deploy test site / deploy (push) Successful in 45s
Reviewed Record Industry's (Haarlem, NL) public vinyl calculator: a
seven-step wizard with a live itemised cost list priced on its server.
Read its prices for a reference 12" LP at 200 / 300 / 500 / 1,000 copies
and for each option worth copying (checked October 2026).

Both artist demos (make-a-record and artist-order):
- audio arrives as digital files, analog tape (+ tape transfer) or a cut
  lacquer (no blanks, cutting or mastering; mastering choice disabled with
  the reason; cutting and mastering stages skipped in the timeline; the
  passport starts at "Lacquer received")
- labels printed, plain white or plain black (credit line; the label
  artwork drop is disabled for plain labels; the mock-up shows the plain
  label)
- press cleaning before a colour run, on by default, disabled for black
- 7" dinked (large centre hole), 7" only, drawn in the mock-up
- download card and barcode sticker extras
- run-out inscription (A-Z, 0-9, up to 15), scribed along the dead wax in
  the mock-up and named in the passport
- new rates (tape 3,800, cleaning 2,300 per title; plain labels -12 per
  disc; download card 43, barcode 6 per copy) are estimates with Record
  Industry's prices as the basis, each listed in the detailed demo
- make-a-record investor notes: Record Industry's 9 to 11 week quote after
  test-pressing approval against the 7 to 9 week CNX quote, and its 2 %
  reject allowance against 100 % optical inspection

Defaults unchanged (37,836 THB per title, 232 per copy at 100, break-even
41, goal 100, 548 kept).

Docs: artist-platform.md (choices table, benchmark section: what was
taken, what was left out, commercial terms worth deciding);
revenue-model.md (second Western data point: 219 THB a copy at 300
ex-works, per-title and per-copy reading against the assumptions, not a
re-base); production-timeline.md (its published lead times).
2026-10-16 09:42:57 +07:00
grabowski e36d7b00a0 Fan funding: the price sets the fans needed; limited edition as a switch
Deploy test site / deploy (push) Successful in 1m4s
The artist sets only the fan price; the number of fans needed follows from
it: the plant's 100-copy minimum, or the break-even if that is higher. The
goal selector of 6a62505 is removed from both demos.

make-a-record.html:
- step 4 leads with "Your price to fans" (input, slider from 300 THB,
  presets 800 to 2,000) and a live "You need N fans to press it, X THB in
  pre-orders", plus the price below which the minimum no longer covers
  the costs (about 640 THB at the defaults)
- limited edition is now a switch, off by default; the edition size stays
  visible but disabled until it is on, and switching it on adds the
  numbered edition to the record
- "per title" renamed for end users: "One-off, for this release", "once +
  per copy", "One-off setup", with a note that one-off costs count sides,
  not songs (a double LP has four)
- the tour lowers the price to 500 THB and back to show the fans needed
  rising from 100 to 152
artist-order.html: goal field removed, "Fans needed" label and hint.
artist-platform.md: the price-sets-the-goal decision (October 2026).
2026-10-16 08:54:15 +07:00
grabowski 6a62505aa6 Fan funding: the artist chooses the campaign goal in fans
Deploy test site / deploy (push) Successful in 1m9s
The goal is no longer fixed at the larger of the plant minimum and the
break-even; that is now the floor, and the artist sets any goal above it.

- make-a-record.html: "Goal: how many fans you need" with number input,
  slider and chips (Lowest, 150, 200, 300, 500, 1,000); chips below the
  floor or above the edition cap stay visible but disabled with the
  reason; the goal also shows as the pre-order amount (fans x fan price);
  typing below the floor snaps back with a note; the campaign, the
  outcome and the stage run against the chosen goal; the tour shows the
  goal being raised to 150
- artist-order.html: goal field in the campaign card, same floor rule
- artist-platform.md: the floor rule and that a higher goal is all or
  nothing as well

Defaults unchanged (goal 100 = the plant minimum at 1,200 THB, break-even
41, 548 THB kept a copy).
2026-10-15 16:40:49 +07:00
grabowski 4b20ca4f48 Side length per format: team table with songs a side; palette control
Deploy test site / deploy (push) Successful in 47s
Side length "at most" per format is now the table the team supplied
(October 2026, from recordplayerexpert.com, songs counted at an average
4:32): 12" 22 / 15 min, 10" 15 / 12 min, 7" 7 / 5 min at 33 1/3 / 45 rpm.
Changes against the earlier microcut.studio figures: 10" 33 1/3 16 -> 15,
10" 45 11 -> 12, 7" 45 6 -> 5. The comfortable column stays the lower end
of microcut.studio's ranges.

- artist-platform.md: table with a songs column, both sources, and the
  three formats where cutting rooms disagree (10" 45 is now more generous
  than microcut.studio and Diggers Factory) as re-check points for the
  cutting engineer
- artist-order.html: LIM and the side-length table (songs column, sources)
- make-a-record.html: LIM; format cards show the at-most time and about
  how many songs a side; step 2 hint adds the songs; the last control in
  each colour row is now a labelled "Palette" pill with a colour wheel,
  showing the chosen colour and "Your colour" when a custom colour is set
2026-10-15 16:36:11 +07:00
grabowski 607f6631a7 Make a record: investor demo of the artist platform, end-user flow
Deploy test site / deploy (push) Successful in 53s
New static page docs/make-a-record.html (test site /demos/make-a-record/):
the artist platform as a customer would see it, polished for presenting.

- five steps (design, music and art, price, fan funding, track) with a
  sticky stage: to-scale mock-up (record spins at 33 1/3 or 45 rpm on
  hover), spec chips, price per copy, ship month and the next action
- design as option cards and swatches; options that do not apply stay
  visible and disabled (weight and gatefold off 12", colour pickers for
  black vinyl)
- masters and artwork read in the browser as in the detailed demo, side
  bars per side, checks in plain words, approval 1 of 3
- price with the curve, itemised lines folded under one summary, lead time
  as two bars (approvals, then the 7 to 9 week quote)
- fan funding: goal, break-even and what the artist keeps, money rules;
  the campaign on a phone with a pre-order ticker, funded or missed ends,
  production timeline with the artist's approvals, updates feed
- record passport for one delivered copy (stamper, press, cycle time and
  side; stage dates; optical inspection and sampled audio), per
  traceability.md and quality-automation.md, IDs simulated; repress card
- "Investor notes" switch with the business case per step (market
  research, vault, short-run economics and the Thai price gap, plant-owned
  vs broker and the Qrates lesson, traceability and represses); guided
  tour of about a minute (#tour, #notes in the URL)
- light/dark theme shared with the other pages; phone layout with a
  bottom bar

Same price list (demo-0.1) and stage table as artist-order.html, so the
defaults reproduce the artist platform example: 37,836 THB per title,
232 THB per copy at 100, break-even 41, goal 100, 548 THB kept a copy.

artist-platform.md: investor demo paragraph. traceability.md: the record
passport as the per-copy customer view. README bullet and layout line,
site DEMOS line and landing-page entry.
2026-10-15 16:13:29 +07:00
grabowski a07faf6ef0 Artist ordering demo: configure, check, offer, fan-funded campaign
Deploy test site / deploy (push) Successful in 53s
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
grabowski 4607a4da58 Plan the artist platform: price calculator and fan-funded pressing
New docs/artist-platform.md: upload master and artwork with automatic
audio, artwork and rights checks; an itemised price calculator for every
customer (per-title vs per-copy lines, price-per-copy curve, lead time
from the production-timeline quote table, versioned price list); and
fan-funded campaigns that press and dropship per fan once the goal is
reached, refund otherwise. Covers goal maths, payments (charge into a
ring-fenced account, CNX as seller of record, legal opinion first; the
Qrates failure as the design rule), repress pre-orders, architecture on
the cnx-factory stack with the public side on a fleet machine, PDPA,
phasing (calculator public early as a run-size probe, campaigns only
after first releases ship), cost and open decisions.

Backlinks from README, process flow, production timeline, revenue model,
digital factory and roadmap items 1 and 20; total investment added-scope
table gains the platform line.
2026-10-02 17:37:32 +02:00