UoATech is a Kotlin Multiplatform application designed for students at the University of Auckland. It aggregates upcoming events from various tech clubs across the university, providing a single, convenient list for students to stay informed about workshops, talks, and networking opportunities.
- Event Aggregation: Automatically fetches events from multiple tech club websites (e.g., DEVS).
- Unified List: Displays all upcoming events in a clean, searchable, and easy-to-read interface.
- Multiplatform Support: Available on Android, iOS, and Web.
- Detailed Event Information: Shows event name, hosting club, date, time, location, and description.
This project is built using Compose Multiplatform and follows a standard Kotlin Multiplatform structure:
/composeApp: Contains shared code for all platforms.commonMain: Core logic, data models, and UI components.androidMain,iosMain,webMain: Platform-specific implementations and entry points.
/iosApp: The iOS-specific Xcode project and SwiftUI entry point.
- Kotlin Multiplatform (KMP): For sharing business logic across platforms.
- Compose Multiplatform: For building a shared UI.
- Ktor: Used for making asynchronous network requests to fetch event data.
- Kotlinx Serialization: For parsing JSON data from club APIs.
- Kotlinx Coroutines & Flow: For reactive and asynchronous data handling.
- Kotlinx Datetime: For consistent date and time management.
The app uses a "Scraper" architecture to fetch data from different sources. Each tech club has a corresponding EventScraper implementation (e.g., DevsScraper) that:
- Fetches data from the club's website or API.
- Parses the data into a common
Eventmodel. - Filters out past events.
The API object coordinates these scrapers to provide a unified flow of events to the UI.
- Android Studio or IntelliJ IDEA
- Xcode (for iOS development)
- JDK 17 or higher
To build and run the development version of the Android app, use the run configuration from the IDE or run from the terminal:
- Windows:
.\gradlew.bat :composeApp:assembleDebug - macOS/Linux:
./gradlew :composeApp:assembleDebug
The web app supports both Wasm and JS targets:
- Wasm (Modern browsers):
.\gradlew.bat :composeApp:wasmJsBrowserDevelopmentRun - JS (Broad compatibility):
.\gradlew.bat :composeApp:jsBrowserDevelopmentRun
Use the run configuration in your IDE or open the /iosApp directory in Xcode.
Learn more about Kotlin Multiplatform and Compose Multiplatform.
This project is licensed under the MIT License.