This release reworks image handling in the article editor and brings the password-reset screens up to the new design. ## New **Crop and resize before upload** - A Crop and resize step now sits between picking an image and uploading it. It applies to JPEG, PNG and WEBP files. SVG files still upload straight away. - Move or resize the crop frame by dragging it or its handles. Arrow keys nudge it by 1 px, and Shift+arrow resizes it by 1 px. - Aspect ratios: Original, Free, 16:9, 4:3 and 1:1. - Rotate and Reset buttons. - Output width presets: Original, 1600 px (default), 1200 px and 800 px. The output is never wider than the crop frame. - A live line shows the final pixel size and an approximate file size before you upload. **Remove images from the editor** - Images in an article can now be removed from the editor. The image file and its database row are both deleted. - The editor renders images as a dedicated image node. **Password-reset screens** - The Forgot password and Reset password screens follow the new design and cover every state in the spec. ## API - `DELETE /v1/article/{id}/image/{imageId}` (authenticated) deletes an image. It returns 204 on success, 404 for an unknown article or image, and 400 for an ID that isn't a valid uint32. - Changed: `POST /v1/article/{id}/image` now returns `{"id": …, "location": …}` instead of `{"location": …}`. The change is additive, but anything parsing the response strictly should be checked. ## Under the hood - The editor now depends on `@tiptap/extension-image`, `@tiptap/pm` and `@tiptap/vue-3`, all pinned to 3.31.3. - New feature specs and QA procedures cover crop and resize, image removal and both reset screens. - New Go HTTP tests cover image deletion, and Vitest specs were added and updated for the editor and reset views. - The visual-check states cover the new screens, and the design docs are updated to match. ## Upgrading - No new environment variables and no schema changes. - Replace the binary and restart.