Skip to content

GDG-Nantes/DevfestNantesMobile

Repository files navigation

DevFest Nantes Mobile App

A Kotlin Multiplatform Mobile (KMM) application for the DevFest Nantes conference, providing attendees with schedules, speaker information, venue details, and more.

πŸ“± Download

Get the app from the official app stores:

πŸ—οΈ Project Architecture

This project uses Kotlin Multiplatform Mobile (KMM) to share business logic between Android and iOS while maintaining platform-specific UI implementations.

Module Structure

DevFestNantes/
β”œβ”€β”€ shared/                 # Shared business logic, models, and API clients
β”œβ”€β”€ shared-ui/             # Shared UI components and resources (experimental)
β”œβ”€β”€ androidApp/            # Android-specific UI and platform implementations
β”œβ”€β”€ iosApp/               # iOS-specific UI and platform implementations
β”œβ”€β”€ gradle/               # Gradle version catalog and wrapper
└── buildSrc/             # Build configuration and plugins

Technology Stack

Shared (Kotlin Multiplatform)

  • Kotlin Multiplatform for shared business logic
  • Apollo GraphQL for API communication
  • Kotlinx Coroutines for asynchronous programming
  • Kotlinx Serialization for JSON handling
  • KMP-NativeCoroutines for iOS coroutines integration

Android

  • Jetpack Compose for modern UI
  • Dagger Hilt for dependency injection
  • Navigation Component for app navigation
  • Material 3 design system
  • Firebase for analytics, crash reporting, and performance monitoring (with user consent)

iOS

  • SwiftUI for native iOS UI
  • Swift Package Manager for dependencies
  • iOS 15.0+ minimum deployment target

πŸš€ Quick Start

Prerequisites

  1. Android Development:

  2. iOS Development:

    • Xcode 15.0+
    • macOS 13.0+ (for iOS development)
    • iOS 15.0+ deployment target

Setup Instructions

  1. Clone the repository:

    git clone https://github.com/GDG-Nantes/DevfestNantesMobile.git
    cd DevfestNantesMobile
  2. Android Setup:

    # Open in Android Studio
    # The project should sync automatically
    
    # Or build from command line
    ./gradlew :androidApp:assembleDebug
  3. iOS Setup:

    # Generate the Kotlin framework for iOS
    ./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
    
    # Open iOS project in Xcode
    open iosApp/iosApp.xcodeproj
    
    # Build and run in Xcode or from command line
    xcodebuild -project iosApp/iosApp.xcodeproj -scheme iosApp -configuration Debug build

Development Workflow

  1. Shared Module Development: Make changes to business logic in the shared/ module
  2. Android UI: Implement Android-specific UI in androidApp/ using Jetpack Compose
  3. iOS UI: Implement iOS-specific UI in iosApp/ using SwiftUI
  4. Testing: Run platform-specific tests and shared module tests

For detailed setup instructions, see documentation/DEVELOPMENT.md.

πŸ›οΈ Architecture Overview

The app follows a clean architecture pattern with clear separation of concerns:

  • Data Layer (shared/): GraphQL client, repositories, and data models
  • Domain Layer (shared/): Business logic and use cases
  • Presentation Layer (platform-specific): ViewModels and UI components

Key Features

  • πŸ“… Event Schedule: Browse conference sessions by day, track, and time
  • 🎀 Speaker Profiles: Detailed speaker information and social links
  • πŸ“ Venue Information: Interactive venue maps and navigation
  • ⭐ Bookmarks: Save favorite sessions for easy access
  • πŸ”„ Offline Support: Cached data for offline viewing
  • 🌐 Multi-language: Support for French and English
  • πŸ”’ Privacy-First: User consent system for analytics and performance monitoring

πŸ”§ Dependencies & Tooling

Core Dependencies

  • GraphQL Server: Powered by Confetti
  • Feedback System: OpenFeedback.io integration
  • Analytics: Firebase Analytics, Crashlytics, and Performance Monitoring (respects user consent)
  • Version Management: Gradle version catalog (gradle/libs.versions.toml)

Versioning Strategy

The project uses Calendar Versioning (CalVer) with the YYYY.0M.MICRO format:

  • YYYY: Full year (e.g., 2025)
  • 0M: Zero-padded month (e.g., 07 for July)
  • MICRO: Patch version (e.g., 00)

This approach aligns releases with the DevFest Nantes conference schedule and provides clear timeline visibility. Version management is handled by project maintainers through GitHub releases.

Development Tools

  • Code Quality: Detekt for static analysis
  • Build System: Gradle with Kotlin DSL
  • Testing: JUnit, KMM test framework
  • CI/CD: GitHub Actions (configuration in .github/)

πŸ”„ Updating GraphQL Schema

See documentation/DEVELOPMENT.md for instructions on updating your local schema.graphqls file using the Apollo Gradle plugin and custom headers.

πŸ§ͺ Testing

The project includes comprehensive testing at multiple levels:

  • Unit Tests: Business logic testing in the shared module
  • Platform Tests: Android and iOS specific testing
  • Integration Tests: End-to-end feature testing

Run tests with:

# All tests
./gradlew test

# Android tests
./gradlew :androidApp:testDebugUnitTest

# Shared module tests
./gradlew :shared:test

🀝 Contributing

We welcome contributions! Please see our contribution guidelines for details on:

  • Setting up your development environment
  • Code style and conventions
  • Submitting pull requests
  • Reporting issues

Quick Contribution Checklist

  • Follow the established coding standards (see .github/copilot-instructions.md)
  • Add tests for new features
  • Update documentation as needed
  • Use conventional commit messages

πŸ“š Documentation

οΏ½ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

This project is adapted from the Android Makers app:

Special thanks to the GDG Nantes community and all contributors who make this project possible.

About

KMM Mobile repo for the Android and iOS mobile app of the DevFest Nantes.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 5