Everything here is small enough to read end to end. This repository is the profile page plus the one script that generates its graphics.
| Project | What it is | Links |
|---|---|---|
| basirah — بَصِيرَة | Qur'an surahs with recitation, duas and the Names of Allah, in Burmese, English and Arabic. Astro + PWA. | Live · Source |
| languageatlas | Offline field guide to 83 programming languages, filterable across kind, paradigm, typing, execution, platform and runtime. | Live · Source |
| job-tracker | Application pipeline with interviews, funnel and velocity analytics, on SvelteKit 5 + Cloudflare D1. | Live · Source |
| lstm-trend | LSTM stock forecasting on Keras 3, with simpler baselines and the limitations written down. | Live · Source |
| hobun-ssg | Learning Hono and Bun by pre-rendering a site to static HTML on Cloudflare Pages. | Live · Source |
| update-go | One-command Go toolchain installer and updater for Linux and macOS, with checksum verification. | Source |
| cv-resume-consolidation | Markdown in, ATS-safe one-page PDF and matching DOCX out. | Source |
| galaxy-legend-extractor | All 194 SSS heroes reverse-engineered into an LLM-ready dataset. | Source |
This chart is the exception: its four columns and 26 chips are a hardcoded list at the top of
stack() in tools/build-assets.mjs, not API data. Every other
number on this page comes from the GitHub API.
Where each chart's numbers come from:
flowchart LR
A["GET /users/c0k0n/repos<br/>per_page=100, sort=pushed"] --> B{"is a fork?"}
B -->|yes| X["dropped"]
B -->|no| C{"named c0k0n?"}
C -->|yes| X
C -->|no| D["8 projects"]
D --> E["GET /repos/c0k0n/:n/commits<br/>per_page=1, Link rel=last"]
D --> F["GET /repos/c0k0n/:n/languages<br/>bytes summed per language"]
E --> G["commits-*.svg"]
F --> H["languages-*.svg"]
D --> I["stats-*.svg<br/>public projects, languages tracked"]
J["GET /search/commits<br/>author-date within 1 year"] --> I
K["LIVE map, 5 URLs<br/>hardcoded in the script"] -.-> I
Node 20.11+ — the script uses import.meta.dirname and top-level await. There is no
package.json and nothing to install.
node tools/build-assets.mjs # uses `gh auth token`
GH_TOKEN=$(gh auth token) node tools/build-assets.mjsIt reads nothing from disk, writes all 11 generated files into assets/, prints the file list
plus a language breakdown, and throws on the first failed request. Each run overwrites the
generated charts outright; the four hand-drawn diagrams in the file map are never touched.
