Inspiration

Ryozan was built by Justin Walker, a tattoo artist who runs his own shop. He needed help running it, so he taught himself to build its app with AI, then wanted to give the same thing to other independent artists. Studios this size don't have a front desk, a bookkeeper or a social manager. They have one artist answering DMs between sessions.

What it does

Ryozan is a shop operating system for independent tattoo studios, barbershops and other creator businesses. The owner and their clients sign in to one portal and work with a crew of nine AI agents: one orchestrator and eight specialists.

Gala, the orchestrator. Gala is the coordinating agent Justin designed and uses every day to run his own work. Gala is named after Gala Dalí, Salvador Dalí's wife, who managed his business and promoted his art career. That is the job here too: Gala runs the business side of a studio so the artist can make art.

The eight specialists are named after heroes of Ryōzanpaku, the outlaw stronghold in the Chinese classic Water Margin (known in Japan as Suikoden), as Utagawa Kuniyoshi drew them in his woodblock prints. Ensei triages walk-ins and DMs, Saishin handles scheduling, Taisō runs the unified inbox, Andōzen covers aftercare and waivers, Shishin handles deposits and the ledger, Riki does social publishing, Sōkō runs the shop floor, and Rochishin critiques flash and placement from images.

Each agent deals Action Cards for its lane and calls real tools against the shop's own records. A client only ever sees their own bookings, messages and memory.

How we built it

  • Backend: FastAPI with async SQLAlchemy on PostgreSQL. The React 19 portal is served from the same container on Railway.
  • Agents: every turn is an OpenAI-compatible POST /v1/chat/completions call to Nebius Token Factory with the agent's Nemotron model and its allowed tools as function definitions. The API runs a bounded tool loop, returns a receipt per tool call, and shows which model and provider answered.
  • Models, sized per lane:
    • nvidia/Nemotron-3-Ultra-550b-a55b for Gala, the orchestrator, which settles conflicts across the schedule, the ledger and the client thread.
    • nvidia/nemotron-3-super-120b-a12b for Sōkō, Shishin, Saishin and Riki: multi-step tool use over real records.
    • nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B for Ensei, Taisō and Andōzen: short, high-volume, client-facing turns that must feel instant.
    • nvidia/Nemotron-3.5-Super-VL for Rochishin, because it has to look at images.
  • Live web: a Tavily web_search tool any agent can call at runtime (POST https://api.tavily.com/search), with cited sources shown as a web results card.
  • Interop: an MCP server (OAuth 2.1, role- and scope-filtered tools) lets any MCP client work with the shop.
  • Ledger: a separate integer-cent double-entry ledger package, ryozan-econ.

Challenges

  • Keeping agents honest: no agent may claim an action without a tool receipt.
  • Scoping every tool and prompt to the signed-in role so client data never crosses accounts.
  • Picking a model size per lane so the front desk stays fast while the orchestrator can still reason.

Accomplishments

The day-to-day workflows of a working shop (bookings, inbox, aftercare, deposits) now run through Nemotron agents with receipts, not claims. One API key and one OpenAI-compatible client cover four Nemotron variants. Anyone can sign up on the hosted demo with an invite code and see only their own data.

What's next

Each studio connects its own Stripe, Clover, Google Calendar, Meta and SMS accounts. Then Saishin can book against real calendars and Taisō can reply on every channel. After that: Nebius Serverless Jobs for nightly ledger reconciliation and aftercare check-ins.

Try it out (testing instructions)

Demo: https://ryozan-production.up.railway.app/portal

Option A: shared judge account (fastest). Email [email protected], password falcon-harbor-canyon-canyon-221. Its password can't be changed and the account can't be deleted, and other judges may see what you type.

Option B: your own account (recommended). Choose Create an account, enter invite code willow-lantern-glacier-209, and pick any email and a password of 8 or more characters. You're signed in at once; no email is sent. You see only your own data.

  1. Ask the agent on your home screen something, for example "What should I avoid in the first week after a new tattoo?" The status line under the answer names the Nemotron model and api.tokenfactory.nebius.com.
  2. Ask for something current, for example "Search the web for the next major tattoo convention in the US and give me the dates." The agent calls Tavily and a web results card lists the sources it cited.
  3. Optional: open Shop, Inbox and Club. With no studio data seeded they show honest empty states, and connector-dependent features say what they need.

Limitations (upfront for judges)

  • The hosted demo is a fresh studio: no artists, bookings or products are seeded, so booking and shop screens show honest empty states.
  • Third-party integrations (Stripe, Clover, Google, Meta, SMS, email, push) are deliberately not connected on the demo, because they are single-shop accounts. Screens that need them say so.
  • Judge accounts are free-tier clients: 40 agent turns and 25 Tavily searches a month. The shared judge account has 300 turns and 150 searches, shared by every judge who uses it. Sign-up closes and AI access ends after 2026-12-16.
  • Founder and artist tools (Hub, payouts, model desk) are not reachable from a judge's client account.

Built With

Share this project:

Updates