football2801
cbb5bb1ff3
feat: surface orientation-mismatch warning in the library
...
CI / test (push) Has been cancelled
Each thumbnail now shows a yellow warning triangle in its action stack
when at least one approved device's orientation does not match the
photo's crop orientation. Tap opens the edit flow with that device set
as the crop context, so the existing in-crop-tool indicator can guide
the re-crop. Photos without a stored cropOrientation fall back to
inferring it from the saved cropParams aspect, so older uploads aren't
left blind.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-06 16:25:55 -04:00
football2801
12245759ac
chore: stage all in-progress work before repo split
...
CI / test (push) Has been cancelled
Web app: new entities (Image, RenderedAsset, SharedImage, Token,
DeviceImageHistory), enums, repositories, controllers, message handlers,
migrations, tests, frontend upload/library/sticker UI, Vue components.
Firmware: EPD background screen binaries + gen scripts, setup_bg header.
Infra: ddev config, test bundle, gitignore coverage dir.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-06 12:11:31 -04:00
football2801
a55b3bd187
feat(story-1.2): Vue 3 SPA scaffold, base component library, User entity, SpaController
...
Frontend:
- Vue 3 + Vite + TypeScript strict in frontend/; builds to public/build/
- Vue Router (hash-history, requiresAuth guard → /login) and Pinia
- Global SCSS design tokens with 6 full themes (Warm Craft, Playful Pop, Sage & Cream, Dusty Mauve, Ocean Dusk, Honey & Slate)
- Base components: BaseButton (5 variants), BaseInput (floating label, error state),
BaseBottomSheet (slide-up, focus trap, tap-outside dismiss), BaseCard, BaseChip,
BaseToast (2.5s auto-dismiss, aria-live polite), BottomNav (4 tabs, hides at 960px)
- Type stubs for all API shapes: User, Device, Image, StickerLayer, RenderedAsset, Token
Backend:
- SpaController catch-all serves public/build/index.html; excludes api/setup/token/login/register
- User entity (email+password+roles+theme); UserRepository with PasswordUpgrader
- SecurityController with /login, /logout, /register stubs; Twig login form
- security.yaml: form_login firewall, remember_me, role_hierarchy, access_control
- Migration: create user table
Verified: npm run build succeeds, GET / → 302 /login (unauthenticated)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 23:21:29 -04:00