lesingo

ADR-0005: MVVM presentation with styled-components

Context

SayLens needs presentation boundaries that remain understandable as camera permissions, live overlays, object selection, and learning details become more complex. It also needs a recognizable React Native styling system with a shared theme and strong ecosystem adoption.

Clean Architecture defines the direction between feature layers but does not prescribe how presentation state and UI composition are separated.

Decision

Use MVVM inside the presentation layer while retaining feature-first Clean Architecture for the repository as a whole.

Use styled-components 6 for theme-driven, static React Native UI. Components are declared at module scope. Camera surfaces and future high-frequency overlay coordinates do not flow through the styling library.

The selection was checked against current package adoption on 2026-08-20. styled-components had substantially more weekly npm downloads than the leading React Native utility-style alternative and officially documents React Native usage.

Consequences

Positive

Negative and risks

Alternatives considered

Validation

References