Flighter is a full-stack flight-booking portfolio project: a deterministic Python data pipeline generates SQL seed files, and a Next.js App Router application serves flight search and booking flows on top of Prisma + PostgreSQL.
flowchart LR
RAW["Raw datasets (CSV/JSON)"] --> PIPE["Python pipeline CLI"]
PIPE --> SQL["SQL seed files (data-mining/sql_statements)"]
SQL --> DB["Postgres"]
WEB["Next.js App Router"] --> API["Route Handlers (/app/api/*)"]
API --> SVC["Services"]
SVC --> REPO["Repositories"]
REPO --> DB
flighter/
Next.js application, Prisma schema/migrations, database scripts, tests, and CI workflow.data-mining/
Raw/clean data assets, notebooks, Python pipeline module, generated SQL statements.
- Node.js 20+
- Yarn 1.22+
- PostgreSQL 15+ (local)
- Python 3.11+
uvfor Python dependency management
cd flighter
cp .env.example .env
yarn install
yarn db:reset
yarn devSet DATABASE_URL, SHADOW_DATABASE_URL, and BOOKING_LOOKUP_SECRET in flighter/.env before first run.
App runs at http://localhost:3000.
cd data-mining
python3 -m uv sync
python3 -m uv run -m pipeline.cli generate-seeds --skip-schedulesFrom flighter/:
yarn lint
yarn typecheck
yarn test:unit
yarn build
yarn test:integrationIntegration tests exercise real HTTP endpoints with seeded database state:
GET /api/flightsPOST /api/bookingsGET /api/bookings(lookup flow)
- Deterministic seed loading is favored over ad-hoc inserts for reproducibility.
- Demo booking/payment behavior keeps realism while allowing deterministic test overrides.
- Data is cleaned for product-style UX and query stability, not real-world airline operations.
- App documentation:
flighter/README.md - Data pipeline documentation:
data-mining/README.md - License:
License
