Creative
Consignment tracking for an art gallery
A gallery holds works on consignment from artists, tracks where each piece physically is, records sales and the split owed to the artist, and shows each artist only their own works and statements.
Automatically generated draft
Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.
Section 01 · What has to work
An inventory and consignment ledger that tracks physical artwork locations while calculating automated artist splits and secure statement visibility.
Section 03 · Screens
Every screen, and what it is for.
- ›Dashboard — gallery staff view active locations and recent sales, and the search bar must be instant.
- ›Artwork Detail — staff view physical status and pricing history, and status updates must be instant.
- ›Artist Portal — artists view their own pieces and statements, and load times must be instant.
- ›Sales Entry — staff record buyer transactions and commission splits, and total calculations must be instant.
- ›Statement Generator — staff generate payout reports for a period, and PDF generation must be instant.
Anything not on this list is not in version one. That is what keeps a fixed price fixed.
Section 04 · The data model
What it stores, and who can read a row.
artist
id uuid, name text, email text, commission_rate numeric(5,2), created_at timestamptz
Access · Artists read only their own row; gallery staff read all rows.
artwork
id uuid, artist_id uuid, title text, status enum(consigned, gallery, sold, returned), price numeric(10,2), location text, received_date date
Access · Artists read rows where artist_id matches their user ID; staff read all.
sale
id uuid, artwork_id uuid, sale_price numeric(10,2), artist_payout numeric(10,2), gallery_commission numeric(10,2), sold_at timestamptz
Access · Artists read sales tied to their artwork; staff read all.
statement
id uuid, artist_id uuid, period_start date, period_end date, total_sales numeric(10,2), total_owed numeric(10,2), paid boolean, created_at timestamptz
Access · Artists read statements where artist_id matches their user ID; staff read all.
Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.
Section 05 · States
consigned → gallery → sold | returned
Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.
Section 06 · Where this breaks
What bites products like this one.
Consignment splits calculated with floating-point math will accumulate rounding errors over multiple sales.
Use fixed-precision numeric types for all monetary calculations and store exact integer cents.
Physical artwork movement conflicts between gallery locations and external exhibitions cause inventory drift.
Enforce a required location text field and timestamp log on every status transition.
Section 08 · Deliberately left out
What version one does not do.
- ×Automated ACH payouts to artists — complex payment integrations delay v1; manual bank transfers work for launch.
- ×Multi-currency support — fluctuating exchange rates complicate historical splits; restrict v1 to a single currency.
This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.
Still open
What we would ask before quoting.
- Should artists be able to request returns or update their contact info directly through their portal, or is view-only sufficient for v1?
- Does the gallery operate on a flat commission rate per artist, or can the split percentage vary per individual artwork?
- How are shipping and framing costs handled in the commission split calculation when an artwork sells?
Half of this already exists
Members Circle
The community half of this is a solved problem: paid membership, moderation triaged automatically, and a weekly digest that brings people back.
It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.
Your product, not this one
Get this written for what you are actually building.
Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.