All work
Case study 01Live on iOS & Android

Outsyd

Type a city. Get the day planned — on the map, in seconds.

Role
Founder — product, design, development, release and marketing
Timeline
2025 — ongoing
Version 3.5, 61 builds
Stack
Flutter · Dart · Firebase · Cloud Functions (Node.js) · Gemini · Geoapify · Stadia Maps
Links
App Store · Google Play · Website
Syd, Outsyd’s bird mascot
A day itinerary in Naples drawn on the map
Outsyd home screen asking where you are going today
A walking route through Rome with numbered stops
Screens in Italian · the app is fully bilingual

01 — The problem

The ship docks for eight hours in a city you never researched. Now what?

Planning a good day somewhere new means hours of forums, blog posts and map tabs: what is worth seeing, in which order, how far apart, when to stop for lunch. Cruise passengers feel it most — every port is a new city with a hard deadline to get back on board.

Outsyd does that work in seconds. Name a city, say how long you have and how you’re moving, and the app builds a route on the map: real places, ordered geographically, timed from when you start to when you need to be back, with meals and evening plans in the right gaps.

02 — What it does

  • Itineraries on a real mapStops ordered by geography and time of day — markets in the morning, viewpoints at sunset — each with an arrival time.
  • Breakfast, lunch, dinner, eveningMeal and nightlife suggestions dropped into the gaps of every day, not just the first.
  • Flight deals from 30 Italian airportsReal fares, sorted by price, with route watchlists and push alerts when a price drops.
  • Practical layerAirport-to-centre options, where to stay by neighbourhood, city tips, attraction tickets — each one verified before it’s cached.
  • Social and collaborativePublish itineraries, like and comment, or plan a trip together through invite links.
  • Cashback in real moneyFunded by affiliate commissions: users get a share of what Outsyd actually earns — never more.
Home: pick a city, duration, distance and visiting hours
Start with a city
Naples itinerary with seven stops along the old town
Naples, ordered on the map
Rome itinerary starting at Castel Sant’Angelo
Rome on foot, stop by stop

03 — Under the hood

One Flutter codebase for both platforms, a Firebase backend, and 29 Cloud Functions doing the work the phone shouldn’t.

Anything that costs money, holds a secret or must not be tampered with runs on the server: AI calls, partner APIs, scheduled price checks, cashback accounting, moderation. The app stays a fast, offline-tolerant client with its own map-tile cache.

04 — Decisions that mattered

The hard parts weren’t the features. They were the places where the app could quietly lie to its users.

A · Data

No number without a source.

Early builds showed star ratings and discount badges. They looked great — and the ratings were random, the “−60%” a difference from an average. One traveller noticing would undo everything the app promises.

DecisionRatings and prices come only from grounded lookups with validated fields. Unknown means the UI shows nothing.
WhyTrust is the product — and fake ratings or discounts are a legal risk in the EU.
B · AI output

Validate what the model returns.

An LLM finds the exact ticket page for an attraction. Once it cached search?query=None — a page that loads fine and is completely wrong.

DecisionEvery URL must have the shape of a real product page, survive a live fetch, and only the canonical address is stored.
Lesson“Valid page” is not “right page”. Check the shape of the answer, not just that there is one.
C · Security

Treat the client as hostile.

Cashback is real money, and a few of its fields were written by the phone. A modified app could have set its own cashback rate and multiplied what it was paid.

DecisionServer-side clamps on every client value, bookings created only as pending, withdrawals in transactions, admin actions behind custom claims, unused secrets pulled out of the app bundle.
NextThis is the work that pushed me towards an M.Sc. in Cybersecurity.
D · Money

Follow the money end to end.

Flight links showed zero affiliate clicks for weeks. The code looked correct. The network, it turned out, only counted clicks that went through its own redirect.

DecisionTest every partner link with real requests and read the dashboards, not just the code. Flights now route through the tracked redirect.
LessonWhen a number is zero, check the plumbing before assuming nobody clicked.

05 — Beyond the code

Shipping is where the work starts.

Outsyd taught me the parts nobody puts in a tutorial: store review cycles, release notes in two languages within a 500-character limit, privacy policies, affiliate applications, payout logic — and getting people to open the app at all. The TikTok account I run for it has passed a million views, mostly with carousels about where locals actually eat.

Some networks only approve publishers that have a real website, so I built one: a bilingual landing page on Firebase Hosting.

29
Cloud Functions in production
270
automated tests
2
languages, 1,065 strings each
1.1M+
TikTok views, @outsydapp
outsyd-6135d.web.app
Outsyd landing page: “The AI that plans your trip like a local”, with App Store and Google Play buttons
The Outsyd landing page — Italian and English, built for users and for affiliate reviewers.Visit ↗

06 — What came next

Outsyd became the foundation of my bachelor’s thesis: Outsyd Sentinel, a machine-learning prototype that routes traveller feedback to the right team and reads its sentiment, designed to plug into the app’s existing comments.