Compose Clinic

Jetpack Compose review from a paste — verdict, findings, checklist, refined code.

Back to SkillSafe
Or pick files: .kt and .kts files are read locally, nothing uploads until you run.
Context — what the code does, what lives elsewhere
How it works

Nothing to hand? Load the — state that resets on recomposition, an exposed MutableStateFlow, GlobalScope work and an unkeyed list — the , where it works but hoisting and Modifiers are wrong, or the , which should come back sound.

1

Paste the Kotlin

One file, several files with // ui/... comment headers, a screen with its ViewModel, or a grab-bag of composables. The instant prescan reads it for free while you type and lists what it mechanically found: mutableStateOf without remember, an exposed MutableStateFlow, GlobalScope and runBlocking on the UI path, plain collectAsState on Android, LaunchedEffect(Unit), unkeyed lazy list items, hardcoded colors, missing Modifier parameters, sticky one-shot navigation state, and !! on state - plus the composables, ViewModels and state types declared and the effect handler, remember call, lazy list, preview, test and line counts in your paste.

2

The AI reviews it

A sound/refactor/rework verdict; severity-ranked findings, each quoting the composable, ViewModel, type or expression it concerns and carrying corrected Kotlin code; a twelve-item Compose checklist scored pass, fail or not-observable against your paste; and an honest health check across State & data flow, Recomposition & performance, Composable design & reuse, Side effects & lifecycle, and Theming & structure. Every prescan hit is confirmed or explicitly set aside — including the false positives, like a mutableStateOf that lives inside a ViewModel rather than in composition.

3

Take the rewrite and go

Your own code refined — same screen, same intent, same naming: state consolidated into one immutable object behind asStateFlow(), remember added where composition state needed it, collection made lifecycle-aware, the stateful/stateless split made, Modifier parameters added and forwarded, events funneled through a sealed type, effects given honest keys and disposal, lazy items keyed, blocking work moved into viewModelScope, hardcoded values replaced with theme tokens — as a downloadable Refined.kt or as a unified diff against your own paste that git apply accepts, plus the ordered next steps, the findings as CSV, a PR review comment, and review history kept on your account and mirrored to this device with restore. The prescan re-reads the rewrite for free and says which of the smells it matched are actually gone; take the rewrite back into the box as your new input and it keeps scoring your edits against the last review, so you only pay for a second review once it is worth running. Markdown and JSON export throughout.

Derived from the @affaan-m/compose-multiplatform-patterns skill (MIT).