# PROGRESS.md — eng-pad Implementation Progress This file tracks completed work and decisions. Updated after every step. See PROJECT_PLAN.md for the full step list. ## Completed ### Phase 0: Project Documents (2026-03-24) - [x] 0.1: Created DESIGN.md — full technical design covering architecture, data model, coordinate system, rendering, input handling, and source tree. - [x] 0.2: Created PROJECT_PLAN.md — discrete steps grouped by phase with checkboxes and file references. - [x] 0.3: Created PROGRESS.md — this file. - [x] 0.4: Updated CLAUDE.md — build commands, source tree, project doc pointers. ### Phase 1: Project Skeleton + Data Layer (2026-03-24) - [x] 1.1: Generated Android project — Gradle 8.14.2, AGP 8.10.1, Kotlin 2.1.20 - [x] 1.2: Version catalog with Compose BOM 2026.03.00, Room 2.8.4, Navigation 2.9.7, Lifecycle 2.10.0 - [x] 1.3: Lint configured — warningsAsErrors, AGP version check suppressed (AGP 9.x needs Gradle 9.x) - [x] 1.4: Room entities: Notebook, Page, Stroke, PageSize enum - [x] 1.5: Converters: FloatArray ↔ ByteArray (packed little-endian) - [x] 1.6: DAOs: NotebookDao, PageDao, StrokeDao - [x] 1.7: EngPadDatabase (Room, version 1) - [x] 1.8: NotebookRepository, PageRepository - [x] 1.9: Unit tests: StrokeBlobTest (6 tests), PageSizeTest (4 tests) — all pass - Foojay resolver added for automatic JDK toolchain download - compileSdk/targetSdk bumped to 36 (required by latest androidx dependencies) ### Phase 2: Notebook List Screen (2026-03-24) - [x] 2.1: MainActivity with Compose NavHost (three routes: notebooks, pages, editor) - [x] 2.2: NotebookListViewModel with StateFlow, create/delete operations - [x] 2.3: NotebookListScreen — lazy list, create dialog (title + page size radio), long-press delete with confirmation, empty state - [x] 2.4: Auto-create page 1 in NotebookRepository.create() - [x] 2.5: Navigation wired — tap notebook → pages stub, editor stub - EngPadTheme: high-contrast light color scheme (black on white for e-ink) ## In Progress Phase 3: Canvas — Basic Drawing ## Decisions & Deviations - **Language**: Kotlin (chosen over Java for better Compose/coroutine support). - **Storage**: Room/SQLite with packed float BLOBs for stroke points. - **Palm rejection**: Hardware only (EMR digitizer handles it). - **Pressure sensitivity**: None — two fixed pen sizes (0.38mm, 0.5mm). - **Coordinate system**: 300 DPI canonical points (scaled to 72 DPI for PDF export). - **UI framework**: Compose for chrome, custom View for canvas (Compose Canvas lacks MotionEvent access needed for stylus input).