FiTechAroma // Platform Overview

My Cloud-Based
News Monitoring
& AI Analysis Platform

A subscription SaaS platform that ingests broadcast news and social media, runs it through an LLM pipeline for deep analysis, and surfaces everything in a real-time analyst dashboard — built on proven open-source infrastructure with enterprise-grade AI at its core.

5M+
Articles/day
<15 min
Ingest latency
200+
Languages
99.9%
Uptime SLA
Platform Overview

The Big Picture

This is a subscription SaaS platform that ingests broadcast news (RSS, APIs, scraped streams) and social media (Twitter/X API, Reddit, YouTube transcripts), runs it through an AI analysis pipeline for deep enrichment, and surfaces everything in a real-time web dashboard.

The platform is designed around a clear separation of concerns: a high-throughput ingestion tier, a decoupled AI analysis tier, a persistent data tier, and a clean API layer serving a React analyst dashboard. Apache Kafka sits at the center, decoupling producers from consumers so that a slow LLM API call never backs up the scrapers.

Ingestion Layer

Continuous Content Collection

Python microservices using Feedparser, Tweepy, and Scrapy poll sources on configurable schedules. Every item is published as a typed event to Kafka. Faust stream consumers handle real-time deduplication via Redis Bloom filters before any article touches the LLM pipeline.

FeedparserTweepyScrapyKafkaFaust
AI Analysis Layer

LLM-Powered Enrichment

Unique articles are sent to the Claude API with a structured prompt requesting JSON output: summary, entities, sentiment score, bias score, topic tags, and named persons/organizations. A local Mistral 7B handles first-pass triage and deduplication at near-zero cost before escalating to Claude.

Claude APIMistral 7BNLPSentiment
Storage Layer

Structured & Semantic Storage

Analysis results plus raw embedding vectors go to PostgreSQL with the pgvector extension. Full article text is indexed in Elasticsearch for hybrid full-text and semantic search. Redis handles session state, rate limiting, and real-time pub/sub for WebSocket feeds.

PostgreSQLpgvectorElasticsearchRedis
Delivery Layer

Real-Time Analyst Dashboard

FastAPI serves both REST endpoints and WebSocket channels. React dashboard with live news feed, filterable by topic, sentiment, and source. A semantic search bar queries pgvector for conceptually similar articles. Subscribers set keyword alerts delivered via email or Slack.

FastAPIReactWebSocketAuth0Stripe
Interactive Architecture

Full Platform Architecture

↗ Click any component to explore it in detail

Sources Ingest AI Core Backend Frontend Infra RSS / FeedsAP, Reuters,50+ sources Social APIsTwitter/X,Reddit, YT BroadcastScrapy spiders,transcript APIs News APIsNewsAPI,GDELT, AYLIEN Apache Kafka — Message Busraw-news · social-events · alerts topics | Schema Registry enforced Dedup ServiceMistral 7B + Redis Bloom Faust ProcessorPython stream consumer Alert RouterKeyword matching Claude Sonnet (Anthropic API)Summarize · Entity extraction · Sentiment · Bias score · Topic tag · Structured JSON output PostgreSQL + pgvectorArticles + embeddings ElasticsearchFull-text search index RedisCache · pub/sub · rate limit FastAPI (Python 3.12)REST API · WebSockets · OpenAPI docs Auth0 + StripeAuth · subscription tiers React + Vite DashboardLive feed · search · analysis view Alert DeliveryEmail (SES) · Slack webhook · SMS Infrastructure layer Proxmox VEDev / staging VMs Ansible / AWXPlaybooks + Vault K3s / K8sProd orchestration Prometheus+GrafanaMetrics · logs · alerts GitHub Actions CI/CD · GitLab self-hosted · Harbor registry

Click any component
in the diagram

Infrastructure Layer

Proxmox + Ansible

Proxmox VE serves as the on-premises virtualization layer for dev and staging environments. I spin up VMs and LXC containers for each microservice there before promoting to production cloud infrastructure. This keeps the dev/staging environment structurally identical to production, which eliminates an entire class of "works on my machine" failures.

Ansible is the configuration management backbone. I write idempotent playbooks to bootstrap Proxmox VMs, install Docker, configure firewalls, deploy services, and manage secrets via Ansible Vault. The same playbooks run against cloud VMs (AWS EC2 or DigitalOcean) so staging and prod are identical. Ansible's agentless SSH-based execution model means no agent to manage on every node.

In production, RKE2 (a FIPS-validated Kubernetes distribution) orchestrates all containerized services. Each microservice — ingestion, analysis, API, alert — runs in its own pod with defined resource limits and health checks. Horizontal Pod Autoscaler handles volume spikes automatically.

AI / LLM Strategy

The LLM Choice — Claude API

I use Claude Sonnet via the Anthropic API as the primary analysis engine. For this specific use case — long-form news article analysis with structured JSON output — it's the right choice for three concrete reasons.

Claude's long context window handles entire news articles in a single call without chunking, which preserves the full narrative context that shorter models lose when articles are split. Its structured output reliability is critical here: the downstream pipeline expects JSON, and inconsistent JSON generation from the model would require extensive error handling and retry logic that adds latency and cost. Claude's nuanced sentiment and bias detection outperforms smaller models on the kind of geopolitically complex language that appears in international news coverage.

For cost optimization, a locally-hosted Mistral 7B via Ollama handles the first-pass triage and deduplication step. Near-duplicate articles are filtered out before they touch the Claude API, reducing API spend by roughly 40% on typical news cycles where breaking stories are picked up by dozens of outlets simultaneously.

Primary LLM — Claude Sonnet

Deep Analysis Tasks

Article summarization, named entity recognition, sentiment scoring (-1 to +1), bias score, narrative framing classification, topic taxonomy tagging. All returned as validated JSON to the Faust processor.

Long contextStructured JSONSentimentNER
Secondary LLM — Mistral 7B (Ollama)

Triage and Deduplication

Near-zero cost first pass using semantic embeddings from the local model. Compared against a Redis Bloom filter of recently-seen article fingerprints. Only genuinely unique content escalates to Claude, keeping API costs predictable at scale.

Self-hostedRedis BloomCost control
Technology Stack

Every Layer, Explained

The full technology stack, organized by layer. Every choice here has a specific operational reason — no cargo-culting.

DomainTechnologyWhy This Choice
VirtualizationProxmox VE + CephOn-prem dev/staging, no SAN dependency, HA without shared storage
Config ManagementAnsible + AWXAgentless, idempotent, RBAC-gated in AWX, integrates with ITSM
Container OrchestrationKubernetes (RKE2)FIPS-validated, CNCF-compliant, HPA for surge workloads
Secrets ManagementHashiCorp VaultDynamic secrets, short-lived credentials, PKI engine, audit log
Message BusApache Kafka + Schema RegistryDecouples ingestion from analysis, schema enforcement, replay
Stream ProcessingPython + FaustStateful Kafka consumer, easy Python-native development
Ingestion — RSSFeedparserHandles malformed RSS/Atom, configurable polling intervals
Ingestion — SocialTweepy (Twitter/X v2)Official API client, supports filtered stream and search endpoints
Ingestion — WebScrapy + PlaywrightScrapy for static, Playwright for JS-rendered pages
LLM — PrimaryClaude Sonnet (Anthropic API)Best structured output, long context, nuanced analysis
LLM — TriageMistral 7B (Ollama)Self-hosted, near-zero cost, deduplication embeddings
TranscriptionWhisper (self-hosted)Broadcast audio to text, GDPR-safe (no external API)
TranslationNLLB-200 (self-hosted)200-language coverage, no per-call cost
Primary DatastorePostgreSQL 16 + pgvectorStructured data + vector embeddings in one database
SearchElasticsearchFull-text + vector hybrid search, aggregations for dashboards
Cache / Pub-SubRedis SentinelHA without external orchestration, pub/sub for WebSocket feeds
Backend APIFastAPI (Python 3.12)Async, auto OpenAPI spec, WebSocket support, type-safe
FrontendReact 18 + Vite + TypeScriptFast build, type safety, excellent ecosystem for dashboards
AuthAuth0OAuth 2.0, MFA, RBAC, social login — no auth infrastructure to maintain
BillingStripeSubscription management, usage-based billing, customer portal
CI/CDGitHub ActionsBuild → test → deploy pipeline, native container build support
ObservabilityPrometheus + Grafana + LokiMetrics, dashboards, log aggregation in one stack
Subscription Model

Pricing Tiers

The subscription model is structured around access depth and volume. Tier boundaries are enforced at the API gateway level, not the frontend.

Free
$0/mo

50 articles per day

24-hour content delay

Basic dashboard access

No keyword alerts

No API export

Business
$149/mo

Unlimited articles

Full API access

Custom topic taxonomies

Team seats included

JSON / CSV / XLSX export