Onigiri the cat
ONIGIRICode Supervisor
VOL. 132026Side project

LINKLE2026 | Haru Li

LINKLE screenshot 1
LINKLE screenshot 2
LINKLE screenshot 3
LINKLE screenshot 4
LINKLE screenshot 5
LINKLE screenshot 6
DETAIL

The problem

A Pokémon GO trade only works when both players happen to have what the other wants, and can agree on a time and place. Players end up spamming the same offers in group chats, where messages scroll away quickly and there is no way to tell whether the other side is reliable.

Approach

Built with AI agents, with me as Tech Lead — owning the product definition, the phased roadmap and architecture decisions, and signing off each phase before the next one starts. A Turborepo monorepo splits into a Next.js 16 player app, a Vite + React 19 admin console and a Fastify API, sharing Zod schemas and types across all three, on PostgreSQL 17 + Prisma; sign-in runs through Clerk, with Organization-based permissions guarding the admin side. Pokédex metadata is imported from an open dataset into staging, then normalized, reviewed by hand and previewed before it is published, with every change recorded as a revision. Matching is rule-based and explainable: both players' Have / Want lists are compared on species, form, shiny, special traits and trade region, and every matching reason is listed. Nearby discovery narrows candidates with a bounding box and computes Haversine distance inside SQL, so exact coordinates never leave the server. A partial unique index blocks duplicate proposals, and accepting one reserves both Pokémon in the same transaction; completing or abandoning a trade needs both players to confirm, with Serializable transactions handling simultaneous submissions. Ratings are double-blind, contribution points are derived from an event ledger rather than stored as a mutable field, friend codes are revealed only after both sides accept, and every API response passes through privacy-filtered DTOs.

Outcome

Started September 2026. Have / Want, matching, nearby discovery, proposals and notifications, completion confirmation, ratings and trade coordination are in place, with 290 tests across the API, player app and admin console — PostgreSQL integration tests included — all passing. Still in active development.

TECH STACK //
Next.js 16React 19TypeScriptTailwind CSSFastifyZodPostgreSQLPrismaClerkTurborepoVitest