GitHub profile toolkit

A profile that themes itself and updates itself.

profile-kit packages the hero banner, the stats card and the README generator behind drsamonline's GitHub profile into one small, reusable kit — so anyone, including an AI agent, can lift it and get the same theme-aware, self-updating result.

  • Light + dark
  • Daily refresh
  • No dependencies
  • Lift-and-go

The three ideas it combines

Each stands on its own; take one, two, or all three.

01 · HERO

A theme-aware hero

A hand-drawn SVG banner served through <picture> with media="(prefers-color-scheme: dark)" — the right artwork for each GitHub theme, with no JavaScript at all.

02 · METRICS

A card, rendered twice

lowlighter/metrics with the classic template, rendered once per theme into assets/metrics-light.svg and metrics-dark.svg. Each render pins its own palette through extras_css.

03 · README

A self-updating README

A small Python script regenerates only the marked regions — a badge row and a categorised project list — from the GitHub API, and a workflow commits the result daily. Everything outside the markers is untouched.

What's in the kit

Small on purpose — a handful of files you can read in one sitting.

README.md                what it is, how to use it, and the credits
assets/hero-light.svg     hero banner template (light) — edit the placeholders
assets/hero-dark.svg      hero banner template (dark)  — edit the placeholders
metrics.yml               the metrics workflow — copy to .github/workflows/
profile-generator/
  update_profile.py      regenerates the marked README regions
  profile-data.json      owner + markers + categories + curated repos
  update-profile.yml     the workflow that runs it daily
  README.md              how the generator works and how to configure it
docs/                     this page (GitHub Pages, served from /docs)

How to use it

Create a username/username repo, then lift the three pieces in.

  1. Create your profile repo

    A public repo named exactly username/username with a README.md.

  2. Add the hero

    Copy the two assets/hero-*.svg files in, replace the YOUR KICKER, YOUR NAME, YOUR TAGLINE and monogram YN placeholders in both, and embed them with a <picture> block.

  3. Add the metrics card

    Copy metrics.yml to .github/workflows/, set your username, and run it once. It commits the two SVGs.

  4. Add the README regions

    Copy profile-generator/ into place, put the four comment markers in your README, and curate profile-data.json.

  5. Turn on Pages (optional)

    Settings → Pages → Deploy from a branch → main / /docs to publish a landing page like this one.

Known limitation

Silent failure

The languages panel is empty under GITHUB_TOKEN

lowlighter/metrics works with the default token, but its languages plugin renders empty because the token cannot read a field the base query asks for:

  • the base repositories query requests stargazers { totalCount };
  • the repository-scoped GITHUB_TOKEN is not permitted to read it, and the call returns FORBIDDEN: Resource not accessible by integration;
  • the languages panel therefore renders "0 Languages" with no chart — and the action still reports success, so the card looks broken with no error to explain it.

The fix: a classic personal access token with no scopes, saved as the secret METRICS_TOKEN, is allowed to read stargazers. Switch the token: input to it and re-enable plugin_languages.

Also: config_theme is not a real metrics option — it is copied around the web often, but it silently does nothing. Light/dark has to be done with extras_css and two renders.

Built with

This profile is assembled from other people's work, and it deserves the credit.

  • lowlighter/metrics — the rendering engine behind the stats card. It uses the classic template with the base (header, activity) and calendar plugins, and its extras_css option to produce a matched light and dark pair from one configuration. Worth knowing: config_theme is not a real option and silently does nothing, despite how often it is copied around — light/dark has to be done with extras_css and two renders.
  • avgupta456/github-trends — the idea of tracking lines of code by language over time, and the pattern of embedding a hosted SVG instead of generating one in the repo. Its embed is parked here until an account is created on their service.
  • rzashakeri/beautify-github-profile — the catalogue this was worked from. The badge vocabulary comes from its Badges section (the shields.io family), and metrics was chosen from its Widgets list; the busier widgets it also lists (typing SVG, profile trophy, contribution snake) were deliberately left out to keep this page quiet.