docs: rewrite README for the YouCam hackathon and refresh ARCHITECTURE - #46
Merged
Conversation
The README still described the app as it stood ~200 commits ago and made no mention of the YouCam Apparel VTO integration, outfits, gaps, on-device AI, background removal, or share-sheet entry. Reframe it submission-first: the problem, a demo video of the try-on, a screenshot gallery, and a walkthrough of the YouCam S2S flow (RSA auth, presigned upload, task polling, category-routed endpoints). Developer docs move below the fold, with the tech stack table corrected against libs.versions.toml. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The module tree still said androidApp/, the code samples predated Result<T> and constructor-injected dispatchers, and the AI section covered only the Claude API. Refresh every section against the real code: add the ai/ and image/ data sources, util/crypto and util/image, the androidHostTest source set and journeys/; show the actual repository signatures and the runCatching + withContext nesting; split AI integration into Claude, on-device, and YouCam VTO; and record the decisions behind BYOK, injected CoroutineContext, Result-returning repositories, and expect/actual RSA. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Both top-level docs had drifted far behind the code. The README still described the app as it stood ~200 commits ago — four bullet points, no mention of the YouCam Apparel VTO integration, outfits, gaps, on-device AI, background removal, or share-sheet entry. ARCHITECTURE.md was equally stale: the module tree said
androidApp/, the code samples predatedResult<T>and constructor-injected dispatchers, and the AI section covered only the Claude API.Worn is being submitted to a hackathon judged on integration of a Perfect Corp. YouCam API, so the README is reframed submission-first: a judge should understand the problem, see the try-on working, and grasp the depth of the integration within 30 seconds of scrolling. Developer docs move below the fold. ARCHITECTURE.md becomes an accurate technical reference for the same judge who clicks through.
Docs and assets only — no code changes.
Changes
README.md (rewritten)
design/Persona.md: two unknowns at the moment of purchase — does it look good on me and does it work with what I already own — and every shopping tool answers at most one.screenshots/try_on.mp4, with a plain markdown link as fallback.id_tokenauth (with the SPKI-vs-PKCS#1expect/actualsplit called out as the KMP-interesting part), category-routedcloth-v3/shoesendpoints, polling, and error mapping — plus a table linking the relevant files.client_id; paste the secret without the PEM header lines).gradle/libs.versions.tomland extended with Coil, DataStore, ML Kit, Turbine/MockK, and Detekt; project structure updated to the real layout.ARCHITECTURE.md (refreshed, structure preserved)
androidApp/→composeApp/; addsdata/source/{ai,image},util/{image,crypto},commonMain/sqldelight/,androidHostTest/,journeys/.Result<T>for one-shot reads,Flow<T>for reactive ones — plusTryOnRepositoryand the name-keyedSecretStore.CoroutineContext, andrunCatchingas the outer wrapper aroundwithContext.commonTest+androidHostTestlayout,ktor-client-mock, andjourneys/.CoroutineContext,Result-returning repositories, DataStore over SharedPreferences, on-device AI as a swappable provider, andexpect/actualRSA.Assets
screenshots/— five PNGs andtry_on.mp4(a recording of an actual YouCam render).Test plan
YouCamApiClient.kt,YouCamApiModels.kt,TryOnRepositoryImpl.kt,RsaEncryptor.kt+ both actuals,journeys/README.md, all six screenshot assets).AiSourceinterface (WardrobeRepositoryImplholdsClaudeApiClientandOnDeviceAiSourceand selects per call);runCatchingwrapswithContext, not the reverse;BackgroundRemover's actual does dispatch itself; andanalyzeProspectiveItemstays on Claude regardless of the on-device preference.gradle/libs.versions.toml../gradlew detektpasses.try_on.mp4player renders in the README on github.com. GitHub's handling of<video src>with a repo-relative path is inconsistent; if no player appears, drag the file into a draft issue to get auser-images.githubusercontent.comURL and swap it into thesrc. The text link below it works either way.Checklist
./gradlew detektpassesNote
screenshots/try_on.mp4is 10 MB and git history is effectively permanent, so every future clone pays for it. It is the most persuasive asset in the submission, so it is committed as-is — but reversing that decision after merge means rewriting history. The alternative is hosting the video via a GitHub issue upload and referencing that URL instead. Worth a moment's thought before merging.🤖 Generated with Claude Code