---
title: "Patch notes"
url: "https://ridwaanhall.com/patch-notes"
markdown: "https://ridwaanhall.com/patch-notes.md"
summary: "2 releases; the latest is v4.0.1, October 25, 2026."
---

# Patch notes

> 2 releases; the latest is v4.0.1, October 25, 2026.

## v4.0.1: Trim the release title instead of turning jq's newline into a space

October 25, 2026. [GitHub release](https://github.com/ridwaanhall/ridwaanhall-com/releases/tag/v4.0.1)

### Fixed

- **ci**: Trim the release title instead of turning jq's newline into a space (64dc05d)

## v4.0.0: New UI

October 25, 2026. [GitHub release](https://github.com/ridwaanhall/ridwaanhall-com/releases/tag/v4.0.0)

A redesign of the whole site. Every public page is redrawn in eight greys, set in Geist and dark by default, with colour left to the work itself; every page has a Markdown twin and the site publishes llms.txt. This release also adds these patch notes, database backup and restore in the admin, employment details on the CV, and safer admin saves.

### New

- **site**: Lay the Foothill foundation, navbar and home page (0d0b139)
- **site**: Redesign the about and open-hire pages (c4b7e8a)
- **site**: Redesign the work and writing pages (f395045)
- **site**: Redesign the dashboard as an instrument panel (2aab34f)
- **site**: Redesign the guestbook, contact, sign-in, legal and error pages (64360e7)
- **site**: Redraw the site around the portrait, image-led cards and one motion layer (3099114)
- **site**: Animate every disclosure, steady the reveals and settle the type (9c51590)
- **site**: Size the cursor disc to the text under it (c8c8883)
- **site**: Choose the photo or a faceless avatar, and match the favicon to the mark (49b7a74)
- **site**: A question-mark avatar, a tighter cursor and no click sparks (fd76068)
- **site**: A blurred portrait option, and facts beside every page heading (8eed08e)
- **site**: Redraw every public page in the grayscale design (2f431af)
- **site**: Give every page a Markdown twin and publish llms.txt (db9f68b)
- **site**: Generate the CV, draw sharing cards and measure icon contrast (c16cc6e)
- **site**: Refresh project links, previews and copy, and polish the CV (b78aba0)
- **site**: Add the CV as Markdown, rename the roles and smooth the dashboard (357216b)
- **about**: Add organization roles, page skills and group the job hunt by year (a8890fd)
- **blog**: Draw post covers in the site's own design (93af9d9)
- **projects**: Filter Work by every status in the vocabulary (63cdbeb)
- **blog**: Sort Writing four ways and show it as a grid or an index (2c1e4ea)
- **settings**: Choose how pictures are resized: none, Next.js or wsrv.nl (75ed666)
- **settings**: Describe every vocabulary value, and read ordered ones in order (7e8d34f)
- **work**: Sketch the kind of work where a project has no picture, and say what a status means (a32b037)
- **filters**: Put the Work and Writing filters behind a Filters button, and shrink the chips (9c9edaa)
- **cv**: Show employment type, work mode and location under each role (d472e92)
- **patch-notes**: Record every push to main as a release, and show them on the site (057baff)
- **admin**: Back up the database to one file and restore it (23f424a)

### Fixed

- **site**: Judge a GET form by where it goes, not by its action's scheme (36f1d74)
- **security**: Strip outline tags to a fixed point and patch source-map-js (3fbeced)
- **site**: Open the mobile menu after a scroll, and keep the cursor sharp (0db551d)
- **site**: Close four code-scanning findings (b0c9f8d)
- **site**: Fix the stat tiles, footer word, back-to-top ring and dashboard boxes (0a76c3f)
- **security**: Refuse tab-split redirects, throttle posting and enforce frame, base and object limits (b104cc0)
- **site**: Stop the heatmap mask clipping edge squares and keep /cv.pdf crawlable (5893305)
- **site**: Drop panel fills, fix copy labels, stale errors and stray progress (4f5ce56)
- **site**: Rename the back-to-top ring so a Tailwind utility stops boxing it (804495e)
- **dashboard**: Pad the stats cells so text clears the rules between them (608b69b)
- **gallery**: Keep the thumbnail strip six columns wide whatever the image count (cab17f3)
- **seo**: Let crawlers fetch /static/ so the share image shows in previews (744a201)
- **ui**: Close menus, sheets and popovers when their route is hidden (ee8947e)
- **admin**: Make an untouched save write nothing, and stop it duplicating rows (b995335)
- **cv**: Keep every CV link current, and stop entries drawing over their dates (2624963)
- **admin**: Keep a project's tech stack in order when it is saved (1d5e832)
- **cv**: Span an organisation's roles by their dates, not their order (761190b)
- **admin**: Check a record's inline rows before saving it, not after (dbce8df)
- **admin**: Write a save's record, join rows, child rows and descriptions in one transaction (5802028)
- **ci**: Take the empty expression out of the release script's comment (77ec3f1)
- **ci**: Reach the site through its Vercel address, past Cloudflare's bot challenge (3b24bd4)

### Security

- **deps**: Update sanitize-html to 2.18.1 (a879b62)
- **deps**: Upgrade next to 16.4.3 and zod to 4.6.7 (0b62705)

### Faster

- **site**: Sized avatars, a contents list on long posts and steadier small targets (2680cd5)

### Under the hood

- **site**: Rebuild the skeletons and remove the previous site's pieces (0919291)
- **docs**: Move area-specific CLAUDE.md guidance beside the code it governs (2ab3c01)

### Design

- **site**: Bare, larger palette icons and no focus ring on its search box (28e529a)
- **contact**: Put the form's fields back in bordered boxes (a60c91f)
- **contact**: Keep focused fields rounded and add placeholders (9ffbfe4)
- **home**: Hide the portrait on phones (ea97e65)
- **home**: Set the name at the site's title size, on one line, with the tagline below the role (3feeec4)
- **admin**: Dress the admin in the site's palette, type and buttons, and redraw the toast (51a3507)
- **site**: Drop the warm accent for ink, fill logo tiles, and invert the text selection (d06e5de)
- **admin**: Lay the admin out as the public pages are, without cards (89df95f)
- **site**: Set the site in eight greys, Geist and dark by default (56d5e5b)
- **buttons**: Size buttons by the Filters button, and shrink the sign-in and hero buttons (1b1bc83)

### Documentation

- **site**: Document the role names, the CV twin and the abuse limits (ea8c77e)
- Correct the docs where the code has moved on (46f4944)
- **admin**: Record the untouched-save rules, and keep a harness honest under them (f871a8c)
- **rls**: Record the RLS event trigger as a safety net under the delta rule (e6d7a28)

### Tests

- **site**: Point the harnesses at the navbar and record what the redesign taught (dd26cef)
- **site**: Drive the palette by its magnifier and record the new rules (77730e3)
- **site**: Count the CV among the pages that have a twin (7434021)
- **deploy**: Look for the dashboard panels by their new names (9b67e40)

### Maintenance

- **blog**: Drop CRON_SECRET from the publish endpoint (d9c1e7b)
- **site**: Register the CV term list and tidy two examples (81edba0)
- **site**: Remove code nothing calls and fix the publish workflow (189877e)
- **scripts**: State the cover script's reason, not its lineage (199d69e)
- **deploy**: Rebuild so the 13 newly published projects appear (5421700)
- **deploy**: Rebuild with wsrv.nl as the image service (d6d7a3d)
- **claude**: Track the shared Claude Code settings, and leave attribution off (5f061cb)
- **ci**: Drop unused scheduled-publish workflow (ed8ee0f)
- **blog**: Remove unused scheduled-publish endpoint (7f42de2)
- **release**: Release everything since the last tag, with no step by hand (f3a676b)

## Elsewhere

- This page for people: https://ridwaanhall.com/patch-notes
- Index of every page as Markdown: [llms.txt](https://ridwaanhall.com/llms.txt)
