Ulaks — Turkey's News Memory: AI-Powered Turkish News Aggregator

Ulaks is Turkey's news memory: it merges fragmented Turkish news into followable topic timelines using semantic clustering, so readers can discover topics, monitor them, and follow the stories they care about.


Visit the site: Ulaks, Turkey's news memory — https://ulaks.co/ (also in English and German)


What Ulaks is


The Turkish media landscape is fragmented. Every outlet presents its own perspective, some publish contradictory reports, and the same event shows up as dozens of near-identical headlines across sites. Ulaks filters that noise. It collects headlines from Turkish and German news sources within minutes of publication, groups the stories that are about the same thing, and turns them into timelines you can follow instead of an endless scroll of individual articles.


For a reader, that means one place to see what is actually happening today: the day's topics, what is trending, what is quietly important, and the full history of a story from its first report onward. You can browse topics by category (politics, economy, technology, sports, culture, world, science, health, lifestyle), look up people and organisations, search across everything, build personal collections, and follow the topics you care about. The site is available in Turkish, English and German.


Ulaks only aggregates headlines, summaries and links from public RSS feeds. It does not alter, synthesise or republish news content, and every story links back to the original source. AI-generated summaries and titles are labelled as such, in line with Google's E-E-A-T guidelines and the EU AI Act transparency obligations.


How it works


  1. News ingestion. A scheduler seeds a queue with every configured source. Workers fetch and parse the RSS and Atom feeds, sanitise the HTML, extract thumbnails, de-duplicate articles and store them in PostgreSQL. Sources can be added, updated or disabled without touching code.
  2. Topic clustering. Articles get vector embeddings from a self-hosted model, and an offline pipeline built on BERTopic, Sentence-Transformers, UMAP and HDBSCAN groups them by semantic similarity using models that work well for Turkish. Cosine-similarity thresholds are tuned against production data so that a busy news day does not collapse into one giant cluster.
  3. Discovery and curation. AI-generated summaries and titles make topics scannable, and the feeds (trending, hot, latest, top) plus search and category pages surface them to readers.

Ulaks is the continuation of the news platform I first built in 2023. The production database holds well over a million articles, and a mobile app is in progress.


Technologies used in the project


  • Backend: Go with Gin and GORM, PostgreSQL with pgvector for semantic search, Redis caching, RabbitMQ for the ingestion pipeline
  • Embeddings: Ollama running nomic-embed-text locally, so continuous embedding of new articles costs nothing per call
  • Topic modelling: Python, BERTopic, Sentence-Transformers (paraphrase-multilingual-MiniLM-L12-v2), UMAP and HDBSCAN
  • Frontend: Next.js with TypeScript, Chakra UI, TanStack Query and NextAuth.js; localisation with react-intl; Playwright and axe-core accessibility tests
  • Platform: Kubernetes on Hetzner Cloud provisioned with Terraform, Hetzner Object Storage for media, Prometheus metrics, OpenAPI docs, web push notifications
  • Delivery: GitHub Actions building container images for every service and rolling them out to the cluster