Skip to content
karim.semaan(open to work)
WorkExperienceAboutSkillsContactResume ↓
← All work
Gamma Air preview
Full-stackCompleted2022

Gamma Air

Airline-ops database platform

A four-person team shipped a working three-role airline-ops platform: 14-table MySQL schema, role-scoped Flask REST API, Appsmith UI, demoed end to end on a public video.

Gate Dispatch0/8 routed · 0/3

Flight GA758 inbound. Send it to Gate B.

GA758Inbound · stand BB
Next
  1. GA490→C
  2. GA373→D
  3. GA264→C

Walkthrough video demo (Appsmith UI over a Flask + MySQL API).

Open live app ↗︎

Gamma Air models an airline-operations marketplace: airlines list flights they need filled, qualified pilots get assigned, customers book tickets, and customer representatives keep both sides moving. A normalized 14-table MySQL schema (airlines, airports, plane types and seats, flights, tickets, reviews, pilot schedule requests, customer questions, and a self-managing rep hierarchy) auto-loads from a bootstrap script when the two-service Docker Compose stack (Flask + MySQL 8) comes up. A Flask REST API exposes four role-scoped blueprints (login, customers, reps, pilots): customers pull their tickets and submit questions, pilots check schedules and reviews, reps work the question queue. An Appsmith low-code UI sits on top. Built by a four-person team for a database-design course; Karim designed, coded, and tested the customer-representative dashboard. The public video walks the working app end to end.

  • Python
  • Flask
  • MySQL
  • SQL
  • Docker
  • Appsmith
Schema
14 tables
API
Flask REST · 4 blueprints
Roles
Pilots · customers · reps
Stack
Flask · MySQL · Docker

What I'd improve

The code shows its course-project age: queries are built with Python string formatting and new rows mint IDs with max(id)+1, which invites SQL injection and race conditions. Today I'd reach for parameterized queries, AUTO_INCREMENT keys, real session auth instead of a hard-coded secret key, and tests around the blueprints.

Open live↗︎
Want something like this? Get in touch →

Measured:30/30 chatbot evals·20-case Bastion eval·Serving·Calibration Lab

© 2026 Karim SemaanBuilt with Next.js, Tailwind & Supabase.LinkedIn ↗︎GitHub ↗︎