Skip to content

Latest commit

 

History

History
253 lines (194 loc) · 10 KB

File metadata and controls

253 lines (194 loc) · 10 KB

DevWrapped

Your Year in Code.

Deployed on Cloudflare API on Cloudflare Workers Built with React TypeScript

Turn a GitHub profile into a cinematic, interactive story.
Not another dashboard. A Wrapped.

Try it live →


What is DevWrapped?

Spotify Wrapped went viral because it wasn't analytics — it was storytelling.

GitHub has millions of developers, yet every recap tool today is just a dashboard wearing colorful clothes.

DevWrapped changes that. Enter a username. Get a 10-slide cinematic story that tells the story behind your year as a developer — what you built, when you coded, how you think, and what your commit history secretly says about you.


The Story — 10 slides, one narrative

#SlideWhat it shows
OpeningAnimated reveal with your avatar, gesture instructions, and "Your2026 in Code"
Year in NumbersCommits, repos, PRs, issues, stars, followers — count-up animation
Tech DNAYour language breakdown as an animated genome visualization
Commit Psychology"You typed 'fix' 48 times." — what your messages really say
Project GraveyardCreated 22 repos, maintained 4. The rest are enjoying retirement.
Peak MomentYour hardest coding day — 47 commits, 3 repos, 9 hours
The Night OwlLatest commit at2:00 AM — "please work"
Hall of FameMost starred, most active, longest-running, fastest-growing
Developer ArchetypeThe Explorer, The Finisher, The Night Owl — personality from data
Share Studio6 themed stat cards + all-in-one poster, 8 theme packs, download/share

Theme Packs — your Wrapped, your style

Each theme is a complete visual identity — different backgrounds, decorations, typography, and per-card treatments (the streak card looks different from the language card, even in the same theme).

🌌 Neon Observatory

Aurora gradients, stars, constellation dots, nebula depth
Best for: Default / signature look

⚫ Midnight Minimal

Black, white, subtle accents, line-graph streak
Best for: LinkedIn, professional

💻 Cyber Terminal

ASCII bars, terminal grids, CRT scanlines
Best for: Developers, open-source

📐 Blueprint

Engineering grids, dimension lines, spec sheets
Best for: Engineers, architects

🌋 Magma Core

Molten lava gradients, floating embers, forged metal
Best for: Power & intensity

🌊 Abyss

Deep ocean, bubble trails, jellyfish glow
Best for: Calm & immersive

🌸 Sakura

Cherry blossom petals, ink brush, matte paper
Best for: Elegant & artistic

⚜️ Noir Gold

Matte black + satin gold, luxury minimal
Best for: Premium, LinkedIn

Interactions

  • Auto-advance — story progresses automatically with per-slide timing (3–6s), pauses on hold
  • Hold → pause — press and hold anywhere to pause the story; release to resume
  • Hold → hide UI — hold for500ms to hide everything (screenshot-ready artwork)
  • 3D Tilt — cards tilt toward your cursor with holo shine, glow, and a </> watermark
  • Mobile Gyro — tilt your phone and cards respond (permission granted on first tap)
  • Touch Swipe — swipe left/right to navigate between slides
  • Tap zones — tap right half = next, left half = previous
  • ⋮ Menu — per-card Download PNG, Copy Image, Share, Replay
  • Theme Switching — instant live preview, no reload
  • Archetype Recommendation — auto-selects the best theme based on your developer personality

Tech Stack

Stack

Layer Technology
Frontend React 19 · Vite · TypeScript · Tailwind CSS
Animation Framer Motion · Custom tilt/holo engine
State Zustand · TanStack Query
Export html-to-image
API Cloudflare Workers (Cache API)
Hosting Cloudflare Pages (web) + Cloudflare Workers (API)

Architecture

┌─────────────────────────────────────────────────┐
│                    Browser                       │
│                                                  │
│  React 19 + Vite + Tailwind                      │
│  ├── Landing Page (username input)               │
│  ├── 10-slide Deck (auto-advance, gestures)      │
│  ├── Share Studio (theme picker + carousel)      │
│  └── WrappedPoster (all-in-one stat card)        │
│         │                                        │
│         ▼ fetch()                                │
│  ┌──────────────────────────────────┐            │
│  │  Cloudflare Worker (API proxy)   │            │
│  │  ├── GitHub REST API             │            │
│  │  ├── GitHub GraphQL API          │            │
│  │  └── Cache API (1h per user)     │            │
│  └──────────────────────────────────┘            │
└─────────────────────────────────────────────────┘

Getting Started

Prerequisites

  • Node 20+ and npm
  • A GitHub account (for the token)

###1. Create a GitHub Token

Go to github.com/settings/tokens → Generate a classic token → select public_repo scope. No other scopes needed.

###2. Set the Token

cd worker
cp .dev.vars.example .dev.vars
# Paste your token into .dev.vars:
# GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxx

###3. Run Locally

# Terminal 1 — API proxy (port8787)
cd worker && npm run dev

# Terminal 2 — web app (http://localhost:5173)
cd web && npm run dev

Open http://localhost:5173, enter a GitHub username, and press to start.

No token? Run VITE_USE_MOCK=1 npm run dev in web/ to see the deck with built-in mock data.


Deploy

Worker (Cloudflare Workers)

cd worker
npm run deploy
wrangler secret put GITHUB_TOKEN  # paste your token at the prompt

Web (Cloudflare Pages)

cd web
npm run build
npx wrangler pages deploy dist --project-name devwrapped

Or push to GitHub and connect the repo in the Cloudflare Pages dashboard (root dir: web).


Environment Variables

VariableWherePurposeRequired
GITHUB_TOKENWorker secretGitHub PAT (classic, public_repo scope)
VITE_API_BASEWeb .env.productionWorker API URL (baked at build time)
VITE_USE_MOCKWeb .envSet to 1 for mock data (no token needed)

Project Structure

DevWrapper/
├── web/
│   ├── src/
│   │   ├── components/   # Deck, slides, ShareStudio, CardEffects
│   │   ├── pages/        # Landing, Wrapped
│   │   ├── lib/          # analysis, personality, tilt, themes, API
│   │   ├── store/        # Zustand deck state
│   │   └── hooks/        # TanStack Query data fetching
│   ├── public/favicon/   # SVG + PNG icons
│   └── vercel.json       # SPA routing config
└── worker/
    └── src/index.ts      # Cloudflare Worker (GitHub proxy + cache)

License

MIT