- Kotlin 97.4%
- Ruby 2.1%
- Swift 0.5%
| composeApp | ||
| docs | ||
| gradle | ||
| iosApp/iosApp | ||
| shared | ||
| .gitignore | ||
| build.gradle.kts | ||
| claude.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| MIGRATION_COMPLETE.md | ||
| README.md | ||
| settings.gradle.kts | ||
QuickRead - Cross-Platform RSS Reader
A unified RSS reader for Android and iOS built with Kotlin Multiplatform Compose.
Features
- ✅ RSS 0.9, RSS 2.0, and Atom feed support
- ✅ Cross-platform (Android & iOS)
- ✅ Material 3 design with dark/light themes
- ✅ Real-time feed fetching and parsing
- ✅ Article tracking (read/unread status)
- 🚧 Google Drive sync (coming soon)
- 🚧 Adaptive layouts for tablets/foldables (coming soon)
Architecture
QuickRead/
├── shared/ # Kotlin Multiplatform shared code
│ ├── domain/ # Business logic & models
│ ├── data/ # Repositories & parsers
│ └── Platform.kt # Platform-specific implementations
├── composeApp/ # Compose Multiplatform UI
│ ├── ui/ # Screens, ViewModels, Theme
│ └── App.kt # Main app entry point
└── iosApp/ # iOS app wrapper
Building the Project
Prerequisites
- JDK 11 or higher
- Android Studio Hedgehog or later
- Xcode 15+ (for iOS)
- No CocoaPods needed - Uses Swift Package Manager (SPM)
Gradle Wrapper
The project includes the Gradle wrapper (gradlew and gradlew.bat) which allows you to build without installing Gradle separately. The wrapper files are:
gradlew(Unix/macOS/Linux)gradlew.bat(Windows)gradle/wrapper/gradle-wrapper.jargradle/wrapper/gradle-wrapper.properties
Android
./gradlew :composeApp:assembleDebug
Or open the project in Android Studio and run directly.
iOS
Using Swift Package Manager (SPM) - No CocoaPods required!
The iOS app is configured to use the Kotlin framework directly via Xcode build scripts.
- Open the Xcode project:
open iosApp/iosApp.xcodeproj
- Build and run from Xcode
The Xcode build will automatically:
- Use
./gradlewto build the shared Kotlin framework - Link the framework to the iOS app
- No manual dependency installation needed!
Testing Feed Fetching
The app now includes full feed fetching functionality. Try these test feeds:
RSS 2.0 Feeds
https://rss.nytimes.com/services/xml/rss/nyt/Technology.xml- NY Times Techhttps://feeds.arstechnica.com/arstechnica/index- Ars Technicahttps://www.theverge.com/rss/index.xml- The Verge
Atom Feeds
https://github.blog/feed/- GitHub Bloghttps://blog.google/rss/- Google Blog
How to Test
-
Launch the app on Android or iOS
-
Tap the + button to add a feed
-
Enter one of the feed URLs above
-
The app will:
- Fetch the feed content
- Auto-detect the feed type (RSS 0.9, 2.0, or Atom)
- Parse articles and display them
- Show article count and unread badges
-
Use the refresh button to update all feeds
Feed Parsing
The app supports three feed formats:
RSS 0.9 & 2.0
- Parses:
<title>,<link>,<description>,<pubDate>,<author> - Supports: Images via
<enclosure>tags - Content: Extracts from
<content:encoded>or falls back to<description>
Atom
- Parses:
<title>,<link>,<summary>,<published>,<author> - Supports: Images via
<media:thumbnail>tags - Content: Extracts from
<content>or falls back to<summary>
Tech Stack
- Framework: Kotlin Multiplatform 2.0.21
- UI: Compose Multiplatform 1.7.1
- Networking: Ktor 3.0.0
- Serialization: Kotlinx Serialization 1.7.3
- Coroutines: Kotlinx Coroutines 1.9.0
- Date/Time: Kotlinx DateTime 0.6.1
Current State
✅ Implemented
- Kotlin Multiplatform project structure
- RSS/Atom feed parser (supports RSS 0.9, 2.0, Atom)
- HTTP client with Ktor
- ViewModel with state management
- Feed list UI with loading/error states
- Add feed functionality
- Refresh feeds functionality
- Article count and unread badges
- Material 3 theming (light/dark)
🚧 Coming Soon
- Google Drive synchronization
- Adaptive layouts (phone/tablet/foldable)
- Article detail view
- Feed search and discovery
- Offline support
- Background refresh
- Feed categories
Development
Running Tests
./gradlew test
Code Style
The project follows Kotlin coding conventions and uses:
- Coroutines for async operations
- StateFlow for state management
- Clean Architecture principles
- MVVM pattern for UI layer
License
Copyright © 2024 Teviot