One job, three apps
job_7Hq2, the $49 Translation with a person on every job, in the customer portal, the delivery portal and the owner console, at each step.
Add one line to a Service and a person approves every job before it ships. The same file serves an app for each person the job touches, at the paths below. Nothing here is mocked: each frame is the page the package served at build.
import { Service } from 'services.dev'
export default Service({
name: 'Translation',
input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA' },
output: { document: 'file' },
human: 'always',
price: 49,
})waiting · on approval · $49.00 held2 · Delivereddelivered · $49.00 charged3 · Sent backwaiting · on approval · $49.00 charged4 · Acceptedaccepted · $49.00 finalhuman: 'always'A person approvesno person at this stepThe buyer accepts or sends it backhuman: 'always'The AI redid it; a person approves againno person at this stepYou keep the marginThe customer portal
Your buyer sees where their job is, what came back, and the two things they can do now: accept it, or send it back with a note. It serves at /jobs/job_7Hq2.
delivered · $49.00 chargedThe delivery portal
The people at your line see each job that waits on them, what the AI did, and what they earn for it. One press approves; a note sends it back to the AI. It serves at /people.
waiting · on approval · $49.00 heldjob_7Hq2 · waiting · on approval · $49.00 heldThe owner console
You see every job, what each line cost, and what you keep. It serves at /owner.
accepted · $49.00 finalTenants, firms and practices
Three more apps serve the businesses that work through yours. Each is the same shell, on the same jobs, scoped to what that business may see.
- Tenants
/<tenant>a reseller sells your Services as its own offers, inside your limits - Firms
/<firm>a firm enrolls its own bench in your Pool and is paid for its members - Practices
/<practice>a buyer brings its own professionals into a scoped workspace