Skip to content

Repository files navigation

HAVEN — Premium Real Estate

Discover, explore, and book premium properties with a polished mobile experience.

Flutter Dart Architecture State License


Overview

HAVEN is a premium real estate mobile app built with Flutter, designed as a high-fidelity portfolio showcase. The app enables users to discover properties through an interactive map, browse detailed listings, connect with agents, book viewing appointments, and manage their saved favourites — all with a refined dark/light theme and smooth animations throughout.

The project demonstrates professional mobile engineering practices: strict clean architecture with three isolated layers (data, domain, presentation), BLoC/Cubit state management with sealed state classes, a cache-first data strategy using Hive, and a repository pattern that lets the mock datasource be swapped for a real API by changing a single line in the dependency injection file.

Built for iOS and Android from a single codebase, HAVEN targets iPhone 14 Pro form factor (390×844pt) with support for both portrait orientation and system-level dark/light mode toggling.


Screenshots

Home — Map (Dark) Home — Map (Light) Home — Nearby (Dark)
Home Map Dark Home Map Light Home Nearby Dark
Home — Nearby (Light) Find Property Listing
Home Nearby Light Search Listing
Saved — Grid Saved — List Profile
Saved Grid Saved List Profile
Agent Profile Property Detail Notifications
Agent Profile Detail Notifications

Features

Property Discovery

  • Interactive map view with animated property pins and gold price bubbles
  • Category filtering: Buy / Rent / Commercial with spring-physics tab transitions
  • Advanced search with price range slider, bedroom count, property type chips, and sort order
  • Full property listing with skeleton shimmer loading states

Property Experience

  • Rich property detail screen with swipeable image gallery (drag-velocity gesture), amenities grid, and location mini-map
  • Agent profile with client reviews, star ratings, and active listings grid
  • 3-step viewing appointment flow: date picker → time slot grid → confirm → animated success screen

Personalization

  • Save and manage favourite properties — grid view with full-width listing-style cards, or swipe-to-remove list view
  • Dark and light mode with instant toggle, persisted across sessions via SharedPreferences
  • Push notification centre with grouped TODAY / EARLIER sections, unread indicators, and mark-all-read

Engineering

  • Clean Architecture — data / domain / presentation layers with enforced boundaries
  • BLoC / Cubit state management with sealed state classes and Equatable comparison
  • Cache-first data strategy: serve from Hive instantly, refresh in background; write-through for mutations
  • Repository pattern — mock datasource is the only thing that changes when connecting a real API
  • Dependency injection via GetIt with factory-per-route cubits and singleton ThemeCubit
  • Type-safe navigation with go_router, ShellRoute for nav-bar screens, extra for object passing

Architecture

┌─────────────────────────────────────────────────┐
│                 Presentation Layer               │
│         Screens ←→ Cubits ←→ States             │
└──────────────────────┬──────────────────────────┘
                       │  Use Cases only
┌──────────────────────▼──────────────────────────┐
│                  Domain Layer                    │
│        Entities │ Repository Interface           │
│                 │ Use Cases                      │
└──────────────────────┬──────────────────────────┘
                       │  Implements interface
┌──────────────────────▼──────────────────────────┐
│                   Data Layer                     │
│   Mock Remote ──▶ Repository Impl ◀── Hive      │
│   (swap for real API, zero other changes)        │
└─────────────────────────────────────────────────┘

Project Structure

lib/
├── core/           — Theme tokens, router, DI, error handling, Result<T>
├── data/           — Mock datasource, Hive cache, repository implementation
│   ├── mock/       — Raw JSON-style mock lists (properties, notifications)
│   ├── datasources/— Remote + local abstract interfaces and implementations
│   ├── models/     — Entity subclasses with fromJson/toJson serialization
│   └── repositories/— PropertyRepositoryImpl (cache-first orchestration)
├── domain/         — Pure Dart: entities, repository interface, 6 use cases
├── presentation/   — Screens, Cubits, States (10 feature cubits + ThemeCubit)
└── shared/         — PropertyCard, SkeletonCard, GoldButton, HavenBackButton, etc.

Tech Stack

Layer Technology
UI Framework Flutter 3.x
Language Dart 3.x
State Management flutter_bloc 9.x (BLoC / Cubit pattern)
Navigation go_router 14.x (ShellRoute, typed extras)
Local Cache hive_flutter 1.x
Dependency Injection get_it 8.x
Animations flutter_animate 4.x
Fonts Google Fonts — Playfair Display · Inter · Space Mono
Linting flutter_lints (zero warnings target)

Getting Started

# Prerequisites: Flutter 3.x SDK, Dart 3.x

git clone https://github.com/ayanasamuel8/heaven.git
cd heaven
flutter pub get
flutter run

No API keys, environment variables, or backend setup required — the app runs entirely on mock data with local Hive caching. All 5 properties and 5 notifications are defined in lib/data/mock/.

To run on a specific device:

flutter devices          # list connected devices / emulators
flutter run -d <device>  # target a specific device

Design Reference

The UI was designed as a high-fidelity interactive HTML prototype before implementation began. You can view the full design in any browser:

docs/Real_Estate_App_dc__2_.html

The design file covers all 10 screens with exact color values, spacing, typography, and interaction notes. The implementation in lib/ matches the design 1:1 using Flutter's ThemeExtension system and the token constants in lib/core/theme/.


Project Structure (detailed)

Path Purpose
lib/core/theme/ AppColors, HavenColors ThemeExtension, AppDimensions, AppTextStyles, AppTheme
lib/core/di/injection.dart All GetIt registrations — single source of truth for wiring
lib/core/router/app_router.dart go_router config, ShellRoute, BlocProvider at route level
lib/data/mock/ Raw List<Map<String, dynamic>> — never imported outside data layer
lib/domain/entities/ Pure Dart classes, zero Flutter imports
lib/domain/usecases/ Single-method call() classes wrapping repository calls
lib/presentation/bloc/ One Cubit per feature, sealed state classes, factory-registered
lib/presentation/screens/ 10 screens + sub-widgets, zero business logic
lib/shared/widgets/ PropertyCard, SkeletonCard, GoldButton, TagBadge, HavenBackButton
docs/ PRD, ARCHITECTURE.md, design reference HTML, screenshots

License

MIT License — see LICENSE

HAVEN v1.0.0 — complete

About

HAVEN is a premium real estate mobile app built with Flutter, designed as a high-fidelity portfolio showcase.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages