Skip to content

feat(ui): add Welcome screen scaffold (#7)#27

Merged
ilmoniemi merged 3 commits into
mainfrom
feature/7
May 11, 2026
Merged

feat(ui): add Welcome screen scaffold (#7)#27
ilmoniemi merged 3 commits into
mainfrom
feature/7

Conversation

@ilmoniemi
Copy link
Copy Markdown
Contributor

What

Adds WelcomeScreen — a pure stateless Composable in ui/onboarding/ matching the Figma 6:32 412×892 baseline. Hero section (colored circular logo placeholder, title, subtitle), filled primary CTA I already have pyrycode invoking onPaired, outlined secondary CTA Set up pyrycode first invoking onSetup, and an open-source footer line. All colors and typography come exclusively from MaterialTheme.colorScheme.* / MaterialTheme.typography.*. Two @Preview composables (light + dark, widthDp = 412, heightDp = 892) wrapped in PyrycodeMobileTheme.

Per the architect's preferred option, the logo placeholder is a plain colored Box (no inner icon) — keeps the file dependency-free and stays out-of-scope of branding.

Issue

Closes #7

Testing

  • ./gradlew assembleDebug — passes ✅
  • ./gradlew test — passes ✅ (no new unit tests; AC requires Previews + assembleDebug only, per architect spec)
  • ./gradlew lint — clean ✅
  • ./gradlew connectedAndroidTest — not run (no device/emulator attached in this env; ticket has no instrumented-test requirement)
  • grep -E 'NavController|androidx\.navigation' app/src/main/java/de/pyryco/mobile/ui/onboarding/WelcomeScreen.kt — empty (AC4)

Architecture compliance

Follows the architect's spec at docs/specs/architecture/7-welcome-screen-scaffold.md:

ilmoniemi added 2 commits May 11, 2026 12:02
Pure stateless Composable with hero, primary/secondary CTAs invoking
the supplied callbacks, and an open-source footer. Two Previews
(light/dark) render at the Figma 412x892 baseline. No NavController
or Intent references; routing lands in #8 and #14.

Closes #7
@ilmoniemi
Copy link
Copy Markdown
Contributor Author

Code Review: #7

Decision: PASS

Findings

  • [NIT] WelcomeScreen.kt:52-57 — logo placeholder uses Spacer with .background() rather than Box as suggested in the spec. Functionally identical (Spacer applies its modifier chain including .background()), so renders the intended filled circle, but Box is the more idiomatic choice for an element that is meant to draw content rather than reserve empty space. Not blocking; can be left as-is or swapped at the author's discretion.

AC verification

  • AC1 (signature WelcomeScreen(onPaired, onSetup) in ui/onboarding/) ✅
  • AC2 (hero / primary CTA → onPaired / secondary CTA → onSetup / footer) ✅
  • AC3 (colors via MaterialTheme.colorScheme.*, typography via MaterialTheme.typography.*, no Color(0x...) or hardcoded sizes/weights/families) ✅
  • AC4 (no NavController / androidx.navigation.* references — confirmed via grep on the file) ✅
  • AC5 (two @Preview composables, light + UI_MODE_NIGHT_YES dark, both wrapped in PyrycodeMobileTheme, both private) ✅
  • AC6 (./gradlew assembleDebug — verified locally: BUILD SUCCESSFUL) ✅
  • Bonus: ./gradlew lint clean.

Summary

Clean stateless Composable matching the spec layout tree. All theme tokens routed through MaterialTheme, no navigation coupling, previews are deterministic at the Figma baseline dimensions. Ready to merge; #8 and #14 can consume the exact signature without changes.

First documentation pass for the project. Sets up docs/knowledge/ with
INDEX.md, codebase/README.md (per-ticket file convention), feature doc
for the Welcome screen, and ticket-7 implementation notes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@ilmoniemi ilmoniemi merged commit 8cca00f into main May 11, 2026
@ilmoniemi ilmoniemi deleted the feature/7 branch May 11, 2026 09:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui): add Welcome screen scaffold (no navigation)

1 participant