header background

Projects and Case Studies

Technical and Personal Projects

Frog Ferry Mobile Application

Frog Ferry Mobile Application
Friends of Frog Ferry Logo

Project Overview

Frog Ferry is a planned passenger ferry service operating in the Portland, Oregon metropolitan area, providing water-based transportation across the Willamette River between Cathedral Park and RiverPlace terminals. The service aims to reduce traffic congestion and offer a sustainable transit alternative for commuters and residents.

This mobile app is a booking and real-time vessel tracking system for passengers to search routes, book tickets, track vessels in real-time, and receive notifications, while operators manage trips and check-in passengers via QR codes. The system handles the complete booking lifecycle: discovery, payment, ticketing, and tracking. Future expansion includes safety features like emergency manifests, capacity enforcement, and weather-based trip cancellations.

35+ Tables with comprehensive relationships and row-level security on all user-facing tables.
PostGIS geography types for spatial queries - points for locations, linestrings for routes, polygons for geofences and service areas.
Pilot designed for 50K users scalable to 500K+ with < 2 second API response times.

Design Process

The design process began with extensive research, including existing ferry apps, operations and stakeholder consultations. Based on the insights gathered, I created wireframes and interactive prototypes to visualize the user flow and interface.

Booking Flow

Phase 1 (Auth and Profile)

  • Environment configuration (dev, staging/testing, production)
  • React Native / Expo / EAS setup
  • GitHub code repo setup
  • Supabase setup - PostgreSQL tables
  • Authentication and RBAC setup in Supabase
  • Login & Profiles Screen development
  • External links

Phase 2 (Booking and Vessel Tracking)

  • Route search & browsing
  • Booking & payment
  • PostGIS & Mapbox configuration
  • Basic vessel tracking (POC mocked service)

Phase 3 (Operator and Advanced Features)

  • QR code check-in
  • Push notifications
  • I18n multi-language architecture setup
  • Testing and launch prep

Technical Architecture and Decision Making

While the initial phases focused on core functionality, significant attention was given to scalability and performance to ensure the system could handle a growing user base effectively.

BACKEND: SUPABASE

PostgreSQL + PostGIS + Real-time subscriptions + Row Level Security

PostGIS is the industry standard for geospatial applications (used by Uber/Lyft). Complex spatial queries like "find ferries within 5km" are native operations. Built-in WebSocket support eliminates need for separate IoT services. Free tier supports 50K users vs AWS $400+/month from day one.

MOBILE: EXPO + REACT NATIVE

Cross-platform iOS/Android with over-the-air updates and EAS Build

Single codebase reduces development time by 50%. Over-the-air updates enable instant bug fixes without App Store review, critical for transportation apps. Native APIs for location tracking, camera, and push notifications work out-of-the-box.

MAPPING: MAPBOX

Real-time tracking, route visualization, offline maps, custom styling

Designed specifically for transportation apps with optimized real-time tracking. 60% cheaper than Google Maps at projected scale (50K vs 28K free map loads/month). Supports offline caching for poor connectivity areas near water.
Profile Screen
Select Departure Time Screen
Boarding Pass Screen
Ferry Tracker Screen

Technical Challenges and Solutions

Identified and architected solutions for critical system vulnerabilities that could impact operations, revenue, and passenger safety.

Challenge 1: Race Conditions in Bookings

Problem: Multiple users booking the last seat simultaneously could cause overbooking.

Solution: PostgreSQL functions with SELECT FOR UPDATE locks ensure atomic capacity checks:

SELECT * FROM trips WHERE id = trip_id FOR UPDATE;
  • Check capacity atomically
  • Update seats_booked only if space available
COMMIT;

Challenge 2: Ticket Fraud

Problem: QR codes can be screenshot and reused.

Solution: Multi-layered security:

  • AES-256 encrypted ticket data
  • Time-window validation (only valid 30 min before departure)
  • One-time use with scan logging
  • Nonce tracking to prevent replay attacks
  • Geofencing (must scan near departure terminal)

Challenge 3: GPS Spoofing and Location Fraud

Problem: Malicious operators could send fake vessel locations, disrupting passenger tracking.

Solution: Physics-Based Validation:

Implements server-side validation that calculates if a location update is physically possible given the vessel's last known position, speed, and time elapsed. If the distance exceeds maximum possible travel (vessel.speed × time × safety_margin), the update is rejected and flagged for investigation.

Outcome

The final design of the Frog Ferry Mobile Application successfully addresses the needs of both passengers and operators, resulting in a user-friendly and efficient ferry booking and tracking system. The plan minimizes technical debt by using standard PostgreSQL (portable to any provider), open-source stack (no proprietary vendor lock-in), and a clear migration path to AWS RDS if enterprise scale requires it. The architecture prioritizes pragmatism over premature optimization.