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>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
# Memory index — pictureFrame
|
||||
|
||||
- [User profile](user_profile.md) — Matt Edholm, aviation enthusiast, pragmatic hardware builder
|
||||
- [pictureFrame project context](project_pictureframe.md) — goals, stack, hardware, current status
|
||||
- [Feedback: memory location](feedback_memory_location.md) — write project memories into repo for cross-device access
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
name: Feedback: memory location
|
||||
description: Where to write Claude memories for this project — in-repo for cross-device access
|
||||
type: feedback
|
||||
---
|
||||
|
||||
Write project memories into the repository at `.claude/memory/` so they travel with the codebase and are accessible across devices via git.
|
||||
|
||||
**Why:** Matt works across multiple devices. Memories stored only in `~/.claude/projects/` are local to the Pi and not accessible elsewhere.
|
||||
|
||||
**How to apply:** For this project, write all memories to BOTH:
|
||||
1. `~/.claude/projects/-home-football2801-src-pictureFrame/memory/` (local, auto-loaded by Claude Code)
|
||||
2. `.claude/memory/` in the project root (committed to git, cross-device)
|
||||
|
||||
Keep both MEMORY.md index files in sync. User/personal memories (not project-specific) stay in `~/.claude/` only.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: pictureFrame project context
|
||||
description: Goals, stack, hardware, current status, and key decisions for the pictureFrame project
|
||||
type: project
|
||||
---
|
||||
|
||||
Handcrafted e-ink digital picture frame ecosystem built as a meaningful gift. ESP32 + Waveshare 7.3" 6-color e-ink display, battery or plugin, companion Symfony web app for image management, device configuration, and family sharing.
|
||||
|
||||
**Why:** Personal project — frames are hand-built and gifted. The software keeps them personal and current without requiring the recipient to do anything.
|
||||
|
||||
## Hardware
|
||||
|
||||
- ESP32 dev board (esp32dev), dual-core 240MHz, 4MB flash
|
||||
- Waveshare 7.3" 6-colour e-ink (800×480, E-Ink Spectra 6)
|
||||
- SPI pinout: SCK=18, MOSI=23, CS=5, DC=17, RST=16, BUSY=4
|
||||
- 4bpp packed, palette: BLACK=0x0, WHITE=0x1, YELLOW=0x2, RED=0x3, BLUE=0x5, GREEN=0x6
|
||||
|
||||
## Stack
|
||||
|
||||
- Firmware: PlatformIO + Arduino framework (C/C++)
|
||||
- Web app: Symfony 8.0 (PHP 8.4+), PostgreSQL 16, Nginx-FPM
|
||||
- Local dev: DDEV (mirrors ~/src/aqua-iq setup)
|
||||
- Infra reference: ~/src/aqua-iq for Docker/DDEV config, server location, SSH details
|
||||
- Git: git.edholm.me (self-hosted Gitea/Forgejo)
|
||||
- Domain: pictureframe.edholm.me
|
||||
|
||||
## Current status (2026-04-27)
|
||||
|
||||
- POC firmware previously built (display driver proven)
|
||||
- PRD complete and validated (4/5 holistic quality, all fixes applied)
|
||||
- Architecture complete — all 8 steps done, document at `_bmad-output/planning-artifacts/architecture.md`
|
||||
- No production code written yet; next step is epics/stories or direct Symfony scaffold
|
||||
|
||||
## Key architectural decisions
|
||||
|
||||
- Async image processing: Symfony Messenger (Doctrine transport), `max_retries: 1`
|
||||
- Image storage: `storage/images/{id}/{model}_{orientation}.bin`, relative paths in DB, `STORAGE_PATH` env var
|
||||
- Device pull endpoint: `GET /api/device/{mac}/image` — 200 (binary), 204 (no ready image), 404 (unknown MAC)
|
||||
- Enums: PHP 8.1 backed enums for `RenderStatus`, `TokenType`, `Orientation`
|
||||
- Repositories: `findActive*` prefix for all soft-delete-aware methods
|
||||
- Token entity: UUID PK, type enum, expires_at, used_at — single-use authorization links
|
||||
- Testing: Unit/Integration/Functional split, no DB mocks
|
||||
- Imagick for Floyd-Steinberg dithering (not GD)
|
||||
|
||||
## How to apply
|
||||
|
||||
Stack is decided — Symfony, PostgreSQL, DDEV. Don't suggest alternatives. For infrastructure patterns (docker-compose, server location, SSH), reference ~/src/aqua-iq. APP_BASE_URL = https://pictureframe.edholm.me — baked into firmware as build constant. First implementation command: `symfony new pictureframe --webapp`.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
name: User profile
|
||||
description: Who Matt is and relevant background for this project
|
||||
type: user
|
||||
---
|
||||
Matt Edholm (football2801@me.com). Aviation enthusiast — has a home airfield context, interest in GA/ADS-B. Comfortable with hardware projects (Pi, RTL-SDR). Pragmatic decision-maker: prefers to ask the right questions before committing to architecture, drops ideas quickly when they don't fit. Has prior experience building planeMapper (ADS-B e-ink radar display on Pi 5 + ESP32).
|
||||
Reference in New Issue
Block a user