Back to projects

Couples Web Application

Couple Room

A private room for two people to answer apart and reveal together: synchronized rounds across four built-in games, partner invite and pairing, and a Supabase backend where every table enforces row-level security.

Status Live / Active Visit Website
Couple Room landing screen with its logo, tagline, and list of shared games

Project Overview

Couple Room gives two people a shared private space built around short, honest games rather than open-ended chat. One partner creates the room and invites the other; once paired, both can start a round in any of four games, submit their answers independently, and reveal the result together once both sides have responded.

My Role

Designed and developed the full product, including the Next.js frontend, the Supabase schema and row-level security policies, the four game flows and their round lifecycle, partner invite and pairing, English/Arabic support, and the Playwright end-to-end test suite.

Project Status

Couple Room is live and publicly reachable, with a verified frontend-backend contract and an automated Playwright test suite.

Verified scope

Main Features

  • Account creation, login, and onboarding
  • Partner invite and pairing into a shared couple
  • Couple Questions: independent answers revealed together
  • Reaction Battle: matching reactions to a shared prompt
  • Guess My Answer: one partner guesses the other's real answer
  • Who's More Likely: choosing which partner a prompt fits best
  • Room lobby with live round status
  • Built-in and couple-authored custom prompts
  • English and Arabic prompt translation toggle
  • Row-level security enforced on every table

Implementation

Technology Stack

Frontend

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS

Backend

  • Supabase
  • PostgreSQL
  • Row-Level Security

Testing

  • Playwright

Deployment

  • Vercel
  • Git
  • GitHub

Architecture

The frontend only reads Supabase tables, subject to RLS, and changes state exclusively through RPCs; a typed Database generic passed to every Supabase client makes a wrong table, column, or RPC argument fail at compile time. Round lifecycles are explicit state machines (for example answering → revealed → finished), and a revealed round never blocks a new one from starting.

Building something for two people?

Let's turn the concept into a polished release.

Contact Me