A reusable domain model (ontology) for tattooing. Not an application—a foundation for building applications.
TatShack is a semantic compiler target that answers: What is a tattoo, and how do all the pieces fit together?
It encodes the complete tattoo lifecycle as immutable, validated domain entities:
Customer Intent → Feasibility Analysis → Design Generation → Selection →
Execution Plan → Session Recording → Healing Tracking → Outcome Assessment
Each entity is immutable at construction, validates its invariants upfront, and answers exactly one business question. No backflow. One-way data flow.
# Run all tests
cargo test --lib
# 492 tests, all passing20 Domain Entities (492 tests, 0 failures):
- ProblemSpace, ConstraintGraph, DesignSpace, ApprovedDesign, ExecutionPlan, SessionResult, ArtistSearchCriteria
- BookingAgreement, PreConsultationData, DepositLifecycle, ConsultationSchedule, ConsultationExecution, DataConfirmation, DesignAgreement
- SessionArrivalLogic, SessionExecution, AftercareBrief, HealingProfile, HealingOutcome
One-Way Data Flow: Each stage owns one business question and produces immutable output. Next stage references by ID only (clean boundaries, no backflow).
7 Essential Checks (austere review):
- No Option dumping (required fields are required)
- Validation at construction (Result<T, Error>)
- Immutability enforced (private fields, getters only)
- Determinism only (same input → same output)
- No infrastructure code (zero HTTP/SQL/JSON)
- Errors explain why (actual values, not templates)
- Tests cover both paths (happy + error)
docs/architecture.md— Complete pipeline overviewdocs/problem-space.md— Customer intent validationdocs/constraint-engine.md— Feasibility analysisdocs/design-engine.md— Design generationdocs/execution.md— Execution specificationsdocs/session.md— Session recordingdocs/healing.md— Healing trackingdocs/skills/— Implementation guidelines
Branch Strategy: Trunk-based development
main— protected (production-ready)feature/*— feature branches flow to main
Current Branch: feature/problem-space (completed)
Completed Phases:
- ✅ Phase 1: Core entities (7 entities, 96 tests)
- ✅ Phase 2: Booking & consultation (7 entities, 198 tests)
- ✅ Phase 3: Session & healing (6 entities, 198 tests)
Most tattoo software treats the domain as a black box. TatShack makes it explicit:
- Semantic precision: Every entity has a name that unambiguously answers "What is this?"
- Validation upfront: Invalid state is impossible at construction time
- Immutability: Records never change (append-only for time-series)
- No infrastructure leakage: Pure domain logic
- Explainability: Every error shows why with actual values
- Semantic Compiler: Ingest tattoo corpus, discover ontology, measure convergence with SSI
- Applications: Booking app, CRM, design assistant built on top
- Knowledge Base: Aggregate patterns across many tattoos
- Research: Publish compiler as semantic ontology extraction contribution
Read the entity source code in crates/core/src/. Every field has a comment explaining why. Every validation function has a test verifying its behavior.
Built with discipline. No shortcuts. No fake patterns. Pure domain logic.
TatShack: The ontology that makes tattooing explicit.