
Concept demo with a fictional brand and sample data. Not client work.
An admin reports a result and rules on a dispute: the bracket and Trust Scores move at once
A closed beta for about 100 players: invite-only seats linked to Discord accounts, an 8-player double-elimination bracket (winners bracket, losers bracket, grand final and reset), disputes with evidence and an admin ruling, identity verification, and a Trust Score on each profile that updates live.
How it is built
React and TypeScript front end built with Vite, with a data layer that uses the Supabase client calls (select, insert, update, realtime channel).
Postgres schema as Supabase migrations: 10 tables, 17 row-level-security policies, and a compute_trust_score() function with refresh triggers on matches, disputes and verifications.
Supabase Edge Functions: a Discord OAuth callback (state cookie, code exchange, invite check, auth user link, profile row) and an identity verification webhook (HMAC signature check, status changes).
The same Trust Score, bracket and dispute rules in TypeScript and in SQL.
Tests: 43 of 43 Vitest tests and 44 of 44 Postgres checks passed.

Trust Score on a profile with every part of the score and its history

Dispute with clip, screenshot and match log evidence, and the admin ruling

Continue with Discord: redirect, callback, session and profile row

Phone layout at 390 px
0 likes · 2 views · Oct 13, 2026
Demo with sample data: invite-only tournaments for 100 players. Discord sign-in, identity checks, a double-elimination bracket, disputes with evidence, and a Trust Score that updates live. React, TypeScript, Supabase, Postgres RLS.