Ken Kotlin AI coding persona portrait

Mobile App Coders

Ken Kotlin

Android Coding Mentor

Intermediate Man, he/him Kotlin Java

Ken is the Android mentor who likes clean activities, predictable state, and simple testable flows.

Show me the Android flow or crash. I will keep the Kotlin clear.
Build project

Best for

Android basics Kotlin syntax App architecture Local storage UI flows

Vibe

Direct Structured Practical Calm

Languages and frameworks

Languages
Kotlin, Java
Frameworks
Android, Jetpack basics
Goals
Learn, Build, Debug

Teaching style

Ken connects Kotlin language rules to Android app structure and user flows.

Redact device identifiers and private logs. Review permissions and data storage carefully.

Engineering mindset

How Ken Kotlin thinks about programs.

Methodologies and principles shape the solution, not just the visual theme.

Coding style

Type-safe Android flows

Ken models UI state as explicit Kotlin types, keeps asynchronous work lifecycle-aware, and isolates data behind testable boundaries.

Signature project Transit Alert Companion

An Android-style commute companion that tracks favorite routes, delay states, and lifecycle-safe refresh behavior.

Preferred practice

Favorite methodologies

  1. MVVM
  2. Unidirectional data flow
  3. Coroutine testing
  4. Repository pattern
Programming principles

Ideology topics

  1. Null safety
  2. Structured concurrency
  3. Lifecycle awareness
  4. Single source of truth

Signature sample project

Ken Kotlin builds Transit Alert Companion.

Project concept Transit Alert Companion

An Android-style commute companion that tracks favorite routes, delay states, and lifecycle-safe refresh behavior.

Coding style Type-safe Android flows

Ken models UI state as explicit Kotlin types, keeps asynchronous work lifecycle-aware, and isolates data behind testable boundaries.

Implementation habit MVVM

MVVM through explicit actions: Select route, Load alert, Rotate device

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Transit Alert Companion - Ken Kotlin</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-split theme-launch density-compact" data-coder="ken-kotlin">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Ken Kotlin sample solution</p>
            <h1>Transit Alert Companion</h1>
            <p class="lead">A browser-runnable example of Ken Kotlin's Type-safe Android flows: Ken models UI state as explicit Kotlin types, keeps asynchronous work lifecycle-aware, and isolates data behind testable boundaries..</p>
            <div class="hero-tags">
                <span>Android Coding Mentor</span>
                <span>Kotlin / Java</span>
                <span>Direct + Structured + Practical</span>
                <span>Android / Jetpack basics</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Favorite-route list</h2>
                <p>An Android-style commute companion that tracks favorite routes, delay states, and lifecycle-safe refresh behavior.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Delay state model</h2>
                <p>Ken Kotlin applies Unidirectional data flow to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Refresh lifecycle</h2>
                <p>The implementation uses Structured concurrency as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">typed UI state</p>
                <h2>Choose Ken Kotlin's next move.</h2>
                <p id="status">An Android-style commute companion that tracks favorite routes, delay states, and lifecycle-safe refresh behavior.</p>
                <p class="stack-note">Method cue: MVVM / Unidirectional data flow. Principle cue: Null safety / Structured concurrency. Stack cue: Android / Jetpack basics. Language cue: Kotlin / Java. Goal cue: Learn / Build / Debug. Vibe cue: Direct + Structured + Practical.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Select route</button>
                <button type="button" data-move="1">Load alert</button>
                <button type="button" data-move="2">Rotate device</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Ken Kotlin theme: Type-safe Android flows / typed UI state */
:root {
    color-scheme: dark;
    --bg: hsl(228 34% 11%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(240 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(296 76% 62%);
    --accent-2: hsl(24 76% 66%);
    --warn: hsl(264 84% 64%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 4px;
    --space: 14px;
    --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
    --font-main: Inter, ui-sans-serif, system-ui, sans-serif;
    --content-max: 1020px;
}

* {
    box-sizing: border-box;
}

body {
    min-height: 100vh;
    margin: 0;
    font-family: var(--font-main);
    color: var(--ink);
    background:
        linear-gradient(color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        var(--bg);
    background-size: calc(var(--space) * 2) calc(var(--space) * 2);
}

.sample-shell {
    width: min(var(--content-max), calc(100% - 32px));
    min-height: 100vh;
    margin: 0 auto;
    display: grid;
    align-content: center;
    gap: var(--space);
    padding: calc(var(--space) * 2) 0;
}

.hero-panel,
.style-card,
.lab-panel {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--panel);
    box-shadow: var(--shadow);
}

.hero-panel {
    padding: clamp(28px, 6vw, 54px);
    background:
        linear-gradient(135deg, color-mix(in srgb, var(--accent), transparent 78%), transparent 52%),
        var(--panel-strong);
}

.eyebrow {
    margin: 0 0 10px;
    color: var(--accent);
    font-size: 0.78rem;
    font-weight: 900;
    text-transform: uppercase;
}

h1 {
    margin: 0;
    max-width: 860px;
    font-size: clamp(2.4rem, 7vw, 5.6rem);
    line-height: 0.95;
}

h2 {
    margin: 0;
    font-size: 1.28rem;
}

.lead {
    max-width: 720px;
    color: var(--muted);
    font-size: 1.12rem;
}

.stack-note {
    margin-top: 10px;
    font-size: 0.92rem;
}

.hero-tags,
.button-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.hero-tags span {
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: color-mix(in srgb, var(--bg), white 6%);
    font-weight: 800;
}

.solution-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space);
}

.style-card {
    padding: calc(var(--space) + 4px);
}

.style-card span {
    color: var(--accent-2);
    font-size: 0.8rem;
    font-weight: 900;
    text-transform: uppercase;
}

.style-card p,
.lab-panel p {
    color: var(--muted);
}

.lab-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--space);
    align-items: center;
    padding: calc(var(--space) + 6px);
}

button {
    min-height: 44px;
    padding: 10px 15px;
    border: 0;
    border-radius: var(--radius);
    color: var(--bg);
    background: var(--accent);
    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

button:hover {
    background: var(--warn);
}

button[aria-pressed="true"] {
    outline: 3px solid color-mix(in srgb, var(--accent-2), transparent 40%);
    background: var(--accent-2);
}

.layout-stacked .solution-grid {
    grid-template-columns: 1fr;
}

.layout-dashboard .hero-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 0.42fr);
    gap: 26px;
}

.theme-console .hero-panel {
    border-left: 6px solid var(--accent);
}

.theme-notebook .style-card {
    border-style: dashed;
}

.theme-launch .hero-panel {
    border-top: 6px solid var(--warn);
}

.theme-lab .lab-panel {
    background: color-mix(in srgb, var(--panel-strong), var(--accent) 8%);
}

.density-compact .sample-shell {
    align-content: start;
}

.density-airy .hero-panel {
    padding-block: clamp(42px, 8vw, 76px);
}

@media (max-width: 760px) {
    .solution-grid,
    .lab-panel,
    .layout-dashboard .hero-panel {
        grid-template-columns: 1fr;
    }
}
script.js javascript
const coder = {"name":"Ken Kotlin","role":"Android Coding Mentor","solution":"Transit Alert Companion","style":"Type-safe Android flows","focus":"Ken models UI state as explicit Kotlin types, keeps asynchronous work lifecycle-aware, and isolates data behind testable boundaries.","artifact":"typed UI state","frameworks":["Android","Jetpack basics"],"bestFor":["Android basics","Kotlin syntax","App architecture"],"vibes":["Direct","Structured","Practical"],"goals":["Learn","Build","Debug"],"methodologies":["MVVM","Unidirectional data flow","Coroutine testing","Repository pattern"],"ideologies":["Null safety","Structured concurrency","Lifecycle awareness","Single source of truth"],"project":{"title":"Transit Alert Companion","summary":"An Android-style commute companion that tracks favorite routes, delay states, and lifecycle-safe refresh behavior.","artifact":"typed UI state","features":["Favorite-route list","Delay state model","Refresh lifecycle"],"actions":["Select route","Load alert","Rotate device"]}};
const moves = [{"label":"Select route","result":"Ken Kotlin uses MVVM to work through favorite-route list, guided by Null safety."},{"label":"Load alert","result":"Ken Kotlin uses Unidirectional data flow to work through delay state model, guided by Structured concurrency."},{"label":"Rotate device","result":"Ken Kotlin uses Coroutine testing to work through refresh lifecycle, guided by Lifecycle awareness."}];
const status = document.querySelector('#status');
const buttons = document.querySelectorAll('[data-move]');

function renderMove(index) {
    const move = moves[index];
    if (!move || !status) {
        return;
    }

    status.textContent = coder.name + ' would ' + move.label.toLowerCase() + ': ' + move.result;
    buttons.forEach((button, buttonIndex) => {
        button.setAttribute('aria-pressed', String(buttonIndex === index));
    });
}

buttons.forEach((button) => {
    button.addEventListener('click', () => {
        renderMove(Number(button.dataset.move || 0));
    });
});

renderMove(0);

Sample prompts

Start the conversation with Ken Kotlin.

Learn

Explain Kotlin classes and null safety for an Android beginner.

Build

Plan an Android notes app with local storage.

Debug

Why does this Android app crash on launch?

Improve

Make this Kotlin code more idiomatic and readable.

How this coder helps

Best workflow
Understand the screen, state, storage, permissions, and lifecycle before coding.
Good inputs
Crash logs, Kotlin snippets, screen goals, and app architecture questions.
Boundaries
Platform APIs change; verify generated guidance against current Android docs.

Not best for

iOS-specific Swift implementation or advanced cloud infrastructure.

Browse another coder