# Devrazzi: filtering developer news through layers of models

> A content pipeline that screens software and AI news locally with Ollama, hands survivors to larger models, and publishes Turkish and English syntheses.

- What it does today: Filters software and AI news through a local Ollama pass and hands the upper layers to the larger models, then writes and publishes the TR/EN synthesis on its own; the web and App Store builds are live. Anyone who wants their daily developer news in one feed can read it.
- Form: Web app, Mobile app
- Maturity: Release candidate
- State: Stable
- Focus: Automation & data pipelines
- Started: 2026-06-28
- Technologies: TypeScript, Node.js, Prisma, PostgreSQL, Ollama, DeepSeek, Gemini, OpenAI, Claude, Fastify, Astro
- Tags: #ai, #content-pipeline, #automation
- Website: https://devrazzi.com
- App Store: https://apps.apple.com/us/app/devrazzi-curated-tech-news/id6790693413
- Source: https://www.muhammetsafak.com.tr/en/labs/devrazzi/
- Language: en-US
- Author: Muhammet Şafak

---
The problem is not scarcity, it is the signal-to-noise ratio. And it is not
general tech news either: release notes, model launches, library breakages,
engineering write-ups — the software and AI slice a developer can actually use.
Devrazzi is an attempt to have a machine do that filtering: pull the sources,
score them, drop what falls below the bar, draft the rest as Turkish and English
syntheses, publish. The flow runs end to end on its own.

## Screen locally, hand the rest upward

A state machine at the core: `RAW → EVALUATING → APPROVED/REJECTED →
PUBLISHED`. The first screen runs **locally**: a model on Ollama
(`deepseek-r1:14b`) scores every item on four axes — originality, technical
depth, pragmatism, ecosystem impact. Below an average of 7, the item dies there.
Volume sits at this layer, which makes screening cost nothing.

Whatever clears the bar moves up. The upper layers are the DeepSeek, Gemini,
OpenAI and Claude APIs, and none of them does another's job: each is wired to a
distinct step of the pipeline, matched to the context length and
quality-versus-cost profile that step demands. The cheap ones see many items,
the expensive ones see few. There is a single provider interface; model choice is
configuration, and a failing provider hands off down the chain. All model output
is bound to a strict JSON contract — a response that breaks the contract is not
accepted.

Two defences are in from the start: the text sent to the model is truncated (no
raw scrape goes in as-is), and system instructions are sanitised so a malicious
feed cannot hijack the model. On a pipeline with no human in the middle, neither
is optional.

## Phase 0 is live, article extraction is not

Phase 0 is verified live: 5 sources, 80 RAW items, processed end to end and
persisted; the `REJECTED` path behaved as expected. The base is TypeScript —
modular packages (config / core / db / llm / ingestion / pipeline), a Prisma
schema, and PostgreSQL 16's JSONB keeping the raw payload intact. The output is
visible at both ends: [devrazzi.com](https://devrazzi.com) and the iOS app.

The known gap is stated plainly: there is no full-article extraction. So
sources that feed "a link and two sentences" — Hacker News, Reddit — get
filtered out for lack of content. Expected, but not acceptable.

## Closing the blind spot

That gap is the next round: without full-article extraction, the pipeline's most
valuable sources sit in its blind spot. After that comes per-layer cost and
quality measurement — which step deserves which model is currently settled by
intuition, not by numbers.
