Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
0a1ac37
style: roman-inspired redesign with terracotta palette and Cinzel hea…
TomSeestern Jul 21, 2026
2ca38c5
fix(canonical): align canonical URL with metadataBase
TomSeestern Jul 21, 2026
c1123c9
refactor: wire Button component into homepage and remove dead Project…
TomSeestern Jul 21, 2026
4e8be91
feat(peak): content depth, reading UX, motion polish, a11y/performanc…
TomSeestern Jul 21, 2026
e7da248
chore: mark Final Wave F1-F4 complete — all APPROVE
TomSeestern Jul 21, 2026
29913c8
chore: remove dead deps (@vercel/otel, @opentelemetry/*, prop-types, …
TomSeestern Jul 22, 2026
b329771
chore: drop Storybook (39 of 67 vulns, zero prod value)
TomSeestern Jul 22, 2026
2b40df8
style: format pre-existing TSX files
TomSeestern Jul 22, 2026
af159b4
docs: remove stale Storybook references
TomSeestern Jul 22, 2026
7e8749b
chore: add pnpm audit overrides
TomSeestern Jul 22, 2026
ce17720
docs: record pnpm override evidence
TomSeestern Jul 22, 2026
a9e5cc6
build: upgrade Next and React
TomSeestern Jul 22, 2026
1dcc351
fix: await Next 15 request APIs
TomSeestern Jul 22, 2026
38daf03
fix: prevent reduced-motion hydration mismatch
TomSeestern Jul 22, 2026
c30ed2b
docs: record Next 15 migration
TomSeestern Jul 22, 2026
7b91c3f
fix: restore CTA contrast
TomSeestern Jul 22, 2026
ed2e0ab
test(e2e): align Roman token assertions
TomSeestern Jul 22, 2026
9c87aa0
test(e2e): serialize Chromium runner
TomSeestern Jul 22, 2026
d7782c2
docs: record E2E contrast repair
TomSeestern Jul 22, 2026
639fda4
test(e2e): restore deterministic blog coverage
TomSeestern Jul 22, 2026
f2756db
chore: migrate ESLint 8 to 9 flat config
TomSeestern Jul 22, 2026
6d65534
docs: document ESLint 9 migration
TomSeestern Jul 22, 2026
13e519c
chore: tighten ESLint flat config
TomSeestern Jul 22, 2026
30d4b8b
fix: clean lint warnings in app pages
TomSeestern Jul 22, 2026
a967160
fix: clean route metadata lint warnings
TomSeestern Jul 22, 2026
b132e30
test: order listing page imports
TomSeestern Jul 22, 2026
4c9758b
fix: resolve remaining app lint warnings
TomSeestern Jul 22, 2026
64f6a7e
style: use Tailwind size utilities
TomSeestern Jul 22, 2026
ae69ef7
style: order motion component imports
TomSeestern Jul 22, 2026
b90886f
fix: use Next links in site chrome
TomSeestern Jul 22, 2026
0c326da
fix: update project teaser lint rules
TomSeestern Jul 22, 2026
5159594
test(e2e): order accessibility imports
TomSeestern Jul 22, 2026
87ab320
style: order library imports
TomSeestern Jul 22, 2026
abe8d6b
docs: record ESLint review correction
TomSeestern Jul 22, 2026
4802abe
test(e2e): capture test inventory
TomSeestern Jul 22, 2026
32f0a87
test(e2e): capture full browser runs
TomSeestern Jul 22, 2026
1871d6e
feat: add Roman font and color tokens
TomSeestern Jul 22, 2026
b869db8
feat: apply Garamond to long-form prose
TomSeestern Jul 22, 2026
f926629
fix: keep tooltip text in UI font
TomSeestern Jul 22, 2026
373d0e0
feat: add homepage Roman typography checks
TomSeestern Jul 22, 2026
933de83
test: align Roman color browser assertions
TomSeestern Jul 22, 2026
ef13152
docs: record Roman font verification
TomSeestern Jul 22, 2026
d1f8709
fix: repair semantic button contrast
TomSeestern Jul 22, 2026
b7b8d35
fix: restore article teaser dark text
TomSeestern Jul 22, 2026
8ae4b5b
test(e2e): wait for settled motion before Axe
TomSeestern Jul 22, 2026
4b835d4
docs: record Task 7 contrast verification
TomSeestern Jul 22, 2026
ec11882
fix: guard homepage marquee edges
TomSeestern Jul 22, 2026
02d7ab8
test(e2e): harden Task 7 production audit
TomSeestern Jul 22, 2026
ebf356f
fix: protect marquee edge text
TomSeestern Jul 22, 2026
461a368
docs: record Task 7 marquee verification
TomSeestern Jul 22, 2026
2edd714
feat: replace marquee with responsive project collection
TomSeestern Jul 22, 2026
cf556c8
test: update homepage tests for collection behavior
TomSeestern Jul 22, 2026
d022fe0
docs: document project collection primitive
TomSeestern Jul 22, 2026
5dcf4e4
test: add card geometry assertions to production audit
TomSeestern Jul 22, 2026
ab7cf4b
docs: record Task 7 collection replacement verification
TomSeestern Jul 22, 2026
dd5b945
feat: replace Flowbite Alert with custom InlineAlert
TomSeestern Jul 23, 2026
b61bc14
feat: replace Flowbite Breadcrumb with custom Breadcrumbs
TomSeestern Jul 23, 2026
936bf1e
feat: replace Flowbite Card with custom SurfaceCard
TomSeestern Jul 23, 2026
91fe5fa
feat: replace Flowbite DarkThemeToggle with custom ThemeToggle
TomSeestern Jul 23, 2026
e4489e7
feat: replace Flowbite Navbar with custom SiteHeader
TomSeestern Jul 23, 2026
7aeeb5a
chore: remove flowbite-react, flowbite, react-icons, and 14 unused @r…
TomSeestern Jul 23, 2026
8ab0cf7
feat: apply Roman design system — sharp edges, drop caps, gold hairli…
TomSeestern Jul 23, 2026
e7f52ff
refactor: replace Motion library with CSS-first animations
TomSeestern Jul 23, 2026
ca640fb
refactor: enforce Tailwind token usage — replace hardcoded sizes and …
TomSeestern Jul 23, 2026
07401cb
feat: craft pass — focus rings, empty states, microstate polish
TomSeestern Jul 23, 2026
1662046
test: Phase 4 a11y + Lighthouse + visual acceptance verification
TomSeestern Jul 23, 2026
f057ffe
chore: mark all 22/22 plan tasks complete
TomSeestern Jul 23, 2026
2c17960
fix: pnpm 9 compat — add packages field to workspace + mirror overrid…
TomSeestern Jul 23, 2026
b8fa8b5
fix: lighthouse CI uses next start instead of http-server out
TomSeestern Jul 23, 2026
ee04dc3
fix: cache playwright browsers in CI to prevent download hangs
TomSeestern Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .eslintignore

This file was deleted.

73 changes: 0 additions & 73 deletions .eslintrc.js

This file was deleted.

7 changes: 2 additions & 5 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@ jobs:
run: pnpm prettier
- name: Unit & Integration tests
run: pnpm test
- name: Smoke & Acceptance tests
- name: E2E tests
run: |
pnpm build-storybook --quiet
pnpm exec playwright install --with-deps
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
"npx http-server storybook-static --port 6006 --silent" \
"npx wait-on tcp:127.0.0.1:6006 && pnpm test-storybook"
pnpm e2e:headless
39 changes: 39 additions & 0 deletions .github/workflows/lighthouse.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Lighthouse CI

on:
pull_request:
workflow_dispatch:

jobs:
lighthouse:
name: Lighthouse Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- run: echo "node_version=$(cat .github/nodejs.version)" >> $GITHUB_ENV
- name: "use node ${{ env.node_version }}"
uses: actions/setup-node@v4
with:
node-version: "${{ env.node_version }}"
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm build
- name: Start server
run: |
npx next start -p 8080 &
npx wait-on tcp:127.0.0.1:8080
- name: Audit URLs
uses: treosh/lighthouse-ci-action@v12
with:
urls: |
http://127.0.0.1:8080/
http://127.0.0.1:8080/about
http://127.0.0.1:8080/blog
http://127.0.0.1:8080/projects
http://127.0.0.1:8080/contact
http://127.0.0.1:8080/now
uploadArtifacts: true
temporaryPublicStorage: true
6 changes: 6 additions & 0 deletions .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,14 @@ jobs:
node-version: "${{ env.node_version }}"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install Playwright Browsers
run: pnpm exec playwright install --with-deps
timeout-minutes: 5
- name: Run Playwright tests
run: pnpm exec playwright test --project=chromium
- uses: actions/upload-artifact@v4
Expand Down
36 changes: 27 additions & 9 deletions .omo/boulder.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"schema_version": 2,
"active_work_id": "2026-portfolio-overhaul-d227bbc8",
"active_work_id": "roman-redesign-4df0a13a",
"works": {
"2026-portfolio-overhaul-d227bbc8": {
"work_id": "2026-portfolio-overhaul-d227bbc8",
Expand All @@ -19,21 +19,39 @@
"task_sessions": {},
"ended_at": "2026-07-20T02:39:58.501Z",
"elapsed_ms": 55485499
},
"roman-redesign-4df0a13a": {
"work_id": "roman-redesign-4df0a13a",
"active_plan": "/home/tom/Nextcloud/notes/03 Projects/20XX TomSegbers.de - Personal Website/TomSegbers.de/.omo/plans/roman-redesign.md",
"plan_name": "roman-redesign",
"status": "completed",
"started_at": "2026-07-22T13:30:13.497Z",
"updated_at": "2026-07-23T14:26:59.773Z",
"session_ids": [
"opencode:ses_075faf792ffeug0WEFAbFuiFxu"
],
"session_origins": {
"opencode:ses_075faf792ffeug0WEFAbFuiFxu": "direct"
},
"agent": "atlas",
"task_sessions": {},
"ended_at": "2026-07-23T14:26:59.773Z",
"elapsed_ms": 89806276
}
},
"active_plan": "/home/tom/Nextcloud/notes/03 Projects/20XX TomSegbers.de - Personal Website/TomSegbers.de/.omo/plans/2026-portfolio-overhaul.md",
"started_at": "2026-07-19T11:15:13.002Z",
"active_plan": "/home/tom/Nextcloud/notes/03 Projects/20XX TomSegbers.de - Personal Website/TomSegbers.de/.omo/plans/roman-redesign.md",
"started_at": "2026-07-22T13:30:13.497Z",
"status": "completed",
"updated_at": "2026-07-20T02:39:58.501Z",
"updated_at": "2026-07-23T14:26:59.773Z",
"session_ids": [
"opencode:ses_085e9a666ffeAVUWZS18j1H5Sb"
"opencode:ses_075faf792ffeug0WEFAbFuiFxu"
],
"session_origins": {
"opencode:ses_085e9a666ffeAVUWZS18j1H5Sb": "direct"
"opencode:ses_075faf792ffeug0WEFAbFuiFxu": "direct"
},
"plan_name": "2026-portfolio-overhaul",
"plan_name": "roman-redesign",
"task_sessions": {},
"agent": "atlas",
"ended_at": "2026-07-20T02:39:58.501Z",
"elapsed_ms": 55485499
"ended_at": "2026-07-23T14:26:59.773Z",
"elapsed_ms": 89806276
}
30 changes: 30 additions & 0 deletions .omo/boulders/task-2-peak-website.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# T2 — Canonical URL, Button, ProjectTeaser cleanup

- Status: in_progress
- Plan: `.omo/plans/peak-website.md` todo 2
- Dependencies: T1 dependency declared by plan; package changes already present in worktree and left untouched
- Owned files:
- `app/blog/entry/[slug]/page.tsx`
- `app/projects/entry/[slug]/page.tsx`
- `app/page.tsx`
- `app/projects/page.tsx`
- `components/ProjectTeaser/ProjectTeaser.tsx`
- `components/ProjectTeaser/ProjectTeaser.test.tsx`
- `public/img/Tom_Segbers_Frontal.jpg`
- `.omo/notepads/roman-redesign/learnings.md`
- `.omo/notepads/peak-website/learnings.md`
- `.omo/evidence/task-2-peak-website.txt`

## Steps

- [x] Inspect current files and resolve stale line references
- [x] Fix detail-page canonical URLs
- [x] Replace homepage inline CTAs with `Button`
- [x] Remove dead `ProjectTeaser.imageUrl` prop and all callers (including test fixture and Storybook story)
- [x] Apply readonly to re-touched `ProjectProps` interface
- [x] Delete duplicate JPEG
- [x] Append learnings
- [x] Run diagnostics — `pnpm lint` exit 0, `pnpm test` exit 0 (84 tests), `pnpm build` exit 0 (38 pages)
- [x] Finalize evidence
- [ ] Commit with conventional commit message

23 changes: 23 additions & 0 deletions .omo/boulders/task-7-visual-closure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Task 7 visual closure boulder

- Status: completed
- Owner: Sisyphus-Junior
- Scope: replace failed V1 marquee edge-guard strategy with CSS-only whole-card project collection; preserve existing font/token work, descendant Motion settlement, configurable production audit URL, and two-run raw evidence contracts.
- Files locked: released.
- Dependencies: Visual QA oracle PASS (bg_6e19b9c4 PASS HIGH, bg_cf42786d PASS HIGH) — both returned no blocking findings.
- Evidence: `.omo/evidence/task-7-collection-replacement.txt` — all gates green.
- Root cause: any continuously translated fixed-width track crosses viewport boundaries between cards. Opaque guards can conceal fragments but cannot make underlying title/body geometry whole.

## Verification results (2026-07-23)

- Prettier: PASS
- ESLint: PASS
- Jest: 91/91 PASS
- Build: 47/47 static pages, no errors
- Axe audit: 0 contrast violations at 375/1280 light/dark; all cards fullyInside: true
- E2E run 1: 43/43 PASS (32.1s)
- E2E run 2: 43/43 PASS (27.0s)
- Screenshots: fresh at `.omo/evidence/task-7-production-{375,1280}-{light,dark}.png`
- Visual QA Pass A (design-system): PASS, HIGH confidence, no blocking findings
- Visual QA Pass B (visual fidelity): PASS, HIGH confidence, no blocking findings
- Server cleanup: port 3199 process killed via trap, verified no listener remains
Loading
Loading