πŸ“¬ DaftAlerts

Your Daft.ie inbox, organized.

Get started View on GitHub


What is DaftAlerts?

DaftAlerts is a personal web application that ingests property alert emails forwarded from Daft.ie, parses them into structured listings, geocodes each property via Google Maps, and serves a filtered REST API to a separately-built React frontend. Built for a single user, it runs on an Oracle Cloud Infrastructure Ubuntu VPS, receives mail via Postfix SMTP piping, and stores everything in SQLite.

The stack:

  • .NET 10 β€” Minimal APIs + EF Core + Clean Architecture
  • SQLite β€” file-based storage for properties, presets, raw emails
  • MimeKit + HtmlAgilityPack β€” email parsing
  • Google Maps Geocoding API β€” Eircode β†’ lat/lng
  • Postfix β€” SMTP ingress on the VPS
  • Docker + GitHub Actions β€” build, test, release

Documentation

Document What’s inside
πŸ“ Architecture Clean Architecture layers, project dependencies, data flow, and the three background workers that keep DaftAlerts running.
πŸš€ Deployment Step-by-step production setup on an Oracle Cloud Ubuntu VPS β€” Postfix SMTP piping, systemd, Nginx, Let’s Encrypt, and Docker Compose.
πŸ” Parser How the Daft.ie email parser works, including Outlook SafeLinks unwrapping and how to add new variants.
🌐 API reference REST endpoint reference β€” authentication, filtering, pagination, bulk operations, and example requests.
🧭 Decisions Architecture Decision Records with the trade-offs behind each major choice.

Quickstart

Run with Docker

docker run -d \
  --name daftalerts-api \
  -p 5080:5080 \
  -v daftalerts-data:/var/lib/daftalerts \
  -e DaftAlerts__Auth__ApiToken=dev-local-token \
  -e DaftAlerts__Geocoding__GoogleApiKey=YOUR_KEY_HERE \
  ghcr.io/guibranco/daftalerts-api:latest

The API listens on http://localhost:5080. In development, Scalar API docs are served at /scalar/v1.

Run from source

git clone https://github.com/guibranco/daftalerts-api.git
cd daftalerts-api

dotnet restore DaftAlerts.sln
dotnet build DaftAlerts.sln --configuration Release

# Create schema
dotnet ef database update \
  --project src/DaftAlerts.Infrastructure \
  --startup-project src/DaftAlerts.Api

# Run
dotnet run --project src/DaftAlerts.Api

Full production setup (Postfix + systemd + Nginx + Let’s Encrypt) is covered in the Deployment guide.


Data flow at a glance

flowchart LR
    A[πŸ“§ Daft.ie email] --> B[Postfix]
    B -->|pipe to stdin| C[DaftAlerts.EmailIngest]
    C --> D[(SQLite)]
    D -.->|async| E[GeocodingWorker]
    E -->|Google Maps API| F[lat/lng resolved]
    F --> D
    D --> G[DaftAlerts.Api]
    G -->|REST + Bearer auth| H[πŸ–₯️ daftalerts-ui]

Details are in the Architecture guide.


Repo Description
guibranco/daftalerts-api This repository β€” backend API and email ingestion
guibranco/daftalerts-ui React + Vite + TypeScript frontend

License

Distributed under the MIT License.