A modern, aesthetic food‑delivery app built with Kotlin Multiplatform and a single, shared Compose Multiplatform UI for Android & iOS. 🚀
Pepto is a Zomato‑style food‑delivery front end with a clean, modern interface — a gradient location header, search bar, food categories, a "Popular near you" carousel and restaurant cards with ratings, delivery times and prices. It loads data from an API and caches it in a local SQLite database, so content stays available offline and remote/local data stay in sync.
Features
- 🎨 Modern, aesthetic food‑delivery UI (Zomato‑style)
- 📱 One shared Compose UI across Android & iOS
- 📵 Offline capability (SQLite cache)
- 🌓 Dark mode
- ✨ Pull‑to‑refresh & shimmer loading
The network API is a dummy (fixed) response, statically hosted here.
Pepto runs from the same Compose codebase on both platforms. Here's the home feed on Android and the restaurant detail screen on iOS:
| Android Home feed |
iOS Restaurant detail |
💡 The images above are crafted mockups of the actual screens. To swap in real screenshots or an inline demo video, see Adding your own demo media.
Add your Android / iOS demo video here — see the guide below.
- Kotlin — Programming language
- Kotlin Multiplatform — Multi‑platform apps from a single codebase
- Compose Multiplatform — Shared UI for Android & iOS
- Coroutines — Multithreading
- Kotlinx Serialization — JSON serialization/deserialization
- Ktor Client — HTTP requests & iOS image loading
- SQLDelight — Local database / offline cache
- Coil — Image loading on Android
- Mutekt — UI state management
- Refer to the "Setting up environment" section of the Compose Multiplatform template.
- Clone this repository and open it in Android Studio (Electric Eel or newer).
- Build the project 🔨 and confirm everything works.
- Run the app:
- Select
androidAppas the run configuration → run the Android app. - Select
iosApp(or use Xcode) → run the iOS app.
- Select
This Compose Multiplatform project includes three modules:
| Module | Description |
|---|---|
shared |
Kotlin module with all shared logic and the shared Compose UI. The app's root @Composable lives in shared/src/commonMain/kotlin/App.kt. Builds into an Android library and an iOS framework. |
androidApp |
Builds the Android application; depends on shared as a regular Android library. |
iosApp |
Xcode project that builds the iOS application; depends on shared as a CocoaPods dependency. |
Want real captures instead of (or alongside) the mockups? Here's the full recipe.
Hero banner (the front image):
- It's
readme-media/graphic.svg— edit the text/colours directly, or replace the<img src="readme-media/graphic.svg" .../>line at the top with your own image.
Screenshots:
| Platform | Capture command |
|---|---|
| Android | adb exec-out screencap -p > readme-media/pepto-android.png |
| iOS (Simulator) | xcrun simctl io booted screenshot readme-media/pepto-ios.png |
Then point the <img> tags in the Preview table at your new .png files.
Demo video (this is what plays inline):
- Record the screen
- Android:
adb shell screenrecord /sdcard/demo.mp4→adb pull /sdcard/demo.mp4 - iOS Simulator:
xcrun simctl io booted recordVideo demo.mov
- Android:
- GitHub does not play repo‑hosted
.mp4files inline. Instead, open any issue / PR / the README editor on github.com and drag‑and‑drop your video into the text box. - GitHub uploads it and inserts a
https://user-images.githubusercontent.com/….mp4link — paste that under▶️ Demo video and it renders as an inline player. 🎬
Contributions are always welcome! See Contributing Guidelines.
Questions, doubts or opinions? You're always welcome to start a discussion.
- JetBrains/compose-multiplatform-ios-android-template — Starter template
- google/accompanist — Placeholder (shimmer) APIs
Copyright 2026 Aditya Kumar
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.