Back to BlogView the featured project — Odosan
AI & Tech

Building Odosan for H0: Ten Days from DynamoDB Plan to Aurora + Bedrock

A home-maintenance PWA built for the Vercel × AWS H0 hackathon — real Aurora Serverless v2, Bedrock nameplate OCR, and every deployment gotcha that only shows up when the clock is running.

Summer Chang

Summer Chang

June 22, 2026 · 9 min read

Client

Self (H0 hackathon)

Role

Product Designer & Builder

Tools

Next.js, Vercel, Aurora Serverless v2, Amazon Bedrock, S3, Gemini, better-auth, Kysely

Timeline

Jun 13–22, 2026

tl;dr

Odosan is a home-maintenance PWA for the Vercel × AWS H0 hackathon. The product case study covers the user problem — this log covers the sprint: why the original DynamoDB plan got scrapped, how Lightsail Postgres became a staging lane into Aurora Serverless v2, and what broke along the way (Bedrock inference profiles, Gemini MAX_TOKENS, Vercel monorepo roots, Hobby git-author blocks, Creators API eligibility). Jun 21–22 added Bedrock + S3 for nameplate OCR; Jun 22 cut ~1,500 lines of scope to ship on time.

h0 constraint

Why the database path mattered more than the feature list

H0 judging cares about AWS services used in production — not mocks. Odosan started with a DynamoDB table design on paper, but the app was already SQL-native: text arrays, UUID keys, GIN indexes, better-auth sessions, and Kysely queries written for Postgres.

The constraint forced a real pivot: ship on managed Postgres first, then migrate into Aurora Serverless v2 without rewriting application code. Everything in this log is about that constraint — not the product story (that lives on the case study).

Judges need to see AWS in the request path — not just in the README.
stack pivot

DynamoDB plan → Lightsail → Aurora Serverless v2

Jun 18 shipped on Lightsail Postgres so the SQL-native codebase could move fast. Jun 19 ran pg_dump into Aurora Serverless v2 and swapped DATABASE_URL — zero application rewrites. Lightsail was deleted once Aurora was warm.

architecture

What runs in production for judges

The PWA on Vercel calls Next.js API routes. Diagnose and nameplate flows hit Bedrock first, persist artifacts to S3, and write structured rows to Aurora. Gemini and affiliate search URLs stay as automatic fallbacks when AWS or commerce gates block the happy path.

the bugs

Gotchas that only show up on a deadline

Eight issues that burned hours — documented so the next sprint does not repeat them.

IssueWhat happenedFix
Aurora scale-to-zeroFirst request after idle hit a 30–60s cold startWarm-up script + accept cold start in demo
Bedrock model IDRaw model ARN rejected in productionUse inference profile ID, not bare model ID
Gemini MAX_TOKENSLong nameplate prompts returned emptyTrim context + raise maxOutputTokens
Vercel monorepoBuild failed — wrong package rootSet root directory + yarn workspaces in vercel.json
Hobby git authorDeploy blocked for non-team git emailPro team or align git config with Vercel account
CloudShell regionAurora CLI commands hit wrong regionExport AWS_DEFAULT_REGION before pg_dump
Creators API gateAmazon Creators API eligibility blockedAffiliate-tagged search URL fallback
Provider claim searchEdge cases in local pro matchingNormalize zip + dedupe before rank
ai pipeline

Jun 21–22 — Bedrock + S3 for nameplate OCR

The AI path landed late in the sprint. Photos strip EXIF client-side, API routes call Bedrock through an inference profile, durable images land in S3, and structured fields sync to Aurora for signed-in users (with localStorage migration for anonymous sessions).

ship log

Jun 18–22 milestones

DateShipped
Jun 18Lightsail Postgres live — SQL-native app shipping
Jun 19Aurora Serverless v2 — pg_dump migration, Lightsail retired
Jun 20~1,500 lines cut — scope to H0 demo path only
Jun 21Bedrock + S3 nameplate pipeline wired
Jun 22Submission artifacts + live odosan.tech polish

Key Takeaways

  • 1Ship on the schema you actually wrote — DynamoDB on paper does not help a Postgres codebase.
  • 2Staging Postgres on Lightsail then pg_dump to Aurora beats a big-bang migration under deadline.
  • 3Bedrock wants inference profile IDs in production — raw model ARNs fail silently until you check logs.
  • 4Monorepo deploy config is a feature — set Vercel root directory before you need it.
  • 5Scope cuts are a ship skill — ~1,500 lines removed Jun 22 to keep the demo path credible.
  • 6Always keep an AI and commerce fallback — Gemini and affiliate search URLs saved demo day.

H0 proved the stack. Post-hackathon: provider partnerships, proactive home-health reminders before systems fail, and hardening the Creators API path when eligibility clears.

Full case study: product problem, privacy model, journey diagrams, and live embed at /projects/odosan.

what's next

H0 proved the stack. Post-hackathon: provider partnerships, proactive home-health reminders before systems fail, and hardening the Creators API path when eligibility clears. Full case study: product problem, privacy model, journey diagrams, and live embed at /projects/odosan.

Share this post