The home dad you can call
Snap a photo. Odosan tells you what it is, what it should cost, and whether it's a quick DIY or worth calling a pro — so you spend the least to keep your home healthy.
Two threads converged: a home-maintenance product I'd been shaping for first-time homeowners, and the H0 Hackathon's requirement to ship on Vercel with a real AWS database.
- Role
- Product Designer & Builder
- Date
- 2026
- Format
- PWA · phone-first
Five screens that carry the product
Odosan starts with regular maintenance for first-time owners
Odosan is built for people who just bought their first home and don't yet have a mental model for upkeep. I mapped the full ownership arc — buy, move in, maintain, upgrade, budget — and kept coming back to the same column: regular maintenance. That's the space we're targeting — what to fix, when it matters, and who to call when you don't have inherited home knowledge.

Know what's wrong — and whether you can fix it yourself.
Take a photo, add a quick note. Odosan tells you what it is, what it should cost, and whether it's a quick DIY or worth calling a pro.
- Snap + a sentence — diagnosis and fair price for your area
- DIY or pro? Straight answer on which way costs less
- Save to My Home — a record that grows over time
How the app connects to its data
The H0 hackathon required a real AWS database — not a mock. That constraint became the spine of the build: Next.js PWA on Vercel, server API routes as the trust boundary, and Amazon Aurora PostgreSQL as the centerpiece every persistent piece of state flows through.
Sensitive logic runs server-side — secrets never reach the browser. Bedrock handles diagnose and nameplate OCR. S3 stores photos durably. Aurora holds providers, leads, quotes, home profiles, and auth — with contact data gated behind consent, enforced as a foreign-key boundary inside Postgres.
Client
Homeowner & Provider
installable PWA · Next.js
Trust boundary
Vercel — server API routes
secrets never reach the browser
AI
Amazon Bedrock
diagnose · nameplate OCR
Storage
Amazon S3
diagnose + nameplate photos
AWS database
Amazon Aurora PostgreSQL
Serverless v2 · us-west-2
Persistent state
App data in Aurora
providers · leads · quotes · homes · users
Privacy gate
contacts · gated
identity · phone · email — released on consent
Commerce
Amazon Associates
DIY parts to buy
The privacy promise is a foreign-key boundary.
A provider reaches a homeowner's contact info only after consent, enforced inside the database, not just in policy.
Four AWS services power Odosan
Submission answer for H0: Amazon Aurora PostgreSQL Serverless v2 — cluster odosan-aurora, engine 16.4, region us-west-2, fronted by RDS Proxy and Secrets Manager.
Aurora PostgreSQL
Primary data store — providers, leads, quotes, home profiles, auth tables.
Amazon Bedrock
Claude Sonnet 4.6 for nameplate OCR and diagnose reasoning.
Amazon S3
Durable nameplate photo storage (`odosan-nameplates`).
RDS Proxy + Secrets + IAM
Production connection pooling and scoped credentials.

Privacy enforced in the schema, not in policy
The red box in the architecture diagram is the point: contacts (identity, phone, email) live in a gated relation. A provider reaches them only via a consented lead row — not a service-layer check, not an admin override. The database is the trust boundary.
providers ──┬─ provider_users (claim a business)
└─ provider_areas
homes ──────┬─ home_systems
└─ home_profiles · territory_summaries
leads: problem + neighborhood ONLY — no contact fields
quotes: lead_id → provider_id (estimate range)
contacts: released only on homeowner consent
user/session/account/verification (better-auth)
user_home_briefs · user_home_systems (per-user saved record)From photo to fix — with a fork that respects the homeowner
Open Odosan, snap a photo, get a confident AI diagnosis with clarifying questions when the image alone isn't enough. Then fork: DIY parts or matched East Bay pros — anonymous until connect. Either way, the brief saves to My home.
Intake
DIY path · free fix
Pro path · stay private
Four surfaces that carry the story
Tabs on the left, one surface at a time — live PWA preview beside the copy for diagnose, results, nameplate scan, and My home.
/diagnose — AI home triage
Photo + category + neighborhood → Bedrock returns issue, severity, scope, fair price, DIY vs. pro, confidence score, and clarifying questions when needed.
- Category chips and neighborhood set context before the model runs
- Clarifying questions when the photo alone isn't enough
- Fair price range and severity before you choose a path
/diagnose — AI home triage
Photo + category + neighborhood → Bedrock returns issue, severity, scope, fair price, DIY vs. pro, confidence score, and clarifying questions when needed.
- Category chips and neighborhood set context before the model runs
- Clarifying questions when the photo alone isn't enough
- Fair price range and severity before you choose a path
Trust is the pitch — and the schema makes it impossible to violate
A provider can reach a homeowner's contact info only after the homeowner consents — enforced inside Aurora, not just in policy.
- The `leads` table is the only edge between homeowners and providers — problem + neighborhood only, no contact fields.
- Contact data lives in gated auth relations, reachable only after homeowner consent.
- EXIF/GPS stripped on upload so photos cannot leak location.
- The foreign-key boundary is the trust boundary — enforced in Aurora, not just in policy.
Typical marketplace
Share contact info upfront. Get three wildly different quotes for the same job. Hope someone shows up.
Odosan
Stay anonymous until you choose a pro. Pre-diagnosed job card. Fair price range before anyone calls you back.
Free for homeowners — aligned on both revenue paths
Finding fee
When Odosan matches a homeowner to a pro and they connect, the provider pays a small fee for a pre-qualified, ready-to-hire lead.
Amazon affiliate
When a homeowner buys recommended DIY parts, Odosan earns a small commission. The homeowner pays nothing extra. Both paths reward the right answer, not the expensive one.
What ships in production
Frontend
Data
AI
Storage & hosting
Try Odosan live
Something's wrong at home, and you shouldn't have to carry that worry alone
What's next
H0 proved the stack. Next is polish, provider partnerships, and the proactive home-health layer — reminders before systems fail, not after.
Proactive home health
Use home profiles + territory data for gentle reminders before systems age out.
Maintenance timeline
Visual 30 / 90 / 365-day view of what's due based on system ages.
Masked contact relay
Twilio proxy numbers so neither side shares real phones until consent.
Live provider data
Replace seed listings with canonical Google Business Profile listings.
Explore other case studies

Bookee
AI receptionist that researches leads, calls them back, and books meetings — from one form submission.

Oakling
Family activity app — from research to App Store launch.

FurPass
Native iOS app that turns your pet's care routine into a secure, shareable guide for whoever's watching them. Pivoted from PetCard after App Store rejection.

Kamper
Building a waitlist before Kickstarter — for an outdoor kitchen I designed ten years ago.

NFCtree
A social-sharing product that happens to use NFC — tap a chip, open your whole link tree in any browser.

Bookee
AI receptionist that researches leads, calls them back, and books meetings — from one form submission.

Oakling
Family activity app — from research to App Store launch.

FurPass
Native iOS app that turns your pet's care routine into a secure, shareable guide for whoever's watching them. Pivoted from PetCard after App Store rejection.

Kamper
Building a waitlist before Kickstarter — for an outdoor kitchen I designed ten years ago.

NFCtree
A social-sharing product that happens to use NFC — tap a chip, open your whole link tree in any browser.

