ESAD Matosinhos on GitHub
2026 4.7× the commits of 2025
And the year isn't over.
Counted through 11 November 2026.Against the same dates in 2025, it's 6.0×.
Commits
Commits
4,337
4.7×
2025: 931
Merged pull requests
410
2.6×
2025: 159
Lines of code written
1.25M
6.8×
2025: 183k
Lines of tests written
407k
134×
2025: 3k
Repos with commits
29
3.2×
2025: 9
October 2026 alone: 1,301 commits.
That's more than all of 2025 (931).
Commits per month, January 2025 to November 2026
| Month | Commits |
|---|---|
| January 2025 | 13 |
| February 2025 | 55 |
| March 2025 | 30 |
| April 2025 | 70 |
| May 2025 | 19 |
| June 2025 | 29 |
| July 2025 | 13 |
| August 2025 | 73 |
| September 2025 | 145 |
| October 2025 | 196 |
| November 2025 | 247 |
| December 2025 | 41 |
| January 2026 | 147 |
| February 2026 | 35 |
| March 2026 | 286 |
| April 2026 | 394 |
| May 2026 | 430 |
| June 2026 | 270 |
| July 2026 | 291 |
| August 2026 | 477 |
| September 2026 | 15 |
| October 2026 | 1,301 |
| November 2026 | 691 |
29 repos got commits in 2026. In 2025 it was 9.
25 of them were created this year.
Commits per repo in 2026 (bar), with 2025 marked (tick) and lines written
17 more repos
| Repo | 2026 | Lines | 2025 |
|---|---|---|---|
| infra | 1,788 | 613,789 | – |
| esad-sk | 1,212 | 215,287 | 405 |
| careers | 388 | 136,799 | – |
| basestudio | 175 | 35,267 | – |
| entrar | 164 | 41,140 | – |
| oficinas | 138 | 55,688 | – |
| app-template | 126 | 26,643 | – |
| casa-do-design | 32 | 2,662 | 28 |
| requisicoes | 30 | 2,457 | – |
| secretaria | 30 | 12,161 | – |
| anduin | 28 | 32,743 | – |
| reblister | 28 | 3,848 | – |
| aclart | 24 | 8,404 | – |
| esad-3d | 24 | 20,531 | – |
| pdb-sk-twdui | 20 | 901 | 133 |
| entrar-client | 19 | 2,522 | – |
| esad-archive | 18 | 0 | – |
| core | 15 | 2,480 | – |
| crm | 15 | 6,430 | – |
| bda2-sk | 13 | 88 | 1 |
| loggin-infra | 12 | 0 | – |
| shortcourses | 9 | 11,850 | – |
| archive-orfeu-site | 7 | 0 | – |
| base-studio | 7 | 4,394 | – |
| archive-pdb-site | 5 | 3 | – |
| archive-orfeu-backend | 4 | 0 | – |
| osv-watch | 4 | 498 | – |
| ctesp-2026-trabalhofinal | 1 | 9,180 | – |
| sveltekit-template | 1 | 145 | – |
What got built: 10 things.
Grouped from the scope each commit names. Each strip is the year, one column per week.
Commits per week in 2026, by feature
| Feature | Commits | Lines | First | Last |
|---|---|---|---|---|
| Analytics and its assistant | 511 | 229,521 | 31 May 2026 | 9 November 2026 |
| The Comunicação workspace | 351 | 124,599 | 11 February 2026 | 10 November 2026 |
| Careers portal | 697 | 207,459 | 14 April 2026 | 11 November 2026 |
| Sign-in for every app | 249 | 48,910 | 14 October 2026 | 11 November 2026 |
| Six apps on one template | 579 | 160,617 | 10 May 2026 | 11 November 2026 |
| Agents inside the admin | 88 | 49,557 | 19 March 2026 | 11 November 2026 |
| esad.pt: leads, search and languages | 135 | 41,436 | 11 June 2026 | 11 November 2026 |
| Running the platform | 738 | 185,871 | 15 January 2026 | 11 November 2026 |
| Anduin | 28 | 32,743 | 30 October 2026 | 5 November 2026 |
| 3D lessons | 24 | 20,531 | 22 October 2026 | 30 October 2026 |
It wasn't just more. It was different work.
Commits following conventional format
91%
2025: 13%
Share of new code that is tests
33%
2025: 2%
Busiest single day
213
commits on 17 October
2025: 34 on 1 October
Longest run of days with commits
28
days, 20 July to 16 August
2025: 26 days
| Panel | 2026 | 2025 |
|---|---|---|
| Commits following conventional format | 91% | 2025: 13% |
| Share of new code that is tests | 33% | 2025: 2% |
| Busiest single day | 213 | 2025: 34 |
| Longest run of days with commits | 28 | 2025: 26 days |
25% of 2026's commits landed between 22:00 and 06:00.
In 2025 it was 6%. Weekends went from 10% to 17%.
Commits by weekday and hour, 2026
| Weekday | Hour | Commits |
|---|---|---|
| Mon | 00:00 | 13 |
| Mon | 01:00 | 2 |
| Mon | 02:00 | 4 |
| Mon | 03:00 | 0 |
| Mon | 04:00 | 0 |
| Mon | 05:00 | 0 |
| Mon | 06:00 | 5 |
| Mon | 07:00 | 1 |
| Mon | 08:00 | 2 |
| Mon | 09:00 | 25 |
| Mon | 10:00 | 19 |
| Mon | 11:00 | 15 |
| Mon | 12:00 | 42 |
| Mon | 13:00 | 41 |
| Mon | 14:00 | 69 |
| Mon | 15:00 | 54 |
| Mon | 16:00 | 34 |
| Mon | 17:00 | 30 |
| Mon | 18:00 | 21 |
| Mon | 19:00 | 39 |
| Mon | 20:00 | 43 |
| Mon | 21:00 | 38 |
| Mon | 22:00 | 20 |
| Mon | 23:00 | 34 |
| Tue | 00:00 | 27 |
| Tue | 01:00 | 9 |
| Tue | 02:00 | 3 |
| Tue | 03:00 | 2 |
| Tue | 04:00 | 1 |
| Tue | 05:00 | 0 |
| Tue | 06:00 | 0 |
| Tue | 07:00 | 5 |
| Tue | 08:00 | 4 |
| Tue | 09:00 | 3 |
| Tue | 10:00 | 20 |
| Tue | 11:00 | 41 |
| Tue | 12:00 | 63 |
| Tue | 13:00 | 36 |
| Tue | 14:00 | 27 |
| Tue | 15:00 | 24 |
| Tue | 16:00 | 37 |
| Tue | 17:00 | 35 |
| Tue | 18:00 | 25 |
| Tue | 19:00 | 30 |
| Tue | 20:00 | 29 |
| Tue | 21:00 | 16 |
| Tue | 22:00 | 16 |
| Tue | 23:00 | 18 |
| Wed | 00:00 | 38 |
| Wed | 01:00 | 15 |
| Wed | 02:00 | 8 |
| Wed | 03:00 | 2 |
| Wed | 04:00 | 5 |
| Wed | 05:00 | 0 |
| Wed | 06:00 | 1 |
| Wed | 07:00 | 0 |
| Wed | 08:00 | 7 |
| Wed | 09:00 | 50 |
| Wed | 10:00 | 83 |
| Wed | 11:00 | 50 |
| Wed | 12:00 | 63 |
| Wed | 13:00 | 57 |
| Wed | 14:00 | 47 |
| Wed | 15:00 | 32 |
| Wed | 16:00 | 84 |
| Wed | 17:00 | 69 |
| Wed | 18:00 | 42 |
| Wed | 19:00 | 26 |
| Wed | 20:00 | 26 |
| Wed | 21:00 | 24 |
| Wed | 22:00 | 29 |
| Wed | 23:00 | 45 |
| Thu | 00:00 | 52 |
| Thu | 01:00 | 33 |
| Thu | 02:00 | 24 |
| Thu | 03:00 | 16 |
| Thu | 04:00 | 6 |
| Thu | 05:00 | 5 |
| Thu | 06:00 | 1 |
| Thu | 07:00 | 6 |
| Thu | 08:00 | 5 |
| Thu | 09:00 | 0 |
| Thu | 10:00 | 17 |
| Thu | 11:00 | 32 |
| Thu | 12:00 | 54 |
| Thu | 13:00 | 56 |
| Thu | 14:00 | 53 |
| Thu | 15:00 | 62 |
| Thu | 16:00 | 73 |
| Thu | 17:00 | 32 |
| Thu | 18:00 | 30 |
| Thu | 19:00 | 45 |
| Thu | 20:00 | 58 |
| Thu | 21:00 | 37 |
| Thu | 22:00 | 32 |
| Thu | 23:00 | 30 |
| Fri | 00:00 | 17 |
| Fri | 01:00 | 20 |
| Fri | 02:00 | 8 |
| Fri | 03:00 | 0 |
| Fri | 04:00 | 0 |
| Fri | 05:00 | 0 |
| Fri | 06:00 | 0 |
| Fri | 07:00 | 1 |
| Fri | 08:00 | 9 |
| Fri | 09:00 | 19 |
| Fri | 10:00 | 26 |
| Fri | 11:00 | 29 |
| Fri | 12:00 | 40 |
| Fri | 13:00 | 49 |
| Fri | 14:00 | 108 |
| Fri | 15:00 | 92 |
| Fri | 16:00 | 72 |
| Fri | 17:00 | 84 |
| Fri | 18:00 | 67 |
| Fri | 19:00 | 37 |
| Fri | 20:00 | 86 |
| Fri | 21:00 | 92 |
| Fri | 22:00 | 67 |
| Fri | 23:00 | 80 |
| Sat | 00:00 | 68 |
| Sat | 01:00 | 47 |
| Sat | 02:00 | 55 |
| Sat | 03:00 | 23 |
| Sat | 04:00 | 17 |
| Sat | 05:00 | 33 |
| Sat | 06:00 | 20 |
| Sat | 07:00 | 4 |
| Sat | 08:00 | 3 |
| Sat | 09:00 | 1 |
| Sat | 10:00 | 3 |
| Sat | 11:00 | 0 |
| Sat | 12:00 | 2 |
| Sat | 13:00 | 5 |
| Sat | 14:00 | 6 |
| Sat | 15:00 | 3 |
| Sat | 16:00 | 23 |
| Sat | 17:00 | 40 |
| Sat | 18:00 | 32 |
| Sat | 19:00 | 7 |
| Sat | 20:00 | 15 |
| Sat | 21:00 | 18 |
| Sat | 22:00 | 16 |
| Sat | 23:00 | 21 |
| Sun | 00:00 | 17 |
| Sun | 01:00 | 26 |
| Sun | 02:00 | 11 |
| Sun | 03:00 | 16 |
| Sun | 04:00 | 3 |
| Sun | 05:00 | 3 |
| Sun | 06:00 | 1 |
| Sun | 07:00 | 0 |
| Sun | 08:00 | 0 |
| Sun | 09:00 | 13 |
| Sun | 10:00 | 10 |
| Sun | 11:00 | 8 |
| Sun | 12:00 | 13 |
| Sun | 13:00 | 4 |
| Sun | 14:00 | 7 |
| Sun | 15:00 | 6 |
| Sun | 16:00 | 9 |
| Sun | 17:00 | 6 |
| Sun | 18:00 | 29 |
| Sun | 19:00 | 25 |
| Sun | 20:00 | 22 |
| Sun | 21:00 | 20 |
| Sun | 22:00 | 22 |
| Sun | 23:00 | 17 |
Two people, 4,337 commits.
Paulo Ferreira
- Commits
- 4,109 (2025: 741)
- Days with commits
- 175
- Longest run
- 27 days
- Peak hour
- 14:00
- Most commits in
- infra
Diogo Vilar
- Commits
- 228 (2025: 190)
- Days with commits
- 83
- Longest run
- 13 days
- Peak hour
- 16:00
- Most commits in
- esad-sk
| Person | Commits 2026 | Commits 2025 | Days with commits | Longest run | Peak hour | Most commits in |
|---|---|---|---|---|---|---|
| Paulo Ferreira | 4,109 | 741 | 175 | 27 days | 14:00 | infra |
| Diogo Vilar | 228 | 190 | 83 | 13 days | 16:00 | esad-sk |
How these numbers were counted
- Every repository in the esad-matosinhos GitHub organisation with activity since January 2025, archived ones included (this page's own repository aside), read from git history on every branch and pull request.
- A commit counts once, even when it was copied between branches or squashed into a pull request. Merge commits, bots, scheduled jobs and student accounts are left out.
- Lines of code count source files only (TypeScript, Svelte, JavaScript, CSS, SQL, Python, Rust, shell, HTML). Dependencies, build output, lockfiles, migrations, generated files and database dumps are left out, and so is any commit over 15,000 lines, since that is an import or a copy, not writing.
- Tests are the lines added in test files.
- Hours are each author's local time.
- 2026 is counted through 11 November 2026. Data generated 11 November 2026.