One Language. One Codebase. 5 Apps.
Master Kotlin & Compose Multiplatform development by building an industry-scale multi-module chat app in over 170 video lessons
Offline-first
Real-time communication
Authentication
After This Course, You Will…
Confidently build apps for 5 platforms
With just Kotlin, you will be able to build five production-grade Kotlin Multiplatform apps – targeting Android, iOS, Windows, MacOS & Linux.
Understand advanced KMP architecture
These courses not only focus on building a solid software architecture from scratch, but teaching you in a way that you truly understand why architectural decisions are made the way they are.
Truly understand the technologies that matter in the industry
The chat app you’ll learn to build intentionally includes all those technologies that truly matter for the vast majority of apps in the industry.
Build a 100% Responsive Chat App From Scratch
This is Chirp – a multi-module chat app you’ll learn to build with Kotlin & Compose Multiplatform


Covers Everything the Industry Demands.
Philipp Lackner’s quality standard is to not only cover what you need in the real world, but also involve you into his own thought process behind every single of 20,000 lines of Kotlin code.
Software Architecture
Learn about the fundamentals of app development architecture and find out how you can come up with your own patterns.
KMP & CMP Internals
Truly understand how KMP & CMP work under the hood to be able to better understand what you can do when things go wrong.
Multi-Module Architecture With Gradle
You’ll still have to fight Gradle – but after finishing this course bundle you’ll know how to do so without giving up.
100% Responsive UI
Transform professional Figma mockups into a reusable custom design system in Compose Multiplatform – 100% responsive with light & dark theme.
Networking
Master making HTTP requests from the client as well as properly handling these incoming requests on the server side.
Authentication & Session Management
Understand how you can implement a registration & login system with forgot password and email verification functionality.
Offline-First Development
Implement a local database with multiple tables and relations to make the entire client app work in offline-mode.
WebSockets
Establish a real-time connection between server & client to notify each other about new chat mesages and other important updates instantly.
Deeplinking
Learn to let clicks on URLs open your client app directly from the browser – very useful for email verification or reset password links.
Photo Picking & Uploads
Implement native photo pickers in the client apps and upload these to the server.
Server side, you will truly understand efficient remote file storage.
Push Notifications
Use the Firebase Admin SDK to send push notifications to Android & iOS devices when new chat messages arrive.
On all desktop platforms, you’ll implement native local notifications.
Pagination
Both server and client will follow a pagination approach to only load the data the client actually needs to display.
These 185 Videos Are Waiting for You
Get Instant Access to 34+ Hours of Exclusive Video Material

1. Introduction
- Prerequisites
- The Right Order to Watch
- How You Get the Most Out of This Course
- What We’ll Build
2. Kotlin Multiplatform Theory
- What is Kotlin Multiplatform?
- What is Compose Multiplatform?
- KMP & Native Apps
- How KMP Compiles Down to Targets
- How CMP Works Under the Hood
- KMP vs. Flutter vs. React Native
3. Architecture Theory
- Separation of Concerns
- What is a Module?
- Kotlin Multiplatform Modules
- Advantages of Multi-Module Architecture
- Multi-Module Architecture Isn’t a General Best Practice
- Which Modularization Strategy to Choose?
- Finding the Sweet Spot Between Modular Design & Low Complexity
- Use Cases – yes or no?
- Single-Responsibility Principle
- Open-Closed Principle Principle
- Liskov-Substitution Principle
- Interface-Segregation Principle
- Dependency-Inversion Principle
4. Gradle & Multi-Module Architecture Setup
- Project Setup
- KMP Project Roundtrip
- Gradle Challenges in a Multi-Module Project
- Version Catalog Setup
- Creating the KMP Module Structure
- Defining the Module Relations
- Creating the build-logic Module
- Creating the build-logic Module
Creating the Convention Plugins
- Android Application Convention Plugin
- Android Application Compose Convention Plugin
- CMP Application Convention Plugin
- KMP Library Convention Plugin
- CMP Feature Convention Plugin
- BuildKonfig Convention Plugin
- Room Convention Plugin
5. Setting Up Project-Wide Utility
- Result Wrapper
- String Resource Management
- Observing One-Time Events In Compose
- Material3 Theme Setup
- HttpClient Result Handling
- HttpClient Network Call Utility
- HttpClienFactory
- Device Configuration for Responsive UIs
6. Authentication Feature
- Core Buttons
- Icon Buttons
- Floating Action Buttons
- Normal Text Fields
- Password Text Fields
- Core Surface
- Form Adaptive Layout
- Adaptive Result Layout
- Simple Success Layout
- Snackbar Scaffold
Registering Accounts & Email Verification
- Register Screen Skeleton
- Register Screen UI
- Validate Register Form Fields
- Register API Endpoints
- Handling Registration in RegisterViewModel
- Koin DI Setup
- Fixing Small Register Errors
- Register Success Screen UI
- Navigation Setup
- Resending Verification Emails
- Email Verification Screen UI
- Verifying Emails
- Deep Linking to Verification Screen
Logging in
- Login Screen UI
- Logging In Users
- Storing Sessions
- Token Refresh Mechanism
- Splash Screen Setup on Android
- Splash Screen Setup on iOS
- Staying Logged In Functionality
- Handling Expired Sessions
Forgot & Reset Password Functionality
- Forgot Password Screen UI
- Triggering Forgot Password Emails
- Reset Password Screen UI
- Resetting Passwords
Small Improvements & Fixes
- Clearing Focus on Tap
- Fixing Window Insets
7. Chat Feature
- Chat Bubble UI
- Multi-Line Layout
- Avatar Photo UI
- Stacked Avatars UI
- Confirmation Dialog
- Bottom Sheet Wrapper
- Dialog Content Wrapper
- Adaptive Dialog Sheet Layout
Creating Chats
- Implementing the Chat Domain Models
- Dialog-Scoped ViewModels
- Chat List Detail Adaptive Layout
- Create Chat Adaptive Dialog
- Small UI Fixes
- Searching & Adding Participants
- Create Chat Logic
Chat List Screen UI
- Chat List Item UI
- Chat List Header UI
- Chat List Screen UI
Chat Detail Screen UI
- Chat Message List Item UI
- Chat Detail Header UI
- Date Chip UI
- Message Box UI
- Message List Content UI
- Putting It All Together
Multi-Table Chat Database Setup
- Creating the DB Schema
- Chat DAO
- Chat Message DAO
- Chat Participant DAO
- Chat & Participant Relation DAO
- Last Message Database View
- Wiring It All Together
Chat Management
- Fetching & Caching Chats In DB
- Fetching a Single Chat
- Small Chat UI Fixes
- Caching Created Chats
- Leaving a Chat
- Manage Chat Adaptive Dialog
- Adding Participants to a Chat
- Empty Chat Pane Fixes
Web Socket Connection
- App Lifecycle Observer
- Connectivity Observer
- Connection Error Handler
- Connection Retry Handler
- Web Socket Connector
- Sending Web Socket Messages
- Parsing Received Web Socket Messages
Chat Message Management
- Fetching & Caching Messages
- Sending Messages
- Small Message Fixes
- Retrying Failed Deliveries
- Deleting Messages
- Building the Paginator
- Paginating Chat Messages
- Pagination Scroll Listener & Retries
- Grouping Messages By Date
- Maintaining the Message Date Banner
Profile Management
- Profile Adaptive Dialog UI
- Changing the Password
- Displaying User Data
- Image Picking on Android
- Image Picking on iOS
- Uploading the Picked Image
- Deleting the Profile Picture
Push Notifications
- Requesting Notification Permission
- Push Notifications on Android
- Push Notifications on iOS
Logging Out
- Logging Out
Final Bug Fixes
- Message Field Improvements
8. Desktop App (Optional Add-On)
- Demo of the Final App
- Native Desktop Development vs. JVM
- Configuring the Desktop Target
Features
- Persistence on Desktop
- Smart Source Set Management for JVM
- Monitoring Connectivity
- File Picking and Drag & Drop
- Window Management Fundamentals
- Menu Bar & Keyboard Shortcuts
- Creating the Tray Icon & Theme Preference Menu
- Implement Desktop Notifications
- Keyboard Shortcut for Sending Messages
- Deep Linking Preparations
Distribution
- Virtual Machine Setup
- Conveyor Installation
- Conveyor Setup & MacOS Distribution
- Windows Distribution
- Linux Distribution
1. Introduction
- Prerequisites
- The Right Order to Watch
- How You Get the Most Out of This Course
- What We’ll Build
2. Kotlin Multiplatform Theory
- What is Kotlin Multiplatform?
- What is Compose Multiplatform?
- KMP & Native Apps
- How KMP Compiles Down to Targets
- How CMP Works Under the Hood
- KMP vs. Flutter vs. React Native
3. Architecture Theory
- Separation of Concerns
- What is a Module?
- Kotlin Multiplatform Modules
- Advantages of Multi-Module Architecture
- Multi-Module Architecture Isn’t a General Best Practice
- Which Modularization Strategy to Choose?
- Finding the Sweet Spot Between Modular Design & Low Complexity
- Use Cases – yes or no?
- Single-Responsibility Principle
- Open-Closed Principle Principle
- Liskov-Substitution Principle
- Interface-Segregation Principle
- Dependency-Inversion Principle
4. Gradle & Multi-Module Architecture Setup
- Project Setup
- KMP Project Roundtrip
- Gradle Challenges in a Multi-Module Project
- Version Catalog Setup
- Creating the KMP Module Structure
- Defining the Module Relations
- Creating the build-logic Module
- Creating the build-logic Module
Creating the Convention Plugins
- Android Application Convention Plugin
- Android Application Compose Convention Plugin
- CMP Application Convention Plugin
- KMP Library Convention Plugin
- CMP Feature Convention Plugin
- BuildKonfig Convention Plugin
- Room Convention Plugin
5. Setting Up Project-Wide Utility
- Result Wrapper
- String Resource Management
- Observing One-Time Events In Compose
- Material3 Theme Setup
- HttpClient Result Handling
- HttpClient Network Call Utility
- HttpClienFactory
- Device Configuration for Responsive UIs
6. Authentication Feature
- Core Buttons
- Icon Buttons
- Floating Action Buttons
- Normal Text Fields
- Password Text Fields
- Core Surface
- Form Adaptive Layout
- Adaptive Result Layout
- Simple Success Layout
- Snackbar Scaffold
Registering Accounts & Email Verification
- Register Screen Skeleton
- Register Screen UI
- Validate Register Form Fields
- Register API Endpoints
- Handling Registration in RegisterViewModel
- Koin DI Setup
- Fixing Small Register Errors
- Register Success Screen UI
- Navigation Setup
- Resending Verification Emails
- Email Verification Screen UI
- Verifying Emails
- Deep Linking to Verification Screen
Logging in
- Login Screen UI
- Logging In Users
- Storing Sessions
- Token Refresh Mechanism
- Splash Screen Setup on Android
- Splash Screen Setup on iOS
- Staying Logged In Functionality
- Handling Expired Sessions
Forgot & Reset Password Functionality
- Forgot Password Screen UI
- Triggering Forgot Password Emails
- Reset Password Screen UI
- Resetting Passwords
Small Improvements & Fixes
- Clearing Focus on Tap
- Fixing Window Insets
7. Chat Feature
- Chat Bubble UI
- Multi-Line Layout
- Avatar Photo UI
- Stacked Avatars UI
- Confirmation Dialog
- Bottom Sheet Wrapper
- Dialog Content Wrapper
- Adaptive Dialog Sheet Layout
Creating Chats
- Implementing the Chat Domain Models
- Dialog-Scoped ViewModels
- Chat List Detail Adaptive Layout
- Create Chat Adaptive Dialog
- Small UI Fixes
- Searching & Adding Participants
- Create Chat Logic
Chat List Screen UI
- Chat List Item UI
- Chat List Header UI
- Chat List Screen UI
Chat Detail Screen UI
- Chat Message List Item UI
- Chat Detail Header UI
- Date Chip UI
- Message Box UI
- Message List Content UI
- Putting It All Together
Multi-Table Chat Database Setup
- Creating the DB Schema
- Chat DAO
- Chat Message DAO
- Chat Participant DAO
- Chat & Participant Relation DAO
- Last Message Database View
- Wiring It All Together
Chat Management
- Fetching & Caching Chats In DB
- Fetching a Single Chat
- Small Chat UI Fixes
- Caching Created Chats
- Leaving a Chat
- Manage Chat Adaptive Dialog
- Adding Participants to a Chat
- Empty Chat Pane Fixes
Web Socket Connection
- App Lifecycle Observer
- Connectivity Observer
- Connection Error Handler
- Connection Retry Handler
- Web Socket Connector
- Sending Web Socket Messages
- Parsing Received Web Socket Messages
Chat Message Management
- Fetching & Caching Messages
- Sending Messages
- Small Message Fixes
- Retrying Failed Deliveries
- Deleting Messages
- Building the Paginator
- Paginating Chat Messages
- Pagination Scroll Listener & Retries
- Grouping Messages By Date
- Maintaining the Message Date Banner
Profile Management
- Profile Adaptive Dialog UI
- Changing the Password
- Displaying User Data
- Image Picking on Android
- Image Picking on iOS
- Uploading the Picked Image
- Deleting the Profile Picture
Push Notifications
- Requesting Notification Permission
- Push Notifications on Android
- Push Notifications on iOS
Logging Out
- Logging Out
Final Bug Fixes
- Message Field Improvements
8. Desktop App (Optional Add-On)
- Demo of the Final App
- Native Desktop Development vs. JVM
- Configuring the Desktop Target
Features
- Persistence on Desktop
- Smart Source Set Management for JVM
- Monitoring Connectivity
- File Picking and Drag & Drop
- Window Management Fundamentals
- Menu Bar & Keyboard Shortcuts
- Creating the Tray Icon & Theme Preference Menu
- Implement Desktop Notifications
- Keyboard Shortcut for Sending Messages
- Deep Linking Preparations
Distribution
- Virtual Machine Setup
- Conveyor Installation
- Conveyor Setup & MacOS Distribution
- Windows Distribution
- Linux Distribution

Philipp Lackner has over 14 years of experience in the software field. Over the past years, he built a following of over 250,000 developers on social media who trust his work. With over 20,000 sold copies of his courses and 700h+ spent for teaching Android concepts, he already helped hundreds of thousands people to learn practical skills they can immediately apply.
He has a degree in computer science, however it didn’t go as expected. The amount of theory that was taught in university made him think about a better approach to learn what is really needed in the real world. Over time, Philipp found mentors who taught him exactly that in a practical setting. That was the game changer for his career.
After having worked for dozens of companies around the globe as a consultant, Philipp now wants to teach other mobile developers what really counts for becoming an outstanding developer.

He has a degree in computer science, however it didn’t go as expected. The amount of theory that was taught in university made him think about a better approach to learn what is really needed in the real world. Over time, Philipp found mentors who taught him exactly that in a practical setting. That was the game changer for his career.
After having worked for dozens of companies around the globe as a consultant, Philipp now wants to teach other mobile developers what really counts for becoming an outstanding developer.
800H+
of Created Kotlin content
15,000+
Enrolled Students
14
Years of Software dev
What People Say About Philipp’s Courses
















The Full Offer at a Glance
Make a one-time investment for lifetime access to

Building Industry-Level Compose Multiplatform Android & iOS Apps
-
Lifetime access to 170 video lessons spanning over 30h
-
Access to all professionally designed Figma mockups
-
Access to homework & extensions in the Figma design to practice developing more features
-
12-month access to Chirp API hosted by PL Coding
-
Certificate awarded after completion
+

Building Industry-Level Compose Multiplatform Desktop Apps
Available as an optional add-on
-
Lifetime access to 21 video lessons spanning over 4h
-
Access to all professionally designed Figma mockups
-
Access to homework & extensions in the Figma design to practice developing more features
-
Certificate awarded after completion
Total value: 399 EUR
Launch Deal: 229 EUR
30% PL Coding Early-Bird Discount: -70 EUR
Early Bird Deal: 159 EUR
55h of video material
30-day money-back guarantee
300+ video lessons
Approved by JetBrains
Total value:
399 EUR
Launch Deal:
229 EUR
30% PL Coding Early-Bird Discount:
-70 EUR
Early Bird Deal:
159 EUR
55h of video material
30-day money-back guarantee
300+ video lessons
Approved by JetBrains
30% Extra Discount on ALL Courses & Bundles
Discount already applied in checkout. Only during the launch week of the new Kotlin Full-Stack Developer Bundle.
Day(s)
:
Hour(s)
:
Minute(s)
:
Second(s)
FAQ
What are the prerequisites to take this course?
The prerequisites are understanding basic concepts of the following technologies:
- Kotlin
- Jetpack Compose
- Optional: KMP basics
Even if you don’t yet know the basics of these technologies, the courses will outline a roadmap of free resources from PL Coding to get on a level to proceed with this bundle.
Will I get a certificate on completion?
What does "in collaboration with JetBrains" mean?
We’ve collaborated with JetBrains – the makers of Kotlin Multiplatform itself – to create this course. This means the entire course bundle has been reviewed and approved by JetBrains’ KMP developer advocates – those people who fundamentally contributed to the technology itself.
Is there a money back guarantee?
Just as for all of our courses, you get a voluntary 30-day money back guarantee in case you’re not satisfied with the course content.
Do I get lifetime access?
Yes, it’s a one-time investment into your career to keep access to the course and updates in future.