Skip to main content

Roommate Expectations App - PRD

Executive Summary

A Progressive Web App (PWA) designed to transform written roommate expectations into a living, trackable system. Built for Gary Sheng and Dawson Carroll as they begin their new living arrangement at Hyde Park, Austin.

The core philosophy: Make expectations stupidly clear. No ambiguity. No "I thought you were going to do that." Just a shared source of truth that both roommates can reference and update in real-time.


Problem Statement

Roommate conflicts rarely stem from malice. They stem from:

  1. Unclear expectations - "I didn't know that bothered you"
  2. Memory gaps - "Whose turn was it to take out the trash?"
  3. Invisible labor - "I always buy the dish soap"
  4. Communication friction - Awkwardness around bringing up small issues before they become big ones

Traditional solutions (verbal agreements, posted lists on the fridge) fail because:

  • They're not accessible when you're at the store wondering "did we need paper towels?"
  • They don't track history
  • They require manual mental tracking of rotating responsibilities
  • They create friction around accountability

Solution Overview

A mobile-friendly web app that:

  1. Codifies expectations - Every rule is visible, agreed-upon, and referenceable
  2. Automates rotation tracking - The app knows whose turn it is
  3. Creates accountability without awkwardness - The system does the reminding, not your roommate
  4. Builds trust through transparency - Shared expense history, task completion logs

Target Users

Primary Users

  • Gary Sheng - Moving into Dawson's apartment at Hyde Park, Austin
  • Dawson Carroll - Current resident, podcast strategist, fellow Christian

User Context

  • Both are busy professionals with unpredictable schedules
  • Both value clear communication and have discussed expectations upfront
  • Both are Christians who want to "push each other towards Christ"
  • Both are technically literate and comfortable with apps

Core Features

1. Dashboard (Home Screen)

The first thing you see when opening the app. Shows at-a-glance status of everything that matters.

Components:

  • Your Turn Alert - Prominent banner if any rotating task is on you
  • Today's Cleaning Status - Quick view of daily checklist completion
  • Balance Summary - "Dawson owes Gary $14.50" or "All square"
  • Recent Activity Feed - Last 5 actions (tasks completed, expenses logged, guests announced)
  • Faith Encouragement - Daily verse or encouragement widget (optional, can be hidden)

Design Notes:

  • Should load in under 2 seconds
  • Everything important visible without scrolling on mobile
  • Dark mode default with light mode option

2. Rotating Tasks

Tracks "who did it last" for tasks that alternate between roommates.

Tasks to Track:

TaskFrequencyNotes
Regular trashAs neededWhen full or stinking
Friday trash dayWeeklyPut out bins for pickup
Shared supplies purchaseAs neededDish soap, detergent, hand soap, counter cleaner
VacuumingWeekly minimumCommon areas

For Each Task, Display:

  • Task name and icon
  • Who did it last
  • When they did it (relative time: "3 days ago")
  • Whose turn is next (prominently displayed)
  • History log (expandable)

Interactions:

  • One-tap "I did this" button
  • Confirmation dialog to prevent accidental taps
  • Optional: Add notes ("Bought the big bottle this time")

Logic:

  • Simple alternation: Gary → Dawson → Gary → Dawson
  • System automatically updates "next up" when task is marked complete
  • If same person does it twice in a row, that's fine (sometimes you just do it) but the system notes it

3. Daily Cleaning Checklist

Personal accountability for daily cleaning habits. Not about tracking each other, but about personal commitment to shared standards.

Daily Tasks:

TaskRule
DishesEither drying on rack or in dishwasher by end of day
DishwasherRun it when full
CountersWipe after cooking
CupsDon't leave empty cups lying around
Common areaKeep tidy by end of day
Leftovers checkNothing older than 1 week in fridge

Behavior:

  • Resets at midnight each day
  • Each roommate checks off their own items
  • No nagging or notifications to the other person
  • Weekly summary shows completion rates (for self-reflection, not judgment)

Design:

  • Simple checkboxes
  • Satisfying animation on completion
  • Green checkmarks persist until midnight reset

4. Expense Tracker

Tracks shared expenses and calculates running balance.

Expense Categories:

  1. Shared Supplies (rotating purchase responsibility)

    • Dish soap
    • Laundry detergent
    • Hand soap
    • Counter cleaner
    • Paper towels
    • Trash bags
    • etc.
  2. Utilities (split 50/50)

    • Electric
    • Internet
    • Water (if applicable)

Expense Entry Fields:

  • Item/description (required)
  • Amount (required)
  • Category: Shared Supplies / Utilities / Other
  • Paid by: Gary / Dawson
  • Date (defaults to today)
  • Receipt photo (optional)

Balance Calculation:

  • For Shared Supplies: Track who bought what, running total
  • For Utilities: Enter total, auto-calculate 50% split
  • Display: Net balance ("Dawson owes Gary $X" or "All square")

Settlement:

  • "Settle Up" button to record when balance is paid
  • Settlement history log

Monthly Summary:

  • Total shared expenses
  • Breakdown by category
  • Who paid what

5. Guest Notifications

Simple visibility into when guests are expected. Not a permission system. Just a heads-up.

Fields:

  • Who's posting (auto-filled)
  • Brief message ("Friend coming over for dinner")
  • Date/time (optional, defaults to "today")

Display:

  • Reverse chronological feed
  • Shows: Who posted, message, when
  • Last 30 days visible, older archived

Rules Codified:

  • "If someone needs to crash, just communicate"
  • "Don't allow guests to use each other's things"
  • These appear as reminder text in the guest section

6. Move-In Todos

Shared checklist for one-time setup tasks.

Initial Items:

  • Move Gary in
  • Get second key made
  • Work out shared common space
  • Figure out rent payment method

Features:

  • Add new items
  • Mark complete (shows who completed, when)
  • Archive completed items
  • Can be repurposed for future projects (apartment improvements, etc.)

7. Expectations Reference

A static page that displays the full roommate expectations document. Always accessible. The source of truth.

Sections:

  1. Core Values (Communicate well, Respect space, Push each other towards Christ)
  2. Cleaning Standards
  3. Expense Rules
  4. Space Rules
  5. Guest Etiquette

Design:

  • Clean typography, easy to read
  • Expandable sections
  • Last updated timestamp
  • Option to propose edits (creates a discussion item)

8. Faith Integration (Optional Feature)

Given the shared commitment to "push each other towards Christ," include optional faith elements.

Options:

  • Daily verse on dashboard (from API or curated list)
  • "Praying for you today" quick action
  • Weekly reflection prompt ("How did we honor God in our home this week?")
  • Can be fully hidden if preferred

Technical Architecture

Platform: Progressive Web App (PWA)

Why PWA over native:

  • Works on any device (iOS, Android, desktop)
  • No app store approval needed
  • Can be installed to home screen
  • Offline capable
  • Faster to build and iterate

Tech Stack

ComponentTechnologyRationale
FrameworkNext.js 14 (App Router)Modern React, great PWA support, easy deployment
StylingTailwind CSSRapid UI development, consistent design
DatabaseFirebase FirestoreReal-time sync, generous free tier, easy auth if needed
HostingVercelFree tier, automatic deployments, great DX
PWAnext-pwa packageSimple service worker setup

Data Model (Firestore)

/config
- roommates: ["gary", "dawson"]
- createdAt: timestamp

/rotatingTasks/{taskId}
- id: "trash"
- name: "Take out trash"
- icon: "🗑️"
- lastDoneBy: "gary" | "dawson" | null
- lastDoneAt: timestamp | null
- nextUp: "gary" | "dawson"
- history: [
{ by: "gary", at: timestamp, notes: "" },
{ by: "dawson", at: timestamp, notes: "" }
]

/cleaningLogs/{YYYY-MM-DD}
- date: "2026-01-02"
- gary: {
dishes: true,
counters: false,
cups: true,
commonArea: true,
completedAt: timestamp
}
- dawson: {
dishes: true,
counters: true,
cups: true,
commonArea: true,
completedAt: timestamp
}

/expenses/{expenseId}
- id: auto-generated
- item: "Dish soap"
- amount: 8.99
- category: "shared" | "utilities" | "other"
- paidBy: "gary" | "dawson"
- date: timestamp
- notes: ""
- receiptUrl: "" (optional)
- createdAt: timestamp

/settlements/{settlementId}
- amount: 50.00
- from: "dawson"
- to: "gary"
- date: timestamp
- notes: "Venmo'd"

/guests/{guestId}
- postedBy: "gary" | "dawson"
- message: "Friend coming over for dinner"
- expectedDate: timestamp
- createdAt: timestamp

/todos/{todoId}
- text: "Get second key made"
- completed: false
- completedBy: null | "gary" | "dawson"
- completedAt: null | timestamp
- createdAt: timestamp
- createdBy: "gary" | "dawson"

Security Model

Simple approach (no auth):

  • App is accessible only via direct URL
  • URL not indexed by search engines
  • Firestore rules allow read/write from app domain only
  • Acceptable for two trusted roommates

If auth desired later:

  • Add Firebase Auth with email/password or Google
  • Each user authenticates
  • Firestore rules restrict to authenticated users

User Interface Design

Design Principles

  1. Mobile-first - Primary use case is checking/updating from phone
  2. One-tap actions - Common tasks require minimal interaction
  3. Glanceable - Key info visible without drilling down
  4. Dark mode default - Easier on eyes, modern aesthetic
  5. No clutter - Every element earns its place

Bottom navigation bar with 5 items:

  1. Home (Dashboard)
  2. Tasks (Rotating tasks)
  3. Clean (Daily checklist)
  4. Money (Expenses)
  5. More (Guests, Todos, Expectations, Settings)

Color Palette

ElementColorUsage
Background#0a0a0aDark base
Cards#1a1a1aElevated surfaces
Primary#22c55eActions, success states
Warning#f59e0bAttention needed
Danger#ef4444Overdue items
Text#fafafaPrimary text
Muted#71717aSecondary text

Typography

  • Headings: Inter or similar geometric sans-serif
  • Body: System font stack for performance
  • Monospace: For amounts and dates

Key Screens Wireframes

Dashboard:

┌─────────────────────────────┐
│ 🏠 Gary & Dawson │
├─────────────────────────────┤
│ ⚠️ YOUR TURN: Take out │
│ trash │
├─────────────────────────────┤
│ Today's Cleaning 3/5 ✓ │
│ [━━━━━━━━━━░░░] │
├─────────────────────────────┤
│ Balance All square │
├─────────────────────────────┤
│ Recent Activity │
│ • Gary: Bought dish soap │
│ • Dawson: Vacuumed │
│ • Guest: Friend tmrw │
├─────────────────────────────┤
│ 📖 "Iron sharpens iron..." │
└─────────────────────────────┘
│ 🏠 📋 🧹 💰 ⋯ │
└─────────────────────────────┘

Rotating Tasks:

┌─────────────────────────────┐
│ ← Rotating Tasks │
├─────────────────────────────┤
│ 🗑️ Regular Trash │
│ Last: Gary, 3 days ago │
│ Next up: DAWSON │
│ [I Did This] │
├─────────────────────────────┤
│ 📦 Friday Trash Day │
│ Last: Dawson, Jan 3 │
│ Next up: GARY │
│ [I Did This] │
├─────────────────────────────┤
│ 🧴 Shared Supplies │
│ Last: Gary (dish soap) │
│ Next up: DAWSON │
│ [I Bought...] │
├─────────────────────────────┤
│ 🧹 Vacuuming │
│ Last: Dawson, 5 days ago │
│ Next up: GARY ⚠️ │
│ [I Did This] │
└─────────────────────────────┘

Implementation Phases

Phase 1: Foundation (Day 1 Morning)

  • Initialize Next.js project with TypeScript
  • Configure Tailwind CSS with dark theme
  • Set up Firebase project and Firestore
  • Configure PWA manifest and service worker
  • Create basic layout and navigation shell
  • Deploy to Vercel

Phase 2: Core Features (Day 1 Afternoon)

  • Build Dashboard with placeholder data
  • Implement Rotating Tasks with full CRUD
  • Implement Daily Cleaning Checklist
  • Wire up Firebase real-time listeners

Phase 3: Expenses & More (Day 2 Morning)

  • Build Expense Tracker with balance calculation
  • Implement Guest Log
  • Implement Move-In Todos
  • Add Expectations reference page

Phase 4: Polish (Day 2 Afternoon)

  • Add animations and micro-interactions
  • Implement PWA install prompt
  • Add offline support
  • Test on multiple devices
  • Seed initial data (your actual expectations)
  • Final deploy

Success Metrics

Functional Success

  • Both roommates can access the app from their phones
  • Real-time sync works (one person's action appears for the other)
  • PWA can be installed to home screen
  • App works offline for viewing (syncs when back online)

Adoption Success (1 month check-in)

  • App is used at least weekly by both roommates
  • Rotating task disputes: zero
  • "Whose turn was it?" questions: zero
  • Both roommates report feeling clarity around expectations

Relationship Success (3 month check-in)

  • No roommate conflicts related to tracked areas
  • Both report the system as helpful, not annoying
  • Optional: Positive impact on faith accountability

Future Enhancements (Not in V1)

  1. Push notifications - "Reminder: Trash day tomorrow"
  2. Recurring expense scheduling - Auto-log monthly utilities
  3. Photo evidence - Before/after cleaning photos
  4. Gamification - Streaks, achievements (maybe too much)
  5. Multi-roommate support - Scale to 3+ people
  6. Receipt OCR - Scan receipts to auto-fill expense
  7. Integration with Venmo/Splitwise - Direct settlement
  8. Calendar sync - Guest notifications to phone calendar

Risks and Mitigations

RiskLikelihoodImpactMitigation
One person doesn't use itMediumHighMake it so simple there's no excuse. One-tap actions.
App feels like surveillanceLowHighFocus on self-accountability, not tracking the other. No notifications about what the other person didn't do.
Over-engineeringMediumMediumStick to the weekend timeline. Ship MVP first.
Firebase costsVery LowLowTwo users, minimal data. Free tier is more than enough.

Appendix A: Full Expectations Document

For reference, the complete roommate expectations as agreed upon:

Core Values

  • Communicate well and don't be afraid to.
  • Respect each other's space and things.
  • Push each other towards Christ!

Cleaning

  • Dishes either drying on rack or in dishwasher by end of day.
  • When dishwasher is full, run it.
  • Wipe counters after cooking.
  • Don't keep leftovers in fridge for longer than one week.
  • Vacuum at least one time a week.
  • Keep common area clean.
  • Don't leave empty cups lying around, either put them in dishwasher or clean and dry them.
  • When trash is stinking or full, take it out (rotating list).
  • Trash day is Friday morning; put out bins for pickup (rotating list).

Expenses

  • For shared use items, rotate buying (rotating list).
  • Split utilities down the middle.
  • Groceries are separate (ask before eating something the other bought).

Space

  • Keep common area clean by end of day.
  • Ask before using another's things unless specified.
  • Don't allow guests to use each other's things.

Guests

  • Text each other if someone will be coming over to give a heads up.
  • If someone needs to crash, just communicate with each other.

Appendix B: Project Structure

roommate-app/
├── app/
│ ├── layout.tsx # Root layout with nav
│ ├── page.tsx # Dashboard
│ ├── tasks/
│ │ └── page.tsx # Rotating tasks
│ ├── cleaning/
│ │ └── page.tsx # Daily checklist
│ ├── expenses/
│ │ ├── page.tsx # Expense list & balance
│ │ └── add/page.tsx # Add expense form
│ ├── guests/
│ │ └── page.tsx # Guest log
│ ├── todos/
│ │ └── page.tsx # Move-in todos
│ └── expectations/
│ └── page.tsx # Full expectations doc
├── components/
│ ├── ui/
│ │ ├── Button.tsx
│ │ ├── Card.tsx
│ │ ├── Checkbox.tsx
│ │ └── ...
│ ├── Dashboard/
│ │ ├── YourTurnAlert.tsx
│ │ ├── CleaningStatus.tsx
│ │ ├── BalanceSummary.tsx
│ │ └── ActivityFeed.tsx
│ ├── Tasks/
│ │ └── TaskCard.tsx
│ ├── Expenses/
│ │ ├── ExpenseForm.tsx
│ │ └── ExpenseItem.tsx
│ └── Navigation.tsx
├── lib/
│ ├── firebase.ts # Firebase config & init
│ ├── db.ts # Firestore helpers
│ ├── hooks/
│ │ ├── useTasks.ts
│ │ ├── useExpenses.ts
│ │ ├── useCleaning.ts
│ │ └── ...
│ └── utils.ts # Date formatting, etc.
├── public/
│ ├── manifest.json # PWA manifest
│ ├── icons/
│ │ ├── icon-192.png
│ │ └── icon-512.png
│ └── sw.js # Service worker (generated)
├── styles/
│ └── globals.css # Tailwind imports
├── next.config.js # Next.js + PWA config
├── tailwind.config.js
├── tsconfig.json
├── package.json
└── README.md

Appendix C: Firebase Setup Checklist

  1. Create new Firebase project at console.firebase.google.com
  2. Enable Firestore Database (start in test mode, lock down later)
  3. Get web app config (apiKey, authDomain, projectId, etc.)
  4. Create .env.local with Firebase credentials
  5. Initialize collections with seed data

Firestore Rules (initial permissive, tighten later):

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}

Document created: January 2, 2026 Authors: Gary Sheng, with AI assistance Status: Ready for implementation