89866e8f

By: Michael Lynch <git@mtlynch.io>

Add owner photo uploads

Owners can upload a JPEG from a new /upload page. The photo is sanitized
(metadata stripped via re-encode), resized, and thumbnailed, then stored to the
configured media backend, and the owner is redirected to its media page.

This adds the shared foundation for owner-only actions:
- ReadUserByID, AuthService.UserID, and the currentUser helper
- requireOwner middleware and an owner-only /upload subrouter
- pageData.IsOwner, threaded through every page, plus a navbar Upload button

Animated GIF and video uploads are not yet supported and are rejected with a
clear message; they arrive in later slices.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
configuredevShellbackendbackend-devcheck-bashcheck-frontendcheck-go-formattingcheck-go-test-packagescheck-trailing-newlinecheck-trailing-whitespacediagramdocker-imagee2e-testsgo-testsimport-from-tinybeanslint-sqllittle-momentslittle-moments-devx86_64-linux