Skip to content

mohamed-dev-404/skillify

Repository files navigation

Skillify Launcher

Skillify

Skills Exchange Platform

Trade knowledge through short, focused, real-time sessions — teach what you know, learn what you need.


Flutter Dart BLoC Feature--First Platform License GetIt DI go_router

Stars Forks Issues Closed Issues Closed PRs

Repository Views

Presentation / Demo Site      Download APK


Skillify Poster

📋 Table of Contents


🔷 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
🚀 Getting Started Setup Guide

📦 Resources

Section
🔗 Related Repositories Flutter · Backend
👥 Flutter Team 5 contributors
📄 License All Rights Reserved

📖 About the Project

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

✨ Core Features

👤 Onboarding & Profile

  • 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

🔍 Skills, Search & Discovery

  • 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

🤝 Sessions, Credits & Escrow

  • 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 = 1 credit, 30 min = 2 credits, 60 min = 4 credits)
  • Credit escrow on acceptance with atomic dual-confirmation release on completion

⭐ Reputation & Communication

  • 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

🏗 Architecture Overview

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   │
                                      └─────────────────────────────────┘

State Management Philosophy

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.

  • equatable provides value equality for reliable, minimal-rebuild Cubit state comparisons.
  • Dartz (Either<Failure, Data>) provides type-safe, functional error handling at the repository layer.

Navigation

go_router handles all declarative routing and deep linking, supporting clean, predictable navigation stacks across iOS and Android.

Dependency Injection

get_it (Service Locator pattern) manages all singleton and factory allocations lazily at runtime, keeping features decoupled and independently initializable.


📁 Project Structure

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

Feature Module Pattern

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

⚒ Tech Stack & Dependencies

Core

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

Networking & Connectivity

Package Purpose
dio HTTP client for API communication
connectivity_plus Network connectivity status monitoring

Storage

Package Purpose
shared_preferences Persistent storage for simple data
flutter_secure_storage Encrypted storage for sensitive data (tokens, keys)

UI & UX

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

Media & File Handling

Package Purpose
image_picker Selecting images from device library or camera

Integration & Real-Time

Package Purpose
zego_uikit_prebuilt_call Pre-built UI components for in-app audio & video calls

Utilities

Package Purpose
logger Extensible logger for clean console output
intl Internationalization, localization, date/number formatting
flutter_dotenv Load environment variables from a .env file

Environment Variables

Setup requires a .env file in the root directory (refer to .env.example).


🚀 Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

Installation

1. Clone the repository

git clone https://github.com/mohamed-dev-404/skillify.git
cd skillify

2. Clean any previous build artifacts

flutter clean

3. Install dependencies

flutter pub get

4. Configure environment variables

cp .env.example .env
# then fill in the required values

5. Run the application

# Run on connected mobile device or emulator
flutter run

# Build a release APK
flutter build apk --release

🎬 Demo

GIFs coming soon.


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

👨‍💻 Flutter Team

The following contributors are responsible for the Flutter client application:

Mohamed Ibrahim
Mohamed Ibrahim
AboGM
AboGM
kerelos Aissam
kerelos Aissam
Sohaib Khalifa
Sohaib Khalifa
Marwan Muhammad
Marwan Muhammad

📄 License

Copyright © 2026 Skillify Team.

All Rights Reserved.

This project and all its source code, assets, and documentation are the intellectual property of the Skillify development team. No part of this project may be reproduced, distributed, or transmitted in any form or by any means without the prior written permission of the authors.


Made with ❤️ using Flutter

About

Skillify is a cross-platform Flutter application that enables people to exchange skills through short, focused one-on-one learning sessions, powered by a credit-based system, reputation, and real-time human interaction.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Contributors

Languages