football2801
3c1d5f0eae
feat(story-1.4): user login with remember_me, inline error, logout
...
- Login Twig template: styled to match register page; inline "Incorrect email or
password" on both fields (no email-existence disclosure); aria-invalid on error
- security.yaml: always_remember_me: true — REMEMBERME cookie set on every login
- Logout: /logout → session invalidated → 302 /login (Symfony firewall handles it)
Verified: correct creds → 302 / + REMEMBERME cookie; wrong creds → 302 /login +
inline error on re-render; logout → 302 /login; GET / after logout → 302 /login
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 23:36:39 -04:00
football2801
694843bdf0
feat(story-1.3): user registration with auto-login and inline validation
...
- RegistrationFormType: email + plainPassword, NotBlank/Email/Length(min=8) constraints
- SecurityController: register action hashes password, persists user, auto-logs in via Security::login()
- User entity: UniqueEntity constraint — "An account with this email already exists"
- Register Twig template: inline errors per field (role=alert), blur-validation JS
(client fires on blur not keystroke; server-error flag prevents blur clobbering server messages)
- csrf.yaml: switched from stateless UX-dependent tokens to standard session CSRF
(stateless token IDs require Stimulus JS to inject the real value — we removed Stimulus)
Verified: happy path → 302 + auto-login; duplicate email → 422 + inline error;
short password → 422 + inline error
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 23:25:42 -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
football2801
378b0b858b
feat(story-1.1): scaffold Symfony 7.4 LTS app with DDEV, Messenger, Scheduler
...
- DDEV config: PHP 8.4, PostgreSQL 16, nginx-fpm, Imagick via webimage_extra_packages
- Symfony 7.4 LTS skeleton + webapp pack scaffolded via Composer
- Removed AssetMapper, Stimulus, UX-Turbo (replaced by Vue 3 SPA per architecture)
- Added symfony/messenger + symfony/scheduler (Doctrine transport)
- Gitea CI workflow: PHP 8.4 container + PostgreSQL 16 service, runs phpunit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 22:57:09 -04:00
football2801
543f02b72a
chore: restructure firmware into subdirectory, add DDEV config
...
Move firmware files from repo root src/ into firmware/ to avoid
collision with Symfony's src/ PHP class directory. Add DDEV
config targeting PHP 8.4 / PostgreSQL 16 / nginx-fpm with
Imagick extension via docker-compose override.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 22:51:19 -04:00
football2801
21e9173508
docs: add complete epics and stories breakdown
...
6 epics, 34 stories, 44/44 FRs covered. Includes party mode review
fixes: sticker canvas split into interaction + state persistence stories,
zero-device upload edge case AC, FrameCard offline/sync-fail states,
and scheduler setup story. All stories have Given/When/Then AC and
no forward dependencies.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 22:20:44 -04:00
football2801
94dae685e2
docs: update architecture to reflect Vue 3 SPA frontend decision
...
Replace AssetMapper + Stimulus + Turbo with Vue 3 SPA (Vite,
TypeScript strict, SCSS modules, Konva.js). Authenticated app is
now a full SPA served by Symfony catch-all; public flows (provisioning,
email approve/decline) remain Symfony + Twig. Add JSON API controllers
for SPA, SpaController catch-all, updated directory structure, and
revised implementation sequence.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 21:57:06 -04:00
football2801
2a2c8ae343
docs: add UX design specification and visual explorers
...
Complete 14-step UX design spec covering core experience, emotional
response, design system (Vue 3 + TypeScript + SCSS + Konva.js), 6
color themes, Direction 5 (Minimal Card), user journeys, component
strategy, UX patterns, and responsive/accessibility requirements.
Includes interactive theme explorer and design direction mockups.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 21:54:01 -04:00
football2801
663e39b2af
chore: add credentials reference memory
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 15:46:07 -04:00
football2801
44783d0f46
docs: add planning artifacts — PRD, architecture, epics skeleton
...
One-time commit of AI-generated planning documents:
- prd.md — validated PRD, 44 FRs across 8 domains
- prd-validation-report.md — validation results (4/5 holistic quality)
- architecture.md — complete architecture document (all 8 steps)
- epics.md — epics skeleton with extracted requirements inventory
_bmad-output/ remains gitignored; these are committed explicitly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 15:39:24 -04:00
football2801
a536baabd6
feat: initial commit — BMAD tooling, Claude memories, firmware scaffold
...
Adds the complete project foundation:
- BMAD BMM workflow tooling (_bmad/)
- Claude slash commands, skills, and project memories (.claude/)
- ESP32 firmware scaffold (PlatformIO + Waveshare e-ink driver)
- .gitignore excluding _bmad-output/ and .pio/ build artifacts
Planning artifacts (PRD, architecture, epics) are intentionally not
tracked — they live in _bmad-output/ per project convention.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-27 15:38:46 -04:00
football2801
f40d902b7c
chore: initial project scaffold with BMAD tooling
2026-04-27 12:50:18 -04:00