getting-started
Phase-1 blueprint for the KMP starter kit — get the app running locally on your own device, rebrand it, and build your MVP features from the PRD (all…
Skill by KotlinFoundation
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kotlinfoundation-getting-started
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/getting-started
What's inside
- Skill name
getting-started- Description
- Phase-1 blueprint for the KMP starter kit — get the app running locally on your own device, rebrand it, and build your MVP features from the PRD (all LOCAL-only, no accounts). Use when getting started with the KMP contest starter kit / on first run / initial setup, before touching Firebase, backend, or publishing.
- License
- MIT
- Instructions
- 143 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Files (2)
- SKILL.md
- progress-template.md
SKILL.md (first lines)
# Getting Started — Phase 1 (First Run, LOCAL-ONLY)
**Goal:** get the app **running on your own device/emulator**, rebranded to your app, with **your MVP
features built** — all **purely locally**. Prove the loop end-to-end before adding any cloud services.
**Start here?** If the developer arrived with an *idea* and no product docs yet ("build me a habit
tracker"), run the **`new-app`** skill first — it interviews them and writes `prd.md` / `user_flow.md` /
`ui_ux.md` plus the app name/id this guide needs. `new-app` hands straight back here.
**No accounts needed in this phase.** No Firebase, no Adapty/RevenueCat, no Play/App Store account —
the kit's mock subscription provider and direct-mode AI cover it.
**Explicitly deferred to later phases** (do NOT do these now):
- Firebase (Analytics, Messaging, Crashlytics, RemoteConfig), authentication, backend / web-proxy → the **`integrations`** guide.
- App Store / Play Store, signing for release, subscriptions/monetization → the **`publishing`** guide.
## Two-Window Flow & STOP rule
> **Two-Window Developer Flow:**
> This repository uses an elegant Two-Window setup for seamless multi-environment management:
> 1. **Root Window:** Opened at the repository root. This window manages root-level configurations, the Node.js backend proxy (`Web/`), and Phase 2 (`integrations`) and Phase 3 (`publishing`) progress.
> 2. **MobileApp Window:** Opened at the `MobileApp/` directory. This window isolates the Android/iOS/Desktop/Web client environment and drives Phase 1 development.
> [!IMPORTANT]
> **CRITICAL AGENT INSTRUCTION (TWO-WINDOW TRANSITION)**:
> If this skill is executed from the **Root Window**, the very first step is to instruct the developer to open a new Android Studio window pointing to the `MobileApp/` directory:
> *"Our first step involves opening up a new Android Studio window for the MobileApp directory, so we can utilize the Two-Window Approach. Please open the `MobileApp/` directory (at the repository root) in a new window and type 'Run @koko-mobileapp-getting-started' there to load the client environment and begin building the local loop!"*
> **Progress files still live at the repo root.** Even though Phase 1 is driven from the **MobileApp
> Window**, the `PROGRESS_*.md` files belong at the **git repo root** (the folder containing `MobileApp/`),
> so from this window write/read them **one level up** (`../PROGRESS_FEATURES.md`,
> `../PROGRESS_P1_GETTING_STARTED.md`). Never create them inside `MobileApp/` — a later session (or the
> Root Window) will look at the root and think nothing was done.
> **STOP rule:** When the next unchecked item is a **User Action**, stop and wait for the developer to confirm they've done it before continuing. Never fabricate device state or credentials.
## Role labels
- **Agent Action** — an AI agent (or dev) can do it directly: edit code, run a script/gradle.
- **User Action** — human-only: install tooling, set paths, run the app on a device, look at the screen.
- **Validation** — a concrete check/gate before moving on.
---
## Keys / secrets you'll need
Just one — this phase is local-only, no cloud, no accounts:
- **`sdk.dir`** (required) — your machine's Android SDK path. Copy
`MobileApp/local.properties.example` → `local.properties` and set it.
Verify: `./scripts/check_env.sh --phase getting-started`.
## Checklist (ordered)
### A. Prerequisites & first run
1. **User Action** — Install **JDK 17+** and **Android Studio** (bundles the Android SDK), then add the **Kotlin Multiplatform plugin** (`Settings → Plugins → Marketplace →` "Kotlin Multiplatform") — it's what makes the iOS/Desktop/Web run targets show up, not just Android. macOS-only for iOS: install **Xcode**.
2. **Agent Action** — Ensure `sdk.dir=/path/to/Android/sdk` is set in `MobileApp/local.properties` (see the `run-the-app` skill).
3. **User Action** — Run the app once. Fastest sanity check is Desktop: `./gradlew :desktopApp:run` from `MobileApp/`. (Android: emulator + `:androidApp:installDebug`; Web: `:webApp:wasmJsBrowserDevelopmentRun`.) Use the `run-the-app` skill for exact commands per platform.
4. **Validation** — The app launches and shows the **Home** screen on at least one platform.
### B. Rebrand to your app
5. **Agent Action** — Rename the package / applicationId / iOS bundle ID + display name with the **`refactor-package`** skill, using the **app id + name decided in `new-app`** (if the developer hasn't picked one yet, ask — offer 3 suggestions with one recommended):
```bash
./scripts/refactor_package.sh --app-id com.example.newapp --app-name NewApp
```
6. **Validation** — App still builds after the rename (`./gradlew :androidApp:assembleDebug` or `:desktopApp:run`).
### C. Define the product (grounds everything downstream)
7. **Agent Action** — The product must be defined before building: `AiGuidelines/project/prd.md`, `user_flow.md`, and `ui_ux.md` filled, **app name + id decided**, deferred decisions marked `TODO(<phase>)` in `root/AppConfiguration.kt`. This is normally produced by the **`new-app`** skill.
- **If any of that is missing** — the docs are still just a heading, or no name/id has been chosen (common when the developer jumped straight into `getting-started`) — invoke **`new-app`** to produce it. It interviews the developer and writes the docs + picks the name/id; never invent the product yourself. When it finishes, **resume this guide at the next unchecked item** (don't restart from step A).
- **This cannot loop.** `new-app` fills exactly the files/values checked here, so on return the precondition is satisfied and `new-app` is never re-invoked. The trigger is state-based (docs present + name/id set), not a blind re-run — if the state is already good, skip straight past this step.
### D. Build your features
8. **Agent Action** — Build the MVP with the **`build-features`** skill: it derives the screens + local models from `prd.md`/`user_flow.md`, scaffolds them (`make_local.sh` / `generate_screen.sh`, **run sequentially** — they patch shared files), implements the UI per `ui_ux.md`, and brands the onboarding + paywall screens that already ship.
- **Speed matters here:** after the sequential scaffold, `build-features` step 3 **fans out one subagent per screen/model in parallel** (onboarding + paywall branding join the same fan-out). Implementing screens one after another is the main reason this phase feels slow — see "Agent Working Style" in the root `AGENTS.md`.
- It records every model/screen in **`PROGRESS_FEATURES.md`** at the **git repo root** (the folder that contains `MobileApp/` — from the MobileApp Window that's one level up, `../PROGRESS_FEATURES.md`; never inside `MobileApp/`) and ticks them off as it goes — so if a session stops, the next one resumes from the first unchecked item instead of guessing.
- Underlying skills it uses: **`new-local-model`**, **`new-screen`**, and — only if a feature needs them — **`add-api-service`** (any public URL, no backend), **`save-preferences`**, **`add-permission`**.
- Everything stays local: **no Firebase, no provider account, no store account** in this phase. The paywall runs on the mock provider if you touch it.
### E. Validate
9. **Agent Action** — Verify the UI with the **`verify-ui`** skill (headless Compose test for behaviour ~2s + render a `@Preview` to a PNG and look at it), then run the **`run-quality-gates`** skill (`spotlessApply`/`spotlessCheck`, `:shared:jvmTest :shared:testAndroidHostTest`, `:androidApp:assembleDebug`).
10. **User Action** — Re-run the app and confirm your features behave as expected on a device.
---
## Validation gate (Phase 1 done)
> **App launches on at least one platform and shows the Home screen; quality gates pass.**
Progress is tracked in `PROGRESS_P1_GETTING_STARTED.md` at the **git repo root** (the folder containing
`MobileApp/`; from the MobileApp Window it's `../PROGRESS_P1_GETTING_STARTED.md` — never inside `MobileApp/`).
## If the agent stalls or loses its place
This guide is a single ordered checklist — after finishing any step (e.g. the onboarding screens), the
agent should continue to the **next unchecked item**, not stop and ask "what's next". If it does stall,
finishes prematurely, or can't find the progress files:
- **Developer:** just say **"continue @koko-mobileapp-getting-started"** (in the MobileApp Window). That
reloads this guide; the agent then re-reads the progress files and resumes at the first unchecked item.
- **Agent, on resume:** first locate the progress files at the **git repo root** — `git rev-parse
--show-toplevel`, then read `../PROGRESS_FEATURES.md` and `../PROGRESS_P1_GETTING_STARTED.md`. If they
genuinely don't exist yet, create them there (copy `progress-template.md`) — do **not** create them
inside `MobileApp/`, and do **not** re-derive a plan or redo checked work.
## Done → next phase
Once green, switch back to the **Root Window** and start Phase 2. **Trigger it explicitly** — tell
your agent **"start the integrations phase"** (or run the `integrations` skill). That connects the
app to real services: Firebase + anonymous auth, optional social sign-in, and the web-proxy backend.
Then **`publishing`**. Don't stop here assuming the next phase auto-starts — name the phase to begin it.
---From KotlinFoundation/kmp-contest-starter-kit, MIT.
More from KotlinFoundation/kmp-contest-starter-kit
- 0.609score
add-api-service
KotlinFoundation
Add a Ktor-backed network request end-to-end — request/response DTOs, an API service, a repository, and a ViewModel call.
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
capture-app-screens
KotlinFoundation
Render the app's own screens to plain PNGs at storefront pixel sizes (1284×2778 etc.) from @Preview @StoreScreenshot composables — the real UI and nothing…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
add-permission
KotlinFoundation
Request a runtime permission (notifications, camera, gallery out of the box; location, microphone or any other after adding its Calf module) via the app-level…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
publish-release
KotlinFoundation
Build the signed release artifacts and ship them — Android AAB to a Play track and iOS archive to TestFlight/App Store, via Fastlane lanes or the tag-driven…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
refactor-package
KotlinFoundation
Rename the app's package / applicationId / iOS bundle ID and display name across the whole project.
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
run-quality-gates
KotlinFoundation
Run the same lint, test, screenshot, and build checks as CI.
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
configure-environment
KotlinFoundation
Reference catalog (a lookup, not a setup action) of every environment configuration value — local.properties API keys, the gradle.properties subscription…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
setup-analytics
KotlinFoundation
Enable Firebase Analytics, Crashlytics, and Remote Config feature flags in the KMP app — log events, add a flag, toggle it at runtime via Remote Config, and…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
setup-appstore-connect
KotlinFoundation
Manually create and configure the app in App Store Connect — bundle id, version, categories, age rating, privacy, review info, and localized metadata.
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
setup-subscriptions
KotlinFoundation
Wire up in-app subscriptions in KMPStarterKit — pick the provider (Adapty default or RevenueCat) via one gradle property, add the two SDK keys, create store…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
sync-data-firebase
KotlinFoundation
Sync app data to Firebase — Firestore documents, cross-device sync, server-authoritative state (credit balances, settings, user profiles, saved items).
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
koko-mobileapp-getting-started
KotlinFoundation
Phase 1 developer journey guide for the MobileApp directory.
SkillBFreshness: B★ 28Claude Code +9
Signals
- Stars
- 28
- Forks
- 13
- Open issues
- 1
- Last commit (this folder)
- Aug 10, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from KotlinFoundation
- 0.609score
add-permission
KotlinFoundation
Request a runtime permission (notifications, camera, gallery out of the box; location, microphone or any other after adding its Calf module) via the app-level…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
capture-app-screens
KotlinFoundation
Render the app's own screens to plain PNGs at storefront pixel sizes (1284×2778 etc.) from @Preview @StoreScreenshot composables — the real UI and nothing…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
configure-environment
KotlinFoundation
Reference catalog (a lookup, not a setup action) of every environment configuration value — local.properties API keys, the gradle.properties subscription…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
publish-release
KotlinFoundation
Build the signed release artifacts and ship them — Android AAB to a Play track and iOS archive to TestFlight/App Store, via Fastlane lanes or the tag-driven…
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
refactor-package
KotlinFoundation
Rename the app's package / applicationId / iOS bundle ID and display name across the whole project.
SkillBFreshness: B★ 28Claude Code +9 - 0.609score
add-api-service
KotlinFoundation
Add a Ktor-backed network request end-to-end — request/response DTOs, an API service, a repository, and a ViewModel call.
SkillBFreshness: B★ 28Claude Code +9
Cite this page
getting-started skill. Agent Mart. https://agentmart.dev/skills/kotlinfoundation-getting-started (last updated 2026-10-24)