56 bài viết Indie Builder giúp bạn định hướng đúng cho ứng dụng của mình (Updating)
Sau khi mở khóaKế hoạch bắt đầu từ ngày bạn muaMỗi ngày một việc, có link thẳng tới bài học liên quan
Đã hoàn thành0/31
01.01Indie mobile là một nghềFreeTiếp theo→ 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.20 phút
01.02Nhịp làm việc bền khi build một mìnhFree→ 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.20 phút
01.03Đừng chờ đợi tự tin. Bạn đã có đủ để bắt đầu.→ 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.15 phút
01.04Scope cho một người: cắt đến khi còn một core flow→ 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.20 phút
01.05App chưa thành công không có nghĩa là bạn thất bại→ 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ể.20 phút
02.01Săn niche có sẵn còn vấn đề bỏ ngỏ→ 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.20 phút
02.02Vấn đề đáng làm và tín hiệu trả tiềnFree→ 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.20 phút
02.03Chọn một ý tưởng bằng hai trục: giá trị và khả năng→ 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.20 phút
02.04Đọc đối thủ qua trang store và review từ 1 đến 3 sao→ Đọ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.20 phút
02.05Phỏng vấn người dùng mà không bị khen xã giao→ 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.20 phút
02.06Tìm Aha moment của người dùng→ 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.15 phút
03.01Đừng để người dùng phải hỏi: “Giờ mình đi đâu?”Free→ 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.20 phút
03.02Onboarding đưa người dùng tới Aha moment nhanh nhất→ 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 đó.20 phút
03.03Khi nào app được phép ngắt nhịp người dùng?→ 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.20 phút
03.04Chuyển động và rung phản hồi có lý do→ 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ú ý.20 phút
03.05Màn hình dọc, ngang và tablet→ 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.20 phút
03.06Notification là một lời mời có lý do→ 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.20 phút
03.07Khi người dùng mất mạng→ 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.20 phút
03.08Backup, restore và đổi máy→ 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.20 phút
04.01Stack cho một người: KMP, Supabase, RevenueCat, Firebase→ 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.20 phút
04.02Feature flag và kill-switch: ship trước, bật sau→ 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.20 phút
04.03Event tracking có chủ đích→ 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.20 phút
04.04Crash làm mất niềm tin: theo dõi bằng Android vitals và Xcode Organizer→ 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.20 phút
04.05Tính năng AI cần người chịu trách nhiệm→ 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.20 phút
04.06Beta: closed testing trên Play và TestFlight→ 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.20 phút
04.07Phát hành theo giai đoạn trên Play và App Store→ 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.20 phút
05.01ASO cơ bản: tên app, mô tả ngắn, từ khóa→ 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.20 phút
05.02Store listing: icon, screenshot, video→ 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.20 phút
05.03Khai báo dữ liệu trên store: Data safety và App Privacy→ 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.20 phút
05.04Trẻ em không phải một thị trường bình thường→ 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ì.20 phút
05.05Qua vòng review của App Store và Google Play→ 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.20 phút
05.06Launch cohort đầu tiên: 50 người đúng thay vì 5.000 người ngẫu nhiên→ 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ọ.20 phút
06.01Các mô hình kiếm tiền: paid, freemium, subscription, IAP, ads→ 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.20 phút
06.02Thiết kế offer trước khi xây feature→ 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.20 phút
06.03Từ offer sang paywall: mời trả tiền đúng khoảnh khắc→ Đặ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õ.20 phút
06.04Định giá là giả thuyết: gói tháng và gói năm→ 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á.20 phút
06.05Free trial và ưu đãi giới thiệu→ 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.20 phút
06.06Một giao dịch phải đáng tin→ 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.20 phút
06.07Vòng đời subscription: gia hạn, grace period, hủy, hoàn tiền→ 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.20 phút
06.08Đọc tín hiệu doanh thu đầu tiên→ 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.20 phút
06.09Doanh thu không được phép phá niềm tin→ 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.20 phút
06.10Phí store, thuế và nhận tiền→ 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.20 phút
07.01Xin đánh giá đúng lúc→ 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.20 phút
07.02Trả lời review công khai→ 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.20 phút
07.03Support khi chỉ có một người→ 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.20 phút
07.04Vòng phản hồi: thu, phân loại, đóng vòng→ 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 ý.20 phút
07.05Retention: đọc cohort→ Đọ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.20 phút
07.06Churn của subscription và win-back→ 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.20 phút
07.07Bản kê dữ liệu và lời hứa với người dùng→ 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.20 phút
07.08Xóa tài khoản và dữ liệu→ 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ị.20 phút
08.01Phát hành bản cập nhật dựa trên bằng chứng→ 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.20 phút
08.02Retro theo giả thuyết: giữ, sửa hay bỏ→ 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.20 phút
08.03Build in public: chia sẻ gì, giữ lại gì→ 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.20 phút
08.04Chi phí vận hành của app một người→ 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.20 phút
08.05Giữ app sống lâu: SDK, target API, chính sách mới→ 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.20 phút
08.06Một app sâu hay nhiều app nhỏ→ 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.20 phút
00.01Cài đặt Git, JDK 17, Android Studio và SDKFreeTiếp theo→ 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.10 phút
00.02Clone Repo và Mở Project KMP Lần ĐầuFree→ Mở project Kotlin Multiplatform production thật thay vì một toy starter project.12 phút
00.03Checklist Tài Khoản Dịch VụFree→ 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.14 phút
00.04Setup Supabase SQL, Secrets Và FirebaseFree→ 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.18 phút
00.05Build, Test và Commit Đầu TiênFree→ Tạo checkpoint an toàn đầu tiên trước khi vào phần architecture.12 phút
00.06Chạy App Trên iOS (macOS + Xcode)Free→ 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.20 phút
01.01Đọc Module GraphFree→ Đọc project Kotlin Multiplatform như một hệ thống: module, chiều dependency và source set.6 phút
01.02Luồng Khởi Động Trên Android Và iOSFree→ 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.6 phút
01.03Feature Registration Và Navigation BoundariesFree→ 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.8 phút
01.04Trách Nhiệm Từng Layer Và Cách Đọc Tên FileFree→ Đừ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ó.7 phút
01.05Thay Đổi An Toàn Đầu TiênFree→ 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.10 phút
02.01Giải Phẫu Một Project KMPFree→ 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.15 phút
02.02Platform Seams: expect/actual Hay Interface + DIFree→ 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.15 phút
02.03iOS Host Và Swift InteropFree→ 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.18 phút
02.04Data Stack Đa Nền TảngFree→ 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ữ.15 phút
03.01Thiết Kế UI Model Bất Biến→ Mô hình hóa screen bằng state bất biến rõ ràng, rồi tự tay sửa state contract10 phút
03.02Quản lý User Intent Bằng Sealed Actions→ 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ả.10 phút
03.03Kiểm Soát Recomposition→ Vì sao Menu skip được recomposition: stability, strong skipping.8 phút
03.04Dựng Screen Compose Từ State→ Route sở hữu wiring, content composable chỉ render state. Và vì sao không gắn Toast vào state?12 phút
03.05Tái Sử Dụng Theme, UI Components→ Build UI mà không phá consistency, rồi tự nâng cấp, cập nhật token toàn app.10 phút
03.06Compose Multiplatform Resources Và Đa Ngôn Ngữ→ 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.15 phút
04.01Vì Sao Reducer Hữu Ích?→ Hiểu khi nào reducer tốt hơn UI logic nhiều nhánh.10 phút
04.02Thiết Kế State, Action, Effect Và AsyncOp→ Học vocabulary state-machine của app thông qua DRE Pattern.10 phút
04.03Đọc Reducer Thật Của Game State Machine→ Đọc reducer thật từ Game State Machine, lần theo action tới state mới, one-time effect và follow-up work.12 phút
04.04Wire ViewModel Với DRE Store→ Hiểu vai trò ViewModel trong DRE architecture pattern.12 phút
04.05Giữ Side Effects Bên Ngoài Reducer→ Giữ navigation, analytics, API calls và snackbar ở ngoài pure transitions.12 phút
05.01Use Case: Đơn Vị Nghiệp Vụ Của App→ Vì sao một hàm ngắn lại đáng để tạo một class riêng.11 phút
05.02Domain vs Data: Đâu Là Nơi Đặt Logic?→ 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?12 phút
05.03Clean Architecture Của Cú Tap Sign-In→ Trace auth từ nút bấm tới session, rồi sync profile.11 phút
05.04Cách Bạn Thay Đổi AI Provider Chỉ Với 1 Dòng Code→ Contract đúng chỗ thì đổi provider nhanh, dễ test, và không ảnh hưởng đến các module khác.12 phút
05.05Composition Root: Nơi Định Nghĩa Các Provider→ 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.10 phút
06.01Test Reducer Và Use Case→ Bắt đầu test ở nơi nhanh và có giá trị nhất.5 phút
06.02Test Flow Và ViewModel→ Test state emissions mà không cần tap UI thủ công.6 phút
06.03Shrink Và Protect Android Release Build→ Vì sao bản release Android không phải bản bạn đã test, và R8 thay đổi gì trong app.10 phút
06.04Bảo Vệ Secrets Trong Build (Android + iOS)→ Hiểu cách xử lý mobile secrets một cách thực tế, trên cả Android lẫn iOS.5 phút
06.05CI Cho KMP→ 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.12 phút
06.06Ship App iOS→ 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.15 phút
06.07Chạy Release Readiness Check→ 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.8 phút
07.01Clean Architecture Và Mô Hình 4 LớpFree→ 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.25 phút
07.02Cấu trúc Gradle Multi-Module→ Cấu trúc Gradle Multi-Module - Khóa học Mobile Action Pro25 phút
07.03Thiết Kế Dựa Trên Interface→ 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.25 phút
07.04Repository Pattern→ Repository Pattern - Khóa học Mobile Action Pro25 phút
07.05UseCase Pattern→ UseCase Pattern - Khóa học Mobile Action Pro25 phút
07.06Managers cho Complex Orchestration→ Managers cho Complex Orchestration - Khóa học Mobile Action Pro25 phút
07.07Data Flow Patterns→ Data Flow Patterns - Khóa học Mobile Action Pro25 phút
07.08Mapping Giữa Các Layers→ Mapping Giữa Các Layers - Khóa học Mobile Action Pro25 phút
07.09Best Practices & Anti-Patterns→ Best Practices & Anti-Patterns - Khóa học Mobile Action Pro25 phút
08.01DI Và Inversion of Control→ Constructor injection, Inversion of Control và composition root startSharedApp trên Android và iOS.25 phút
08.02Tổng quan Koin (Multiplatform)→ Koin trong app KMP: artifact theo module, :domain không có Koin, một graph appKoinModules cho hai platform.25 phút
08.03Koin DSL - module, single, factory→ Koin DSL - module, single, factory - Khóa học Mobile Action Pro25 phút
08.04Koin ViewModel Scope→ Koin ViewModel Scope - Khóa học Mobile Action Pro25 phút
08.05Dependency Resolution với get()→ Dependency Resolution với get() - Khóa học Mobile Action Pro25 phút
08.06Koin Trong Multi-Module: appKoinModules Và Core Module→ Mỗi Gradle module giữ Koin module của mình, appKoinModules ghép phần chung, QzDispatchers và ScopeQualifier ở module nền.25 phút
08.07Feature Module Pattern→ Feature Module Pattern - Khóa học Mobile Action Pro25 phút
08.08Đăng Ký Feature Tường Minh→ 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.25 phút
08.09ViewModel Injection trong Routes→ ViewModel Injection trong Routes - Khóa học Mobile Action Pro25 phút
08.10Testing Với Koin→ Test không cần Koin, vệ sinh startKoin/stopKoin, và AppGraphTest dựng toàn bộ graph trên Android và iOS.25 phút
09.01Migrate Một App Android Sang KMP→ 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.25 phút
Kotlin Accelerator Source CodeA modern Android trivia game inspired by Who Wants to Be a Millionaire?.
Built with Kotlin 2.3.0, Jetpack Compose 2025.12.01, Koin 4.1.1, and Supabase 3.2.6 backend for a seamless quiz experience with AI-powered lifelines, leaderboards, and persistent user profiles.
Flutter Cross Platform CodebsaeThe source follows a lightweight MVVM shape. Widgets render state, ViewModels coordinate user actions and async work, and repositories hide local persistence or Supabase details behind small contracts.
NEWTài liệu mới đang trên đường tớiCập nhật liên tụcTemplate, checklist, source mới sẽ xuất hiện ngay tại đây.