All Projects
Confidential context: Parking platformMobile platformIn progress

ParkLocator

A parking idea became a multi-surface platform with mobile discovery, admin operations, geospatial search, and reservation flow.

ParkLocator cover screenshot

How the project is put together

Architecture map

6 layers / 5 directed links

100%

requestsvalidateslocksscoped byverified in
  1. 01
    Interface

    Mobile parking discovery and admin management surfaces share one platform model.

    Flutter / Angular 20 / PrimeNG / Maps
  2. 02
    Application

    Client-side state, venue workflows, reservations, payments, and admin operations.

    Bloc / Angular services / Guards / Interceptors
  3. 03
    Services/API

    Auth, venues, reservations, payments, notifications, dashboard, reports, and audit modules.

    NestJS 11 / TypeORM / Socket.IO / PayMongo
  4. 04
    Data

    Spatial venue search, reservation locks, realtime availability, and uploaded venue assets.

    PostgreSQL / PostGIS / Redis / Uploads
  5. 05
    Auth/Permissions

    Role access and manager scoping keep users, admins, and venue operators separated.

    JWT / Passport / Roles / Venue scoping
  6. 06
    Runtime

    PostGIS/Redis local stack, CI checks, API containerization, and contention/load testing.

    Docker Compose / GitHub Actions / k6 / Node 22

From broken workflow to operating system

Parking discovery and venue operations were split across generic maps, manual status checks, and missing admin tools.

Flutter mobile, Angular admin, NestJS API, PostGIS, Redis, and PayMongo connect into one reservation platform.

The workflow constraint

Existing parking apps are either too generic (Google Maps) or lack proper admin tools and spatial querying. A dedicated platform was needed with a mobile app for users to find nearby parking spots, an API with geospatial search, and an admin portal for parking spot management.

What changed

Functional monorepo with 3 independent apps
PostGIS spatial queries for radius-based parking spot search
Docker-based development with Apple Silicon support
Load testing infrastructure for API benchmarking

Decisions and trade-offs

Flutter over React Native

Needed a cross-platform mobile framework with strong performance for map rendering and geolocation to display parking spots.

Decision: Chose Flutter for its native performance, rich widget library, and strong geolocation/maps ecosystem (Very Good CLI for project structure).

Trade-off: Dart learning curve vs JavaScript familiarity, but better performance for map-heavy UI and type safety built into the language.

NestJS over Express for the API

API needs structured patterns for auth, validation, and module separation as it grows.

Decision: Used NestJS for its opinionated architecture with dependency injection, decorators, and built-in validation pipes.

Trade-off: More boilerplate than Express, but enforced structure prevents code organization problems at scale.

PostGIS over application-level geospatial calculations

Parking spot search requires efficient radius queries and spatial indexing.

Decision: Used PostGIS extension for PostgreSQL to handle spatial queries natively with GiST indexes.

Trade-off: Requires PostGIS-specific Docker image and spatial SQL knowledge, but orders of magnitude faster than application-level distance calculations.

Constraints, architecture, and proof

Monorepo structure: apps/mobile (Flutter/Dart), apps/api (NestJS), apps/admin (Angular). PostGIS database via Docker Compose. NestJS API serves REST endpoints with spatial queries for parking spots. Flutter app uses Very Good CLI structure with flavors (development/staging/production). Load tests directory for performance benchmarking.

Monorepo must keep three apps (Flutter, NestJS, Angular) independently buildable
PostGIS spatial queries for radius-based parking spot search
Docker Compose for database — must support Apple Silicon (ARM64) via emulation
Each app must have independent test suites

Deployment, security, and maintenance

Load testing infrastructure for API performance benchmarking, Docker Compose for reproducible database setup, independent test suites per app (Flutter test, NestJS lint + test, Angular test).

Honest edges and next improvements

Reservation expiration still needs a scheduler hook.
Payment webhooks and final settlement flow are not fully complete.

What I would improve next

Add user authentication and session management
Implement parking spot reviews and ratings system
Add real-time occupancy estimation
Deploy to cloud with CI/CD pipeline

Screenshots from the build