Files
eng-pad/CLAUDE.md
Kyle Isom 47778222b7 Add project documentation: design spec, implementation plan, and progress tracking
Initial project setup with README, CLAUDE.md (AI dev context), DESIGN.md
(full technical design covering architecture, data model, coordinate system,
rendering strategy), PROJECT_PLAN.md (phased implementation steps), and
PROGRESS.md (completion tracking).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 13:42:44 -07:00

4.4 KiB
Raw Blame History

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project Overview

eng-pad is an Android note-taking app built around notebooks with an EMR pen as the primary input method. Target devices are the Supernote Manta (Android 11) and Daylight DC-1 (Android 13). Minimum API level is Android 11 (API 30).

Build Commands

./gradlew build          # Compile everything
./gradlew test           # Run unit tests
./gradlew lint           # Run Android Lint
./gradlew installDebug   # Install debug APK to connected device

# Run a single test class:
./gradlew test --tests "net.metacircular.engpad.data.StrokeBlobTest"

Architecture

  • Kotlin + Jetpack Compose for UI chrome (screens, toolbar, dialogs)
  • Custom View (PadCanvasView) for the drawing canvas — Compose Canvas lacks MotionEvent access needed for stylus input
  • Room (SQLite) for persistence — notebooks, pages, strokes
  • Single Activity with Compose Navigation (three screens: notebook list → page list → editor)
  • Coordinate system: 300 DPI canonical points. Regular page = 2550×3300pt, large = 3300×5100pt. Scaled to 72 DPI (×0.24) for PDF export.
  • Input dispatch: TOOL_TYPE_STYLUS → draw/erase/select, TOOL_TYPE_FINGER → zoom/pan

Project Documents

  • DESIGN.md — Full technical design (architecture, data model, rendering, source tree)
  • PROJECT_PLAN.md — All implementation steps with checkboxes. Check off steps as completed.
  • PROGRESS.md — What's been done, what's in progress, decisions made. Update after every step.

Keep PROJECT_PLAN.md and PROGRESS.md in sync. When a step is completed, check it off in PROJECT_PLAN.md and log it in PROGRESS.md. When files are added, update the source tree in both DESIGN.md and this file.

Source Tree

eng-pad/
├── app/
│   ├── build.gradle.kts                              -- Module build config
│   └── src/
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── kotlin/net/metacircular/engpad/
│       │   │   ├── EngPadApp.kt                      -- Application class
│       │   │   ├── MainActivity.kt                   -- Single activity, Compose NavHost
│       │   │   ├── data/
│       │   │   │   ├── db/                           -- Room database, DAOs, converters
│       │   │   │   ├── model/                        -- Entities: Notebook, Page, Stroke, PageSize
│       │   │   │   └── repository/                   -- NotebookRepository, PageRepository
│       │   │   ├── ui/
│       │   │   │   ├── navigation/NavGraph.kt        -- Route definitions
│       │   │   │   ├── notebooks/                    -- List screen + ViewModel
│       │   │   │   ├── pages/                        -- Page grid screen + ViewModel
│       │   │   │   ├── editor/                       -- PadCanvasView, EditorScreen, ViewModel
│       │   │   │   ├── export/PdfExporter.kt         -- PDF generation + sharing
│       │   │   │   └── theme/Theme.kt                -- Material3 theme
│       │   │   └── undo/                             -- UndoManager, UndoableAction
│       │   └── res/
│       └── test/                                     -- Unit tests
├── build.gradle.kts                                  -- Root build config
├── settings.gradle.kts
├── gradle.properties
├── gradle/libs.versions.toml                         -- Version catalog
├── CLAUDE.md                                         -- This file
├── README.md
├── DESIGN.md                                         -- Technical design
├── PROJECT_PLAN.md                                   -- Implementation steps
└── PROGRESS.md                                       -- Completion tracking

Key Conventions

  • Stroke points are packed as little-endian float BLOBs: [x0,y0,x1,y1,...]
  • All coordinates are in canonical space (300 DPI). Screen transform via Matrix.
  • Grid spacing: 60pt (~5 squares/inch). Grid is drawn on screen, excluded from exports.
  • Pen widths: 0.38mm = 4.49pt, 0.5mm = 5.91pt (at 300 DPI).
  • Two pen sizes only, no pressure sensitivity.
  • Hardware palm rejection only (EMR digitizer).