Travel Tales is a sophisticated, enterprise-grade digital ecosystem designed to gamify the human travel experience. Built to handle complex geospatial data, real-time user telemetry, and an internal virtual economy, it bridges the gap between digital content and physical exploration.
📄 Read the Engineering Specification (PDF) »
🏛 Explore Architecture »
·
🤖 Meet Gavrilo AI »
·
📸 Visual Gallery »
Travel Tales is not merely a booking application; it is a Distributed Social & Location-Based Service (LBS) platform engineered by a massive cross-functional team. The project simulates a high-pressure enterprise environment, tackling challenges inherent to large-scale software development: concurrency, complex domain logic, and strict collaborative workflows.
Orchestrating code contribution from 16 developers simultaneously on a monolithic codebase requires military-grade discipline.
- Infrastructure: Hierarchical Scrum methodology utilizing Jira for deep backlog management.
- Pipeline: Strict GitFlow strategy with mandatory Code Reviews, protecting the
mainbranch from regression. - Result: A cohesive system where sub-teams (Marketplace, Social, Core, Gamification) integrated complex modules without architectural collision.
The system is architected to survive complexity. We moved away from traditional CRUD (Create, Read, Update, Delete) to a Rich Domain Model approach.
- Modular Monolith: The application is physically monolithic for deployment simplicity but logically separated into strict Bounded Contexts (Stakeholders, Tours, Payments, Encounters).
- Aggregate Roots: We enforced strict transaction boundaries. For example, the
Touraggregate ensures thatCheckpointsandEquipmentmaintain invariant consistency before any persistence occurs. - Value Objects: Concepts like
Coordinates,Money, andDateRangeare immutable Value Objects, preventing "primitive obsession" and ensuring data integrity at the lowest level.
| Layer | Technology | Engineering Highlights |
|---|---|---|
| Presentation | Angular 15+ | Component-based architecture, RxJS for reactive state management of real-time location streams. |
| Application | .NET 7 API | CQRS-inspired service layer, AutoMapper, Dependency Injection. |
| Domain | C# Core | Pure business logic, devoid of external dependencies, fully testable via xUnit. |
| Persistence | PostgreSQL | Utilizes PostGIS extensions for high-performance spatial queries (e.g., "Find tours within 5km radius"). |
| Testing | TDD / Moq | Critical business rules (e.g., Discount calculation, XP logic) were developed using Test-Driven Development. |
We pushed the boundaries of standard web apps by integrating Gavrilo, a context-aware AI assistant that serves as the platform's brain.
"Gavrilo is not a chatbot. He is an intelligent navigator for the physical and digital world."
- Accessibility & Inclusion: Gavrilo utilizes Text-to-Speech (TTS) engines to audibly describe Tour Checkpoints and surroundings, making tourism accessible to visually impaired users.
- Contextual Navigation: Users can issue natural language commands to navigate the complex UI.
- Smart Recommendations: Utilizing a proprietary algorithm fed by user quizzes and behavioral data, Gavrilo curates personalized travel itineraries.
Inspired by Augmented Reality (AR) mechanics, we engineered a location-based gameplay loop that turns the world into a game board.
The system tracks user location in real-time (via GPS or our custom Position Simulator) to trigger events:
-
Social Proximity Logic: Complex algorithms calculate clusters of users. A "Social Encounter" only activates when
$N$ users interact within a geofenced radius of$X$ meters simultaneously. - Hidden Location Analysis: Users solve riddles using visual data. The system verifies if the user is standing at the exact vantage point of a reference image.
- XP & Leveling System: A complete RPG-like progression system. Earning XP unlocks "Content Creator" privileges at Level 10, turning consumers into producers.
A sophisticated achievement system tracks user telemetry to award prestige badges.
- Algorithm Example: The "Mountain Conqueror" badge tracks cumulative elevation gain across multiple tours.
- Social Status: Badges like "Party Maniac" or "Relaxation Guru" dynamically alter the user's social profile appearance.
At the heart of Travel Tales is a robust geospatial engine.
The Tour Execution Session is a stateful process that monitors the user's journey.
- Heartbeat Mechanism: The frontend transmits telemetry packets every 10 seconds.
- Proximity Calculation: The backend performs spatial calculations against thousands of potential checkpoints to validate user presence.
- Anti-Cheat & Validation: Logic ensures a user cannot review a tour unless they have physically completed >35% of the path and the time-delta is realistic (preventing GPS spoofing).
Tours are designed as "Discovery Chains." Reaching a checkpoint triggers a Domain Event that decrypts "Secret Content" (hidden stories, images, or next clues), delivering a narrative-driven experience.
We implemented a self-contained financial ecosystem to handle digital asset exchange.
- Adventure Coins (AC) Ledger: A secure, internal currency system allowing for micro-transactions.
- Complex Discount Strategy: The pricing engine handles overlapping logic: Bundles (Grouped Items) vs Coupons (User specific) vs Flash Sales (Time-limited). The system automatically resolves the "Best Price" for the user.
- Inventory & Tokenization: Buying a tour generates a cryptographic-like
PurchaseToken, permanently binding the content to the user's library.
The platform includes a self-moderating social network.
- Reputation Algorithm: Blog posts are governed by a Reddit-style upvote/downvote logic.
- Score < -10: Auto-quarantine (Read-only).
- Score > 500: Promotion to "Famous" status, increasing visibility in global feeds.
- Club Hierarchies: Fully featured community management with Invite/Kick logic and member role delegation.
The system is designed for containerized deployment.
# Clone the repository
git clone https://github.com/your-org/travel-tales-ecosystem.git
# Spin up the infrastructure (Database + API + Client)
docker-compose up -d --build
# The system initializes the PostGIS extensions automatically.
# Access the Web Dashboard at http://localhost:4200- Microservices Migration: Extracting the Encounters and Payment modules into independent services communicating via RabbitMQ.
- Mobile Native: Porting the Frontend to .NET MAUI or Flutter for native sensor access (Gyroscope/Compass).
- Blockchain Integration: Converting Badges into NFTs (Non-Fungible Tokens) for permanent ownership on the blockchain.
| Interactive Map & Telemetry | Gavrilo AI Assistant | |:---:|:---:| | | | | *Real-time user tracking with geofenced encounters* | *Context-aware voice & text assistance* |
| Virtual Wallet & Market | Gamification Profile |
|---|---|
![]() |
![]() |
| Complex bundle logic and currency ledger | Dynamic badge rendering based on telemetry |



