In Development · Code exists, not yet in production· iOS & Android · React Native · 2026

The developer's emotional companion

GitHub tracks what you did. DuoGit makes you want to do it again. A cross-platform mobile app that turns cold commit data into motivating emotional feedback — filling the gap between utilitarian dev tools and generic gamification.

👤UX / Product Design
🛠Figma · React Native · Expo
📱9 Screens Built
📈Users checked streak in first 30s unprompted
DuoGit — App Overview

GitHub lacks the emotional dimension

The GitHub contribution graph is a powerful data visualization, but it offers purely passive, technical feedback. There are no proactive "nudges" or emotional reinforcements when a developer is at risk of breaking their streak.

Current solutions are either strictly utilitarian coding tools or generic gamification (habit-tracking) apps that don't differentiate meaningful code contributions from generic daily tasks.

The Problem

Users care deeply about their coding streaks, but the native GitHub experience lacks the "nudge" factor. Generic apps require manual input, adding friction and failing to connect directly with developer workflows.

The "worried mascot" is a powerful psychological trigger.

Inspiration came from evaluating adjacent markets. Duolingo proved that emotional mascots and streak mechanics drive retention. However, no competitor combined these elements specifically for software development integration.

70%
Target Day 30 Retention
>50
Target NPS Score
↓40%
Expected Streak Anxiety
1+
Target Commits/Day Avg.

"Generic habit trackers lack software development context... they require manual input and do not differentiate meaningful code from generic tasks."

— UX Strategic Insight #4

Defining Success for DuoGit

The goal is not just to build a widget, but to foster positive behavioral change among developers — moving from sporadic, high-stress commits to consistent, stress-free daily routines.

Behavioral Metrics

Daily Commit Rate

Increase baseline from ~1 commit/day to ≥3 commits/day

Weekly Streak Duration

Increase baseline from 2-3 days to 5+ consecutive days

Post-Streak Recovery

Improve rate of recovery within 3 days from <30% to >60%

Emotional Satisfaction

Perceived Progress Clarity

Target a 50% increase in user-reported clarity (Survey 1-10)

Streak-related Anxiety

Target a 40% reduction in reported stress levels

Guilt-free Motivation

Ensure users feel motivated by the ghost mascot, not guilty

The Streak Journey Flow

The widget introduces a simple but effective daily loop based on the GitHub commit status. It seamlessly maps the emotional state of the character to the user's progress.

State 1 · Happy

Active Streak

User sees "HAPPY" status. Taps the widget, performs their daily commit, and the widget verifies the streak.

Motivated Consistent
State 2 · Worried

At Risk

Widget displays warning (e.g., "Quedan 5h"). User sees the alert, feels the urgency, and is driven to commit.

Alert Urgent
State 3 · Sad / Neutral

Streak Lost

Streak is broken ("0 DÍAS"). User acknowledges the loss and is prompted to start a new streak with a first commit.

Determined

Three widgets, one behavioral loop

Designed as the next phase, the widget layer surfaces the most critical state — streak health — directly on the home screen. Three sizes, each with a distinct role: reinforce progress, broadcast rank, or trigger recovery before the streak breaks.

Widget Racha
Widget Ranking
Widget Crítico
🔥
Small — Progress
Reinforces streak momentum by rewarding daily commits with visible habit progress. One look = full context, no app open needed.
🏆
Small — Status
Delivers instant competitive awareness with league placement and points context. Motivates without friction.
⚠️
Wide — Risk
Triggers intervention when streak health drops, using urgency and emotional cues to prompt recovery before the day ends.
Design Principle
A unified 60/40 zoning model across all sizes — data left, emotional state right — ensures instant scanning with zero cognitive load.

Visualizing GitHub Progress

DuoGit provides GitHub integration presented dynamically across the app's screens and widget states natively on iOS & Android, using emotional feedback to drive behavior.

Dynamic Mascot States

4 illustrated avatar expressions — Happy, Worried, Sad, Neutral — each with a unique glow halo. The emotional state mirrors commit activity in real time.

Built

SPACE Metrics Dashboard

Four performance dimensions — Efficiency, Satisfaction, Performance, Activity — each with SVG sparkline charts, AI insights, and trend indicators.

Built

Liga Ranking System

8 creative developer ranks from Jr Dev 🌱 to 10x Dev 🚀, unlocked by streak consistency. Visualized as a progress arc on the mascot ring in Profile.

Built

Profile Ring

SVG circular progress arc colored by current rank, mascot clipped inside the circle, floating badges with levitation animation and percentage at the arc tip.

Built

GitHub OAuth

Direct integration via expo-auth-session. Connects automatically to commits — no manual tracking required.

Designed

Home Screen Widget

iOS & Android widget showing live streak, mascot state and daily commit status at a glance from the home screen.

Next

GitHub OAuth — What's Coming

The next screen to ship. A GitHub-native authorization flow via expo-auth-session — no manual tracking, no CSV uploads. Connect once and every commit syncs automatically.

GitHub OAuth — What's Coming
Native GitHub Auth
Uses expo-auth-session for a proper OAuth 2.0 flow — no password stored, no third-party keys, just GitHub's own consent screen.
Automatic Sync
Once authorized, every commit syncs in real time. Streak tracking, SPACE metrics and Liga ranking all update without any manual input.
🔒
Read-Only Scope
Minimal permissions — Duogit only reads activity. It never writes, creates, or modifies anything in your repositories.
Implementation
The OAuth screen follows GitHub's native visual language — dark background, GitHub green CTA, familiar consent pattern — so developers authorize without hesitation.

The iOS Widget Family

The widget scales gracefully across three sizes — all designed to live on the home screen, the first thing you see when you unlock your phone. A unified 60/40 zoning model keeps data left, emotional state right, every time.

Widget — Home Screen
Widget — Lock Screen
🔥
Small — Streak at a Glance
Current streak count + happy mascot in a compact 2×2 tile. One look = full context, no app open needed.
🏆
Small — Liga Rank
Current league rank and title. Motivates without friction — no need to open the app to know where you stand.
⚠️
Wide — Streak Alert
Real-time countdown when your streak is at risk. The worried mascot creates urgency without being annoying — emotional design with intent.
Design Principle
A unified 60/40 zoning model across all sizes — data left, emotional state right — ensures instant scanning with zero cognitive load.

The Mobile App — 9 Screens

Beyond the widget, DuoGit ships as a full React Native app. Each screen is purpose-built around a single behavioral goal: making the developer's progress impossible to ignore.

LoginLogin
MetricsSPACE Metrics
LigaLiga
ProfileProfile
StatusStatus
StreakStreak
GitHub OAuthGitHub OAuth
League RankLeague Rank
LoginLogin
MetricsSPACE Metrics
LigaLiga
ProfileProfile
StatusStatus
StreakStreak
GitHub OAuthGitHub OAuth
League RankLeague Rank

Liga — Competitive Ranking

8 creative developer ranks from Jr Dev 🌱 to 10x Dev 🚀, unlocked by streak consistency. The league screen turns solo habit-building into a social game — without the toxicity.

Liga — League Rank screen
8 Ranks · Unlocked by Streak
🌱Jr Dev0d
Mid Dev7d
🔥Sr Dev30d
🥷Ninja60d
🧙Mago90d
🏗️Arq.150d
👻Ghost250d
🚀10x Dev365d
Design Insight
Ranks reward streak consistency, not raw commit count — sustainable habits over burnout sprints.

Emotional System & Market Position

The app maps directly to specific user feelings during their daily routine. This deliberate anthropomorphism creates an engagement hook that utilitarian tools lack.

Ready
Neutral
Neutral
Waiting for your first commit. The day is full of potential.
On Track
Happy
Happy
You're crushing it! Consistent commits over the last 3 days.
At Risk
Worried
Worried
No activity for 20 hours. 4 hours left to save your streak.
Streak Broken
Sad
Sad
Oh no! You missed yesterday. Commit today to cheer them up.
Feature DuoGit GitHub Duolingo
GitHub API Sync Yes Yes No
Emotional Avatar Yes No Yes
Home Screen Widget Next No Yes
Developer Focus Yes Yes No

DuoGit owns the developer behavior layer by pairing live commit sync with emotional streak coaching. It turns progress signals into motivating feedback, closing the gap between code tracking and sustained coding habits.

Where GitHub tracks history and Duolingo gamifies generic habits, DuoGit is the only product built specifically for developer consistency — not just activity.

Bringing it all together

DuoGit is not yet in production — these are design targets benchmarked against industry data, not live metrics. The interaction loop is built and testable; the numbers below reflect what success looks like once real users are in.

>70%
Target Day 30 Retention (vs 40% benchmark)
↑50%
Perceived Progress Clarity
↓40%
Target reduction in streak-related stress levels

↻ What's next

The immediate path is GitHub OAuth via expo-auth-session to replace mock data with live commits, followed by the home screen widget — the original trigger for the product concept.

Longer term I'd explore team streaks (shared mascot between coworkers) and unlockable avatar skins per Liga rank — the 4 emotional states are already shipped, new skins per rank would deepen the reward loop without adding friction.

UI Kit built for behavioral clarity

Every visual decision is codified — colors map directly to emotional states, not aesthetics. The system ships as NativeWind tokens inside the React Native codebase.

🎨 Color Tokens

Backgrounds

Dark
Surface
High

State Colors

On Track
At Risk
Primary
Secondary

Typography

Heading
Body text
LABEL · CAPS
Inter — System

📦 Core Components

MetricCard

Displays a single SPACE metric with icon, trend badge, value and unit. Reused across Dashboard and Metrics screens.

Shipped

SparkLineChart

Inline SVG line chart for commit activity trends. Renders inside MetricCard without external dependencies.

Shipped

MascotDisplay

Renders mascot image with glow halo based on state. Accepts size and grayscale props for widget contexts.

Shipped

NativeWind Tokens

All colors defined as Tailwind extensions — bg-background-dark, text-accent, text-neon-orange — consistent across all screens.

Implemented