Skip to content

brkckr/ParkV2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

38 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ParkπŸ…ΏοΈ

Discover available ISPARK parking spots, check real-time fees, and navigate to your destination with ease.

πŸ“± App Showcase

1. Splash & Pre-fetch 2. Map & Pager Sync 3. Detail & Navigation
ss1 ss2 ss3

πŸ›  Tech Stack

  • Jetpack Compose – 100% declarative UI with Material 3 and Dynamic Color support.
  • Navigation Compose – Type-safe routing using Kotlin Serialization.
  • Dagger-Hilt – Dependency Injection with modularized providers.
  • Room – Local persistence for Offline-First capability and Single Source of Truth (SSoT).
  • Retrofit + OkHttp – Network layer with custom Call Adapters for automatic Resource<T> wrapping.
  • Google Maps Compose – Interactive map with custom JSON styles and geospatial polygon overlays.
  • Coroutines & Flow – Reactive data streams with an MVVM/MVI hybrid approach (StateFlow + Channels).
  • Clean Architecture – Strictly decoupled layers (Data, Domain, Presentation) with single-responsibility UseCases.
  • Offline Resilience – Resilient recovery with intelligent data pre-fetching and localized error handling.
  • Multi-Language Support – Fully localized in English and Turkish using a custom UiText wrapper.

πŸ“¦ Project Architecture & Flow

The project follows Clean Architecture principles with a strict separation of concerns. Below is the high-level data flow and architectural diagram:

graph TD
    %% Layer Definitions
    subgraph UI_Layer [Presentation Layer - Compose UI]
        A[Splash Screen] --> B[Park Map Screen - Home]
        B --> C[Park Detail Screen]
    end

    subgraph State_Management [ViewModel & UI State]
        B_VM[ParkMapViewModel]
        C_VM[ParkDetailViewModel]
        B_State[ParkMapUiState]
        C_State[ParkDetailUiState]
        Events[UiEvent - Snackbar/Nav]
    end

    subgraph Domain_Layer [Domain Layer - Business Logic]
        UC1[FetchParksUseCase]
        UC2[FilterParksUseCase]
        UC3[FetchParkDetailUseCase]
        UC4[ObserveParkDetailUseCase]
        UC5[ToggleFavoriteUseCase]
    end

    subgraph Data_Layer [Data Layer - Repository & Sources]
        Repo[ParkRepositoryImpl]
        API[ParkApiService - Retrofit]
        DB[ParkDao - Room]
    end

    %% Flow Connections
    A -- triggers --> UC1
    UC1 -- fetch & cache --> Repo
    Repo -- calls --> API
    API -- returns JSON --> Repo
    Repo -- saves to --> DB

    B_VM -- observes --> UC4
    B_VM -- filters via --> UC2
    UC4 -- stream --> DB

    C_VM -- actions --> UC5
    C_VM -- refresh detail --> UC3
    UC3 -- network sync --> Repo

    %% Data Flow Directions
    Repo -.-> B_State
    B_VM -.-> B_State
    B_State -.-> B
    C_VM -.-> C_State
    C_State -.-> C
    B_VM -- events --> Events
    Events -.-> B
Loading

Folder Structure

com.brkckr.parkv2/
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ local/          # Room DB, DAO, Entities (Offline Storage)
β”‚   β”œβ”€β”€ remote/         # Retrofit API, Response models, Call Adapters
β”‚   β”œβ”€β”€ mapper/         # Data ↔ Domain Layer conversion
β”‚   └── repository/     # Repository Implementations (SSoT Logic)
β”œβ”€β”€ domain/
β”‚   β”œβ”€β”€ model/          # Clean Data Classes (Park, ParkDetail)
β”‚   β”œβ”€β”€ repository/     # Domain interfaces
β”‚   └── usecase/        # Single-responsibility Business Logic
β”œβ”€β”€ presentation/
β”‚   β”œβ”€β”€ splash/         # Onboarding & Initial Sync
β”‚   β”œβ”€β”€ park_map/       # Map UI, Horizontal Pager, Search
β”‚   β”œβ”€β”€ park_detail/    # Park Details & Polygon display
β”‚   β”œβ”€β”€ navigation/     # Type-safe Route definitions
β”‚   └── common/         # UiEvent, UiText, Shared UI Logic
β”œβ”€β”€ di/                 # Decoupled Hilt Modules
└── ui/
    β”œβ”€β”€ theme/          # Material 3 Theme & Dynamic Colors
    └── components/     # Global Reusable UI Components (Chips, Loaders)

βš™οΈ Setup

  1. Add your Google Maps API Key to local.defaults.properties in the root directory.
  2. Open the project in Android Studio and click Run## βš™οΈ Installation & Setup

About

simple app that displays parking information for iSPARK locations across Istanbul.πŸ…ΏοΈ πŸš—

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages