All work

Lineart

A commission desk for artists like me. Clients describe what they want, Lineart turns it into a quote from my own prices, and the money is held until each stage of the drawing is approved.

Commission 12 at the sketch stage, in blue pencil.Sketch
The same piece at the lineart stage, clean black lines.Lineart
The same piece finished in colour.Colour
#12, one of mine. each stage is a payment checkpoint.

01Why I made this

Most of taking commissions isn’t drawing

Anyone who knows me well knows I’m almost always drawing something. I take commissions and draw a lot of them live on stream. The drawing part is fun. The rest is quoting the same questions over and over, chasing deposits, and keeping track of who’s at which stage in a notes app.

None of that is hard on its own. It just adds up, and the money side is where it hurts. If a client stops replying after the sketch, or files a chargeback after getting the final files (sadly it happens more than you think), there’s usually not much an independent artist can do.

02How it got here

Three directions

My commissions clientpricepaid?due send PayPal link still chasing dropped

A · A better spreadsheet

tidy, but i’d still be chasing payments

Plenty of artists already work this way. It tracks the work, but money still moves outside it, so a ghosted client or a chargeback is just as painful.

search artists… ★★★★☆ hire ★★★★☆ hire ★★★★☆ hire race to the bottom dropped

B · A marketplace

the platform owns my clients

Marketplaces bring new clients, but they also set the rules, take a cut and push everyone to compete on price. I’d rather clients come to me directly, from my stream and my socials.

sketch lineart colour held held paid kept

C · The artist’s desk

money follows the stages

Every card shows where the work is and where the money is. Approving a stage releases a payment, so “done” and “paid” stop being two separate conversations.

The spreadsheet kept things organized and the marketplace handled payments, but neither one tied getting paid to the work itself. The desk does, so that’s the one we went with.

03Brief to quote

The model reads the brief, my rate card does the math

Clients write briefs using informal language (like texting a friend). A language model reads and parses the brief into fields: body type, how many characters, background, personal or commercial, and whether there’s a deadline. Every field keeps the phrase it came from and a confidence score.

Anything under 60% turns into a question for me instead of a guess. Pricing never comes from the model. It’s plain arithmetic on my own rate card, so the same answers always give the same quote. Nothing reaches the client until I press send.

Client brief

Hi! Could I get a half body of my OC Mira? She has silver hair and a red scarf and she’s holding a lantern. Simple background is fine. It’s for my profile picture. Need it by the 20th if possible!

What the model read model output

  • TypeHalf body93%“a half body of my OC”
  • Characters196%“my OC Mira”
  • Pieces190%“a half body”
  • BackgroundSimple88%“Simple background is fine”
  • UsePersonal81%“for my profile picture”
  • RushNo66%“by the 20th”

Needs you before it can price

The 20th is 18 days out. Is that inside your normal turnaround?

Quote your rate card, plain math

Answer the question on the left and the quote fills in. Nothing goes to the client until you send it.

Edit rate card

Sample data. Try the emote request: it’s vague on purpose.

More detail: what the model returns

The model is called with a fixed schema (tool use with structured output), so it can only return these fields. Engineering validates the shape before anything is priced.

{
  "body":       { "value": "headshot | half | full", "confidence": 0.93, "quote": "a half body" },
  "characters": { "value": 1,  "confidence": 0.96, "quote": "my OC Mira" },
  "pieces":     { "value": 1,  "confidence": 0.90, "quote": "a half body" },
  "background": { "value": "none | simple | detailed", "confidence": 0.88, "quote": "..." },
  "commercial": { "value": true | false | null, "confidence": 0.81, "quote": "..." },
  "rush":       { "value": false, "confidence": 0.66, "quote": "by the 20th" },
  "questions":  [ "The 20th is 18 days out. Is that inside your normal turnaround?" ]
}

05On stream

Showing the queue on stream

A lot of my commissions get drawn on stream (on Twitch!). The overlay shows what I’m drawing and how many slots are open, so viewers know the queue exists without me repeating it every ten minutes. It never shows prices or anything private.

The overlay is a browser source in OBS. It only shows queue numbers and first names the client chose, never prices or contact details.

06The money tab

Keeping track of earnings and taxes

US clients pay in US dollars and I get paid out in Canadian. The money tab shows both, takes out fees, and sets a share aside for taxes so tax season isn’t a surprise.

07The system

How payments move through each stage

System

Where the money is at every step

review stages Each stage: up to 2 revisions, then an add-on quote. No reply for 7 days counts as approval. revise Quote sent waiting on client Accepted deposit charged Sketch review with client Lineart review with client Colour review with client Final review with client Delivered files unlocked charge 50%, hold on approve: release deposit, charge 25%, hold on approve: release 25% charge and release 25% when it goes sideways Cancelled before the sketch deposit refunded, minus work done per terms a chargeback can arrive at any paid step Dispute opened disputed funds frozen, evidence pack built Bank decides funds return to the artist, or refund Lineart doesn’t decide disputes, but it keeps the signed quote, approvals, files, messages and stream timestamps so the artist can prove their side.
Funds are charged at the start of a stage and held until the client approves it. Dashed lines are the paths that aren’t the happy one.
More detail: the data model

Data model

Twelve tables

QueueSlot positionpublic_labelcommission_id? Artist display_namepayout_account_idhome_currency RateCard base prices, add-onsrevision_limitauto_release_days Revision numberrequested_ataddon_quote_id? Quote versiontotal, splitsigned_at Commission artist_id, client_idstage, statuscurrency Milestone stageamountauto_release_at EvidenceItem kindsha256captured_at LineItem label, amountsource: model | artistconfidence Client emaildisplay_namecountry Payment processor_refamount, currencystate: held | released | … Dispute payment_idopened_at, reasonstatus
Most of the app revolves around the Commission table, and Payment keeps track of where the money is. The lines here are simplified. Each commission has one active quote (older ones are saved) and gets split into milestones, which can each have their own payments and revisions.

08Design system

Small pieces that carry a lot of state

Stage chips

  • Sketch
  • Lineart
  • Colour
  • Final files

Each stage gets its own drawing mark, so you can read a stage without relying on colour.

Money states

  • Awaiting deposit
  • Held
  • Released
  • Frozen
  • Refunded

Words first, colour second. “Held” always means the client paid and the artist hasn’t been paid out yet.

Confidence chips

  • 93%
  • 66%
  • 41% · ask
  • answered

80% and up is shown plainly. 60–79% gets a second look. Under 60% turns into a question for the artist instead of a guess.

Revisions

1 of 2 used

+extra revision, CA$25

no surprise bills. the limit is on the quote from day one.

09Watching artists quote

What other artists caught (and missed)

We sat with other commission artists while they quoted real requests from their inboxes. Most of what the model asks for came straight out of those sessions.

  • One artist quoted a “simple portrait” at her personal rate, then noticed “for my stream panels” a couple of lines down. It was a commercial piece, which usually costs more.

    Now Lineart asks how the art will be used before it gives a price.

  • A client mentioned their deadline at the very end of a really long message. The artist didn’t catch it until after she’d quoted her usual turnaround.

    Now any date in the brief gets pulled out and flagged, in case it’s a rush job.

  • A brief said one character, but the reference sheet had two on it. She quoted for one, and the conversation after that was pretty awkward.

    Now when the brief and the references don’t match, Lineart asks which one is right.

  • One artist likes to start sketching as soon as a request seems serious. The last client who ghosted her never paid a deposit.

    Now the deposit gets charged before any sketching starts (artists can turn this off).