The Horology API

How it works · by @wasaybuilds

Documentation

Wind a handle. Read the movement.

Public GitHub activity becomes complications on a 3D mechanical sports watch. The stage is the instrument — this page is the legend.

Pipeline

One request in, a living timepiece out.

  1. Step 1

    Wind

    Enter any public GitHub handle on the stage.

  2. Step 2

    Fetch

    Server aggregates profile, repos, and commit search YTD.

  3. Step 3

    Map

    Stats become caliber, beat, sub-dials, reserve, and rank.

  4. Step 4

    Read

    Inspect the watch — complications move with the profile.

GitHub/api/githubcaliber · beat · dials · reservewatch

GitHub → watch

Each complication is a live readout. Signal column = GitHub input; part column = what moves on the dial.

  • commits / day

    Balance wheel

    How often you commit — the heartbeat of the piece

    The open balance aperture ticks faster as daily commit rate rises. Beat rate ≈ 2.8 + commitsPerDay × 0.55 Hz.

  • commits / day

    Seconds hand

    Sweeps faster when commit velocity rises

    Base sweep is 0.4 rev/s, plus 0.1 × commitsPerDay. Busy days read as a sharper seconds sweep.

  • local clock

    Hour & minute hands

    Real wall-clock time on your machine

    Civil time stays real so the object remains a watch. GitHub drives pace and complications, not hours of day.

  • top language

    Caliber

    Primary language stamped as a movement code

    Language #1 becomes a caliber like TS-48 (TypeScript at 48%). Codes are short abbreviations of language names.

  • language #1 %

    Minute complication

    Share of your primary language

    On the open movement, Circle001 holds an angle from language #1 percentage.

  • language #2 %

    Escape wheel

    Share of your second language

    Escape wheel rotation mirrors language #2. Stays quiet when GitHub only reports one primary language.

  • age + stars

    Power reserve

    Career “wind” left in the barrel

    Up to ~55% from account age (capped at 12 years) and ~45% from log-scaled total stars. Shown as 0–100%.

  • activity score

    Horologist rank

    Guild tier from overall GitHub prestige

    Apprentice → Journeyman → Craftsman → Master → Grandmaster. Score blends stars, commits YTD, commits/day, age, and followers.

Horologist ranks

Prestige tier on the profile chip and Spec Card — not a leaderboard, a guild stamp from your public footprint.

01Apprentice
02Journeyman
03Craftsman
04Master
05Grandmaster

Score blends log(stars), log(commits YTD), commits/day, account age, and followers. Thresholds: Apprentice → Journeyman (18) → Craftsman (35) → Master (55) → Grandmaster (75).

Using the stage

The canvas stays clean on purpose — drag to inspect; HUD for finish and share.

Wind

Type a GitHub username in the command bar and Wind. Recent handles stick for quick re-wind.

Inspect

Drag to orbit. Auto-rotate idles when you aren’t dragging. R resets the camera.

Materials

Stainless, Rose Gold, or Forged Carbon — applied to the case, bracelet, crown, and caseback.

Share

S opens Spec Mode. Copy the formatted card (C) or snap a PNG (P). Esc exits.

Hotkeys · A rotate · R reset · L lume · P png · C copy · S share

API

Same-origin aggregator used by the stage.

GET /api/github?username={login}

Response → { profile: DeveloperProfile }

# Optional — higher GitHub rate limits
GITHUB_TOKEN=ghp_…
  • Profile fields include commits YTD, commits/day, top languages, stars, followers, account age, and power reserve.
  • Without a token, unauthenticated GitHub rate limits apply — fine for demos, flaky under heavy Wind traffic.