Product · In development
Next Line
The site this page is on, and the two repositories before it: a portfolio rebuilt around the rule that every claim has to name the evidence behind it.
- verifiedNext Line — 1,070 commits across three repositories
- verifiedNext Line — 179 tracked source files, 25,420 lines
- Role
- Sole author — all 1,070 commits
- Period
- 2024-11 — 2026-08
- Next.js
- TypeScript
- React
- Tailwind CSS
The artifact
Fig. 1

Why it was rebuilt
A portfolio is the one place an engineer is expected to describe his own work, and the one place nobody checks. The first version of this site had that problem in a form that can be pointed at: a screenshot caption turned a package statistic into a count of developers, and one project carried another project’s tags because they had been copied and never corrected.The rebuild starts from the opposite rule. Every claim on a case study names a piece of evidence, every piece of evidence records what produced it and when, and anything not established renders as a gap instead of prose. The page you are reading is built by that machinery, so it is also a demonstration of it.
- verifiedThe previous portfolio — defects found in its project registry
- verifiedNext Line — 179 tracked source files, 25,420 lines
Who built it
- Engineering role
- Sole author
- verifiedNext Line — 1,070 commits across three repositories
- Measured contribution
- 1,070 of 1,070 commits (100%)three repositories — 585 commits on the first portfolio, 25 on a short-lived API, and 460 on the rebuild that serves this page
- verifiedNext Line — 1,070 commits across three repositories
- Team
- Sole author across all three repositories.
- verifiedNext Line — 1,070 commits across three repositories
How a claim gets onto the page
The content layer is where the work is. Projects, evidence and presentation are three separate modules: a project record holds values wrapped so that each one carries its state — established, claimed, unknown, withheld, or not applicable — alongside the evidence ids backing it; an evidence registry holds nodes that each declare what they attest to, how confident the node is, and the exact command or procedure that produced them; and a presentation layer projects the two into something a component can render, returning nothing at all for a project that is not cleared for publication, so a gated project has no presentation to leak.A validator runs at module load and throws, so importing the registry anywhere is enough to fail the build on invalid content. Its rules are the interesting part: a claim written in runtime language cannot rest on evidence that only read source, a gated project cannot carry narrative fields, and a section with nothing in it is not rendered — its absence is collected once at the end of the page instead.The front end is Next.js with the App Router, React server components, and Tailwind driven from a semantic token layer rather than raw colours. GitFace, the GitHub analysis editor, mounts on the home page. Progressive disclosure uses native details elements, so every fold on every case study opens with JavaScript switched off.
- verifiedNext Line — 179 tracked source files, 25,420 lines
Evidence-backed content model
Values carry their own state and their evidence ids; the validator refuses combinations that would overstate what is known.
- verifiedNext Line — 179 tracked source files, 25,420 lines
Content, evidence, presentation
- Fig. 2

How a claim reaches the page, and the validator that refuses the ones that should not.source · Next Line — content, evidence, presentation, drawndiagram — drawn from a source audit, not a capture
The site
Step through the sequence — every step is also readable in order without doing so.
- 01 — THE WORK INDEXFig. 3

Every project the portfolio holds, counted by tier — including the three it withholds and does not show.source · Next Line — four captures of the running site - 02 — A CLAIM AND ITS EVIDENCEFig. 4

The evidence fold, open. Every source carries what it attests and how it was obtained — including the sentences saying what it cannot support.source · Next Line — four captures of the running site - 03 — GITFACE ON THE HOME PAGEFig. 5

GitFace is a region of the page rather than a link off it.source · Next Line — four captures of the running site
What the repositories show
- Commits
- 1,070 commits
- verifiedNext Line — 1,070 commits across three repositories
- This repository
- 25,420 lines
- verifiedNext Line — 179 tracked source files, 25,420 lines
- Case studies served
- 22
- verifiedNext Line — 179 tracked source files, 25,420 lines
Evidence
6 sources · how each was obtained
- verifiedNext Line — 1,070 commits across three repositoriescommit-history · attests existence · captured 2026-08-19git log over three clones: 585 commits on the first portfolio from 2024-11-23 to 2025-09-08, 25 on an API over two days in April 2025, and 460 on the rebuild from 2025-11-04 to 2026-08-19; sole author throughoutThree separate repositories, not three states of one. The first portfolio is a different codebase from the rebuild, which is why their line counts are reported separately and never summed.
- verifiedNext Line — 179 tracked source files, 25,420 linesrepository · attests structure · captured 2026-08-19git ls-files over TypeScript and script sources; content layer, evidence registry, presentation layer and validator read directly; 22 case studies served from one modelProves how this site is written. It says nothing about how it behaves for a visitor, and nothing here measured that.
- verifiedThe previous portfolio — defects found in its project registrydocument · attests structure · captured 2026-08-19field extraction across 20 records: one screenshot caption converts a weekly download range into a count of developers, one project carries another project's tags verbatim, and two projects share one identical tag stringRead from the file that still drives the previous site. It is evidence of what the old registry says, not a claim that any visitor was misled by it.
- provisionalNext Line — remotes declared by the clonesexternal-reference · attests existence · captured 2026-08-19git remote get-url origin: sgc93/next-line-front, sgc93/next-line and sgc93/next-line-apiRead from local git configuration. None was fetched from this machine, so whether they resolve is unconfirmed.
- verifiedNext Line — four captures of the running siteFig. 1 · Fig. 3 · Fig. 4 · Fig. 5screenshot-set · attests existence · captured 2026-08-21captured from the production build served on localhost, headless Chrome at 1440x900, one frame per route; nothing retouched, composed or scaled after the factShows what the interface looks like. It is not evidence that anything works, and no claim on this page rests on it.
- provisionalNext Line — content, evidence, presentation, drawnFig. 2diagram · attests structure · drawn 2026-08-21drawn from ev.nextline.source-audit; the three modules, the state vocabulary, the evidence fields and the validator rules are read from src/contentAn illustration, not a capture. It depicts the shape the source audit established, and it is provisional because a person drew it and nobody can re-run drawing. It is not evidence that the system behaves as drawn.
Links
Still open
What this case study does not yet cover, and what would close it.
Awaiting a written account
- The constraints this was built under were not recorded.
Never measured
- No outcome was measured while this project was active.
Awaiting first-person reflection
- What this project taught has not been written up yet.
- The alternatives that were considered were not recorded.
- A first-hand account of this work has not been written yet.
- The reasoning behind the engineering decisions has not been written up yet.