Executive Overview
In the rapidly evolving landscape of generative artificial intelligence, building individual tools has become remarkably accessible. APIs from foundational model providers, open-weight diffusion models, and robust full-stack frameworks mean that developers can spin up a text-to-image generator, a style-transfer pipeline, or a font-rendering utility in a matter of days. However, as independent developer Warren Shi discovered while scaling the AI-powered tattoo planning platform AIMakeTattoo, the true bottleneck of product engineering is rarely the capability of the AI itself.
The real challenge lies in architecture and user experience (UX) orchestration: ensuring that the output of one isolated feature seamlessly feeds into the next step of a user’s creative journey.
Initially conceived as a loose collection of standalone tools—including a text-to-image generator, an image-to-tattoo converter, a lettering designer, a font previewer, and a virtual try-on module—the platform suffered from a fragmented user experience. Each tool generated a brilliant result, only to trap that result within its own silo. Users were forced to download, re-upload, or restart their context whenever they wanted to shift from generating a concept to trying it on a body part or refining its linework.
This report explores the architectural paradigm shift from feature-centric isolation to result-centric continuity. By redefining AI outputs not as dead-end endpoints, but as living data models capable of flowing through a unified pipeline, Shi transformed AIMakeTattoo from a utility belt of disparate widgets into a cohesive, end-to-end design studio.
Detailed Chronology: The Evolution of an AI Architecture
Phase 1: The Trap of the Feature Silo
When developers first approach AI application development, they naturally think in terms of use cases mapped to distinct screens or endpoints. For AIMakeTattoo, the early roadmap looked like a grid of independent capabilities:
- The Text-to-Image Generator: Translating natural language prompts into inked aesthetics.
- The Image-to-Tattoo Flow: Converting raw user sketches or reference photos into tattoo-ready linework.
- The Lettering Generator: Customizing scripts and typography for textual ink.
- The Font Preview Tool: Allowing rapid comparison of standard and custom typefaces.
- The Tattoo Try-On Tool: Projecting designs onto photographic representations of human anatomy.
In the nascent stages of the product, this modular approach functioned adequately. The user base was small, and expectations were low; users forgave friction if the AI delivered a compelling graphic. However, as feature velocity increased, product awkwardness set in. Every single flow ended at its own isolated dead-end.
A user generating a neo-traditional sleeve via the text generator had to manually download the image, navigate to a separate try-on tab, upload the image again, and reposition it. If they wanted to tweak the design’s line weight or shading after seeing it on their skin, they had to bounce back to square one. The product was treating every tool as a sovereign entity that owned its result, rather than recognizing that every action was ultimately producing the same underlying asset: a tattoo concept that the rest of the ecosystem needed to manipulate.
Phase 2: Shifting the Mental Model
The epiphany arrived when Shi re-evaluated the fundamental unit of the application. Instead of organizing code and user journeys around how an asset was created (e.g., "This came from the text generator"), the architecture needed to focus on what the asset was and where it could go next.
The old mental model was structurally disconnected:

AI Tattoo Generator ──> its own result
Image to Tattoo ──> its own result
AI Lettering ──> its own result
Try On ──> separate standalone tool
This was replaced by a streamlined, continuous pipeline where generation was merely the ignition point:
input ──> tattoo result ──> modify ──> try on ──> save / download / share
In this new paradigm, the generative engine—whether text-to-image or image-to-tattoo—took a backseat to the shared result model. The generator became a utility; the state of the tattoo design became the primary citizen of the application.
Phase 3: Implementing the Shared Result Model
To operationalize this shift, the codebase required a conceptual shift toward a unified data structure. While the literal implementation involved complex relational database schemas and state management trees, the core philosophy can be abstracted into a unified interface:
type TattooResult =
imageUrl: string
source: "generator"
By decoupling the origin of the asset from its downstream potential, every tool in the application gained the ability to speak the same language. Whether an image originated from a user’s childhood drawing, a complex prompt, or a custom lettering layout, it entered the exact same downstream pipeline. Modification, sizing, font overlay, and anatomical projection became universal methods applicable to any TattooResult.
Supporting Context & Metrics: Solving Real-World Friction
The impact of this architectural refactoring rippled across every core user workflow within AIMakeTattoo, most notably in the Image-to-Tattoo and Text-to-Tattoo pipelines.
The Image-to-Tattoo Journey: From Endpoint to Starting Line
In traditional implementations, turning an image into a tattoo was treated as a terminal action: upload a photo, receive a stylized ink rendering, and the interaction is complete. In practice, however, generative AI rarely nails a complex visual on the first pass. Users frequently encounter outputs that are "80% correct"—perhaps the subject matter and composition are spot-on, but the line weight is too heavy, the shading style is misplaced, or the contrast fails to translate well to human skin.
Under the new connected architecture, the image-to-tattoo converter was demoted from an endpoint to a staging area:
$$textReference Image longrightarrow textTattoo Design Concept longrightarrow textTargeted Modification longrightarrow textVirtual Try-On$$
By introducing a dedicated Modify step that preserves semantic features while allowing iterative refinement, users no longer had to regenerate entire images from scratch just to tweak a minor element. Once the design reached a satisfying threshold of refinement, it flowed effortlessly into the Tattoo Try-On module, bridging the gap between flat art and anatomical reality.
The Text Tattoo Pipeline: Bridging Typography and Custom Art
Text-based tattoos present a unique UX challenge. Users rarely want to fire up a heavy generative diffusion model just to determine whether a script typeface or a serif font looks better for a loved one’s name or a meaningful date.

The optimized flow respects this nuance by establishing a gradual progression from typography exploration to custom artwork:
$$textFont Preview Grid longrightarrow textCustom Lettering Workspace longrightarrow textTargeted Modification longrightarrow textVirtual Try-On$$
- Font Preview: Users quickly browse and contrast various aesthetic directions for a specific string of text.
- Lettering Generator: Once a typographic direction is locked, the text is ported into a specialized workspace where users can adjust curvature, embellishments, banner integration, and spacing.
- Modification & Try-On: The final text block is wrapped into the universal
TattooResultschema, allowing it to be modified alongside graphical elements and projected onto skin previews.
Official Statements & Architectural Philosophy
Reflecting on the engineering journey, Warren Shi emphasizes that the most profound improvements in modern software development often stem from workflow cohesion rather than algorithmic breakthroughs.
"I used to ask: ‘What feature should I add next?’" Shi notes. "Now I ask: ‘If the user already has a useful result, what should they be able to do with it next?’ That question has been much more useful."
This shift in inquiry transformed how the entire AIMakeTattoo ecosystem was perceived by its creator. Peripheral utilities—such as Roman numeral converters, name tattoo builders, tattoo cost planning estimators, and generation history logs—ceased to be viewed as isolated utility pages floating in isolation. Instead, they were re-contextualized as vital checkpoints and supporting waypoints within a singular, unified planning lifecycle:
$$textIdea longrightarrow textDesign longrightarrow textRefine longrightarrow textLettering / Date Integration longrightarrow textAnatomical Placement$$
Future Outlook: The Next Generation of Connected AI Workflows
The lessons learned from orchestrating AI tattoo tools hold broad implications for the broader software engineering and AI product design communities. As foundation models commoditize raw intelligence, competitive advantage will no longer belong to companies with access to the most powerful models. It will belong to builders who design the most frictionless, intuitive pipelines connecting those models to human workflows.
Key Takeaways for AI Product Engineers:
- Beware the Feature Silo: Do not allow individual AI inferences to dictate the boundaries of your user interface. Design your data models around the lifecycle of the asset, not the mechanism of its creation.
- Prioritize Iterative Continuity: Users rarely achieve perfection on the first inference. Building robust, state-preserving modification loops between generative steps is more valuable than adding flashy new generation styles.
- Unify Handoff Protocols: Standardize how outputs are serialized and passed downstream. When every tool in an application can consume the output of any other tool, the platform’s overall utility scales exponentially rather than linearly.
As AIMakeTattoo continues to expand its feature set, the guiding north star remains clear: the true power of AI is unlocked not when you build more features, but when you stop making your users do the heavy lifting of connecting them.
