Project · Backend & AI

EventHunter

An open-source event discovery engine that scans 34+ sources, enriches them with a local LLM, and presents everything in a single interface — IT events and concerts.

FastAPIPostgreSQLCeleryPlaywrightLiteLLMOllamaReactDocker
View on GitHub

Overview

What It Does

Instead of checking dozens of sources one by one, it automatically scans 34+ sources for IT events and concerts worldwide, enriches them with AI, and presents them in one interface. The same engine can track any topic tomorrow.

Local LLM Choice

All AI inference runs locally on a Mac Studio M4 Max via Ollama (qwen3:32b). Token cost is zero, scraped content never leaves the machine (KVKK/GDPR), and there are no rate limits.

Automation

Celery Beat + RedBeat kicks off a full crawl every Monday at 03:00 UTC. The schedule lives in Redis and can be changed at runtime. URL-based deduplication ensures the same event is never stored twice.

Features

🗓️
IT Events

Conferences, summits, webinars, workshops, hackathons — from platform giants to cybersecurity and analyst firms

🎵
Concerts & Festivals

City-based tour tracking, electronic music, nationwide ticket news · genre tagging

💬
Chatbot

Two-stage architecture: intent resolution → real DB query · no hallucinations

🎯
Recommendation Engine

Quality × 0.4 + match × 0.6 · scored against the user’s interests and city profile

🔎
Filtering

Region, category, company, city, date range, online/in-person, content type + free-text

🕸️
Crawler

Playwright (headless Chromium) renders JS-heavy pages · httpx + feedparser for static sources

Architecture

Data flow: each source is scanned, HTML is cleaned, an LLM produces structured JSON via the LiteLLM proxy, results are deduplicated, written to PostgreSQL, and served in the React UI.

  1. 1Playwright (headless Chromium)
  2. 2HTML cleaning (script / nav / footer removed)
  3. 3LiteLLM Proxy
  4. 4LLM → Structured JSON
  5. 5URL-based deduplication
  6. 6PostgreSQL (upsert)
  7. 7React UI

Tech Stack

BackendFastAPI 0.115 + SQLAlchemy 2.0 async
DatabasePostgreSQL 16
Task queueCelery 5.4 + Redis 7
CrawlerPlaywright + httpx + feedparser
AILiteLLM Proxy → Ollama / OpenAI / Anthropic
FrontendReact 18 + Vite 6 + TypeScript + Tailwind CSS
OrchestrationDocker Compose (7 services) · Nginx Alpine
HardwareMac Studio M4 Max (Apple Silicon ARM64)

Full Write-up

Read the blog post where I explain why and how I built EventHunter.

Read the blog post