Ta’papi — GameLounge Design Bot
A custom Slack app with its own name, mascot, and personality — built end-to-end to guide GameLounge’s design team through complete, correctly-specced Jira tickets, and to answer brand questions for 19+ flagship brands on demand.
Ta’papi · Slack Bolt SDK · Claude API · Jira REST
GameLounge’s design team fields creative requests through a single Jira project (CREATIVE) that has accumulated 25,000+ tickets — and a chronic share of them arrive incomplete or vague. I designed and built Ta’papi, GameLounge’s own Slack app, from the ground up: the code, the conversation flows, and the mascot itself — a small purple chibi T-rex with a monocle who owns his own Slack identity rather than borrowing “Claude”’s.
The goal was to catch every gap — a missing size, a missing legal disclaimer, the wrong market’s compliance rules — at the moment a ticket is filed, not after a designer has already started building the wrong thing.
In practice, a large share of incoming design requests were arriving with:
- Sizes described in words (“a banner and a web variant”) instead of exact pixel dimensions
- A “T&Cs Apply” checkbox ticked with no actual legal text attached — someone has to chase it down after the fact
- Market-specific compliance rules (age-restriction wording, responsible-gambling logos, date/currency formats) copy-pasted from a different market’s ticket
- AI-generated briefs from other tools that sound complete but use plausible-looking, wrong specs
- Arabic/RTL text arriving corrupted through Word → Jira → design-tool copy-paste
- A due date the requester thinks is fine, that Jira’s own workflow won’t actually accept — discovered only after they think the ticket is filed
Every one of these is a real, recurring tax on the design team’s time — rework instead of just building the asset.
Brand assistant — answers questions about GameLounge’s brands (colors, typography, tone of voice, dos/don’ts) and points straight to the right brand-kit assets, fuzzy-matching a partial name when there’s no exact hit, instead of a stakeholder guessing.
Guided ticket intake — a click-only, multi-screen Slack modal across 10 structured request types (Meta Ads, Icon Design, Hero Banner, and more), each with its own real field rules instead of Jira’s raw ~31-option internal taxonomy. A request for several concepts becomes one Jira Epic plus independent Task tickets, each with its own complete brief. The Jira description itself is built as a real structured document — not an LLM paraphrase — so legal and compliance text is always preserved verbatim. A rush-ticket fallback catches the case where Jira’s own due-date rules would otherwise reject the ticket outright, and still gets it filed.
Personality layer — I named and designed Ta’papi’s look and character, then built 8 real mascot pose images, instant small-talk replies, and a Home tab welcome view around him. It’s strictly scoped to casual, non-critical moments — the ticket-intake modal itself stays clear and businesslike, since precision there is the entire point of the bot.
A single long-running Node.js/TypeScript process — no web server, no inbound HTTP port. It holds a persistent outbound WebSocket to Slack via Socket Mode, so Slack pushes events to it rather than the bot needing a public URL to secure. The Anthropic Claude API powers brand Q&A and the free-form chat fallback; ticket descriptions themselves are always built deterministically. The Jira Cloud REST API files the real Task/Epic issues.
Kept alive on a local machine via PM2, hardened with a Windows Scheduled Task that retries and confirms the process is actually back online after a real reboot — not just trusting a command’s exit code. A move to Fly.io for 24/7 hosting is next; the Dockerfile and config are already written as an outbound-only background worker.
Live and in daily use by GameLounge’s design team — all 10 structured ticket types with Epic/variation support, real Jira ticket creation with formatted descriptions, brand lookup across GameLounge’s flagship brands, and the full mascot/personality layer, all running against the design team’s actual Slack workspace.