On this page
Industry packs
Shared objects. Trade-specific questions.
A pack defines the questions and pricing factors for a trade. Each business chooses its enabled factors, rates, minimums and deposit rules. All packs use the same core objects.
Tattoo Draft · 0.1.0
Powered by Tattoo.dev. Pack ID: tattoo. The reference catalogs and evaluator live in packs/tattoo/ in the repository.
Example data, not real prices. Reference settings are synthetic and carry the provenance “tattoo.co current constant, unvalidated.” They are not validated market prices. The example seven-day expiry is a configurable business choice, not a protocol default.
Intake questions
Preserve raw sizes, including unsure. Positive width and height, both supplied in inches, override square defaults. Placement is multi-select; multiple selections do not add areas. Budget and first-tattoo answers are informational and do not affect price. Required questions depend on enabled factors and asked versus inferred mode.
| ID | Question | Type | Catalog required |
|---|---|---|---|
description | Describe your tattoo | text | Yes, when applicable |
placement | Placement areas | multi_select | Yes, when applicable |
size | Size choice | single_select | Yes, when applicable |
width | Width | number | No |
height | Height | number | No |
complexity | Complexity | single_select | Yes, when applicable |
style | Color style | single_select | Yes, when applicable |
budget_min | Minimum budget | number | No |
budget_max | Maximum budget | number | No |
first_tattoo | Is this your first tattoo? | boolean | No |
reference_images | Number of reference images | number | No |
Pricing switches
| Factor | Status | Enabled by default |
|---|---|---|
size | modeled | Yes |
placement | modeled | Yes |
complexity | modeled | Yes |
style | modeled | Yes |
wraparound | modeled | No |
tier | modeled | Yes |
deposit | modeled | Yes |
sessions | not yet modeled | No |
cover_up | not yet modeled | No |
multi_area | not yet modeled | No |
city_rate | not yet modeled | No |
non_usd | not yet modeled | No |
Size, placement, complexity, style, wraparound, tier and deposit have reference math. Sessions/session caps, cover-up, multi-area summing, city rate and non-USD currency are explicitly not yet modeled and cannot be enabled. The session envelope is provisional, not session splitting.
Reference evaluator
Call evaluate(answers, pricingModel, now) with consent alongside the raw answers and an explicit Date or RFC 3339 timestamp. Call getEnabledQuestions(pricingModel) to select intake questions. The evaluator does no I/O, reads no clock and does not mutate its inputs.
For a QuoteRequest, pass { ...request.answers, consent: request.consent }. A non-binding Estimate includes a price range in both pre_price and post_price review modes, and still requires artist review. The evaluator does not approve quotes or anonymize free text.
{
"pack_id": "tattoo",
"pack_version": "0.1.0",
"answers": {
"description": "A small geometric mountain design with clean outlines.",
"size": "sm",
"placement": [
"Lower Arm"
],
"complexity": "simple",
"style": "blackgrey"
},
"consent": {
"share_for_pricing_research": false,
"anonymize": true,
"captured_at": "2026-11-05T12:00:00Z"
}
}Inspect the actual default model · See the evaluator’s complete Estimate · Question catalog schema · Factor catalog schema
Help define the next pack
- Laser removal — planned.
- Agency websites — planned.
- Auto wraps / PPF / tint — planned.
These are directions for co-design, not available packs. No draft pricing or industry-specific schema is published for them.