Trade knowledge through short, focused, real-time sessions β teach what you know, learn what you need.
[!IMPORTANT]
Skillify is published as a professional portfolio project. The source code is made publicly available strictly for viewing and technical evaluation purposes β this is not an open-source release.
Unless explicitly authorized in writing by the copyright holders, you may not:
Β Β π«Β Copy or reuse any part of this project Β Β π«Β Modify the code or create derivative works Β Β π«Β Redistribute the source code, in whole or in part Β Β π«Β Use the project for academic or commercial purposes
Β© 2026 Skillify Team β All Rights Reserved Mohamed IbrahimΒ β’Β Mohamed AboGMΒ β’Β Kerelos AissamΒ β’Β Sohaib KhalifaΒ β’Β Marwan Muhammad
π· Overview
| Section | ||
|---|---|---|
| π | About the Project | Overview |
| β¨ | Core Features | Highlights |
| π¬ | Demo | Coming Soon |
βοΈ Technical
| Section | ||
|---|---|---|
| π | Architecture Overview | Feature-First Β· BLoC |
| π | Project Structure | lib/ tree |
| β | Tech Stack & Dependencies | Packages & Plugins |
π¦ Resources
| Section | ||
|---|---|---|
| π | Related Repositories | Flutter Β· Backend |
| π₯ | Flutter Team | 5 contributors |
| π | License | All Rights Reserved |
Skillify is a mobile-only skill-exchange platform that enables people to trade any type of skill or knowledge through short, focused, and interactive real-time sessions. The platform connects users who need practical help with those who can provide it β across all domains, including technology, design, business, languages, academic subjects, and personal development.
Unlike AI tools, documentation, or long-form courses, Skillify targets users who already understand the basics but need practical, real-time human guidance to overcome specific, contextual challenges. Real people understand the exact situation, ask follow-up questions, identify hidden mistakes, and provide tailored, actionable solutions β something generic tools cannot replicate.
The platform creates a structured and fair ecosystem for Learners and Helpers alike through:
- Secure authentication with mandatory profile completion
- A predefined skill-categorisation system with custom sub-skills
- Search & discovery filtered by skill, rating, and language
- Bidirectional session request & offer flows with accept/decline/re-offer
- A credit-based exchange system β no real-money transactions
- A credit escrow mechanism with dual-confirmation release
- Post-session ratings, written reviews, and an automatic badge/reputation system
- In-app real-time audio & video calls for session delivery
- Registration and login with mandatory full-profile completion before accessing any feature
- Profile setup collecting role, skills offered/needed, profile picture, bio, and spoken languages
- Full profile editing at any time, reflected immediately on the public profile
- Predefined main skill categories (e.g. Programming, Design, Marketing, Languages, Business, Fitness) with unlimited user-defined sub-skills
- Skill-based search plus filtering by minimum rating and spoken language
- Result cards showing name, primary skills, average rating, and completed session count
- Session requests and offers with topic, fixed duration (15 / 30 / 60 min), schedule, and problem description
- Accept, decline, and re-offer/counter-propose flows with push notifications at every state change
- Fixed, non-negotiable credit mapping (15 min = 15 credit, 30 min = 30 credits, 60 min = 60 credits)
- Credit escrow on acceptance with atomic dual-confirmation release on completion
- Mandatory post-session numeric rating (1.0β5.0) with optional written review
- Automatic average-rating calculation and reverse-chronological review listing on profile
- Automatic badge awarding based on session count, rating, and helping-behaviour milestones
- In-app real-time audio & video calls, accessible only during accepted sessions' scheduled window
This Flutter application strictly follows a Feature-First Architecture closely aligned with Clean Architecture principles, combined with BLoC/Cubit state management and the Repository Pattern for full data-source abstraction and unit testability.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FLUTTER CLIENT (This Repo) β
β β
β βββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ β
β β Feature-First β β Cubit/Bloc Stateβ β Secure/Shared β β
β β Architecture β β Management β β Storage β β
β βββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ β
β β
β βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββ β
β β go_router β β Dio + Custom β β GetIt DI β β
β β Declarative Nav β β Interceptors β β Service Locator β β
β βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β REST API (Dio)
βΌ
βββββββββββββββββββββββββββββββββββ
β Backend API β
β Auth Β· Sessions Β· Credit Escrowβ
ββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββ΄βββββββββββββββββββ
β Audio/Video Call Service β
β Zego UIKit Prebuilt Call β
βββββββββββββββββββββββββββββββββββ
Business logic is fully separated from the UI layer using Cubit (from the Bloc ecosystem). Each feature owns its own Cubits, ensuring predictable, testable state transitions with no cross-feature coupling.
equatableprovides value equality for reliable, minimal-rebuild Cubit state comparisons.Dartz(Either<Failure, Data>) provides type-safe, functional error handling at the repository layer.
go_router handles all declarative routing and deep linking, supporting clean, predictable navigation stacks across iOS and Android.
get_it (Service Locator pattern) manages all singleton and factory allocations lazily at runtime, keeping features decoupled and independently initializable.
lib/
βββ app/ # Application root configuration and setup
β
βββ core/ # App-wide shared resources
β βββ common/ # Shared models or entities
β βββ constants/ # App constants (colors, themes, api keys)
β βββ di/ # Dependency Injection (GetIt) setup
β βββ errors/ # Error handling, failures, and exceptions
β βββ functions/ # Helper functions
β βββ logging/ # Logger setup
β βββ routes/ # Routing configuration (GoRouter)
β βββ services/ # Third-party or core services (Network, Storage)
β βββ utils/ # General utilities
β βββ validators/ # Input validators
β βββ widgets/ # Shared/reusable UI components
β
βββ features/ # Independent, self-contained feature modules
βββ auth/ # Authentication feature
βββ complete_profile/ # Profile completion flow
βββ explore/ # Explore/Search feature
βββ main/ # Main dashboard/navigation
βββ notification/ # Notifications feature
βββ profile/ # User profile management
βββ sessions/ # Session/Calls management
βββ settings/ # App settings
βββ splash/ # Splash screen
βββ wallet/ # Wallet/Payments feature
Every feature strictly follows the same internal structure to ensure consistency and discoverability:
feature_name/
βββ data/
β βββ models/ # DTOs (Data Transfer Objects) & JSON parsers
β βββ repos/ # Repository implementations (data source abstraction)
βββ presentation/
βββ view_models/ # Business logic (Cubits / Blocs)
βββ views/ # UI screens & feature-specific widgets
| Package | Purpose |
|---|---|
flutter |
Cross-platform UI framework (iOS & Android) |
flutter_bloc |
Bloc/Cubit state management |
equatable |
Value equality for Bloc/Cubit state comparisons |
go_router |
Declarative routing & deep linking |
get_it |
Dependency injection (Service Locator) |
dartz |
Functional programming: Either<L, R> types |
| Package | Purpose |
|---|---|
dio |
HTTP client for API communication |
connectivity_plus |
Network connectivity status monitoring |
| Package | Purpose |
|---|---|
shared_preferences |
Persistent storage for simple data |
flutter_secure_storage |
Encrypted storage for sensitive data (tokens, keys) |
| Package | Purpose |
|---|---|
google_fonts |
Custom typography |
flutter_svg |
SVG asset rendering |
lottie |
Advanced animations |
google_nav_bar |
Modern bottom navigation bar |
gap |
Simplified spacing inside Flex widgets (Column/Row) |
cupertino_icons / line_icons |
Icon sets |
fluttertoast |
Toast notifications |
| Package | Purpose |
|---|---|
image_picker |
Selecting images from device library or camera |
| Package | Purpose |
|---|---|
zego_uikit_prebuilt_call |
Pre-built UI components for in-app audio & video calls |
| Package | Purpose |
|---|---|
logger |
Extensible logger for clean console output |
intl |
Internationalization, localization, date/number formatting |
flutter_dotenv |
Load environment variables from a .env file |
Setup requires a .env file in the root directory (refer to .env.example).
π₯ Watch the full app walkthrough (Google Drive)
Full app walkthrough β onboarding, skill setup, search & discovery, session booking, credit escrow, and in-app calls.
This Flutter app is the client layer of a two-part system:
| Repository | Description | Link |
|---|---|---|
| Flutter Client (this repo) | Cross-platform mobile application (iOS Β· Android) | Current Repository |
| Backend API | Auth Β· Sessions Β· Credit Escrow Β· Ratings & Badges | AhmedMohamed-1/SkillifyAPI |
The following contributors are responsible for the Flutter client application:
![]() Mohamed Ibrahim |
![]() AboGM |
![]() kerelos Aissam |
![]() Sohaib Khalifa |
![]() Marwan Muhammad |
All Rights Reserved Β© 2026 β Skillify Team
This project β including all source code, assets, branding, and documentation β is the intellectual property of the Skillify development team and is published for portfolio and technical-evaluation purposes only.
No part of this project may be copied, modified, redistributed, or used for academic or commercial purposes without prior written permission from the copyright holders.
See the Copyright & Usage Notice at the top of this document for full details.
Mohamed IbrahimΒ β’Β Mohamed AboGMΒ β’Β Kerelos AissamΒ β’Β Sohaib KhalifaΒ β’Β Marwan Muhammad
Made with β€οΈ using Flutter




