Kotlin, Compose and Material 3 project skeleton that builds and launches #2

Closed
opened 2026-08-18 02:14:36 -05:00 by null · 0 comments
Owner

There is no Android project. Everything else in Batch 01 needs one, and so do the hooks — a pre-commit hook with nothing to run is not a guard.

What this covers:

  • Gradle Kotlin DSL with a version catalog at gradle/libs.versions.toml
  • four modules: app, core/designsystem, domain/cycle, domain/prediction
  • domain/* are kotlin("jvm") and cannot see the Android SDK — PRODUCT_PLAN.md §57.10 requires the engine to be testable without Android, and a module that cannot compile against it is a stronger guarantee than a convention
  • Material 3 theme with centralized colour tokens (§39 palette), light and dark
  • the four-tab navigation shell from §20, with placeholder screens that say so
  • Hilt wired now, because retrofitting DI across modules later is the expensive order
  • a placeholder launcher icon as a vector behind a replaceable resource name, which §42 explicitly sanctions — unlike docs/data/img/, where a placeholder must never be made

Two traps that cost time here:

  • AGP 9 has built-in Kotlin support. Applying org.jetbrains.kotlin.android is now an error, not a redundancy. The Compose compiler plugin is still applied separately.
  • Versions are verified, not inherited. PRODUCT_PLAN.md asks for current stable versions to be checked against the official Android/Kotlin documentation at implementation time rather than pinned from its own text. Do that again before changing them.

Verify: ./gradlew test passes, ./gradlew assembleDebug and ./gradlew assembleRelease both succeed, and the app launches to the Today tab with all four tabs reachable.

There is no Android project. Everything else in Batch 01 needs one, and so do the hooks — a pre-commit hook with nothing to run is not a guard. What this covers: - Gradle Kotlin DSL with a version catalog at `gradle/libs.versions.toml` - four modules: `app`, `core/designsystem`, `domain/cycle`, `domain/prediction` - `domain/*` are `kotlin("jvm")` and **cannot see the Android SDK** — PRODUCT_PLAN.md §57.10 requires the engine to be testable without Android, and a module that cannot compile against it is a stronger guarantee than a convention - Material 3 theme with centralized colour tokens (§39 palette), light and dark - the four-tab navigation shell from §20, with placeholder screens that say so - Hilt wired now, because retrofitting DI across modules later is the expensive order - a placeholder launcher icon as a vector behind a replaceable resource name, which §42 explicitly sanctions — unlike `docs/data/img/`, where a placeholder must never be made Two traps that cost time here: - **AGP 9 has built-in Kotlin support.** Applying `org.jetbrains.kotlin.android` is now an error, not a redundancy. The Compose compiler plugin is still applied separately. - **Versions are verified, not inherited.** PRODUCT_PLAN.md asks for current stable versions to be checked against the official Android/Kotlin documentation at implementation time rather than pinned from its own text. Do that again before changing them. Verify: `./gradlew test` passes, `./gradlew assembleDebug` and `./gradlew assembleRelease` both succeed, and the app launches to the Today tab with all four tabs reachable.
null added this to the Batch 01 — Foundation milestone 2026-08-18 02:14:36 -05:00
null closed this issue 2026-08-18 02:16:52 -05:00
Sign in to join this conversation.
No Label
P0
P1
P2
release-blocker
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: null/Privacy-Period-Tracker#2
No description provided.