Skip to content

ldevdantesl/EduConnect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

173 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EduConnect — University & Career Explorer for iOS

A native iOS app that helps students in Kazakhstan explore universities, academic programs, and career paths — all in one place. Built with UIKit, VIPER architecture, and fully programmatic UI.

Screenshots

IMG_8845 IMG_8846 IMG_8847 IMG_8848

IMG_8849 IMG_8850 IMG_8851 IMG_8852

IMG_8853 IMG_8854 IMG_8855 IMG_8856

Tech Stack

Area Details
Language Swift 5.9
UI UIKit, 100% programmatic — no Storyboards
Backend Live REST API — authentication, universities, programs, professions
Architecture VIPER + MVVM hybrid
Layout UICollectionView Compositional Layout, Diffable Data Sources
Networking Custom API layer with Decodable models
Dependencies SnapKit (Auto Layout), Kingfisher (image loading) via SPM
Localization English + Russian + Kazakh
Auth Email-based registration with code confirmation
Minimum Target iOS 15.0+

Architecture

┌─────────────────────────────────────────────────┐
│                    VIPER Module                  │
│                                                  │
│  View ◀──▶ Presenter ◀──▶ Interactor            │
│                │                  │              │
│                ▼                  ▼              │
│             Router            Entities           │
└─────────────────────────────────────────────────┘

Modules: Authentication, ProgramDetails, ProgramsByCategory,
         Universities, Professions, Sidebar Navigation

Each feature is a self-contained VIPER module with its own View, Interactor, Presenter, Entity, and Router. Dependencies are injected through a central DI container, keeping modules isolated and independently testable.

Backend integration — the app communicates with a live REST API for all data — universities, programs, professions, categories, and authentication. All networking is built on a custom API layer with structured request/response handling and Decodable model parsing. No mock data or hardcoded JSON.

Highlights

Full VIPER implementation — not just MVC renamed. Each module has strict layer separation with protocols defining every boundary. The Router handles all navigation, the Interactor owns business logic, and the Presenter transforms data for the View.

Compositional Layout + Diffable Data Sources — complex, multi-section collection views with self-sizing cells, category-based browsing, and smooth data updates without manual reloadData calls.

Dependency injection — a custom DI container wires up all modules at launch, making it straightforward to swap implementations for testing or feature flags.

Programmatic UI throughout — every view, constraint, and layout is built in code using SnapKit. No Interface Builder files in the project.

Project Structure

EduConnect/
├── App/
│   ├── AppRouter              # Root navigation coordinator
│   └── DependencyContainer    # DI setup
├── Modules/
│   ├── Authentication/        # Login, registration, email verification
│   ├── Programs/
│   │   ├── ProgramDetails/    # Program info + related suggestions
│   │   └── ProgramsByCategory/# Category-based browsing
│   ├── Universities/          # University list + details
│   └── Professions/           # Career paths linked to programs
├── UI/
│   ├── Cells/                 # Reusable collection view cells
│   ├── Headers/               # Section headers
│   └── Components/            # Shared UI elements
├── Services/
│   ├── API/                   # Endpoint definitions
│   └── Networking/            # Request/response handling
└── Resources/
    ├── Localizations/         # en, kk string files
    └── Assets/                # Images, colors

Getting Started

git clone https://github.com/ldevdantesl/EduConnect.git
cd EduConnect
open EduConnect.xcodeproj
# Cmd + R to build and run

Requires Xcode 15+ and iOS 16+.

License

Copyright © 2026 Buzurgmehr Rahimzoda. All rights reserved.

This source code is provided for viewing and educational purposes only. Copying, modifying, distributing, or using this code in commercial products is not permitted without explicit written permission from the author.

Contact

Buzurgmehr Rahimzoda — ldevdantesl@gmail.com · GitHub