KodeShell š
Your All-in-One Competitive Programming Companion
A comprehensive Android mobile application that unifies contest management, progress tracking, and community engagement across multiple competitive programming platforms.
š Table of Contents
- Overview
- Key Features
- Platform Integrations
- Technical Architecture
- Features Breakdown
- Technologies Used
- Installation
- Project Structure
- Screenshots
- Future Enhancements
- Contributing
- License
šÆ Overview
KodeShell is an Android mobile application originally developed for the CSE-2216 Application Development Lab. It addresses a common pain point for competitive programmers: the need to navigate multiple websites to track contests, submissions, and connect with the community.
Problem Statement
Competitive programmers typically juggle between Codeforces, LeetCode, AtCoder, and other platforms to:
- Track upcoming contests
- Monitor submission history
- View profile statistics
- Connect with other programmers
Solution
KodeShell provides a unified dashboard that aggregates all this information in one place, plus adds social networking features specifically designed for the competitive programming community.
⨠Key Features
š Contest Management
- Unified Contest Calendar: View upcoming contests from Codeforces, LeetCode, and AtCoder in a single feed
- Smart Reminders: Set custom alarms for contests you want to participate in
- Instant Notifications: Get notified before contests begin
- Contest Details: Direct access to contest links, duration, and timing information
- Contest Insider: Detailed view of each contest with registration links
š¤ Multi-Platform Profile Integration
- Codeforces Integration: View user info, rating, rank, and last 10 submissions
- LeetCode Integration: Display solve statistics, contest rankings, and problem-solving history
- AtCoder Integration: Track contest participation and performance metrics
- Unified Profile View: See all your competitive programming stats in one place with tabbed interface
- Profile Linking: Connect your handles from all three platforms
š± Social & Community Features
- News Feed: Community-driven content with post creation and sharing
- Real-time Messaging: One-on-one chat with other programmers to discuss problems
- Comment System: Engage in discussions on posts with threaded comments
- Upvote/Downvote: Reddit-style voting system for posts
- User Discovery: Search for programmers by their platform handles
- Stalk Feature: View other users' complete profiles and submission history across all platforms
- User Directory: Browse all registered users on KodeShell
š Authentication & User Management
- Email/Password Authentication: Traditional signup and login
- Google OAuth: Quick sign-in with Google account
- Two-Step Registration: Comprehensive profile setup (personal info + platform handles)
- OTP Verification: Phone number verification for enhanced security
- Password Recovery: Forgot password with email-based reset
- Profile Customization: Choose from 12 different avatar options
- Edit Profile: Update personal information, status message, and linked platform handles
š Notification System
- Contest Reminders: Custom alarm system using Android AlarmManager
- Exact Timing: Schedule notifications with precise timing before contests
- Wake Lock: Ensures notifications work even when device is asleep
- Push Notifications: Real-time updates for messages and community activities
š Submission Tracking
- Recent Submissions: View your last 10 Codeforces submissions with verdict and problem details
- Submission History: Track problem-solving progress across platforms
- Detailed View: See submission time, language, verdict, and problem information
- Time Parsing: Local time zone conversion for accurate submission timestamps
š Platform Integrations
Codeforces API
- Implementation:
CodeforcesAPIHelper.java - API Library: Android Volley
- Features Integrated:
- User information (rating, rank, contribution)
- Submission history (last N submissions)
- Upcoming contests list
- Contest details
LeetCode GraphQL API
- Implementation:
LeetcodeAPIHelper.java - API Library: OkHttp3
- Features Integrated:
- User profile statistics
- Problem-solving progress
- Contest rankings
- Submission counts by difficulty
AtCoder API
- Implementation:
AtcoderAPIHelper.java - API Library: OkHttp3
- Data Source: Kontests.net API for contest schedules
- Features Integrated:
- Contest calendar
- User statistics
- Participation history
šļø Technical Architecture
Architecture Pattern
- MVC (Model-View-Controller): Traditional Android architecture
- Fragment-based Navigation: Bottom navigation with 5 main sections
- ViewPager: Tabbed interfaces for profile views
Backend Services
- Firebase Realtime Database:
- User profiles storage
- Posts and comments
- Real-time messaging
- Contest reminders
- Firebase Authentication: User auth management
- Firebase Storage: Avatar and media storage (if implemented)
Networking Layer
- Volley: HTTP requests for Codeforces API
- OkHttp3: Advanced HTTP client for LeetCode and AtCoder
- JSON Parsing: Native Android JSON handling
UI/UX Components
- Material Design: Material Toolbar, BottomNavigationView, TextInputLayout
- RecyclerView: Efficient list rendering for posts, contests, messages
- CardView: Modern card-based UI elements
- ViewPager2: Smooth tab navigation in profiles
- SwipeRefreshLayout: Pull-to-refresh functionality
- CircleImageView: Circular profile avatars
- DrawerLayout: Navigation drawer for profile section
š¦ Features Breakdown
1. Authentication Flow
Activities: LoginActivity, SignupActivity1, SignupActivity2, OtpActivity, ForgotPasswordActivity, ResetPasswordActivity
- Two-step registration process:
- Step 1: Personal information (name, email, password, phone)
- Step 2: Platform handles (Codeforces, LeetCode, AtCoder)
- Phone number verification via OTP
- Password reset via email
- Google OAuth integration
- Session management with Firebase Auth
2. Main Navigation
Activity: MainActivity
Bottom Navigation Sections:
-
Home (
HomeFragment)- Social feed with posts
- Quick access to messaging
- Search users functionality
- Create new posts
-
News (
NewsFragment)- Community news and announcements
- News cards with details view
- Pull-to-refresh for latest updates
-
Contests (
ContestFragment)- Aggregated contest calendar
- Multi-platform contest listings
- Filter and search options
- Set reminders for contests
-
Profile (
ProfileFragment)- Personal profile overview
- Tabbed view: KodeShell, Codeforces, LeetCode, AtCoder
- Edit profile option
- Navigation drawer menu
- About Us section
-
Stalk (
StalkFragment)- Search users by platform handles
- View other users' profiles
- See their submission history across all platforms
- Access their KodeShell activity
3. Profile System
Fragments: ProfileKodeShellFragment, ProfileCodeForcesFragment, ProfileLeetCodeFragment, ProfileAtCoderFragment
Profile Components:
-
KodeShell Tab:
- User's posts
- Contribution score
- Activity metrics
- Status message
-
Codeforces Tab:
- User rating and rank
- Color-coded rating badge
- Last 10 submissions with verdicts
- Problem links
-
LeetCode Tab:
- Total problems solved
- Easy/Medium/Hard breakdown
- Contest ranking
- Acceptance rate
-
AtCoder Tab:
- Contest participation
- Performance metrics
- Rank and rating
Edit Profile (EditProfileFragment):
- Change avatar (12 options)
- Update name, email, phone
- Modify status message
- Link/update platform handles
4. Contest Management
Activities: ContestInsiderActivity, ContestReminder, Upcoming_Codeforces_List
Service: AlarmReceiver
- Fetch contests from multiple platforms simultaneously
- Display contests with:
- Platform logo
- Contest name
- Start time (local timezone)
- Duration
- Registration link
- Set reminders with custom time offset
- Notification system with exact alarm scheduling
- WebView for direct contest access
5. Social Features
Activities/Fragments: ChatActivity, NewPostFragment, CommentFragment, UserList
Posts System:
- Create posts with text content
- Upvote/downvote mechanism
- View count tracking
- Comment on posts
- Delete own posts
- Share with community
Messaging:
- Real-time one-on-one chat
- Message history persistence
- Typing indicators (potential)
- User online status (potential)
- Chat list with recent conversations
Comments:
- Threaded comment system
- Reply to posts
- View all comments on a post
- Comment timestamp display
6. User Discovery
Fragments: StalkFragment, SearchUserProfileFragment
Adapters: SearchUserProfileAdapter
- Search by Codeforces handle
- Search by LeetCode username
- Search by AtCoder handle
- View complete user profiles
- See cross-platform statistics
- Browse user directory
š ļø Technologies Used
Android SDK & Core
- Minimum SDK: Android 7.0 (API 24)
- Target SDK: Android 14 (API 34)
- Language: Java 8
- Build System: Gradle 8.0.2
Firebase Services
firebase-auth:22.1.1- Authenticationfirebase-database:20.2.2- Realtime Databasefirebase-storage:20.2.1- Cloud Storagefirebase-bom:32.5.0- Bill of Materials
Google Services
play-services-auth:17.0.0- Google Sign-Ingoogle-services:4.3.15- Google Services Plugin
UI Libraries
material:1.9.0- Material Design Componentsconstraintlayout:2.1.4- Constraint Layoutrecyclerview:1.3.1- RecyclerViewcardview:1.0.0- CardViewviewpager2:1.0.0-alpha03- ViewPager2circleimageview:3.1.0- Circular Image Viewswiperefreshlayout:1.1.0- Swipe Refresh Layoutdrawerlayout:1.2.0- Drawer Layoutfragment:1.3.4- Fragment Library
Networking Libraries
volley:1.2.0- HTTP library for Codeforces APIokhttp3:4.9.1- HTTP client for LeetCode/AtCoder APIspicasso:2.71828- Image loading and caching
Utility Libraries
json:20210307- JSON parsingthreetenbp:1.4.0- Time/Date handling (Java 8 Time backport)ssp-android:1.0.5- Scalable size unit for textsdp-android:1.0.5- Scalable size unit for dimensions
Testing
junit:4.13.2- Unit testingespresso-core:3.5.1- UI testingandroidx.test.ext:junit:1.1.5- AndroidX Test
š„ Installation
Prerequisites
- Android Studio Arctic Fox or later
- JDK 8 or higher
- Android SDK with API 24+
- Firebase account and project setup
- Google Services configuration file (
google-services.json)
Setup Steps
-
Clone the Repository
git clone https://github.com/mahmudulyeamim/KodeShell.git cd KodeShell -
Firebase Configuration
- Create a Firebase project at Firebase Console
- Add an Android app to your Firebase project
- Download
google-services.jsonand place it inapp/directory - Enable Firebase Authentication (Email/Password and Google Sign-In)
- Enable Firebase Realtime Database
- Set up database security rules
-
Database Structure Set up Firebase Realtime Database with the following structure:
- users/ - userId/ - firstName, lastName, email, phone, status - codeforces, atcoder, leetcode (handles) - avatar, postCount, contribution - posts/ - postId/ - userId, content, timestamp - upvotes, downvotes, commentCount - comments/ - postId/ - commentId/ - userId, content, timestamp - messages/ - chatId/ - messageId/ - senderId, receiverId, message, timestamp - contests/ - contestId/ - name, platform, startTime, duration, link -
Google OAuth Setup
- Enable Google Sign-In in Firebase Authentication
- Add SHA-1 fingerprint to Firebase project
- Download updated
google-services.json
-
Build and Run
./gradlew assembleDebugOr use Android Studio:
- Open project in Android Studio
- Sync Gradle files
- Run on emulator or physical device
API Keys (Optional)
For full functionality, the app uses public APIs that don't require keys:
- Codeforces API: Public, no key needed
- LeetCode GraphQL: Public endpoint
- Kontests.net: Public API for AtCoder contests
š Project Structure
KodeShell/
āāā app/
ā āāā src/
ā ā āāā main/
ā ā ā āāā java/com/example/kodeshell/
ā ā ā ā āāā Activities/
ā ā ā ā ā āāā MainActivity.java
ā ā ā ā ā āāā LoginActivity.java
ā ā ā ā ā āāā SignupActivity1.java
ā ā ā ā ā āāā SignupActivity2.java
ā ā ā ā ā āāā ChatActivity.java
ā ā ā ā ā āāā ContestInsiderActivity.java
ā ā ā ā ā āāā ContestReminder.java
ā ā ā ā ā āāā ForgotPasswordActivity.java
ā ā ā ā ā āāā OtpActivity.java
ā ā ā ā ā āāā ResetPasswordActivity.java
ā ā ā ā ā āāā SplashActivity.java
ā ā ā ā ā āāā UserList.java
ā ā ā ā ā āāā WebviewActivity.java
ā ā ā ā ā
ā ā ā ā āāā Fragments/
ā ā ā ā ā āāā HomeFragment.java
ā ā ā ā ā āāā NewsFragment.java
ā ā ā ā ā āāā ContestFragment.java
ā ā ā ā ā āāā ProfileFragment.java
ā ā ā ā ā āāā StalkFragment.java
ā ā ā ā ā āāā ProfileKodeShellFragment.java
ā ā ā ā ā āāā ProfileCodeForcesFragment.java
ā ā ā ā ā āāā ProfileLeetCodeFragment.java
ā ā ā ā ā āāā ProfileAtCoderFragment.java
ā ā ā ā ā āāā EditProfileFragment.java
ā ā ā ā ā āāā UserProfileFragment.java
ā ā ā ā ā āāā NewPostFragment.java
ā ā ā ā ā āāā CommentFragment.java
ā ā ā ā ā āāā AboutUsFragment.java
ā ā ā ā ā āāā SearchUserProfileFragment.java
ā ā ā ā ā
ā ā ā ā āāā Adapters/
ā ā ā ā ā āāā ContestAdapter.java
ā ā ā ā ā āāā SubmissionAdapter.java
ā ā ā ā ā āāā MessageAdapter.java
ā ā ā ā ā āāā NewsAdapter.java
ā ā ā ā ā āāā CommentAdapter.java
ā ā ā ā ā āāā SearchUserProfileAdapter.java
ā ā ā ā ā āāā ProfileViewPagerAdapter.java
ā ā ā ā ā
ā ā ā ā āāā ViewHolders/
ā ā ā ā ā āāā PostHolder.java
ā ā ā ā ā āāā ContestHolder.java
ā ā ā ā ā āāā SubmissionHolder.java
ā ā ā ā ā āāā NewsHolder.java
ā ā ā ā ā
ā ā ā ā āāā Models/
ā ā ā ā ā āāā User.java
ā ā ā ā ā āāā Post.java
ā ā ā ā ā āāā MessegeModel.java
ā ā ā ā ā āāā Codeforces_Contest.java
ā ā ā ā ā āāā UserTime.java
ā ā ā ā ā
ā ā ā ā āāā APIHelpers/
ā ā ā ā ā āāā CodeforcesAPIHelper.java
ā ā ā ā ā āāā LeetcodeAPIHelper.java
ā ā ā ā ā āāā AtcoderAPIHelper.java
ā ā ā ā ā
ā ā ā ā āāā Utils/
ā ā ā ā āāā AlarmReceiver.java
ā ā ā ā
ā ā ā āāā res/
ā ā ā ā āāā layout/ (Activity & Fragment layouts)
ā ā ā ā āāā menu/ (Navigation menus)
ā ā ā ā āāā drawable/ (Icons & images)
ā ā ā ā āāā values/ (Strings, colors, themes)
ā ā ā ā āāā mipmap/ (App icons)
ā ā ā ā
ā ā ā āāā AndroidManifest.xml
ā ā ā
ā ā āāā test/ (Unit tests)
ā ā āāā androidTest/ (Instrumentation tests)
ā ā
ā āāā build.gradle (App-level build config)
ā āāā google-services.json (Firebase config)
ā
āāā gradle/ (Gradle wrapper)
āāā build.gradle (Project-level build config)
āāā settings.gradle (Project settings)
āāā README.md (This file)
šø Screenshots
Note: Add screenshots of your app here to showcase the UI/UX
Recommended screenshots to add:
- Splash Screen
- Login/Signup Flow
- Home Feed with Posts
- Contest Calendar View
- Profile Page (All 4 tabs)
- User Search/Stalk Feature
- Chat Interface
- Contest Reminder Setup
- News Section
- Edit Profile Screen
š Future Enhancements
Potential Features
- Dark Mode: Theme switching for better UX
- CodeChef Integration: Add CodeChef API support
- HackerRank Integration: Include HackerRank profiles
- Group Chats: Create study groups or discussion channels
- Problem Recommendations: AI-based problem suggestions
- Virtual Contests: Host custom contests within the app
- Achievement System: Badges and milestones
- Leaderboards: Platform-wise and overall rankings
- Code Sharing: Share code snippets with syntax highlighting
- Editorial Links: Direct links to problem editorials
- Calendar Sync: Export contests to Google Calendar
- Offline Mode: Cache data for offline viewing
- Performance Analytics: Detailed statistics and graphs
- Push Notifications: Enhanced real-time notifications
- Multi-language Support: Internationalization (i18n)
Technical Improvements
- Migrate to Kotlin for modern Android development
- Implement MVVM Architecture with LiveData and ViewModel
- Use Jetpack Compose for declarative UI
- Add Repository Pattern for data layer abstraction
- Implement Dependency Injection with Hilt/Dagger
- Add Unit Tests with comprehensive coverage
- Implement CI/CD Pipeline with GitHub Actions
- Use Coroutines for async operations
- Add Room Database for local caching
- Implement WorkManager for background tasks
š¤ Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Coding Standards
- Follow Android development best practices
- Write clean, documented code
- Test your changes thoroughly
- Update README if adding new features
š License
This project was developed as part of academic coursework for CSE-2216 Application Development Lab.
šØāš» Author
Mahmudul Yeamin
- GitHub: @mahmudulyeamim
- Email: [Contact via GitHub]
š Contact & Support
For questions, suggestions, or issues:
- Open an issue on GitHub
- Contact through GitHub profile
š Acknowledgments
- Course: CSE-2216 Application Development Lab
- APIs Used:
- Codeforces API
- LeetCode GraphQL API
- Kontests.net API
- Libraries: Special thanks to all open-source library maintainers
š Project Statistics
- Activities: 9
- Fragments: 16
- API Integrations: 3 platforms
- Features: 30+ implemented features
- Lines of Code: Comprehensive Android application
Made with ā¤ļø for the Competitive Programming Community