Product Design / Consumer / Growth

From fragmented searches to a discovery product for making the most of your birthday

I designed and evolved a platform that organizes brand and merchant benefits, connecting discovery, structured content, trust, and organic growth.

Role
Founder & Product Designer
Timeline
Ongoing
Platform
Responsive web (Next.js)
Team
Solo project
Cumpleanito

If it's your birthday today, you don't bring the gift

Explore every birthday benefit in Buenos Aires.

View benefitsView map
Live product homepage

A behavior that already existed

Every year the same pattern repeats: people searching for lists, videos, and posts about places offering something free or discounted for birthdays. It wasn't a new behavior. It was a fragmented one.

The opportunity didn't come from inventing a need. It came from structuring a behavior that already happened on social media, individual searches, and recommendations between friends.

Cumpleañito started focused on Buenos Aires, where brand concentration and search density made a first catalog with 150+ collected benefits viable.

Collecting benefits wasn't enough

A static list doesn't answer the questions that really matter when someone decides whether it's worth visiting a store or signing up for an app:

  • Is it still valid?
  • Where does it apply?
  • Do I need to register first?
  • Is it only on the birthday or the whole month?
  • Does it work at every branch?
  • How do I redeem it?
  • Did it work for other people?

The value wasn't just in gathering benefits, but in structuring enough context for someone to decide whether they could actually use them.

Multiple paths to the same benefit

Not everyone arrives the same way. Some know which category interests them; others search near their neighborhood; others want to filter by conditions before committing. The product needed to support all those intents without duplicating content.

DimensionExampleRoute / mechanism
CategoryFood & Drink, Fashion, Beauty…/beneficios/categoria/[slug]
LocationPalermo, Recoleta, Belgrano…/beneficios/[barrio]
SearchHeader query → /beneficios?q=/beneficios
TypeGift vs. discountListing filter
ConditionsVerified, no minimum purchaseSidebar filters
SortRelevance, top rated, recentSort parameter
MapSpatial exploration/mapa
FavoritesPersonal list/favoritos

Structuring was a product decision

Each benefit needed to become an entity with defined fields. It wasn't just a technical decision: it determined what could be searched, filtered, compared, indexed, and scaled.

The model includes brand, benefit type, category, location, multiple branches, redemption instructions, conditions, validity, and community validation signals.

Decision

I prioritized fields that answered real decision questions, not decorative metadata. If a field didn't help filter, compare, or build trust, it didn't enter the model.

FieldProduct purpose
BrandIdentification and trust
TitleOne-line value proposition
Short descriptionQuick evaluation in listings
Long descriptionContext on detail page
TypeGift, discount, 2-for-1, or other
CategoryDiscovery by interest
LocationGeographic relevance
BranchesMultiple redemption points
RedemptionIn-store, online, code, or link
InstructionsReduce uncertainty
Applicable daysUsage window
Minimum purchaseEconomic condition
CompanionsSocial requirement
WarningExceptions and nuances
VerifiedEditorial trust signal
VotesCommunity validation

What does someone need to know before opening a benefit?

The card had to allow relevance evaluation without opening the detail page, even when available information varied between brands. Name, value proposition, category, location, benefit type, and trust signals appear in a clear visual hierarchy.

Sidebar filters reduce noise by neighborhood, category, type (gift vs. discount), verified status, and no minimum purchase, with sorting by relevance, rating, or date.

Food & Drink01/01/25Gift✓ Verified

Free drink during the month

Free drink of your choice during your birthday month for registered users.

Starbucks·Buenos Aires
👍 24👎 2

Replica based on BenefitCard, using Starbucks data from the live catalog

From "looks interesting" to "I know how to use it"

The detail page shouldn't sell the benefit. It should reduce uncertainty. To do that, it concentrates long description, requirements, applicable days, minimum purchase, companions, warnings, redemption instructions, and locations with a map.

The redemption flow requires declaring intent ("I want to use this benefit") before revealing full instructions. This measures real interest and prepares the user for the moment of use.

Share, save to favorites, and vote live in the same layer. Each one answers a different need: spread, postpone, or validate.

Don't pretend absolute certainty

Benefits change, expire, vary by branch, and depend on conditions that brands don't always document well. The product shouldn't present everything as 100% verified.

Trust is built with editorial signals (verified badge), validity dates, community votes, user reports, and explicit warnings when information is incomplete.

In a product based on changing information, trust depends as much on what we show as on how we communicate uncertainty.

Did this benefit work for you?

A binary answer addresses the main question: is it still valid?

A centralized database doesn't scale alone

I implemented a binary voting system: "Did it work for you?" with Yes / No options. One vote per user per benefit. It's not a review system. It answers the main uncertainty: whether the benefit is still valid in practice.

Complemented with reports that notify the admin by email when someone detects incorrect information or a benefit that no longer works.

Why binary

A binary answer can be more useful than a full review system when the main uncertainty is whether the benefit still works, not what the dining experience was like.

Discovery and use don't happen in the same session

Most people don't discover a benefit on the exact day they'll use it. They might find it weeks earlier, during planning, or through a friend's recommendation.

Favorites let users build future intent: save, return as the birthday approaches, and keep a personal collection at /favoritos.

Empty favorites state in Cumpleañito

Live product asset: favorites empty state

People were already searching for these answers

The challenge was aligning product architecture with existing search behaviors, not bolting SEO on afterward. Categories, neighborhoods, individual benefits, and blog generate indexable pages with metadata, Open Graph, and JSON-LD Offer schema.

/HomeGeneral discovery
/beneficiosDirectoryFiltered exploration
/beneficios/categoria/gastronomiaCategoryLong-tail by vertical
/beneficios/palermoNeighborhoodGeographic long-tail
/beneficio/[slug]DetailDecision and redemption
/mapaMapSpatial discovery
/blogBlogEditorial content

Routes confirmed in sitemap.ts and App Router structure. /buscar permanently redirects to /beneficios; /ubicaciones redirects to /mapa.

Organic growth as a product consequence

The product can grow through organic traffic (SEO), sharing benefits on social media, user contributions, sign-up for interactions, and return visits via favorites. I didn't design aggressive pop-ups or content gates. Growth comes from real utility.

Growing without degrading quality

At /sumar-beneficio, anyone can recommend a benefit without an account. The form asks for business name, title, description, and redemption instructions: the minimum to evaluate the proposal.

Contributions enter as draft with is_user_submission. The admin completes category, image, location, and other required fields before publishing from the "Pending" tab.

Allowing contributions expands coverage, but introduces a new problem: how to grow without degrading information quality.

Setting context from sign-up

After creating an account, onboarding collects name, birth date, interests (gifts, discounts, promos with friends), and plan types (eating out, shopping, outings). It also offers a birthday reminder.

Today these preferences prepare future personalization: there's no recommendation algorithm implemented yet. The decision was to capture intent without promising personalization that doesn't exist yet.

A brand doesn't always equal one location

Many benefits apply at multiple branches with different addresses. The benefit_locations model links a benefit to several branches with coordinates and a specific address.

On /mapa, Google Maps shows filterable markers. On the detail page, the map and address list answer: "which one do I go to?"

Decision

I separated location_id (main neighborhood for SEO and filters) from benefit_locations (specific branches for redemption) to avoid forcing a single location when reality is more complex.

Food & DrinkShoppingFashion
Map view with filters

Consistency as the catalog grows

As the catalog grew, consistency stopped being aesthetic and became functional. Same cards on home, listings, categories, and neighborhoods. Same category chips. Same empty states. Same favorite, vote, and share patterns.

Product design tokens (primary #a77dea, secondary #fee177, Nunito typography) carry through the entire flow, from the card to the authentication modal.

I didn't build a separate documented design system. I built patterns that repeat because the product needs them at every touchpoint.

Benefit with ambiguous day window

What could happen
Some brands apply the benefit only on the birthday; others, the whole month.
Risk
Wrong expectations and frustration at the store.
Decision
The days_applicable field appears on the detail page and, when available, on the card as a validity date.

Multiple branches with different conditions

What could happen
A brand may be present in several neighborhoods, but not every branch participates.
Risk
The person goes to the wrong location.
Decision
Many-to-many benefit_locations with an interactive map and address list on the detail page.

App or prior registration requirement

What could happen
Starbucks Rewards, loyalty apps, memberships.
Risk
Arriving unprepared and missing the benefit.
Decision
redemption_instructions and warning_text visible only after declaring intent to use, to avoid cluttering the card.

Incomplete information on submission

What could happen
User contributions arrive without category, image, or location.
Risk
Low-quality content in the directory.
Decision
Submissions enter as draft; the admin completes required fields before publishing.

Possibly expired benefit

What could happen
Promotions change without notice on brand websites.
Risk
Loss of trust in the platform.
Decision
Binary votes, user reports, and editorial verified badge, without pretending absolute certainty.

More benefits vs. better quality

Increasing coverage improves discovery and SEO, but raises the risk of outdated or incomplete information.

Decision: Publication flow with admin moderation and community signals to prioritize what's current.

Less friction vs. more context

A simple card makes exploration easier, but can hide conditions that matter for deciding.

Decision: Two-layer hierarchy: quick evaluation in listings, uncertainty reduction on the detail page.

Open growth vs. moderation

Allowing contributions scales content, but introduces noise and duplicates.

Decision: Public form at /sumar-beneficio → draft state → review in admin panel.

SEO vs. navigation

Indexable pages by category and neighborhood capture long-tail searches, but must still be useful for real users.

Decision: Landings use the same listing component and filters as the main directory, not empty SEO pages.

Sign-up vs. access

Requiring an account enables favorites, votes, and personalization, but adds friction to discovery.

Decision: Open navigation and listings; interactions (favorite, vote, redemption) require authentication.

As new needs emerged, the product added layers. There's no confirmed timeline with dates. This is the logical evolution sequence observed in the code and current structure.

Base directory

Migration from WordPress to Next.js with structured benefits, categories, and detail pages with SEO metadata.

Advanced discovery

Filters by location, type, verified status, and minimum purchase. Category and neighborhood landings. Map with Google Maps.

Trust and interaction

Binary votes, redemption intent, reports, verified badge, and social sharing.

Participation and accounts

Sign-up (Google + email), onboarding with preferences, favorites, benefit submissions, and admin panel.

Performance and scale

ISR, server-side prefetch, edge request optimization, dynamic sitemap, and JSON-LD Offer schema.

Traction signals

150+
organized benefits
Admin panel · review periodically
~12K
monthly visits
Internal estimate · verify with analytics
5
discovery categories
Food & Drink, Shopping, Fashion, Beauty, Entertainment
~1.8K
registered users
Internal estimate · verify

An existing behavior can become a product

The opportunity wasn't inventing the need to make the most of a birthday, but structuring a behavior that already happened on social media, searches, and recommendations.

More content doesn't equal more value

Utility depends on context, quality, and the ability to decide. Adding benefits without structure only reproduces the original problem in another format.

Trust needs design

When information changes, the experience must show clear signals, allow feedback, and communicate uncertainty without weakening the proposition.

SEO can reveal the mental model

Searches by category, neighborhood, and brand showed how people frame their needs, and that informed the information architecture.

Consumer Product Design is also architecture

An apparently simple experience (search, filter, save) depends on taxonomies, states, moderation rules, and validation loops.

The product evolved from observed behavior, user feedback, usage data, and new needs detected during growth, not from a formal documented research process.

Más proyectos