Project case study
CourtCraft Admin
An offline Android application for organizing badminton sessions, balancing doubles teams, and keeping games moving without depending on an internet connection.
- Platform
- Android · Offline-first
- Core stack
- React Native · Expo · TypeScript
- Storage
- SQLite through Expo SQLite

The Problem
Badminton organizers need to manage players and courts while maintaining fair playing opportunities. A player may be on court now but still need a place in an upcoming match.
My Contribution
I built CourtCraft Admin to bring player management, court availability, match queues, and session results into one mobile application.
How the Application Works
Session data stays on the device and is restored when the application reopens. Before a queued match starts, the app checks whether the court and selected players are available.
- Manage player profiles with skill stars and custom doubles teams.
- Adjust matchmaking ratings (MMR) with wins and losses to help balance future matches.
- Queue upcoming matches while players are still playing.
- Show live rankings, tied podium places, and shareable final results.
Tools and Engineering Approach
The application uses React Native, React, Expo, and TypeScript, with SQLite through Expo SQLite. Graphics and result sharing use React Native SVG, React Native Share, and Expo FileSystem.
- Development: Node.js, npm and PowerShell.
- Project checks: Node.js test runner, TypeScript checks, Expo Doctor and Expo Go.
- Android packaging: Expo EAS Build.
What Was Delivered
A locally stored badminton-session workflow with four-court management, advance queues, adaptive ratings, and final-results sharing.
Have a Similar Challenge?
Tell me what you need to build, your preferred timeline, and where you need help.
Discuss a Mobile Application