Design System
The behavioral design system behind DuoGit — color tokens, Ghost's emotional states, 60/40 zoning, league progression, and annotated UI components. Every element is wired to a psychological mechanism.
Dark-first palette that respects developer visual habits. Each color encodes a behavioral state — streaks, progress, and risk.
Accent — Ghost
--accent
var(--accent)
Streak — Active
--accent-green
#10b981
Warning — At Risk
--accent-warn
var(--accent-amber)
Background
--bg
#1E1A2E
Card Surface
--bg-card
#2D2845
Text Primary
--text
#F2EFE8
Ghost reacts to commit activity in real time. Each state maps to a psychological moment in the developer's consistency journey.
Neutral — Ready
Trigger: app open, no commits today
Day begins. Ghost is calm and expectant — no pressure, pure potential.
Neutral state
Happy — On Streak
Trigger: 3+ day streak / commits today
Positive reinforcement. Ghost celebrates — glowing eyes, energetic posture. The system rewards consistency, not just volume.
Core Drive 2: Accomplishment
Worried — Streak at Risk
Trigger: no commit by evening / streak about to break
Loss aversion activated. Ghost's distress makes the risk visible — empathetic urgency, not punishment.
Core Drive 8: Loss Aversion
Sad — Streak Broken
Trigger: missed day, streak resets
Emotional cost acknowledged — then resilience. Ghost mourns with the developer, then invites a guilt-free restart.
Guilt-free restartSame discipline as Cuak: front, back and gesture range locked before drafting expressions. Ghost's proportions had to hold up from every angle a widget or app screen might crop it to.
Front — neutral
Back view
Gesture range
Social influence and status identity (Core Drive 5). The league system gives developers a place to belong — and a reason to keep their streak.
Bronze
0 — 499 XP
Silver
500 — 1,499 XP
Gold
1,500 — 3,999 XP
Diamond
4,000 — 9,999 XP
Legend
10,000+ XP
XP sources: Daily commit (+10 XP), streak milestone (+25 XP), 7-day streak (+50 XP), first commit of day (+5 XP bonus). XP decay on missed days activates loss aversion without permanent punishment.
League standing — own screen
A full leaderboard, not a badge stapled to the dashboard. "You" is highlighted among peers by seniority tier — social identity anchor, Core Drive 5. It's opt-in: developers navigate here, it isn't pushed at them.
Every surface splits 60% commit data / 40% Ghost emotional state. Each zone is mapped to an Octalysis Core Drive.
Small 2×2
Progress Focus
Current streak count + Ghost emotional state. Day-to-day habit engine.
→ Core Drive 2: Accomplishment
Small 2×2
Status Focus
League rank + XP meter. Social identity — who you are in the developer community.
→ Core Drive 5: Social Influence
Wide 4×2 — Risk
Urgency Surface
Time until streak breaks + Worried Ghost. Most powerful retention surface — visible on home screen without opening the app.
→ Core Drive 8: Loss & Avoidance
Same commit data. Completely different emotional experience. DuoGit doesn't change what you did — it changes how it feels.
Real activity, zero framing. The graph doesn't say whether this pace is good, whether a streak is at risk, or how it should make you feel — just squares and a count.
Same underlying data — streak framing, Ghost's emotional state, SPACE metrics. Absence feels recoverable, not shameful.
Three dashboard decisions, and the behavioral mechanism each one is built on.
Ghost mascot proxy
Ghost externalizes the developer's relationship with their code activity. Cold commit data becomes a social bond — users feel responsible to Ghost, not just to a number. (Epley & Waytz — Anthropomorphism)
Streak counter — 60% zone
Streak count is the primary behavioral signal. Positioned dominant in the 60% data zone — users see their progress before Ghost's state. Streak = evidence of consistency, not judgment of absence.
Ghost emotional state — 40% zone
Ghost's expression shifts with streak health. Happy = sustain, Worried = act now, Sad = come back. Visceral-level feedback (Don Norman) — no reading required. 40% visual weight keeps it supportive, not dominant.
Streak Counter
Day streak 🔥
Ghost is happy
Primary retention mechanism. Streak count + Ghost state + fire emoji = social proof of consistency. Resets with emotional recovery message, not harsh punishment.
XP Progress Bar
Determinate progress toward next league. Near-completion state (97%) activates the Endowed Progress Effect — users close to a goal are more motivated to complete it.
Urgency Countdown Widget
⚠ Streak at risk
4h 23m
Ghost is getting worried
Home screen widget. Passive loss aversion — visible without opening the app. The most powerful retention touchpoint in the system.
SPACE Metric Cards
Satisfaction
87%
Activity
14d
SPACE framework metrics (Satisfaction, Performance, Activity, Communication, Efficiency) — translates GitHub data into developer wellbeing signals, not just productivity numbers.
Your streak
is still alive.
14 day streak 🔥
Ghost is on your side. Every commit counts — even tiny ones. Missing a day doesn't erase your progress, it just gives Ghost something to worry about.
Gold League · Updated just now