Project 03

Supporter

Campaigns that rally a community

A community campaign app for organizing group actions, completing support links, earning points, and climbing leaderboards.

FlutterDartFirebase
9:41
Home dashboard with points, groups, and Do next actions
The mission

Why this exists.

Community support still lives in chaotic group chats — “please like this,” “watch this,” “share before tonight.” Supporter exists to turn that noise into a campaign: one list of actions, points that reward people who show up early, and a leaderboard the group can actually see.

Inside the build

Thought through, end to end.

5 highlights

Group Campaign Engine: Engineered invite-code groups with admin/member roles and multi-link campaigns across Instagram, YouTube, Facebook, and more.

Time-Based Points Decay: Built per-link scoring with optional interval decay and floors so early supporters earn more while late joins still count.

Live Progress & Leaderboards: Designed campaign and group rankings that update with completions, plus a cross-group Home feed of next actions.

Push Notifications: Integrated campaign alerts so members get notified when a group publishes new work, with deep links back into the campaign.

Offline-Aware UX: Cached group and campaign data with persistent tabs, light/dark themes, and clear offline, empty, and error states.

The hard parts

Constraints I designed around.

The features that look effortless were the ones that fought back.

  1. 01

    From scattered DMs to a campaign

    The obstacle

    Admins had no single place to assign Instagram, YouTube, and web actions with roles, invite codes, and a shared checklist.

    How I solved it

    Engineered invite-code groups with admin/member roles and multi-link campaigns so every member sees the same work, in order.

  2. 02

    Fair points when people join late

    The obstacle

    A flat score lets last-minute taps equal the people who carried the launch — which kills the reason to show up early.

    How I solved it

    Built per-link scoring with optional interval decay and a floor — early supporters earn more, late joins still count, and group totals never go below zero.

  3. 03

    Live progress that survives a dead connection

    The obstacle

    Rankings and “do next” go blank the moment the network drops, and tab switches reload everything.

    How I solved it

    Kept main tabs mounted, cached group and campaign data, and wired FCM alerts with deep links so members get new work even when the app is closed.

Product in motion

See how it feels.

A real walkthrough of the product, interactions, and complete flow.

Next project

Tasky

Pink productivity, your way

View next project
9:41
Welcome onboarding — productivity booster intro