Yerba Buena Gardens App
YBGC logomark

Gen Z isn't allergic
to touching grass.
They just don't know it's there.

How might we make Yerba Buena Gardens a place 18-25 year olds actively seek out, not just stumble upon?

Product Design Intern
Figma · Claude · Lovable · Cursor · Procreate
Solo design · handoff to internal IT engineering
11Staff & visitor interviews
4Core features shipped to MVP
84.8%Task success rate
2Rounds of usability testing
01 · Overview

The Gardens sit next to the Metreon, and most Gen Z visitors don't know they exist.

Yerba Buena Gardens sits in the middle of SoMa, next to Metreon and a cluster of museums, and the age group it needs most has no reason to know it exists. There's no social proof and poor presence on TikTok, the channel Gen Z actually uses to find things to do in SF.

So I designed a companion app that makes the Gardens discoverable and worth coming back to.

I interviewed the staff and the visitors they want to reach, built a working MVP in Lovable and Cursor, tested it twice, and fixed what each round found. YBG's IT team is taking it to launch.

App overview mockup

Main concept, at a glance

02 · Problem & Research

A 33-year veteran of
Parks & Rec told me
this is unsolved.

“That's the one group we've never figured out the magic pill for, at seven different parks and recreation departments, seven different cities.”

Executive Director, YBG

The Gardens aren't invisible because they're boring. They have no digital footprint in the one place this age group actually looks. I interviewed the people who run the Gardens and the people they want to reach to find the gap.

Yerba Buena Gardens
5YBG staff & leadership
4Non-visitors, 18–25
2Current visitors, 18–25

“I don't think people are going on our website to look things up. People go on social media to look things up.”

Special Projects Manager, YBG

“There's a reason to come here. They just don't know.”

Special Projects Manager, YBG
Affinity map synthesized from interviews

Affinity map, synthesized from interviews

No Digital Layer

Marketing is still print-first: flyers passed through neighborhood organizations, which skews older.

No Social Proof

Non-visitors never went because none of their friends do, so there's no reason to be first.

Discovery Happens on TikTok

Every non-visitor named TikTok as their default source for "free things to do," not YBG's website or Google.

Who I'm designing for

Two proto-personas built from the 11 interviews

One has never set foot in the Gardens. The other visits but doesn't know its name.

Persona spread, Maya Hernandez

Maya Hernandez · 20

Key insight

Has never visited. With no social proof from her friends, YBG doesn't register as a place worth going.

Persona spread, Josh Richardson

Josh Richardson · 20s

Key insight

Visits regularly and likes it, but never knew its name because of the poor digital footprint.

How YBG compares

Other places and apps miss the mark.

Physical spaces are seasonal, have no digital layer, or price Gen Z out. Event apps have the social layer but aren't tied to a place.

Space / AppFree to AccessDigital Discovery LayerYear-RoundBuilt-in Incentive
YBGC App (Planned)YesCreator feed + QR + webYesBadges → real rewards
SFMOMA$30–40Owned channels onlyYesNone
Dolores ParkYesNoneYesNone
Stern GroveYes–LotteryNoneSeasonalNone
Partiful / PoshYesYesYesNot destination-tied
LumaYesTech-event skewedYesNot destination-tied
03 · Core Features

Four features, each tied to an interview finding.

01

Creator Feed

A TikTok-style feed of visitor and creator content, so discovery happens in a format Gen Z already trusts.

Vertical endless scroll: the lowest-friction way to keep watching.

02

RSVP

Event RSVPs that show who's going, lowering the social risk of showing up alone, which came up repeatedly in interviews.

03

Map + Badges

A consolidated map of hidden gems and amenities, with badges earned by exploring and redeemable for real rewards like free bowling.

Badges unlock as you explore, not through a fixed points system, so there’s a reason to come back.

04

Nudges

SMS and push notifications in a Gen-Z voice, turning a one-time visit into a repeat habit.

In testing, event notifications were one of the top reasons participants said they’d reopen the app.

HOVER (OR TAP) OVER THE SCREENS TO SEE THE FLOW IN MOTION

Creator feed

Creator feed

Event RSVP

Event RSVP

Consolidated Map

Consolidated Map

Badge & reward

Badge & reward

SMS nudge

SMS nudge

Three ways people find the app

Based on where research said 18–25 year olds already look.

01 Hover (or tap)
Webpage QR Code Scanned

QR Scan

A QR code on an art piece or flyer opens the app, so someone curious in the Gardens can install it on the spot.

02
Website Integration

Website

People already visit YBG's website, so a Gen-Z-voiced accent-colored button and banner that prompts them to download the app.

03 Hover (or tap)
Example creator ad video

TikTok Creator Ads

Creators who already post about YBG, plus TikTok ads, on the channel every non-visitor named. Video shown is an edited example.

See the full process How the findings became a working prototype
Synthesis

From findings to how might we.

Interview data clustered into four HMW statements, each tested against sticky-note feature brainstorming before any screen was drawn.

  • HMW 01Help 18–25 year olds discover Yerba Buena Gardens through the social channels they already trust.
  • HMW 02Give 18–25 year olds a compelling enough reason to travel to SoMa specifically for the Gardens.
  • HMW 03Turn a first visit into a habit that brings 18–25 year olds back repeatedly.
  • HMW 04Make Gardens events feel socially alive enough that 18–25 year olds feel confident showing up.
Sticky-note feature brainstorming, mapped against each HMW
Competitor teardown

I printed each competitor app and annotated every screen by hand.

Sticky-note teardown, Partiful
Sticky-note teardown, Luma
Sticky-note teardown, Posh
Design process

Wireframes to a
working prototype.

Early sketches moved into mid-fidelity wireframes, then into a visual system built inside a real constraint: YBG's own brand guidelines.

Hand-drawn wireframes for the download flows from QR codes and flyers, and the social video feed, with annotations

Wireframe sketches - Discovery + Short-form videos

Hand-drawn wireframes for the events and badges flows, annotated with design notes

Wireframe sketches - Events + Badge-earning

The visual system had to work within YBG's existing brand, so it leans on their approved system, pushed just far enough to feel native to a feed.

Typography Two clear voices: a calmer one for wayfinding and everyday content, and a punchier one for elements that need attention.
Color The primary color keeps the app calm and grounded, like the space itself. The accent is used for CTAs, so a flash of it always signals "something just happened."
Design System

Design system, color & type, within YBG's brand

Motion & gamification

Animations and the worm mascot.

Micro-animations make progress feel rewarding, and a worm mascot keeps the app personable rather than transactional.

Mascot guides badge rewards
Onboarding with mascot
Navigation bar spotlight
Complete RSVP
04 · Iterations

What round-one testing
forced me to fix.

Moderated usability testing with 5 participants on the first prototype surfaced four issues before the design reached a high-fidelity build.

Finding 01

The badge flow had poor hierarchy or labels. Users couldn't tell which badge to collect, how to earn one, or how badges connected to the map.

Before: mid-fidelity profile with a grid of identical black badge shapes and a plain rewards list
Solution

Added color and micro-animations to make progress and next steps legible, and tied badge-earning to the map so the two flows connected.

After: profile with colorful earned badges, the next badge highlighted, and the mascot prompting 'Earn some badges and unlock new rewards'
After: map of the gardens with a badge location highlighted, connecting badge-earning to the map
Finding 02

The option to post a video to the creator feed wasn't clear. Users didn't realize they could contribute content, only consume it.

Before: mid-fidelity video feed with only a small plus button for posting
Solution

Added a fixed feature CTA to the feed and added an occasional get featured ad while scrolling, the ad frequency changes.

After: video feed with a prominent pink Feature button for posting your own video
After: Get Featured card shown while scrolling, explaining how to create, upload and get featured, with a Create Your Video button
Finding 03

An accessibility list-view was added for the map, but in testing it felt confusing due to many buttons and it competed with the main map view instead of supporting it.

Before: mid-fidelity map with separate, competing Map View and List View buttons
Before: mid-fidelity amenities list with the same competing Map View and List View buttons
Solution

Replaced the two competing buttons with a single Map/List toggle, so the accessible list supports the map instead of competing with it. The list view still needs its own usability pass.

After: a single map view with a simple Map/List toggle in the corner
After: amenities list reached through the same toggle, with a photo, address and directions for each place

Also fixed: the events icon and calendar view looked too alike, so I differentiated the icon set.

These fixes went into the high-fidelity build tested in round two. The badge flow was still the weakest task there, so I redesigned it again afterward (see Results).

05 · Results & Validation

Round two: task-based
testing on the hi-fi build.

Six participants completed five core tasks on the high-fidelity prototype, measured on success rate, time on task, and error count, plus an A/B test on the RSVP confirm gesture and a System Usability Scale survey.

84.8%Average task success (0 - 1 scale)
5.45Average ease rating (of 7)
0.70Average errors per task
TaskSuccess (0 - 1)Avg. TimeAvg. ErrorsEase (1–7)
Onboarding / download83.3%32.5s0.675.58
RSVP to an event91.7%31.7s0.175.83
Discover via explore feed100%35s06.0
Earn a badge53.3%76.7s1.834.67
Explore the map95.8%100s0.835.17

After round two I redesigned the badge flow again and showed it to 3 coworkers, not the original testers. They found it easier to follow, but this was an informal check with no metrics.

What Brings Them Back

Events pulled harder than rewards.

Asked what would make them reopen the app, half of participants pointed to upcoming events first.

3/6Cited events as the reason to reopen the app
2/6Cited badges & rewards, including as a pull for younger users specifically
2/6Cited the map or explore page, one specifically for how accessible it felt to a first-time visitor
A/B Test, RSVP Confirm Gesture

Swipe right beat swipe up, 5 to 1.

Option A, Swipe Up
Swipe-up RSVP confirm
1 / 6 preferredFelt less natural against one-handed phone use
Option B, Swipe Right · Chosen
Swipe-right RSVP confirm
5 / 6 preferredMatched the gesture users already knew
70.0 System Usability Scale

Near the 68-point average-usability benchmark, from a 4-participant SUS survey.

“I didn't want to truly explore.”, flagged as a note on map engagement.

Round-two testing participant
06 · Engineering Handoff

I built the MVP, and YBG's IT team is taking it to launch.

Lovable and Cursor got this from Figma to a working, testable app fast. But a prototype isn’t a production system. YBGC’s IT team, who already run the live website, is taking it from here to make it secure for real users. The beta includes the fixes from both rounds of testing. The round-two changes haven't been re-tested with users yet.

“
Why This Matters

Figma prototypes fake state. Code has to remember it. Building in Lovable and Cursor meant the app had to work like real software, and small bugs that survived two rounds of testing showed up as soon as I could actually use it.

Figma file organized with local styles and auto layout

Figma file, local styles & auto layout

Handing a file to Lovable and Cursor is unforgiving: nothing carries over automatically. So I built proper text and color styles and auto layout across every screen, so engineering could build from it as a system.

Working With AI, Not Around It

AI helped me build faster, but the design decisions were still mine. Working within tight token limits in Cursor and Lovable made that clear.

Challenge

Lovable's credits ran out, even after 100 more were added. One Stripe prompt used up Cursor's.

Action

Split each feature into small prompts, tightened with Claude to name the function, the check, and the test case.

Result

All four features built, plus the badge redo after round two. Working MVP handed off.

Example: making paid-event RSVPs check the card
My first draft

The Stripe payment form currently lets any card number go through (even declined test cards like 4000 0000 0000 0002). The submit button is skipping the payment validation. Please update the RSVP button's submit handler to actually await the Stripe payment confirmation (stripe.confirmPayment or stripe.createPaymentMethod). It must throw a visible error on the screen if the card fails or is declined, and only complete the RSVP if Stripe returns a success status.

Tightened with Claude · 1.9 credits

The Stripe payment form lets any card through, including declined test cards (4000 0000 0000 0002). The RSVP submit handler is likely calling recordRsvp() without properly awaiting and checking the result of stripe.confirmPayment(). Please fix the submit handler so it:
1. Calls stripe.confirmPayment() with redirect: 'if_required'
2. Awaits the result and checks for an error object. If present, display the error message (e.g. error.message) visibly on screen and stop
3. Only proceeds to call recordRsvp() if paymentIntent.status === 'succeeded'
4. Does not silently swallow or ignore any Stripe error response
Test with decline code 4000 0000 0000 0002 to confirm it now blocks the RSVP and shows a visible error.

Most of my Lovable prompts cost 3 to 5 credits. This one cost 1.9.

By hand: I caught the bug by testing with Stripe's test cards, wrote the fix prompt from it, and re-tested. The approved card now completes the RSVP; others decline with an error.

Now

What I handed off

GitHub repository for the Yerba Buena app showing its project folders and 677 commits

Repo, file structure

README file documenting the app's overview, my role, design process, key features and tools

Repo, README

Later

Public launch

IT-led
  • Beta test with real visitors and staff
  • QR, website, and TikTok discovery flows go live
  • Public launch
  • CS intern onboarded to support long-term (pending confirmation)
YBGC app, first screen
▶
Click to try the betaOpens the live app
07 · Reflection

What this taught me.

01

Small prompts beat one big one

Describing the whole app at once burned tokens fast. I only got usable results once I broke each feature into small prompts in a fixed sequence. It also made me define each screen's behavior before building it, which is the same discipline a handoff needs.

02

The MVP was for testing, not launch

I built it to show the idea works and to test it with real people. Making it secure and public is the IT team’s job, and knowing where my part ends is part of the work.

03

My biggest design decision wasn't the strongest lever

Badges got the most design effort and were the hardest feature to use in testing. When I asked what would bring people back, events beat rewards. Next time I’ll test the core idea earlier, not just how usable it is.