# The year · Malte Therkildsen

> The last year of work in numbers: commits day by day and hour by hour, the lines written, the pull requests merged and the work with Claude Code, each number linked to the command that counted it.

Source: https://therkildsen.dev/year

Year

# The year in numbers

From [25 Jan 2026](#y-first-commit) to the day this page was built, I made [9,057](#y-commits) commits in [15](#y-repositories) repositories, on [214](#y-active-days) days and in [1,772](#y-active-hours) hours that each have at least one commit. Every number links to the command that counted it, at the end of the page.

[Commits9,057$ python3 -I site/year/yearstats.py site/data/year-yearstats.json](#y-commits)[Days with a commit214$ python3 -I site/year/yearstats.py site/data/year-yearstats.json](#y-active-days)[Hours with a commit1,772$ python3 -I site/year/yearstats.py site/data/year-yearstats.json](#y-active-hours)[Longest run of days67$ python3 -I site/year/yearstats.py site/data/year-yearstats.json](#y-longest-streak)[Pull requests merged988$ gh pr list -R <owner>/<repository> --state merged --limit 5000 --json number,createdAt,mergedAt --jq '.[] | [.number, .createdAt, .mergedAt] | @tsv'](#y-prs)[Lines of code added4,423,214$ python3 -I site/year/numstat.py site/data/year-numstat.json](#y-code-added)[Claude Code sessions1,151$ python3 -I site/year/claude.py site/data/year-claude.json](#y-claude-sessions)[Tool calls by Claude331,120$ python3 -I site/year/claude.py site/data/year-claude.json](#y-claude-tool-calls)

[Every day](#days)[Month by month](#months)[Around the clock](#clock)[The code](#code)[Pull requests](#prs)[Claude](#claude)[Linear](#plans)[Production](#production)[Beginnings](#began)[May](#early)[The commands](#commands)

Days

## Every day with a commit

The longest run of days with a commit is [67](#y-longest-streak) days, to [11 Oct 2026](#y-longest-streak), and the current one is [67](#y-current-streak) days. The busiest day was [5 Oct 2026](#y-busiest-day), with [524](#y-busiest-day) commits.

**Commits per day**A darker square holds more commits

The table

| Day | Commits |
| --- | --- |
| 25 Jan 2026 | 2 |
| 30 Jan 2026 | 1 |
| 31 Jan 2026 | 1 |
| 8 Feb 2026 | 3 |
| 12 Feb 2026 | 14 |
| 13 Feb 2026 | 13 |
| 14 Feb 2026 | 17 |
| 15 Feb 2026 | 2 |
| 16 Feb 2026 | 1 |
| 17 Feb 2026 | 7 |
| 18 Feb 2026 | 15 |
| 19 Feb 2026 | 28 |
| 20 Feb 2026 | 15 |
| 22 Feb 2026 | 7 |
| 23 Feb 2026 | 11 |
| 24 Feb 2026 | 17 |
| 25 Feb 2026 | 10 |
| 1 Mar 2026 | 3 |
| 4 Mar 2026 | 11 |
| 5 Mar 2026 | 1 |
| 6 Mar 2026 | 13 |
| 7 Mar 2026 | 18 |
| 10 Mar 2026 | 24 |
| 11 Mar 2026 | 34 |
| 12 Mar 2026 | 7 |
| 17 Mar 2026 | 3 |
| 18 Mar 2026 | 53 |
| 19 Mar 2026 | 46 |
| 20 Mar 2026 | 3 |
| 21 Mar 2026 | 4 |
| 22 Mar 2026 | 19 |
| 24 Mar 2026 | 19 |
| 25 Mar 2026 | 79 |
| 26 Mar 2026 | 10 |
| 27 Mar 2026 | 48 |
| 28 Mar 2026 | 17 |
| 29 Mar 2026 | 16 |
| 30 Mar 2026 | 9 |
| 31 Mar 2026 | 38 |
| 1 Apr 2026 | 52 |
| 2 Apr 2026 | 19 |
| 3 Apr 2026 | 15 |
| 4 Apr 2026 | 83 |
| 5 Apr 2026 | 55 |
| 6 Apr 2026 | 12 |
| 7 Apr 2026 | 3 |
| 8 Apr 2026 | 11 |
| 9 Apr 2026 | 42 |
| 10 Apr 2026 | 8 |
| 13 Apr 2026 | 11 |
| 14 Apr 2026 | 31 |
| 15 Apr 2026 | 57 |
| 16 Apr 2026 | 33 |
| 17 Apr 2026 | 49 |
| 18 Apr 2026 | 14 |
| 19 Apr 2026 | 18 |
| 20 Apr 2026 | 49 |
| 21 Apr 2026 | 15 |
| 22 Apr 2026 | 87 |
| 23 Apr 2026 | 81 |
| 24 Apr 2026 | 42 |
| 25 Apr 2026 | 14 |
| 27 Apr 2026 | 4 |
| 29 Apr 2026 | 11 |
| 30 Apr 2026 | 15 |
| 1 May 2026 | 7 |
| 2 May 2026 | 4 |
| 3 May 2026 | 55 |
| 4 May 2026 | 31 |
| 5 May 2026 | 88 |
| 6 May 2026 | 10 |
| 7 May 2026 | 54 |
| 8 May 2026 | 35 |
| 9 May 2026 | 26 |
| 10 May 2026 | 9 |
| 11 May 2026 | 18 |
| 12 May 2026 | 5 |
| 13 May 2026 | 9 |
| 14 May 2026 | 5 |
| 15 May 2026 | 9 |
| 16 May 2026 | 28 |
| 17 May 2026 | 39 |
| 18 May 2026 | 29 |
| 19 May 2026 | 23 |
| 20 May 2026 | 20 |
| 21 May 2026 | 54 |
| 22 May 2026 | 31 |
| 23 May 2026 | 15 |
| 24 May 2026 | 12 |
| 27 May 2026 | 1 |
| 28 May 2026 | 2 |
| 29 May 2026 | 3 |
| 30 May 2026 | 5 |
| 5 Jun 2026 | 1 |
| 6 Jun 2026 | 35 |
| 7 Jun 2026 | 12 |
| 8 Jun 2026 | 6 |
| 9 Jun 2026 | 8 |
| 11 Jun 2026 | 4 |
| 14 Jun 2026 | 3 |
| 15 Jun 2026 | 5 |
| 16 Jun 2026 | 9 |
| 17 Jun 2026 | 24 |
| 18 Jun 2026 | 18 |
| 19 Jun 2026 | 5 |
| 21 Jun 2026 | 7 |
| 22 Jun 2026 | 4 |
| 24 Jun 2026 | 1 |
| 25 Jun 2026 | 1 |
| 26 Jun 2026 | 4 |
| 27 Jun 2026 | 12 |
| 28 Jun 2026 | 121 |
| 29 Jun 2026 | 41 |
| 30 Jun 2026 | 11 |
| 1 Jul 2026 | 36 |
| 2 Jul 2026 | 49 |
| 3 Jul 2026 | 29 |
| 4 Jul 2026 | 42 |
| 5 Jul 2026 | 18 |
| 6 Jul 2026 | 12 |
| 7 Jul 2026 | 25 |
| 8 Jul 2026 | 37 |
| 9 Jul 2026 | 23 |
| 10 Jul 2026 | 40 |
| 11 Jul 2026 | 5 |
| 12 Jul 2026 | 25 |
| 13 Jul 2026 | 37 |
| 14 Jul 2026 | 28 |
| 15 Jul 2026 | 35 |
| 16 Jul 2026 | 9 |
| 19 Jul 2026 | 10 |
| 20 Jul 2026 | 33 |
| 21 Jul 2026 | 40 |
| 22 Jul 2026 | 36 |
| 23 Jul 2026 | 18 |
| 24 Jul 2026 | 27 |
| 25 Jul 2026 | 24 |
| 26 Jul 2026 | 6 |
| 27 Jul 2026 | 26 |
| 28 Jul 2026 | 35 |
| 29 Jul 2026 | 36 |
| 30 Jul 2026 | 43 |
| 31 Jul 2026 | 38 |
| 1 Aug 2026 | 63 |
| 2 Aug 2026 | 28 |
| 3 Aug 2026 | 14 |
| 4 Aug 2026 | 13 |
| 6 Aug 2026 | 9 |
| 7 Aug 2026 | 95 |
| 8 Aug 2026 | 80 |
| 9 Aug 2026 | 12 |
| 10 Aug 2026 | 13 |
| 11 Aug 2026 | 27 |
| 12 Aug 2026 | 15 |
| 13 Aug 2026 | 103 |
| 14 Aug 2026 | 14 |
| 15 Aug 2026 | 4 |
| 16 Aug 2026 | 15 |
| 17 Aug 2026 | 39 |
| 18 Aug 2026 | 19 |
| 19 Aug 2026 | 37 |
| 20 Aug 2026 | 52 |
| 21 Aug 2026 | 15 |
| 22 Aug 2026 | 98 |
| 23 Aug 2026 | 44 |
| 24 Aug 2026 | 39 |
| 25 Aug 2026 | 89 |
| 26 Aug 2026 | 36 |
| 27 Aug 2026 | 21 |
| 28 Aug 2026 | 36 |
| 29 Aug 2026 | 31 |
| 30 Aug 2026 | 35 |
| 31 Aug 2026 | 69 |
| 1 Sep 2026 | 13 |
| 2 Sep 2026 | 78 |
| 3 Sep 2026 | 24 |
| 4 Sep 2026 | 45 |
| 5 Sep 2026 | 101 |
| 6 Sep 2026 | 57 |
| 7 Sep 2026 | 33 |
| 8 Sep 2026 | 56 |
| 9 Sep 2026 | 80 |
| 10 Sep 2026 | 25 |
| 11 Sep 2026 | 188 |
| 12 Sep 2026 | 17 |
| 13 Sep 2026 | 23 |
| 14 Sep 2026 | 141 |
| 15 Sep 2026 | 123 |
| 16 Sep 2026 | 118 |
| 17 Sep 2026 | 16 |
| 18 Sep 2026 | 56 |
| 19 Sep 2026 | 45 |
| 20 Sep 2026 | 196 |
| 21 Sep 2026 | 49 |
| 22 Sep 2026 | 7 |
| 23 Sep 2026 | 59 |
| 24 Sep 2026 | 172 |
| 25 Sep 2026 | 288 |
| 26 Sep 2026 | 76 |
| 27 Sep 2026 | 88 |
| 28 Sep 2026 | 25 |
| 29 Sep 2026 | 61 |
| 30 Sep 2026 | 107 |
| 1 Oct 2026 | 102 |
| 2 Oct 2026 | 140 |
| 3 Oct 2026 | 43 |
| 4 Oct 2026 | 195 |
| 5 Oct 2026 | 524 |
| 6 Oct 2026 | 262 |
| 7 Oct 2026 | 201 |
| 8 Oct 2026 | 207 |
| 9 Oct 2026 | 285 |
| 10 Oct 2026 | 246 |
| 11 Oct 2026 | 69 |

Months

## Month by month

Each bar is a calendar month in Copenhagen time. The repositories are counted together, each commit once.

**Commits per month**

The table

| Month | Commits |
| --- | --- |
| Jan 2026 | 4 |
| Feb 2026 | 160 |
| Mar 2026 | 475 |
| Apr 2026 | 831 |
| May 2026 | 627 |
| Jun 2026 | 332 |
| Jul 2026 | 822 |
| Aug 2026 | 1,165 |
| Sep 2026 | 2,367 |
| Oct 2026 | 2,274 |

Hours

## Around the clock

[3,565](#y-night-commits) commits, [39](#y-night-share) %, were made between midnight and six in the morning, and [2,372](#y-weekend-commits) on a Saturday or Sunday. The busiest hour held [95](#y-max-in-one-hour) commits.

**Commits per hour of the day**Day and eveningMidnight to six

The table

| Hour | Commits |
| --- | --- |
| 00:00 | 543 |
| 01:00 | 612 |
| 02:00 | 698 |
| 03:00 | 589 |
| 04:00 | 589 |
| 05:00 | 534 |
| 06:00 | 394 |
| 07:00 | 284 |
| 08:00 | 159 |
| 09:00 | 70 |
| 10:00 | 84 |
| 11:00 | 93 |
| 12:00 | 129 |
| 13:00 | 249 |
| 14:00 | 278 |
| 15:00 | 298 |
| 16:00 | 301 |
| 17:00 | 300 |
| 18:00 | 379 |
| 19:00 | 491 |
| 20:00 | 410 |
| 21:00 | 381 |
| 22:00 | 610 |
| 23:00 | 582 |

**Commits per day of the week**Monday to FridayThe weekend

The table

| Day | Commits |
| --- | --- |
| Monday | 1,285 |
| Tuesday | 1,099 |
| Wednesday | 1,396 |
| Thursday | 1,307 |
| Friday | 1,598 |
| Saturday | 1,168 |
| Sunday | 1,204 |

Code

## The lines written

[4,423,214](#y-code-added) lines of code and [1,374,240](#y-markdown-added) lines of Markdown were added in [47,441](#y-files-touched) files. Generated and copied files are left out: they added [3,107,015](#y-generated-added) lines more.

**Lines added per kind of file**

The table

| Kind | Lines added |
| --- | --- |
| .html | 2,754,659 |
| .md | 1,374,240 |
| .ts | 1,361,662 |
| .tsx | 981,174 |
| .js | 796,550 |
| .mjs | 487,149 |
| .css | 475,610 |
| .jsx | 184,439 |
| .sql | 123,165 |
| .py | 6,942 |
| .cjs | 3,698 |

**Lines added per repository**

The table

| Repository | Lines added |
| --- | --- |
| RAMTT monorepo | 6,051,392 |
| Portfolio | 1,524,901 |
| Design system | 690,047 |
| Zibaldone | 534,129 |
| RAMTT before the rewrite | 268,689 |
| Context bundle | 116,290 |
| RAMTT marketing | 37,636 |
| Studio site | 15,134 |
| Dotfiles | 761 |

Merges

## Pull requests

[988](#y-prs) pull requests were merged. From opened to merged took [5.9](#y-pr-median-minutes) minutes in the middle case, and [84](#y-prs-within-hour) % were merged within an hour. The most in one day was [111](#y-pr-busiest-day), on [25 Sep 2026](#y-pr-busiest-day).

**Pull requests merged per month**

The table

| Month | Merged |
| --- | --- |
| May 2026 | 29 |
| Jun 2026 | 4 |
| Jul 2026 | 3 |
| Sep 2026 | 616 |
| Oct 2026 | 336 |

**Pull requests merged per repository**

The table

| Repository | Merged |
| --- | --- |
| RAMTT monorepo | 497 |
| Zibaldone | 317 |
| Portfolio | 147 |
| Design system | 13 |
| Context bundle | 13 |
| Dotfiles | 1 |

Claude

## Working with Claude Code

[7,344](#y-claude-coauthored) commits, [81](#y-claude-share) %, name Claude as a co-author. In [1,151](#y-claude-sessions) sessions Claude made [331,120](#y-claude-tool-calls) tool calls, and at most [9](#y-claude-peak-sessions) sessions, or [28](#y-claude-peak-agents) with their agents, worked in the same ten minutes. Up to [30 May 2026](#y-claude-cutoff) the counts are Claude Code’s own per day; after it they come from the transcripts, where [2.4](#y-claude-error-share) % of the tool calls ended in an error and Claude edited [10,652](#y-claude-files-edited) files.

**Sessions per month**

The table

| Month | Sessions |
| --- | --- |
| Jan 2026 | 37 |
| Feb 2026 | 9 |
| Mar 2026 | 43 |
| Apr 2026 | 222 |
| May 2026 | 228 |
| Jun 2026 | 12 |
| Jul 2026 | 95 |
| Aug 2026 | 126 |
| Sep 2026 | 288 |
| Oct 2026 | 91 |

**Tool calls per month**

The table

| Month | Tool calls |
| --- | --- |
| Jan 2026 | 1,450 |
| Feb 2026 | 494 |
| Mar 2026 | 11,231 |
| Apr 2026 | 30,394 |
| May 2026 | 32,031 |
| Jun 2026 | 5,533 |
| Jul 2026 | 40,693 |
| Aug 2026 | 64,290 |
| Sep 2026 | 94,798 |
| Oct 2026 | 50,206 |

**Tool calls per tool**From the transcripts

The table

| Tool | Tool calls |
| --- | --- |
| Bash | 176,789 |
| MCP servers | 22,688 |
| Read | 19,422 |
| Edit | 18,068 |
| Write | 9,131 |
| ToolSearch | 1,504 |
| Agent | 1,493 |
| SendMessage | 811 |
| TaskUpdate | 795 |
| WebFetch | 766 |

**Ten-minute windows by the sessions at work in them**

The table

| Sessions at work | Windows |
| --- | --- |
| 1 | 3,030 |
| 2 | 1,259 |
| 3 | 517 |
| 4 | 176 |
| 5 | 69 |
| 6 | 55 |
| 7 | 32 |
| 8 | 8 |
| 9 | 1 |

**Prompts per hour of the day**From the transcriptsDay and eveningMidnight to six

The table

| Hour | Prompts |
| --- | --- |
| 00:00 | 242 |
| 01:00 | 300 |
| 02:00 | 378 |
| 03:00 | 405 |
| 04:00 | 330 |
| 05:00 | 161 |
| 06:00 | 95 |
| 07:00 | 36 |
| 08:00 | 10 |
| 09:00 | 13 |
| 10:00 | 22 |
| 11:00 | 42 |
| 12:00 | 72 |
| 13:00 | 130 |
| 14:00 | 146 |
| 15:00 | 188 |
| 16:00 | 183 |
| 17:00 | 208 |
| 18:00 | 240 |
| 19:00 | 222 |
| 20:00 | 177 |
| 21:00 | 182 |
| 22:00 | 285 |
| 23:00 | 292 |

Linear

## Plans and decisions in Linear

Since [28 Aug 2026](#y-linear-first-issue) every plan, decision and status is written in Linear: [558](#y-linear-issues) issues in [33](#y-linear-projects) projects, and [103](#y-linear-decisions) of them decisions. [278](#y-linear-completed) are completed, [223](#y-linear-within-day) of them within a day of being written, and the middle one took [2.7](#y-linear-median-hours) hours.

**Issues per team**

The table

| Team | Issues |
| --- | --- |
| RAMTT | 253 |
| Zibaldone | 168 |
| Ops | 137 |

Production

## In production

[13](#y-workers-live) Cloudflare Workers answer in production. RAMTT’s database is built by [109](#y-db-migrations) migrations with [46,888](#y-db-sql-lines) lines of SQL, which create [416](#y-db-tables) tables and [1,016](#y-db-policies) row level security policies.

Cloudflare

Workers[13](#y-workers-live)

RAMTT’s database

Migrations[109](#y-db-migrations)

Lines of SQL[46,888](#y-db-sql-lines)

Tables[416](#y-db-tables)

Policies[1,016](#y-db-policies)

Beginnings

## Where each repository began

The first commit of the year in each repository, in the order they began.

| Repository | First commit |
| --- | --- |
| First platform | 25 Jan 2026 |
| RAMTT Cowork | 8 Feb 2026 |
| Design Cowork | 15 Feb 2026 |
| First website | 5 Mar 2026 |
| Second website | 19 Mar 2026 |
| Prototypes | 24 Mar 2026 |
| RAMTT monorepo | 5 Apr 2026 |
| RAMTT before the rewrite | 3 May 2026 |
| RAMTT marketing | 22 Jul 2026 |
| Studio site | 1 Aug 2026 |
| Zibaldone | 28 Aug 2026 |
| Dotfiles | 9 Sep 2026 |
| Context bundle | 9 Sep 2026 |
| Portfolio | 29 Sep 2026 |
| Design system | 30 Sep 2026 |

May

## RAMTT on [14 May 2026](#y-may-loc)

An overview of RAMTT counted the monorepo as it stood that day. Each figure is quoted from its line in the file.

| What was counted | Then | Where it stands |
| --- | --- | --- |
| Lines of TypeScript in the RAMTT monorepo | 582,849 | WORKING-OVERVIEW-2026-05-14.md, line 25 |
| Database tables | 296 | WORKING-OVERVIEW-2026-05-14.md, line 37 |
| API routes | 392 | WORKING-OVERVIEW-2026-05-14.md, line 43 |
| Engines | 91 | WORKING-OVERVIEW-2026-05-14.md, line 49 |
| Wearable platforms connected | 8 | WORKING-OVERVIEW-2026-05-14.md, line 55 |
| UI components | 310 | WORKING-OVERVIEW-2026-05-14.md, line 67 |

Sources

## The command behind each number

site/collect.mjs ran these commands on [11 Oct 2026](#y-commits), through the queue that runs one large job at a time on the Mac. The scripts are in `site/year/`, and their whole outputs are in `site/data/`.

[Commits](#yg-0)[Lines](#yg-1)[Pull requests](#yg-2)[Claude](#yg-3)[Linear](#yg-4)[Production](#yg-5)[The early record](#yg-6)

### Commits

Read by site/year/yearstats.py from every branch of the local copies and from the GitHub API for the repositories only there. A commit is counted once, in the first repository that holds it, by its time and subject; bots are left out and times are Copenhagen time.

Commits[9,057](#y-commits)

Read on [11 Oct 2026](#y-commits) in the portfolio folder, from `commits` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Days with a commit[214](#y-active-days)

Read on [11 Oct 2026](#y-active-days) in the portfolio folder, from `active_days` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Hours with a commit[1,772](#y-active-hours)

Read on [11 Oct 2026](#y-active-hours) in the portfolio folder, from `active_hours` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Days from the first commit to the last[260](#y-span-days)

Read on [11 Oct 2026](#y-span-days) in the portfolio folder, from `span_days` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Longest run of days with a commit[67](#y-longest-streak)days

Read on [11 Oct 2026](#y-longest-streak) in the portfolio folder, from `longest_streak_days` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Days in a row with a commit, up to the last[67](#y-current-streak)days

Read on [11 Oct 2026](#y-current-streak) in the portfolio folder, from `current_streak_days` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Commits on the busiest day[524](#y-busiest-day)

Read on [11 Oct 2026](#y-busiest-day) in the portfolio folder, from `busiest_day` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Commits in the busiest hour[95](#y-max-in-one-hour)

Read on [11 Oct 2026](#y-max-in-one-hour) in the portfolio folder, from `max_in_one_hour` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Commits between midnight and six[3,565](#y-night-commits)

Read on [11 Oct 2026](#y-night-commits) in the portfolio folder, from `night_0_to_6` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Commits on a Saturday or Sunday[2,372](#y-weekend-commits)

Read on [11 Oct 2026](#y-weekend-commits) in the portfolio folder, from `weekend` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Commits written with Claude[7,344](#y-claude-coauthored)

Read on [11 Oct 2026](#y-claude-coauthored) in the portfolio folder, from `claude_coauthored` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

First commit of the year[25 Jan 2026](#y-first-commit)

Read on [11 Oct 2026](#y-first-commit) in the portfolio folder, from `first_commit` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Repositories with a commit in the year[15](#y-repositories)

Read on [11 Oct 2026](#y-repositories) in the portfolio folder, from `per_repo` in its output.

```
python3 -I site/year/yearstats.py site/data/year-yearstats.json
```

Share of the commits made between midnight and six[39](#y-night-share)%

It divides the commits made before six in the morning by all the commits. It is calculated from [commits between midnight and six](#y-night-commits) and [commits](#y-commits).

Share of the commits written with Claude[81](#y-claude-share)%

It divides the commits that name Claude as a co-author by all the commits. It is calculated from [commits written with Claude](#y-claude-coauthored) and [commits](#y-commits).

### Lines

Read by site/year/numstat.py from the diffs of the local copies, without merges. Files in vendor, node_modules, dist and generated folders, lock files, JSON, SVG and source maps are counted apart.

Lines of code added[4,423,214](#y-code-added)

Read on [11 Oct 2026](#y-code-added) in the portfolio folder, from `total.code_added` in its output.

```
python3 -I site/year/numstat.py site/data/year-numstat.json
```

Lines of Markdown added[1,374,240](#y-markdown-added)

Read on [11 Oct 2026](#y-markdown-added) in the portfolio folder, from `markdown_added` in its output.

```
python3 -I site/year/numstat.py site/data/year-numstat.json
```

Lines added by hand or with Claude, in every kind of file[9,238,979](#y-written-added)

Read on [11 Oct 2026](#y-written-added) in the portfolio folder, from `total.written_added` in its output.

```
python3 -I site/year/numstat.py site/data/year-numstat.json
```

Lines added in generated and copied files[3,107,015](#y-generated-added)

Read on [11 Oct 2026](#y-generated-added) in the portfolio folder, from `total.generated_added` in its output.

```
python3 -I site/year/numstat.py site/data/year-numstat.json
```

Files changed, without generated ones[47,441](#y-files-touched)

Read on [11 Oct 2026](#y-files-touched) in the portfolio folder, from `written_files_touched` in its output.

```
python3 -I site/year/numstat.py site/data/year-numstat.json
```

### Pull requests

Read with the GitHub CLI, the time each was opened and merged.

Merged pull requests[988](#y-prs)

Read on [11 Oct 2026](#y-prs) in the GitHub API, once for each of RAMTT monorepo, Zibaldone, Design system, Context bundle, Portfolio, Dotfiles, from `one line per pull request` in its output.

```
gh pr list -R / --state merged --limit 5000 --json number,createdAt,mergedAt --jq '.[] | [.number, .createdAt, .mergedAt] | @tsv'
```

Minutes from opened to merged, the median[5.9](#y-pr-median-minutes)minutes

It is the middle of the times from a pull request being opened to its merge. It is calculated from [merged pull requests](#y-prs).

Share of the pull requests merged within an hour[84](#y-prs-within-hour)%

It divides the pull requests merged within an hour of being opened by all of them. It is calculated from [merged pull requests](#y-prs).

Pull requests merged on the busiest day[111](#y-pr-busiest-day)

It is the date in Copenhagen time with the most merges, and the date is kept with the number. It is calculated from [merged pull requests](#y-prs).

### Claude

Read by site/year/claude.py from Claude Code’s own daily counts up to their last day, and after it from the transcripts kept on the Mac and in the archive, each session once by its id. It keeps counters only.

Claude Code sessions[1,151](#y-claude-sessions)

Read on [11 Oct 2026](#y-claude-sessions) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `sessions` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Tool calls Claude made[331,120](#y-claude-tool-calls)

Read on [11 Oct 2026](#y-claude-tool-calls) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `tool_calls` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Prompts written to Claude, from the transcripts[4,359](#y-claude-prompts)

Read on [11 Oct 2026](#y-claude-prompts) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `prompts` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Sessions at work in the same ten minutes, at most[9](#y-claude-peak-sessions)

Read on [11 Oct 2026](#y-claude-peak-sessions) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `parallel_peak_sessions` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Sessions and their agents at work in the same ten minutes, at most[28](#y-claude-peak-agents)

Read on [11 Oct 2026](#y-claude-peak-agents) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `parallel_peak_agents` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Files Claude edited, from the transcripts[10,652](#y-claude-files-edited)

Read on [11 Oct 2026](#y-claude-files-edited) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `files_edited` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Last day Claude Code’s own daily counts are read for[30 May 2026](#y-claude-cutoff)

Read on [11 Oct 2026](#y-claude-cutoff) in `~/.claude and ~/Archive/claude-projects-orphans-2026-09-09`, from `cutoff` in its output.

```
python3 -I site/year/claude.py site/data/year-claude.json
```

Share of the tool calls that ended in an error, from the transcripts[2.4](#y-claude-error-share)%

It divides the tool results marked as an error by all the tool results in the transcripts. It is calculated from [tool calls Claude made](#y-claude-tool-calls).

### Linear

Read by site/year/linear.py through Linear’s GraphQL API, every issue and project of the workspace, with the key in the Keychain. It keeps counts only.

Issues in Linear[558](#y-linear-issues)

Read on [11 Oct 2026](#y-linear-issues) in Linear’s API, workspace ramtt, from `issues` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

Issues completed[278](#y-linear-completed)

Read on [11 Oct 2026](#y-linear-completed) in Linear’s API, workspace ramtt, from `completed` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

Issues completed within a day of being written[223](#y-linear-within-day)

Read on [11 Oct 2026](#y-linear-within-day) in Linear’s API, workspace ramtt, from `completed_within_a_day` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

Hours from an issue written to completed, the median[2.7](#y-linear-median-hours)hours

Read on [11 Oct 2026](#y-linear-median-hours) in Linear’s API, workspace ramtt, from `median_hours_to_complete` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

Decisions written as issues with the label decision[103](#y-linear-decisions)

Read on [11 Oct 2026](#y-linear-decisions) in Linear’s API, workspace ramtt, from `decisions` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

Projects in Linear[33](#y-linear-projects)

Read on [11 Oct 2026](#y-linear-projects) in Linear’s API, workspace ramtt, from `projects` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

First issue in Linear[28 Aug 2026](#y-linear-first-issue)

Read on [11 Oct 2026](#y-linear-first-issue) in Linear’s API, workspace ramtt, from `first_issue` in its output.

```
python3 -I site/year/linear.py site/data/year-linear.json
```

### Production

The Workers are asked for their deployments by site/year/workers.sh, and the database is counted in its migrations.

Cloudflare Workers in production[13](#y-workers-live)

Read on [11 Oct 2026](#y-workers-live) in the portfolio folder, from `one line per Worker that answers` in its output.

```
sh site/year/workers.sh
```

Database migrations[109](#y-db-migrations)

Read on [11 Oct 2026](#y-db-migrations) in `~/Projects/RAMTT`.

```
ls ~/Projects/RAMTT/apps/app/supabase/migrations/*.sql | wc -l
```

Tables the migrations create[416](#y-db-tables)

Read on [11 Oct 2026](#y-db-tables) in `~/Projects/RAMTT`.

```
cat ~/Projects/RAMTT/apps/app/supabase/migrations/*.sql | grep -ciE '^[[:space:]]*create table'
```

Row level security policies the migrations create[1,016](#y-db-policies)

Read on [11 Oct 2026](#y-db-policies) in `~/Projects/RAMTT`.

```
cat ~/Projects/RAMTT/apps/app/supabase/migrations/*.sql | grep -ciE 'create policy'
```

Lines of SQL in the migrations[46,888](#y-db-sql-lines)

Read on [11 Oct 2026](#y-db-sql-lines) in `~/Projects/RAMTT`.

```
cat ~/Projects/RAMTT/apps/app/supabase/migrations/*.sql | wc -l
```

### The early record

Quoted from the overview of RAMTT named in each command, each figure from its line.

Lines of TypeScript in the RAMTT monorepo[582,849](#y-may-loc)

Read on [11 Oct 2026](#y-may-loc) in `~/ramtt_bank/decisions/project_overview_md`, from the file `~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md`.

```
grep -n -x -A2 '582.849' ~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md
```

Database tables[296](#y-may-tables)

Read on [11 Oct 2026](#y-may-tables) in `~/ramtt_bank/decisions/project_overview_md`, from the file `~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md`.

```
grep -n -x -A2 '296' ~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md
```

API routes[392](#y-may-routes)

Read on [11 Oct 2026](#y-may-routes) in `~/ramtt_bank/decisions/project_overview_md`, from the file `~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md`.

```
grep -n -x -A2 '392' ~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md
```

Engines[91](#y-may-engines)

Read on [11 Oct 2026](#y-may-engines) in `~/ramtt_bank/decisions/project_overview_md`, from the file `~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md`.

```
grep -n -x -A2 '91' ~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md
```

Wearable platforms connected[8](#y-may-wearables)

Read on [11 Oct 2026](#y-may-wearables) in `~/ramtt_bank/decisions/project_overview_md`, from the file `~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md`.

```
grep -n -x -A2 '8' ~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md
```

UI components[310](#y-may-components)

Read on [11 Oct 2026](#y-may-components) in `~/ramtt_bank/decisions/project_overview_md`, from the file `~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md`.

```
grep -n -x -A2 '310' ~/ramtt_bank/decisions/project_overview_md/WORKING-OVERVIEW-2026-05-14.md
```
