"Tupange" is a Swahili word meaning "let's arrange".
Tupange is a fun, interactive puzzle game where users rearrange shuffled image pieces to complete puzzles in the shortest time possible and with the fewest moves.
Players selects the difficulty level, a category and an item from a category and race against themselves to solve the puzzle.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- π§© Sliding puzzles with multiple difficulty levels.
- πΆ Sound effects.
- π Category selection with a carousel sliders.
- π Internationalization support.
- π¨ Smooth animations and UI helpers
This project uses a rich set of Flutter packages, including:
- State Management:
bloc,flutter_bloc,equatable - UI & Animations:
animated_text_kit,carousel_slider,loading_indicator,styled_widget - Persistence:
floor,sqflite,shared_preferences,path_provider - Authentication:
supabase_auth_ui,supabase_flutter - Internationalization:
intl,flutter_localizations - Utilities:
get_it,injectable,uuid,url_launcher
- Flutter SDK (latest stable)
- Dart (included with Flutter)
- An IDE such as VS Code or Android Studio or Xcode if you plan to build for ios
Verify setup:
flutter doctorgit clone https://github.com/SiroDevs/Tupange.git
cd Tupangeflutter pub getThis project uses flutter_dotenv.
- Create a
.envfile in the root directory. - Add your configuration (e.g., Supabase credentials):
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-keyRun the build runner for Freezed, JSON serialization, Floor ORM, and Injectable DI:
flutter pub run build_runner build --delete-conflicting-outputsFor Android:
flutter runFor iOS (ensure youβre signed into Xcode with an Apple ID):
flutter runFor web:
flutter run -d chromeFollow recommended lints:
flutter analyzeRun unit and widget tests:
flutter test(Add your screenshots here to showcase gameplay β e.g., puzzle selection, puzzle in progress, solved state.)
This project follows a Clean Architecture + BLoC pattern to maintain separation of concerns, testability, and scalability.
lib/
βββ core/ # Core utilities & common definitions
β βββ di/ # Dependency injection setup (GetIt + Injectable)
β βββ utils/ # Utility functions & extensions
β βββ constants/ # App-wide constants (strings, keys, assets, etc.)
β βββ helpers/ # Helper classes (e.g. formatters, validators)
β
βββ data/ # Data layer (talks to APIs, DB, local storage)
β βββ models/ # DTOs & serialization logic
β βββ sources/ # Data sources
β β βββ local/ # Local storage (Floor, SharedPrefs, etc.)
β β βββ remote/ # Remote APIs (Supabase, HTTP clients, etc.)
β
βββ domain/ # Business logic layer
β βββ entities/ # Pure Dart objects (business models)
β βββ repositories/ # Abstract contracts for data access
β
βββ presentation/ # UI layer
β βββ blocs/ # BLoC state management
β βββ cubits/ # Cubit state management
β βββ widgets/ # Reusable UI components
β βββ screens/ # App screens/pages
β βββ themes/ # Styling, themes, and text styles
β
βββ app.dart # Root widget & app configuration
βββ main.dart # Entry point of the application
- Core β Independent utilities and app-wide definitions.
- Data β Responsible for fetching, caching, and storing data. Converts raw data into domain entities.
- Domain β Defines the business logic with entities and repository contracts. Contains no Flutter imports.
- Presentation β Handles UI and state management (BLoC/Cubit). Connects domain logic to the user interface.
The app supports localization with intl and flutter_localizations.
Add new translations in the l10n folder.
Supabase is integrated for authentication.
- Prebuilt UIs:
supabase_auth_ui - Full backend support:
supabase_flutter
- Fork the project
- Create your feature branch (
git checkout -b feature/new-feature) - Commit changes (
git commit -m "Add new feature") - Push to the branch (
git push origin feature/new-feature) - Open a Pull Request
This project is licensed under the MIT License. See LICENSE for details.





