Skip to content

Rexosphere/LeoConnect

Repository files navigation

LeoConnect App Icon

LeoConnect 🦁

Uniting Leo Clubs, Amplifying Impact.

Download App Platform Built with KMP

LeoConnect is the premier social platform dedicated to Leo Club members across Sri Lanka. Built with Kotlin Multiplatform (KMP), it delivers a seamless experience on Android, iOS, and Desktop from a single codebase.


πŸš€ Tech Stack

Frontend (Mobile & Desktop)

  • Kotlin Multiplatform (KMP) - Single codebase for Android, iOS, Desktop
  • Jetpack Compose - Modern declarative UI framework
  • Material3 - Google's latest design system with dynamic theming
  • Voyager - Type-safe navigation
  • Kamel - Async image loading
  • Koin - Dependency injection
  • Haze - Glassmorphism blur effects

Backend (Edge-Deployed)

  • Cloudflare Workers - Serverless edge computing
  • D1 Database - SQLite at the edge
  • R2 Storage - Object storage for images
  • Firebase Auth - Google OAuth authentication
  • FCM - Push notifications

πŸ“± Screenshots


✨ Features

Social Networking

  • Social Feed - Personalized posts from clubs and Leos you follow
  • Post Creation - Share text and images with your community
  • Likes & Comments - Engage with posts from others
  • Share Posts - Spread inspiring content

Discovery

  • Club Discovery - Find and explore clubs by district
  • User Search - Find other Leo members
  • District Exploration - Browse all districts and their clubs

Community

  • User Profiles - Showcase your Leo journey
  • Following System - Follow users and clubs
  • Direct Messaging - Private conversations with other Leos

Notifications

  • Push Notifications - Real-time alerts for:
    • New followers
    • Post likes
    • Comments on your posts
    • New messages
    • Posts from people you follow

Security

  • Google OAuth - Secure authentication
  • Input Validation - Protected against malicious input
  • JWT Verification - Secure API access

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    LeoConnect Frontend                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚   Android   β”‚  β”‚     iOS     β”‚  β”‚   Desktop   β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚                    Kotlin Multiplatform                      β”‚
β”‚                    Jetpack Compose UI                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚ HTTPS
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 Cloudflare Workers (Edge)                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚  REST API   β”‚  β”‚   D1 (SQL)  β”‚  β”‚  R2 (Files) β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ API Endpoints

Endpoint Method Auth Description
/auth/google POST βœ“ Authenticate with Google
/feed GET βœ“ Get home feed
/posts POST βœ“ Create a post
/posts/:id/like POST βœ“ Like/unlike a post
/posts/:id/comments GET/POST βœ“ Get/add comments
/posts/:id/share POST βœ“ Share a post
/comments/:id/like POST βœ“ Like/unlike a comment
/users/:id GET βœ“ Get user profile
/users/:id/follow POST/DELETE βœ“ Follow/unfollow user
/clubs GET - List clubs by district
/clubs/:id/follow POST βœ“ Follow a club
/districts GET - List all districts
/search GET - Search users, clubs, posts
/messages GET/POST βœ“ Messaging
/notifications GET βœ“ Get notifications

πŸ“¦ Project Structure

LeoConnect/
β”œβ”€β”€ composeApp/
β”‚   └── src/
β”‚       β”œβ”€β”€ commonMain/          # Shared KMP code
β”‚       β”‚   └── kotlin/
β”‚       β”‚       └── com/rexosphere/leoconnect/
β”‚       β”‚           β”œβ”€β”€ data/          # Repositories, APIs
β”‚       β”‚           β”œβ”€β”€ domain/        # Models, Use cases
β”‚       β”‚           β”œβ”€β”€ presentation/  # Screens, ViewModels
β”‚       β”‚           β”œβ”€β”€ di/            # Koin modules
β”‚       β”‚           └── ui/theme/      # Material3 theming
β”‚       β”œβ”€β”€ androidMain/         # Android-specific
β”‚       └── iosMain/             # iOS-specific
β”œβ”€β”€ iosApp/                      # iOS app wrapper
└── assets/                      # App icons, resources

LeoConnect_Backend/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.ts                 # Main API routes
β”‚   β”œβ”€β”€ auth.ts                  # Firebase auth
β”‚   β”œβ”€β”€ models.ts                # Data models
β”‚   β”œβ”€β”€ helpers.ts               # Utility functions
β”‚   └── notifications.ts         # FCM push notifications
β”œβ”€β”€ migrations/                  # D1 database migrations
└── test/                        # Unit tests

πŸš€ Getting Started

Prerequisites

  • JDK 17+
  • Android Studio Hedgehog+ (for Android)
  • Xcode 15+ (for iOS)
  • Node.js 18+ (for backend)

Running the App

# Clone the repository
git clone https://github.com/Rexosphere/LeoConnect.git
cd LeoConnect

# Android
./gradlew :composeApp:assembleDebug

# Desktop
./gradlew :composeApp:run

# iOS (requires Mac)
open iosApp/LeoConnect.xcodeproj

Running the Backend

cd LeoConnect_Backend
npm install
npm run dev

🀝 Why LeoConnect?

🌍 Connect Across Sri Lanka

Break down geographical barriers. Discover clubs from other districts, follow their activities, and build a network of changemakers.

πŸ“’ Share Your Journey

Share updates, photos, and stories from your service projects. Inspire others with the incredible work happening in the Leo community.

πŸ“… Stay Updated

Never miss an event. Get real-time notifications for posts, messages, and follows.

πŸ“± Cross-Platform

One codebase, three platforms. Enjoy a beautiful, modern experience on Android, iOS, and Desktop.


πŸ“„ License

This project is developed for the AlgoArena Competition by the Leo Club of University of Sri Jayewardenepura.


πŸ‘₯ Team

Rexosphere - Development Team


Built with ❀️ for the Leo Community

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •