Skip to content
Wishlink·2026

Streaks

Turning campaign execution from manual overhead into a self-running creator behavior system.

Product DesignSystems DesignFrontend Engineering
Streaks listing page
00 / CONTEXT

Wishlink is a creator commerce platform. Brands run campaigns, creators share product links.

Streaks are time-bound campaigns where creators commit to sharing a set number of product links per period (daily, weekly, or monthly) for consecutive periods. Complete the streak, earn the reward. Miss a period, the streak ends.

The problem

Previously, streaks ran on Plotline, a third-party tool that worked for experimentation but had limitations across tracking, support, and scale. Manual campaign setup for every streak. No real-time tracking visibility for creators. Heavy support overhead for “did my link count?” questions. Couldn't scale to multiple concurrent campaigns. No creator self-diagnosis.

The brief

Replace Plotline with an in-house system that's reliable, scalable, and transparent. Then design and build the entire creator-facing experience.

My Role

Sole designer. I owned product design and system design, then built the full frontend using Cursor.

Team

1 PM, 1 Designer (me), Engineering team

Timeline

March 2026, v1

01 / THE SYSTEM

State-driven, not screen-driven.

The core design decision: treat this as a system, not a collection of screens. Every UI element (the card, the status tag, the CTA, the progress tracker) is derived from the intersection of four dimensions.

1

Lifecycle State

Where is this streak in time? Prelaunch, active, completed, missed. Each state changes everything the creator sees.

PrelaunchActiveDoneWon/Missed
2

Reward Type

Money, credits, or pure challenge. The reward type shapes the card's headline, visual weight, and visual treatment.

₹50050 CreditsChallenge
3

Frequency

Daily, weekly, or monthly cadence. Frequency changes labels, counters, timer logic, and tracking section structure.

DailyWeeklyMonthly
4

Progress

X of Y shared, time remaining, period index. Progress drives the tracker, status tags, and countdown behavior.

2 of 5 shared3 days left

One card component handles every state. One tracking page adapts to any lifecycle. No new screens needed.

02 / LIFECYCLE

The streak moves through time.

A strict lifecycle with no ambiguity. Each state determines what the creator sees, what actions are available, and how progress is communicated.

PrelaunchUpcoming
Active PendingTask due
Active DonePeriod done
WonPayout
MissedFailed

State stability principle: Card state updates immediately when a creator completes their task, but card position in the listing only changes the next day. This prevents mid-session reshuffling and keeps the UI predictable while the creator is actively using it.

03 / THE CARD

One card, every state.

The streak card is the primary surface. It appears in the listing and communicates everything the creator needs, from “starts in 4 days” to “payout processing.”

How the card communicates across time

Starts in 4d
Due today
Done for today
Payout status
Missed
Prelaunch
Active
Done
Won
Missed
Learn More
Track Progress
Track Progress
View Payout
View Tracking

Progress tracker

Day-by-day dots with completion states, connecting lines, and period counters that adapt to frequency.

Day 3 of 51/2 shared · 8h left
3
4
5

Streak card header

The banner gradient, headline, construct subtitle, and status tag all resolve from a single state object. One layout handles every lifecycle and reward type combination.

Earn ₹ 500Due today
Share 3 links daily for 7 days
04 / THE LISTING

Streaks lives inside Rewards.

Streaks and Rewards are two types of campaigns on Wishlink, so they share a single Rewards page with separate tabs. Both have their own entry point in the Wishlink Exclusive section on the home page, but they lead to the same destination. The listing uses pill-based filtering (All, Upcoming, Live, Past) with sticky positioning on scroll.

Information architecture

Home · Wishlink Exclusive

Rewards entryStreaks entry

Rewards Page

RewardsStreaks
AllUpcomingLivePast
Active streaksP1
Prelaunch streaksP2
Won streaksP3
Missed streaksP4

Both entry points lead to the same page · Cards sorted by priority

Listing — All filter

Card movement logic

When a streak transitions from Live to Won/Missed, it stays in its current position for the rest of the day. Card state updates immediately, but card placement waits until the next day. This prevents mid-session reshuffling.

Home indicator priority cascade

P1

Any streak is active & pending

Orange count badge · Opens Live filter

P2

Any streak in prelaunch

Green dot · Opens Upcoming filter

P3

Any streak won (unpaid)

Green dot · Opens Past filter

P4

Any streak missed

Red dot · Opens Past filter

P5

No active streaks

No indicator · Opens default tab

05 / TRACKING

The transparency layer.

The Track Progress page lets creators see exactly what counted, what didn't, and why. Before this, “did my link count?” was the most common support ticket. Now creators can self-diagnose.

Track Progress — Live

Page structure adapts to state

Live
Streak identity
Last updated
Rules (expanded 1st visit)
Current period, counted + in progress
Previous periods
Missed
Streak identity
Rules (collapsed)
Last period, counted + not counted
Previous periods
Won
Streak identity
Period 1, counted only
Period 2, counted only
Period 3, counted only
Period 4, counted only
06 / CRAFT

Small decisions, visible everywhere.

The interactions and edge cases across the system.

Day 1 Pulse

When a creator's streak starts and they haven't taken action yet, the first day indicator pulses. A visual prompt when no progress has been made yet.

1
2
3
4
5
6
7

Multi-Brand Logo System

Cards handle brand representation gracefully: single logo, overlapping logos, or overflow with “+N more” tooltip.

M
Single
F
N
A
Overlap
M
F
+3
Overflow

First-Visit Education

Rules sections auto-expand on a creator's first visit, then collapse on return. Tracked per streak so return visits stay clean.

What Counts
Share links from eligible products only
Each link must get minimum unique clicks
What links may not count?
Links shared outside Wishlink
Products not in the eligible list

Timer Logic

Non-final days show remaining days. On the last day of a period, the timer switches to hours and minutes, creating natural urgency.

Day 3 of 7
2/3 shared·10h 15m left
Daily frequency

Conditions Rotation

Multiple qualifying conditions rotate every 3 seconds with a fade animation. A counter shows progress. The callout arrow points to the Track Progress button.

Only selected products qualify
(1/3)

Payout state progression

Not ApprovedStreak won
Being ApprovedBefore deadline
ProcessingQC approved
PaidIn payout
DelayedPast deadline
RejectedQC failed
07 / I SHIPPED IT

Designed and built.

I owned both the design and the frontend implementation.

I built the full frontend using Cursor. The behavioral complexity of this feature, dozens of state combinations, time-sensitive UI, priority-based sorting, made building alongside designing the right approach.

Component structure

Streaks Page

Listing, tabs, filters, priority sorting

420 lines

StreakCard

State-driven rendering for every lifecycle, reward type, and frequency

1,086 lines

StreakDayProgress

Day dots, connectors, pulse animation, completion states

315 lines

TrackProgress

Full tracking page, rules, periods, per-link transparency

1,318 lines

2,700+ lines of frontend code

One component, every combination

Lifecycle
Reward type
Earn ₹ 500Due today
Share 3 links daily for 7 days
M

Myntra Summer Sale

Mar 15 – Mar 22

Day 3 of 52/3 shared·10h 15m left
3
4
5

5 states × 3 reward types = 15 combinations from one component

Behavior that required building to get right

Countdown transitions: Timers switch from “3 days” to “10h 15m” on the final period day. Server time only, no device clock dependency.

Scroll-responsive elements: The filter pills and tabs get a shadow on scroll, creating visual separation without adding permanent weight.

Navigation state persistence: Scroll position, selected filter, and expanded sections persist through support and PDF flows. No state lost on navigation.

getStreaksIndicator()
// Priority-based indicator for the home entry point
// Only one indicator shown, highest priority wins
P1: active_pending → orange badge (count)
P2: prelaunch → green dot
P3: won (unpaid) → green dot
P4: missed → red dot
P5: none → no indicator
// Each indicator also sets which filter tab opens
active_pending → opens "Live" filter
prelaunch → opens "Upcoming" filter
won / missed → opens "Past" filter
08 / OUTCOME

From manual execution to an operating system.

Streaks v1 replaces manual Plotline-based campaign execution with a self-contained, in-house system built for reliability, transparency, and scale.

Self-service tracking

Creators see exactly what counts and what doesn't. Link-level transparency replaces guesswork.

Concurrent campaigns

Multiple streaks run simultaneously without ops overhead. Each streak is independently configured and tracked.

Reduced support load

“Did my link count?” tickets drop as creators can self-diagnose through the tracking page.

Foundation laid

First-time experience, guided flows, and an admin interface are planned for the next iteration.

09 / MEASURING SUCCESS

How we know if this worked.

Streaks v1 ships with analytics instrumentation baked in. Every card impression, CTA tap, and tracking page interaction is logged so we can measure adoption, diagnose friction, and inform v2 decisions with real data.

North Star Metrics

Streak completion rate

The percentage of creators who finish their streak (won) versus those who drop off (missed). The single most important signal for whether the system drives sustained behavior.

Support ticket reduction

Volume of “did my link count?” tickets before and after launch. The tracking page was built specifically to eliminate this category of queries.

Self-service tracking adoption

How often creators open Track Progress and interact with link-level details. High usage means the transparency layer is working.

Repeat participation

Creators who opt into a second streak after completing or missing their first. Measures whether the experience feels fair and worth repeating.

What we track

Card surface

  • Card impressions per state and reward type
  • CTA taps: Learn More, Track Progress, View Payout
  • Conditions bar view and rotation engagement
  • Brand tooltip opens on overflow cards

Tracking page

  • Page visits per lifecycle state
  • Section expand/collapse interactions
  • Link-level item taps (copy wishlink, open post)
  • Support entry and PDF document opens

Listing and navigation

  • Home indicator taps by priority level
  • Filter pill usage (All, Upcoming, Live, Past)
  • Tab switches between Rewards and Streaks

Behavioral signals

  • Day 1 pulse to first action conversion
  • Time between streak going active and first share
  • Period-over-period completion consistency

What comes next

The GA spec, first-time user experience (education pages, realisation flow, guided overlays), “How it works” content, and an admin interface for campaign management are all scoped for the next iteration. This v1 ships the complete creator-facing system with the instrumentation foundation to inform every one of those decisions.