This project aims at reviving aero-offers.com - invaluable source of price trends for gliders and other aircrafts, originally developed and maintained by @rthaenert
-
ui- vue.js application. Deployed as Azure Static Web App (for free). -
backend- web api:
- python flask app with few REST endpoints
- deployed as a lightweight Azure Container App (running 24/7)
- update offers scheduled job:
- scrapes new offers from few ads portals (e.g. soaring.de) and stores them in the database
- runs classifier for not yet classified offers to find exact manufacturer and model, utilizing Gemini LLM api, which provides excellent accuracy compared to legacy, rule-based classifier.
- it's much more resource-heavy than API, bundled in the same Docker image as
api, deployed as Azure Container Job.
- web api:
-
db- Azure CosmosDb NoSQL fully managed database (for free; check #135 for decision record). -
terraform- deployment infrastructure to Azure
Trunk Based Development and Continuous Deployment is utilized here - all changes pushed/merged to main are automatically deployed to production env. Currently, the project is running in Azure, managed via Terraform.
- Scraper: update db offer if price or location (or any other parameter) has changed
- aero-offers.com
- improve aircraft types structure and introduce 2 levels: glider (e.g Discus 2c 18m) and model (Discus 2cFES 18m) as prices between models sometimes differ significantly
- admin panel for manual (re) classification (or community-based)
- crawler for Facebook Marketplace - do they have an api?
- crawler for https://www.aircraft24.de
- crawler for https://plane-sale.com
docker compose up --build - starts CosmosDb and Python Flask backend
- python 3.13+
- uv (
pip install uv) - docker (compose)
- nodejs
Start CosmosDb emulator in docker (available for debugging via localhost:1234):
docker-compose up cosmosdbInit python environment
cd backend
uv syncSet up auto-formatting and lint fix before commit (recommended:
git config core.hooksPath hooksStart backend api (python app):
cd backend
./run_api_in_docker.sh
Start UI (vue app):
cd ui
npm run dev
UI has own, detailed README.md file.
Run crawlers/spiders & classifier:
cd backend
./run_spiders.sh && ./run_classifier.sh