Expo across web and mobile
Expo, React Native, and React Native Web carry one product vocabulary across web, iOS, and Android targets while preserving format-specific behavior.
Case study | Expo + React Native product system
A cross-platform Expo and React Native product for web and mobile, backed by Supabase/PostgreSQL workflows that turn six pool-format rule sets into validated picks, private-group access, automated scoring, and recoverable standings.
Evidence snapshot
The mobile screenshot shows pick entry, but the stronger proof is the product system around format-specific data, client and database authority, authenticated private access, automated score refresh, and standings recovery.
Refresh result + current viewing authority
Problem
Pool apps combine format rules, lock windows, changing scores, private groups, and user trust. Poolhouse keeps pick entry legible while its cross-platform system separates client guidance, backend rule authority, automated score synchronization, recoverable standings, and access control.
Product ownership
The work starts with the decisions and behaviors users need: create a private group, enter valid picks, understand lock state, and trust the standings. Those requirements become data structures, product workflows, validation boundaries, database operations, authorization controls, and explicit failure and recovery states.
Directed Codex-assisted SQL and application development for a Supabase/PostgreSQL backend, translating product requirements into data structures, validation rules, access controls, automated score workflows, and tested recovery states.
Unit, database-security, Edge Function, browser, accessibility, performance, and release checks support troubleshooting, deployment, and continued product stewardship across the web/mobile system.
System
Expo, React Native, and React Native Web carry one product vocabulary across web, iOS, and Android targets while preserving format-specific behavior.
Pool formats, rounds, matchups, entries, selections, and scoring state are modeled for typed Supabase/PostgreSQL operations, client validation, and backend rechecks.
Authentication, private-group membership, commissioner permissions, and Row Level Security govern who can view or change protected pool data.
Protected Edge Function workflows coordinate automated score synchronization and distinguish current, saved, pending, unavailable, retry, and access-revoked states.
Decisions
Client validation explains missing, ineligible, opposing, reused, or duplicate choices. Authenticated database operations independently recheck membership, ownership, and core rules before an atomic write. A closed-window state remains a client boundary, not a universal server-side kickoff guarantee.
An unchanged response can preserve current results, while transient failure can retain a visibly labeled last-known-good snapshot.
Access loss clears retained private rows and caches instead of allowing saved standings to outlive viewing authority.
Public proof excludes repository details, invite codes, member data, operational logs, and account-specific configuration.
Outcome
Built, tested, deployed, and continued to steward the web/mobile product through repeatable release and recovery gates. Poolhouse demonstrates product ownership beyond a framework list: product requirements become structured data, usable workflows, validated outputs, explicit edge and failure states, protected database operations, and a system that can be explained and maintained.