Collect
An n8n queue-worker calls the public GitHub API hourly, once per repository. A repository whose last push has not changed is skipped rather than re-fetched, and a run lock makes a second tick stand down instead of duplicating work.
This is not a static portfolio. An hourly job collects public repository data from GitHub, stores it in Postgres, and serves it through a read-only API to the page you are reading. The numbers on the other page are rows in that database.
NOT CONNECTED
This deployment is not connected to the repository feed. No repository data is shown until the feed is available.
John-Ronan S. Beira — BS Computer Science, fourth year. Building with intent.
The rest of the portfolio — projects, certificates, archive — lives at syn-forge.com.
An n8n queue-worker calls the public GitHub API hourly, once per repository. A repository whose last push has not changed is skipped rather than re-fetched, and a run lock makes a second tick stand down instead of duplicating work.
Postgres keeps repositories, commits and one row per run. Commits are keyed by SHA, so re-crawling the same history adds nothing twice. Every figure on the home page is a COUNT over those rows.
A read-only database role answers four GET routes: repository index, one repository, commit feed, activity histogram. They sit behind nginx, which checks the key, caches responses for 60 seconds and rate-limits the edge. Readers cannot reach the write path.
This page is server-rendered by TanStack Start inside a Cloudflare Worker. The Worker holds the read key and calls the API server-to-server, so the key never reaches the browser bundle.