A self-typing ASCII portrait and live contribution stats, drawn by your own repository. No third-party widgets, no services that can rate-limit or go dark, and every pixel of it under your control.
Live example: github.com/andriidrok1 · all the code: andriidrok1/andriidrok1
Most profile READMEs pull their graphics from someone else's server — stats cards, streak cards, activity graphs, the contribution snake. Two things go wrong with that.
They break. While building this, github-readme-stats.vercel.app returned 503 on every request for hours, and its replacement started answering ERROR!!! Cards are temporarily rate limited. Your profile is the one page where a broken image is most expensive.
You can't design them. You get somebody's theme list. If you want the page to look like one thing rather than five, you have to draw it yourself.
<aside> ⚡
Everything below is generated inside your own repository by a scheduled action. The whole page makes zero third-party requests.
</aside>
This is the part no guide writes down, and it dictates every decision that follows. Tested by posting markdown to GitHub's own rendering API (POST /markdown) and reading back what survived.
STRIPPED
<style> blocks style=" " attributes class=" "
inline <svg> <font> <small> <big>
KEPT
<sub> <sup> <kbd> <samp> <blockquote> <details> <hr> <picture>
align=" " width=" " on <img> and <td>
Three consequences worth internalising:
font tag, not with inline SVG. Your only choice is GitHub's sans or its monospace, via backticks or a code / samp tag.animate and set elements — inside the file. GitHub does run those.# the repo has to be named exactly your GitHub username
gh repo create <your-username> --public --clone
cd <your-username>
pip install pillow numpy opencv-python-headless rembg onnxruntime
The first run downloads a ~176 MB background-removal model. Once, then cached.