back to projects

LISTLY

Creating a way to never forget what you want to do with your loved ones.

VIEW LIVE APP
Start a shared list screenJoin this list screenAdd something to the list screen

MY ROLE

Full-Stack Engineer & Product Designer

TIMELINE

July - August 2026

TEAM

Me!

TOOLS

HTML, JavaScript, Figma, Firebase, Claude

Why Build This?

Our to-do lists with family and close circle of friends are always growing. Oftentimes, such suggestions get texted into the group chat after we stumble across a enticing restaurant video on social media or hear a compelling movie review in conversation. “We should ...,” “let’s ...,” “we have to go here....”

Unfortunately, these places, restaurants and experiences that spark our interest in the moment get lost in the stream of subsequent messages. By the time we want to revisit one of those recommendations, it’s near impossible to scroll back and find it.

This repeating pattern and lack of organization when it came to experiences I wanted to share with people I care for is what led me to build with web app. I wanted something that turned scattered suggestions into a clean and curated shared to-do list — so I built it!

Design-Code Collaboration

I started building this web app with an AI-integrated approach. Rather than a linear design-to-code pipeline, I iterated fluidly between design and engineering: sketching layouts in Figma, then refining features as I saw how the screens looked like on my phone and computer.

Three iPhone mockups of the Listly app screensCode editor screenshot showing the renderItems function

How It Works

1

Create a List

A user creates a list (or opens a shared link); Firestore autogenerates a unique document ID for that group and that ID becomes the list's URL

2

Say Who You Are

The name you enter is saved to your browser's local storage and synced into the group's member list in Firestore.

3

Add & Tag Items

Each item you add — tagged read, watch, listen, visit, eat — is written straight into Firestore, timestamped and attributed to your name

The unique-link model wasn’t chosen only for its simplicity. It was a deliberate bet on how people actually behave in group chats. Most chats won’t let you pin a message, but they will let you pin a link, so a single, shareable URL means it can be anchored and easily accessible.

Engineering Highlights

Listly is a static HTML/JS app deployed on Firebase Hosting, with Firestore as the entire backend. This project was a great introduction to learning how backend-as-a-service platforms operate where the “server” is a managed data layer users talk to directly instead of code I’d have to write and host myself.

Serverless by Design

The frontend talks directly to Firestore. Because there’s no server-side auth system to build, there was never a signup wall to design around. A UI/UX decision usually has to balance “protect the data” against “make it easy to get in” — going serverless meant that tradeoff barely existed. Anyone with the link is in instantly which matches how people actually behave in a group chat: they tap a link, they don’t want to create a password first.

Local-first personalization layer

Since there’s no login, “who you are” and “which lists are yours” are reconstructed entirely client-side: localStorage tracks your display name per list, a rolling history of visited/bookmarked lists (with pinning and eviction once it hits a cap), while the actual member roster syncs back to Firestore so it’s visible to the whole group, not just you.

the tradeoff is that this identity is per-device, not per-person — since there’s no account tying you together across browsers, opening a list you’ve already joined on your laptop from your phone won’t recognize you, and you’ll be prompted to enter your name again, effectively “joining” a second time on that device.