Back to web

Ratoong

High-Performance Ski & Travel Engine

A comprehensive ski resort planning and rating platform featuring real-time weather integration and complex multi-parameter search filters.

My Role

Full-Stack Engineer

Stack

Angular, Firebase, GCP Cloud Functions, TypeScript

Impact

< 200ms Search Latency • 10,000+ Active Data Points • Fully Responsive Design

Interactive Gallery — Select or swipe to explore

System Architecture Log

Traffic Flow
Service Node
graph LR subgraph Client_Side [Frontend] A[Angular Web App]:::traffic end subgraph Firebase_GCP [Cloud Infrastructure] direction TB Hub((Firebase SDK)):::hub B[Firebase Auth]:::node C[Firestore DB]:::node D[Cloud Functions]:::node E[Partner API Proxy]:::node end subgraph External [Third Party] direction TB F[Weather API]:::traffic G[Google Maps API]:::traffic H[Affiliate Partners]:::traffic end A ==> Hub Hub -->|Identity| B Hub <-->|Data Sync| C Hub -->|Triggers| D D --> F D --> G D --> H E -.->|Internal Access| C classDef traffic fill:#2563eb,stroke:#3b82f6,color:#fff classDef node fill:#16a34a,stroke:#22c55e,color:#fff classDef hub fill:#f59e0b,stroke:#d97706,color:#fff,stroke-width:2px

PROJECT LOG // DATA // UI EFFICIENCY

The Engineering Story

Building Ratoong was an exercise in managing High-Density Data within a reactive frontend ecosystem. The core challenge was transforming thousands of resort data points—ranging from piste lengths to real-time weather—into a lightning-fast, searchable interface.

Data Orchestration & Efficiency

Leveraging a Document-Based Architecture (Firestore), I designed a schema that balanced read efficiency with real-time updates. To handle complex filtering (altitude, lift types, pricing) without taxing the client-side, I utilized GCP Cloud Functions as a middleware layer to process and normalize data from various 3rd-party APIs, including Google Maps and Weather services.

Modern Angular & Responsive UI

The frontend was built using modern Angular, focusing on a component-based architecture that ensured high performance across both desktop and mobile. I implemented a custom state management flow to handle resort ratings and trip planning, ensuring that user interactions were instantly reflected in the UI while syncing seamlessly with Firebase Authentication.

Lessons in Scalability

Working with a Backend-as-a-Service (BaaS) model taught me the importance of cost-effective query design and the power of event-driven triggers. I was responsible for maintaining the development, staging, and production environments, ensuring a clean CI/CD flow from localhost to the Firebase cloud.

Security & Data Governance

A key architectural pillar was the implementation of a robust Security Rules layer within Firebase. By moving the logic from the client to the database level, we ensured that resort metadata was globally searchable while sensitive user planning data remained strictly isolated. This event-driven security model allowed us to scale the user base without increasing the risk surface area of the platform.