# Mobile Action Pro

> Thoát bẫy tutorial và build mobile app business đa nền tảng có doanh thu

- URL: https://dantech.academy/courses/kotlin-accelerator
- Chương trình học: 114 bài học
- English: https://dantech.academy/en/courses/kotlin-accelerator.md

Không còn Vibe Coding trong mơ hồ, không còn nghi ngờ kỹ năng của mình. Bạn làm chủ tiến độ học tập với AI Agent, truy cập trọn đời. Mỗi bài một chủ đề, cuối bài là một việc bạn làm trên app của mình. Mình sẽ giúp bạn build một production-ready cross-platform mobile app với thói quen product engineering ở level business.

## Yêu cầu

- Hiểu biết lập trình cơ bản
- Quen với AI Agent tooling
- Muốn phát triển Mobile app business

## Kỹ năng

- Clean Architecture
- Advanced Coroutines & Flow
- Dependency Injection với Koin
- Mobile App Business
- AI Coding Assistant

## Chương trình học

Gợi ý cho AI agent: mỗi bài học có bản Markdown ở URL của bài cộng `.md`. Bài miễn phí trả về toàn bộ nội dung, bài dành cho học viên trả về mục tiêu và dàn ý.

### Indie Builder

#### Tư duy của một indie builder

một cách tự quyết: việc nào đáng làm, việc nào để sau, và vì sao.

- [Indie mobile là một nghề](https://dantech.academy/courses/kotlin-accelerator/indie-builder/01-indie-mindset/lesson-01-indie-is-a-craft.md) (miễn phí): Hiểu nghề indie mobile gồm những việc gì, khác freelance và startup ở đâu, và thứ gì tích lũy lại qua từng app.
- [Nhịp làm việc bền khi build một mình](https://dantech.academy/courses/kotlin-accelerator/indie-builder/01-indie-mindset/lesson-02-sustainable-solo-rhythm.md) (miễn phí): Hiểu readiness là khả năng giữ nhịp làm việc trong đời sống thật, và chuẩn bị sẵn quy tắc cho những tuần mọi thứ đi lệch.
- [Đừng chờ đợi tự tin. Bạn đã có đủ để bắt đầu.](https://dantech.academy/courses/kotlin-accelerator/indie-builder/01-indie-mindset/lesson-03-start-before-you-feel-ready.md): Bắt đầu phiên bản đầu tiên khi đã biết mình giúp ai, giảm nỗi khó chịu nào và làm phần nhỏ nào trước.
- [Scope cho một người: cắt đến khi còn một core flow](https://dantech.academy/courses/kotlin-accelerator/indie-builder/01-indie-mindset/lesson-04-scope-for-one-person.md): Viết core flow thành một câu, cắt mọi tính năng không cần cho core flow, và giữ danh sách để sau kèm điều kiện.
- [App chưa thành công không có nghĩa là bạn thất bại](https://dantech.academy/courses/kotlin-accelerator/indie-builder/01-indie-mindset/lesson-05-builder-beyond-one-idea.md): Tách kết quả của một app khỏi đánh giá về bản thân, gọi tên giả thuyết chưa đúng và ghi mỗi sai lầm thành một câu về một quyết định cụ thể.

#### Chọn ý tưởng và kiểm chứng

một ý tưởng cụ thể đã hỏi người dùng thật, kèm lý do để làm hoặc bỏ.

- [Săn niche có sẵn còn vấn đề bỏ ngỏ](https://dantech.academy/courses/kotlin-accelerator/indie-builder/02-find-and-validate-ideas/lesson-01-find-an-existing-niche.md): Tìm ý tưởng trong những nhóm app đã có người cài và người trả tiền, rồi tìm nhóm người hoặc nhu cầu mà các app hiện có phục vụ chưa tốt.
- [Vấn đề đáng làm và tín hiệu trả tiền](https://dantech.academy/courses/kotlin-accelerator/indie-builder/02-find-and-validate-ideas/lesson-02-problem-worth-solving.md) (miễn phí): Nhận ra một vấn đề đáng làm qua người gặp, tình huống lặp lại và dấu vết chi phí, thay vì tin vào lời khen xã giao.
- [Chọn một ý tưởng bằng hai trục: giá trị và khả năng](https://dantech.academy/courses/kotlin-accelerator/indie-builder/02-find-and-validate-ideas/lesson-03-pick-one-idea-two-axes.md): Chấm mỗi ý tưởng trên trục giá trị của vấn đề và trục khả năng thực thi của bạn, rồi chọn ý tưởng cân bằng nhất để làm trước.
- [Đọc đối thủ qua trang store và review từ 1 đến 3 sao](https://dantech.academy/courses/kotlin-accelerator/indie-builder/02-find-and-validate-ideas/lesson-04-read-competitors-on-store.md): Đọc lời hứa trên trang store của đối thủ, hiểu điểm sao được tính thế nào, và gắn nhãn review 1 đến 3 sao để tìm vấn đề lặp lại ở nhiều app.
- [Phỏng vấn người dùng mà không bị khen xã giao](https://dantech.academy/courses/kotlin-accelerator/indie-builder/02-find-and-validate-ideas/lesson-05-interview-without-compliments.md): Hỏi về những lần cụ thể đã xảy ra thay vì hỏi ý kiến về ý tưởng, ghi lại hành vi và tìm tín hiệu cam kết thay vì lời khen.
- [Tìm Aha moment của người dùng](https://dantech.academy/courses/kotlin-accelerator/indie-builder/02-find-and-validate-ideas/lesson-06-find-the-aha-moment.md): Tìm khoảnh khắc người dùng tự nhận ra dùng app tốt hơn cách cũ, bằng khung Situation, Action, Friction, Relief.

#### Thiết kế trải nghiệm

luồng các màn chính và những trạng thái user sẽ gặp, đủ để bắt đầu dựng.

- [Đừng để người dùng phải hỏi: “Giờ mình đi đâu?”](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-01-navigation-with-intent.md) (miễn phí): Chọn cách dẫn đường theo ý định của người dùng, để mỗi điểm đến và mỗi cái tên đều có lý do.
- [Onboarding đưa người dùng tới Aha moment nhanh nhất](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-02-onboarding-to-aha.md): Rút ngắn đường từ lúc mở app tới lúc người dùng thấy giá trị đầu tiên, và để những thứ app cần xin xuất hiện sau khoảnh khắc đó.
- [Khi nào app được phép ngắt nhịp người dùng?](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-03-interruption-with-intent.md): Chọn đúng mức độ ngắt nhịp và viết micro-copy rõ ràng để app bảo vệ sự tập trung của người dùng.
- [Chuyển động và rung phản hồi có lý do](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-04-motion-builds-trust.md): Dùng chuyển động, rung phản hồi và hiệu ứng thị giác như tín hiệu sản phẩm: làm rõ điều vừa xảy ra, giữ đúng cảm xúc và không đòi thêm sự chú ý.
- [Màn hình dọc, ngang và tablet](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-05-design-beyond-one-screen.md): Thiết kế theo bối cảnh dùng trên màn hình dọc, ngang và tablet, và hiểu Android 16 thay đổi gì với app khóa hướng màn hình.
- [Notification là một lời mời có lý do](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-06-notifications-with-reason.md): Thiết kế notification gắn với điều người dùng quan tâm, xin quyền đúng lúc, và chọn giữa local và push notification.
- [Khi người dùng mất mạng](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-07-when-users-go-offline.md): Chia tính năng thành ba vùng theo mức phụ thuộc mạng, giữ core flow chạy được khi offline và báo lỗi mạng bằng lời người dùng hiểu.
- [Backup, restore và đổi máy](https://dantech.academy/courses/kotlin-accelerator/indie-builder/03-design-the-experience/lesson-08-backup-restore-new-phone.md): Kiểm kê dữ liệu app lưu ở đâu, chọn cách để dữ liệu theo người dùng sang máy mới, và nói rõ với người dùng điều gì được giữ lại.

#### Build và ship bằng stack của khoá

một bản app chạy được trên stack của khoá, đủ để đưa lên store.

- [Stack cho một người: KMP, Supabase, RevenueCat, Firebase](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-01-stack-for-one-person.md): Chọn công nghệ theo những việc app cần làm, và hiểu mỗi dịch vụ có sẵn kéo theo cam kết gì về chi phí, dữ liệu, cập nhật và khả năng rời đi.
- [Feature flag và kill-switch: ship trước, bật sau](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-02-feature-flags-kill-switch.md): Phân biệt flag lúc build và flag từ xa, dùng flag từ xa làm kill-switch cho tính năng rủi ro, và tránh các bẫy về giá trị mặc định, độ trễ và bí mật.
- [Event tracking có chủ đích](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-03-measure-the-promise.md): Chọn một bộ event nhỏ để biết người dùng đã chạm tới Aha moment hay bị kẹt ở đâu, với ví dụ từ app quiz của khóa học.
- [Crash làm mất niềm tin: theo dõi bằng Android vitals và Xcode Organizer](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-04-a-crash-breaks-trust.md): Xếp hạng crash theo thứ người dùng mất, và theo dõi crash bằng Android vitals và Xcode Organizer trước khi cài thêm SDK.
- [Tính năng AI cần người chịu trách nhiệm](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-05-ai-needs-accountability.md): Thiết kế tính năng AI nói đúng những gì nó làm, có đường lùi, cho user báo lỗi trong app và gửi ít dữ liệu nhất ra ngoài.
- [Beta: closed testing trên Play và TestFlight](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-06-beta-closed-testing-testflight.md): Tổ chức một vòng beta có câu hỏi rõ ràng trên Google Play và TestFlight, và đọc đúng yêu cầu chính thức trước khi bắt đầu.
- [Phát hành theo giai đoạn trên Play và App Store](https://dantech.academy/courses/kotlin-accelerator/indie-builder/04-build-and-ship/lesson-07-staged-rollout.md): Dùng staged rollout của Google Play và phased release của App Store, với tín hiệu viết sẵn để quyết định mở rộng, chờ hay dừng.

#### Lên store và được tìm thấy

một listing trên store: tên, mô tả, ảnh và từ khóa người ta đang tìm.

- [ASO cơ bản: tên app, mô tả ngắn, từ khóa](https://dantech.academy/courses/kotlin-accelerator/indie-builder/05-get-found-on-stores/lesson-01-aso-basics.md): Viết tên app, subtitle hoặc mô tả ngắn và từ khóa bằng chữ của người dùng, theo đúng cách App Store và Google Play đọc trang store.
- [Store listing: icon, screenshot, video](https://dantech.academy/courses/kotlin-accelerator/indie-builder/05-get-found-on-stores/lesson-02-store-listing-assets.md): Làm icon, screenshot và video cho trang store sao cho kể đúng app và theo yêu cầu hiện hành của Google Play và App Store.
- [Khai báo dữ liệu trên store: Data safety và App Privacy](https://dantech.academy/courses/kotlin-accelerator/indie-builder/05-get-found-on-stores/lesson-03-store-data-declarations.md): Khai đúng Data safety trên Google Play và App Privacy trên App Store, kể cả dữ liệu do SDK bên thứ ba thu.
- [Trẻ em không phải một thị trường bình thường](https://dantech.academy/courses/kotlin-accelerator/indie-builder/05-get-found-on-stores/lesson-04-children-are-not-normal-market.md): Quyết định app có phục vụ trẻ em không, và nếu có thì sản phẩm cùng phần khai báo trên store phải thay đổi những gì.
- [Qua vòng review của App Store và Google Play](https://dantech.academy/courses/kotlin-accelerator/indie-builder/05-get-found-on-stores/lesson-05-pass-store-review.md): Chuẩn bị một lần nộp gọn gàng trên App Store và Google Play, và biết cách xử lý khi bị từ chối.
- [Launch cohort đầu tiên: 50 người đúng thay vì 5.000 người ngẫu nhiên](https://dantech.academy/courses/kotlin-accelerator/indie-builder/05-get-found-on-stores/lesson-06-first-50-right-users.md): Tìm nhóm người dùng đầu tiên ở nơi vấn đề đã được nói thành lời, mời họ dùng thử và đọc được hành vi của họ.

#### Kiếm tiền

một cách thu tiền khớp với giá trị user nhận được, và một cách biết giao dịch đã xong.

- [Các mô hình kiếm tiền: paid, freemium, subscription, IAP, ads](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-01-app-business-models.md): Chọn mô hình kiếm tiền theo việc giá trị app và chi phí của bạn có lặp lại hay không, và theo luật billing của hai store.
- [Thiết kế offer trước khi xây feature](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-02-design-offer-before-features.md): Chia offer thành ba lớp Aha, Core và Expansion: giá trị cốt lõi đến trước, premium mở rộng sau.
- [Từ offer sang paywall: mời trả tiền đúng khoảnh khắc](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-03-paywall-after-aha.md): Đặt lời mời trả tiền tại chỗ phần miễn phí bắt đầu chật, sau khi người dùng đã thấy giá trị, với nút đóng hiện rõ.
- [Định giá là giả thuyết: gói tháng và gói năm](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-04-price-as-hypothesis.md): Neo giá gói tháng và gói năm theo cách người dùng đang giải quyết vấn đề, hiển thị giá đúng luật store, và hiểu chuyện gì xảy ra khi đổi giá.
- [Free trial và ưu đãi giới thiệu](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-05-free-trials-intro-offers.md): Hiểu các loại ưu đãi giới thiệu và điều kiện nhận trên hai store, những gì phải hiện trước khi người dùng đăng ký trial, và khi nào nên dùng trial.
- [Một giao dịch phải đáng tin](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-06-a-purchase-must-hold.md): Nhìn giao dịch subscription như bốn lời hứa, biết RevenueCat lo phần nào và phần nào app vẫn phải tự làm: khôi phục, giao dịch đang chờ, danh tính người dùng.
- [Vòng đời subscription: gia hạn, grace period, hủy, hoàn tiền](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-07-subscription-lifecycle.md): Trả lời đúng câu hỏi người dùng còn được dùng premium không ở mỗi trạng thái của subscription trên Google Play và App Store.
- [Đọc tín hiệu doanh thu đầu tiên](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-08-read-first-revenue-signals.md): Dựng funnel năm bước cho subscription và đọc mỗi khoảng rơi thành một giả định cần kiểm tra, thay vì để phán xét app.
- [Doanh thu không được phép phá niềm tin](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-09-revenue-never-breaks-trust.md): Nhận diện dark pattern trên paywall và luồng mua, biết store cấm những gì, và khi nào một nguồn doanh thu đáng từ chối.
- [Phí store, thuế và nhận tiền](https://dantech.academy/courses/kotlin-accelerator/indie-builder/06-make-money/lesson-10-store-fees-tax-payouts.md): Hiểu đường đi của tiền từ giá người dùng trả tới tài khoản ngân hàng: thuế gián thu, phí store, thuế khấu trừ, chi trả, mà không học thuộc con số nào.

#### Làm user hài lòng

cách nhận phản hồi, sửa chỗ user đang vướng, và giữ đúng điều app đã hứa.

- [Xin đánh giá đúng lúc](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-01-ask-for-ratings.md): Xin người dùng chấm sao bằng hộp thoại của hệ thống, vào điểm dừng sau một lần thành công, và tránh những cách hỏi bị store cấm.
- [Trả lời review công khai](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-02-reply-to-reviews.md): Trả lời review trên Google Play và App Store đúng chính sách, theo thứ tự ưu tiên, với một cấu trúc ngắn, và quay lại sửa câu trả lời khi lỗi đã được sửa.
- [Support khi chỉ có một người](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-03-support-as-one-person.md): Dựng hệ thống support một người duy trì được: một kênh chính, thông tin điền sẵn, phân loại email, thời gian phản hồi giữ được và câu trả lời mẫu.
- [Vòng phản hồi: thu, phân loại, đóng vòng](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-04-feedback-loop.md): Gom góp ý từ review, email, bản test và dữ liệu sử dụng về một chỗ, phân loại theo vấn đề, đếm qua nhiều nguồn và báo lại cho người đã góp ý.
- [Retention: đọc cohort](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-05-read-retention-cohorts.md): Đọc bảng retention theo cohort bằng ba cách, biết lấy số ở Play Console, App Store Connect và Google Analytics, và chọn định nghĩa quay lại theo việc chính của app.
- [Churn của subscription và win-back](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-06-subscription-churn-winback.md): Phân biệt churn chủ động với churn do lỗi thanh toán, giữ người đã hủy nhưng chưa hết hạn, và dùng công cụ win-back của hai store đúng cách.
- [Bản kê dữ liệu và lời hứa với người dùng](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-07-user-data-is-not-free.md): Lập bản kê dữ liệu gồm cả SDK và dịch vụ bên ngoài, rồi dùng nó làm nguồn cho privacy policy, lời giải thích trong app, khai báo store và quyền kiểm soát.
- [Xóa tài khoản và dữ liệu](https://dantech.academy/courses/kotlin-accelerator/indie-builder/07-keep-users-happy/lesson-08-account-and-data-deletion.md): Hiểu yêu cầu xóa tài khoản của App Store và Google Play, thiết kế luồng xóa đủ năm bước, và chạy phần xóa ở server với quyền quản trị.

#### Tăng trưởng và đi đường dài

một nhịp cập nhật đều, số cho thấy user còn quay lại, và việc tiếp theo đã chọn.

- [Phát hành bản cập nhật dựa trên bằng chứng](https://dantech.academy/courses/kotlin-accelerator/indie-builder/08-grow-and-sustain/lesson-01-ship-evidence-based-update.md): Biến mỗi bản cập nhật thành một giả thuyết ba phần có tín hiệu chọn trước, chỉ gói một thay đổi cần học trong mỗi bản, và đọc kết quả sau khi phát hành.
- [Retro theo giả thuyết: giữ, sửa hay bỏ](https://dantech.academy/courses/kotlin-accelerator/indie-builder/08-grow-and-sustain/lesson-02-hypothesis-retro.md): Thay câu hỏi thành công hay thất bại bằng một buổi retro theo năm lớp giả thuyết, xếp mỗi giả thuyết vào giữ, sửa, bỏ hoặc chưa đủ dữ liệu.
- [Build in public: chia sẻ gì, giữ lại gì](https://dantech.academy/courses/kotlin-accelerator/indie-builder/08-grow-and-sustain/lesson-03-build-in-public.md): Quyết định có nên build in public, chọn điều đáng chia sẻ, không đăng dữ liệu người dùng hay secret, tuân thủ luật review và dùng link thử nghiệm của store.
- [Chi phí vận hành của app một người](https://dantech.academy/courses/kotlin-accelerator/indie-builder/08-grow-and-sustain/lesson-04-running-costs.md): Chia chi phí theo thứ làm nó tăng, đọc điều kiện của gói miễn phí, dựng cảnh báo ngân sách và spend cap, và giữ khóa API trả phí ở server.
- [Giữ app sống lâu: SDK, target API, chính sách mới](https://dantech.academy/courses/kotlin-accelerator/indie-builder/08-grow-and-sustain/lesson-05-keep-the-app-alive.md): Biết những gì làm app mất khả năng phát hành, từ target API, SDK, privacy manifest tới tài khoản developer, và đặt lịch bảo trì theo tháng, quý, năm.
- [Một app sâu hay nhiều app nhỏ](https://dantech.academy/courses/kotlin-accelerator/indie-builder/08-grow-and-sustain/lesson-06-one-deep-app-or-many.md): Quyết định giữa đào sâu một app và mở thêm app mới dựa trên bằng chứng retro, và phân biệt đi tiếp có căn cứ với nhảy ý tưởng.

### Kotlin Engineer

#### Setup App Chạy Được

toolchain sẵn sàng, production app build được trên máy bạn và chạy được trên iOS: first build, first test, first commit.

- [Cài đặt Git, JDK 17, Android Studio và SDK](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/00-setup-app-running/lesson-01-install-android-studio-sdk.md) (miễn phí): Chuẩn bị Git, JDK 17 và Android tooling cần thiết để clone, mở và build app Kotlin Multiplatform trong khóa học.
- [Clone Repo và Mở Project KMP Lần Đầu](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/00-setup-app-running/lesson-02-clone-repo-open-project.md) (miễn phí): Mở project Kotlin Multiplatform production thật thay vì một toy starter project.
- [Checklist Tài Khoản Dịch Vụ](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/00-setup-app-running/lesson-03-service-account-checklist.md) (miễn phí): Biết những tài khoản bên ngoài nào cần có và lý do cần từng cái.
- [Setup Supabase SQL, Secrets Và Firebase](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/00-setup-app-running/lesson-04-configure-local-files-secrets.md) (miễn phí): Chuẩn bị backend tables, auth configuration và Firebase Android project cần thiết trước lần chạy app nghiêm túc đầu tiên.
- [Build, Test và Commit Đầu Tiên](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/00-setup-app-running/lesson-05-first-build-test-commit.md) (miễn phí): Tạo checkpoint an toàn đầu tiên trước khi vào phần architecture.
- [Chạy App Trên iOS (macOS + Xcode)](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/00-setup-app-running/lesson-06-run-app-on-ios.md) (miễn phí): Chạy cùng app Kotlin Multiplatform trên iOS Simulator bằng Xcode. Bài tùy chọn, cần Mac chip Apple Silicon.

#### Kiến trúc Production mobile app

đọc app như một hệ thống: module graph, startup trên Android và iOS, feature registration, navigation và layer boundaries.

- [Đọc Module Graph](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-production-app-map/lesson-01-read-module-graph.md) (miễn phí): Đọc project Kotlin Multiplatform như một hệ thống: module, chiều dependency và source set.
- [Luồng Khởi Động Trên Android Và iOS](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-production-app-map/lesson-02-trace-app-startup.md) (miễn phí): Hiểu app đi qua những điểm nào từ lúc bấm icon tới màn hình đầu tiên, trên cả Android và iOS.
- [Feature Registration Và Navigation Boundaries](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-production-app-map/lesson-03-understand-feature-discovery.md) (miễn phí): Hiểu app biết có những feature nào qua danh sách tường minh, và điều hướng giữa chúng mà không tạo coupling.
- [Trách Nhiệm Từng Layer Và Cách Đọc Tên File](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-production-app-map/lesson-04-spot-layer-responsibilities.md) (miễn phí): Đừng trộn UI, business logic và backend code. Và học cách đoán vị trí file chỉ từ tên của nó.
- [Thay Đổi An Toàn Đầu Tiên](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-production-app-map/lesson-05-make-your-first-change.md) (miễn phí): Biết cái gì là thật, cái gì là mock, rồi tự tay sửa codebase mà không phá vỡ boundary nào.

#### Nền Tảng Kotlin Multiplatform

đọc một project KMP: source set, expect/actual hay interface + DI, iOS host với Swift interop, và data stack dùng chung Ktor, DataStore, settings, Supabase.

- [Giải Phẫu Một Project KMP](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-shared-kmp-foundations/lesson-01-kmp-project-anatomy.md) (miễn phí): Nhìn vào bên trong một module Kotlin Multiplatform: target, source set, default hierarchy template, plugin Android cho thư viện KMP và những gì không đặt được trong commonMain.
- [Platform Seams: expect/actual Hay Interface + DI](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-shared-kmp-foundations/lesson-02-platform-seams-expect-actual-di.md) (miễn phí): Chọn giữa expect/actual và interface + DI cho mỗi chỗ code chung phải gọi tới nền tảng, dựa trên ba expect và các interface seam thật của repo.
- [iOS Host Và Swift Interop](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-shared-kmp-foundations/lesson-03-ios-host-swift-interop.md) (miễn phí): Kotlin trở thành framework iOS như thế nào, Swift nhìn thấy gì qua Objective-C header, những tính năng bị mất khi đi qua cầu nối và cách Kotlin gọi API của Apple.
- [Data Stack Đa Nền Tảng](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-shared-kmp-foundations/lesson-04-kmp-data-stack.md) (miễn phí): Tầng data của app KMP: một HttpClient với engine theo nền tảng, supabase-kt, DataStore qua path resolver và cách chọn thư viện lưu trữ.

#### Compose UI Theo State

màn hình Compose state-driven: immutable UI models, sealed actions, kiểm soát recomposition, component tái sử dụng.

- [Thiết Kế UI Model Bất Biến](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-01-design-immutable-ui-models.md): Mô hình hóa screen bằng state bất biến rõ ràng, rồi tự tay sửa state contract
- [Quản lý User Intent Bằng Sealed Actions](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-02-model-user-intent-with-sealed-actions.md): Biến UI events thành action vocabulary rõ ràng, bạn có thể tạo log, tự mở rộng để thấy hiệu quả.
- [Kiểm Soát Recomposition](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-03-control-recomposition-with-stable-state.md): Vì sao Menu skip được recomposition: stability, strong skipping.
- [Dựng Screen Compose Từ State](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-04-compose-screens-from-state.md): Route sở hữu wiring, content composable chỉ render state. Và vì sao không gắn Toast vào state?
- [Tái Sử Dụng Theme, UI Components](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-05-reuse-theme-and-ui-components.md): Build UI mà không phá consistency, rồi tự nâng cấp, cập nhật token toàn app.
- [Compose Multiplatform Resources Và Đa Ngôn Ngữ](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-06-compose-multiplatform-resources-i18n.md): Resource dùng chung trong Compose Multiplatform: thư mục composeResources, class Res của từng module, đọc string, ảnh, font, file từ commonMain, và giữ bản tiếng Việt đầy đủ bằng LocaleParityTest.

#### State Machine Và MVVM

luồng MVVM chạy bằng reducer: State/Action/Effect/AsyncOp, ViewModel wiring và side-effect handlers.

- [Vì Sao Reducer Hữu Ích?](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/03-state-machine-mvvm/lesson-01-understand-why-reducers-help.md): Hiểu khi nào reducer tốt hơn UI logic nhiều nhánh.
- [Thiết Kế State, Action, Effect Và AsyncOp](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/03-state-machine-mvvm/lesson-02-design-state-action-effect-asyncop.md): Học vocabulary state-machine của app thông qua DRE Pattern.
- [Đọc Reducer Thật Của Game State Machine](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/03-state-machine-mvvm/lesson-03-read-game-state-machine.md): Đọc reducer thật từ Game State Machine, lần theo action tới state mới, one-time effect và follow-up work.
- [Wire ViewModel Với DRE Store](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/03-state-machine-mvvm/lesson-04-wire-viewmodel-with-store.md): Hiểu vai trò ViewModel trong DRE architecture pattern.
- [Giữ Side Effects Bên Ngoài Reducer](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/03-state-machine-mvvm/lesson-05-keep-side-effects-outside-reducers.md): Giữ navigation, analytics, API calls và snackbar ở ngoài pure transitions.

#### Clean Architecture Và Integration

use cases, repository boundaries, Supabase auth, remote config và subscription paywall qua boundary sạch.

- [Use Case: Đơn Vị Nghiệp Vụ Của App](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-01-read-domain-use-cases.md): Vì sao một hàm ngắn lại đáng để tạo một class riêng.
- [Domain vs Data: Đâu Là Nơi Đặt Logic?](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-02-separate-repository-contracts-and-data-implementations.md): Vì sao phần dữ liệu của 1 tính năng cần tới 4 file ở 2 module khác nhau?
- [Clean Architecture Của Cú Tap Sign-In](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-03-trace-supabase-auth-flow.md): Trace auth từ nút bấm tới session, rồi sync profile.
- [Cách Bạn Thay Đổi AI Provider Chỉ Với 1 Dòng Code](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-04-swap-ai-provider-with-one-line.md): Contract đúng chỗ thì đổi provider nhanh, dễ test, và không ảnh hưởng đến các module khác.
- [Composition Root: Nơi Định Nghĩa Các Provider](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-05-wire-dependencies-at-composition-root.md): Bạn bắt đầu hiểu ra cách tổ chức code, và tìm đến nơi duy nhất biết cả contract lẫn implementation, cho cả Android lẫn iOS.

#### Testing, Security Và Release

reducer/ViewModel tests, CI cho KMP, build-time secrets, ship app iOS và quyết định release readiness.

- [Test Reducer Và Use Case](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-01-test-reducers-and-use-cases.md): Bắt đầu test ở nơi nhanh và có giá trị nhất.
- [Test Flow Và ViewModel](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-02-test-flows-and-viewmodels.md): Test state emissions mà không cần tap UI thủ công.
- [Shrink Và Protect Android Release Build](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-03-shrink-and-guard-release-build.md): Vì sao bản release Android không phải bản bạn đã test, và R8 thay đổi gì trong app.
- [Bảo Vệ Secrets Trong Build (Android + iOS)](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-04-protect-secrets-at-build-time.md): Hiểu cách xử lý mobile secrets một cách thực tế, trên cả Android lẫn iOS.
- [CI Cho KMP](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-06-ci-for-kmp.md): CI của repo kiểm tra gì trên mỗi pull request, và phần nào của app KMP vẫn phải tự kiểm tra trên Mac.
- [Ship App iOS](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-07-ship-ios-app.md): Từ project iOS trong repo tới một bản build trên TestFlight: cấu hình, ký app, kiểm tra secret, archive và upload.
- [Chạy Release Readiness Check](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-05-run-release-readiness-check.md): Test đủ 3 bước trên cả Android và iOS, tick xong checklist, và dám bấm nút ship app lên Store.

#### Clean Architecture Chuyên Sâu

4 lớp và dependency rule: interface-based design cho layer và platform seams, repository, use case, manager và mapping giữa các layer.

- [Clean Architecture Và Mô Hình 4 Lớp](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-01-clean-architecture-overview.md) (miễn phí): Dependency rule, bốn lớp UI, ViewModel, Domain, Data map vào module thật của repo, và một lượt bắt đầu game đi qua cả bốn lớp.
- [Cấu trúc Gradle Multi-Module](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-03-multi-module-structure.md): Cấu trúc Gradle Multi-Module - Khóa học Mobile Action Pro
- [Thiết Kế Dựa Trên Interface](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-04-interface-based-design.md): Interface làm ranh giới giữa các lớp và seam giữa các platform, cùng cách DI bind interface vào implementation.
- [Repository Pattern](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-05-repository-pattern.md): Repository Pattern - Khóa học Mobile Action Pro
- [UseCase Pattern](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-06-usecase-pattern.md): UseCase Pattern - Khóa học Mobile Action Pro
- [Managers cho Complex Orchestration](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-07-manager-pattern.md): Managers cho Complex Orchestration - Khóa học Mobile Action Pro
- [Data Flow Patterns](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-08-data-flow-patterns.md): Data Flow Patterns - Khóa học Mobile Action Pro
- [Mapping Giữa Các Layers](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-11-mapping-layers.md): Mapping Giữa Các Layers - Khóa học Mobile Action Pro
- [Best Practices & Anti-Patterns](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/06-clean-architecture/lesson-12-best-practices.md): Best Practices & Anti-Patterns - Khóa học Mobile Action Pro

#### Dependency Injection Với Koin

module DSL, scope ViewModel, dependency resolution, multi-module wiring, đăng ký feature tường minh, kiểm tra DI graph trên hai nền tảng và test có Koin.

- [DI Và Inversion of Control](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-01-di-basics.md): Constructor injection, Inversion of Control và composition root startSharedApp trên Android và iOS.
- [Tổng quan Koin (Multiplatform)](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-03-koin-overview.md): Koin trong app KMP: artifact theo module, :domain không có Koin, một graph appKoinModules cho hai platform.
- [Koin DSL - module, single, factory](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-04-koin-dsl-basics.md): Koin DSL - module, single, factory - Khóa học Mobile Action Pro
- [Koin ViewModel Scope](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-05-koin-viewmodel-scope.md): Koin ViewModel Scope - Khóa học Mobile Action Pro
- [Dependency Resolution với get()](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-06-dependency-resolution.md): Dependency Resolution với get() - Khóa học Mobile Action Pro
- [Koin Trong Multi-Module: appKoinModules Và Core Module](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-07-multi-module-architecture.md): Mỗi Gradle module giữ Koin module của mình, appKoinModules ghép phần chung, QzDispatchers và ScopeQualifier ở module nền.
- [Feature Module Pattern](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-09-feature-module-pattern.md): Feature Module Pattern - Khóa học Mobile Action Pro
- [Đăng Ký Feature Tường Minh](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-10-explicit-feature-registration.md): Vì sao repo liệt kê feature trong AppFeatures.kt thay cho Class.forName, cách FeatureRegistry từ chối danh sách sai và test giữ nó đúng.
- [ViewModel Injection trong Routes](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-11-viewmodel-injection-routes.md): ViewModel Injection trong Routes - Khóa học Mobile Action Pro
- [Testing Với Koin](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/07-dependency-injection/lesson-12-testing-with-koin.md): Test không cần Koin, vệ sinh startKoin/stopKoin, và AppGraphTest dựng toàn bộ graph trên Android và iOS.

#### Capstone: Đưa App Android Lên KMP

thứ tự migrate một app Android sang KMP: commonMain trước, platform seams, DataStore giữ nguyên đường dẫn, một danh sách DI và test gate theo từng target.

- [Migrate Một App Android Sang KMP](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/08-capstone-kmp-migration/lesson-01-migrate-android-app-to-kmp.md): Thứ tự migration thật của repo từ Android lên Kotlin Multiplatform, và cách dùng skill kta-migrate để lập cùng kế hoạch đó cho app của bạn.
