Htet Ko Oo.← All projects

CASE STUDY · FEATURED PROJECT

Our Little Universe

A mobile-first private shared-space web app for couples to keep memories, answer daily prompts, exchange letters, and revisit small moments together.

ROLE

Product design, full-stack implementation, and privacy-focused architecture

STACK

Next.js · TypeScript · Better Auth · Drizzle · Neon PostgreSQL · Cloudinary · Resend

PRODUCT PREVIEW

A closer look at the interface.

This preview uses fictional sample content only. No private couple data is shown.

Our Little Universe fictional demo home screen
Watch 1-minute walkthroughYouTube · Opens in a new tab

CONTEXT

Private by default, designed for a shared space of two.

The challenge. Build a personal shared-space app where every feature respects a two-person privacy boundary, while keeping the experience calm and comfortable on a phone.

The approach. I separated a fictional public preview from authenticated private routes, then scoped private reads and writes through the signed-in member’s couple membership.

PRODUCT DIRECTION

Designed for the way it will be used.

Design approach

The interface is mobile-first because the primary experience is two people using their phones. Tablet and desktop layouts create more room for shared memories and navigation without changing that priority.

Future direction

Progressive Web App support and a dedicated mobile app are planned as future iterations. They are product direction, not current functionality.

KEY FEATURES

What I built

01

Private memories and media

Members can create, edit, and confirm deletion of memories, attach authenticated image or video assets, and revisit milestone stories, galleries, and an anniversary countdown.

02

One private partner invitation

The owner creates an email-bound link that expires after seven days. Its token is stored only as a hash, and acceptance atomically provisions or joins the invited partner.

03

Little Question mutual reveal

Each person writes privately. Both answers appear only after both have responded; a rest request requires the other person’s decision, and completed prompts remain in history.

04

Letters and Little Jar

Love letters have individual read receipts. Little Jar notes can be tucked away for the other person to discover later, then answered with a small reaction.

05

Quiet partner presence

An approximate last-active status refreshes only while someone uses the private app, avoiding exact tracking while still giving a gentle sense of presence.

06

Gentle scheduled moments

A scheduled worker triggers privacy-safe unanswered-question reminders and celebration emails, with database records that make retries safe.

IMPLEMENTATION

Technical decisions

Couple-scoped authorization and invitations

Better Auth sessions resolve into a couple membership before private actions run. The invitation flow validates the recipient and uses one transaction to prevent an expired, reused, or concurrent invite from adding an unintended member.

Answers stay private until the rule allows reveal

Question answers are stored per member and the other answer is deliberately not serialized before both responses exist. The round state handles answering, rest requests, reveal, and rest outcomes.

Protected media and a safe public preview

Private media is delivered through authenticated app routes after membership checks. The /demo routes use fictional content only and do not read or save private couple data.

Reliable scheduled emails

A Cloudflare Worker invokes protected app jobs for reminders and celebrations. Per-member, per-event database keys prevent duplicate delivery if the scheduler retries.

EXPLORE THE PROJECT

See the product in action.

Use the public demo to explore the project workflow, then review the repository for its implementation details.