Last reviewed on March 18, 2026.
Alt is a Compose-first knowledge platform built for turning information into reusable knowledge. Starting from RSS ingestion, Alt runs a local-first AI pipeline for summarization, tag extraction, search, recap, and RAG-powered Q&A, then brings the results together in Knowledge Home — the main surface for discovering, understanding, recalling, and revisiting what matters.
Built as an ambitious solo project with production-quality goals, Alt treats privacy, observability, and system boundaries as product features, not afterthoughts. It is designed around a clear stance: not a lightweight RSS reader, but a local-first knowledge operations system for people who want to ingest information, structure it, and find it again later.
Key Capabilities: RSS Ingestion • Knowledge Home (event-sourced discovery and recall surface) • AI Enrichment (LLM Summaries, Tag Extraction, Query Expansion, Re-ranking) • Full-Text Search • RAG Q&A (Ask Augur) • 3/7-Day Recaps • Morning Letter & Evening Pulse • Tag Verse (3D) & Tag Trail • Swipe Mode • Japanese TTS • Local LLM (Ollama) • ClickHouse Analytics • TDD-First Development
Alt is organized as a Compose-first monorepo with Go, Python, Rust, TypeScript, Deno, and F# services. Docker Compose is the source of truth for local orchestration. Historical Kubernetes assets under stopped-using-k8s/ are reference-only.
Alt is for developers and operators who want a local-first system for:
What makes it different:
At a high level, Alt is structured into five layers:
nginx, auth-hub, Kratosalt-frontend-svalt-backend, alt-butterfly-facade, mq-hubpre-processor, news-creator, tag-generator, search-indexer, recap-worker, rag-orchestrator, tts-speakerrask-*flowchart LR
User((User)) --> Nginx[nginx]
Nginx --> Auth[auth-hub / Kratos]
Nginx --> FE[frontends]
FE --> API[alt-backend / BFF]
API --> MQ[mq-hub / Redis Streams]
API --> DB[(PostgreSQL)]
API --> KS[knowledge-sovereign]
KS --> SDB[(sovereign-db)]
MQ --> IDX[search-indexer]
MQ --> TAG[tag-generator]
API --> PRE[pre-processor]
PRE --> NC[news-creator / Ollama]
API --> RAG[rag-orchestrator]
API --> RECAP[recap-worker]
API -. logs .-> RASK[rask-log-aggregator]
IDX --> MEILI[(Meilisearch)]
RASK --> CH[(ClickHouse)]
Default orchestration starts from altctl up, which reads .altctl.yaml and brings up db, auth, core, and workers. Optional stacks such as ai, recap, rag, logging, observability, perf, and backup can be enabled as needed.
These are the main entry points for new contributors:
| Path | Purpose |
|---|---|
compose/ |
Split Docker Compose stack definitions. compose/compose.yaml is the all-in-one entrypoint. |
altctl/ |
CLI for stack orchestration, migrations, logs, and operational workflows. |
alt-backend/ |
Core Go backend exposing REST and Connect-RPC APIs. |
alt-frontend-sv/ |
SvelteKit frontend currently used for the main product surface. |
pre-processor/, news-creator/, tag-generator/, search-indexer/ |
AI and enrichment pipeline services. |
recap-worker/, recap-subworker/, dashboard/, recap-evaluator/ |
Recap pipeline and supporting tools. |
rag-orchestrator/, tts-speaker/ |
RAG and TTS capabilities. |
auth-hub/, auth-token-manager/ |
Identity-aware edge auth and token refresh tooling. |
rask-log-forwarder/, rask-log-aggregator/ |
Structured log collection and ClickHouse ingestion. |
docs/ |
ADRs, service notes, proposals, and runbooks. |
uvalt-frontend-svcp .env.template .env
Edit .env for your local machine if you need to override defaults.
altctl (recommended)cd altctl
go build -o altctl .
You can keep using the local binary from altctl/, install it onto your PATH, or skip this step and use raw Compose instead.
altctl up
If you prefer raw Compose:
docker compose -f compose/compose.yaml -p alt up -d
Open the product at http://localhost/ or http://localhost:4173/, then verify the core services:
curl http://localhost:9000/v1/health
curl http://localhost:7700/health
curl http://localhost:8888/health
curl http://localhost:9250/health
altctl down
altctl down --volumes
altctl up ai
altctl up recap
altctl up rag
altctl up logging
altctl up observability
altctl status
altctl list
altctl logs alt-backend
altctl exec db -- psql -U postgres
make migrate-status
make recap-migrate-status
make recap-migrate
docker compose -f compose/compose.yaml -p alt ps
docker compose -f compose/compose.yaml -p alt logs -f alt-backend
docker compose -f compose/compose.yaml -p alt up -d search-indexer
The monorepo has many services, but these are the most important ones to understand first:
alt-frontend-sv: current user-facing frontendalt-butterfly-facade: BFF for frontend-specific aggregationalt-backend: REST and Connect-RPC API, core business logicauth-hub: edge identity validation and X-Alt-* header authoritymq-hub: event distribution for asynchronous processingpre-processor: feed processing, quality gates, summarization orchestrationnews-creator: LLM-backed summary and generation servicetag-generator: ML-powered tag extractionsearch-indexer: Meilisearch indexing and search integrationrecap-worker and recap-subworker: 3-day and 7-day recap pipelinesrag-orchestrator: grounded retrieval and answer orchestrationtts-speaker: Japanese TTS servicerask-log-forwarder and rask-log-aggregator: structured log pipeline into ClickHousealtctl: operational CLI for bringing the system up and managing itAlt is a polyglot monorepo. The smallest useful test for the affected area should be your default verification target.
cd alt-frontend-sv && bun test
cd alt-frontend-sv && bun run check
cd alt-frontend-sv && bun run build
cd alt-backend/app && go test ./...
cd pre-processor/app && go test ./...
cd search-indexer/app && go test ./...
cd auth-hub && go test ./...
SERVICE_SECRET=test-secret uv run pytest
uv run pytest
uv run pyrefly .
uv run ruff check
cd recap-worker/recap-worker && cargo test
cd rask-log-forwarder/app && cargo test
cd rask-log-aggregator/app && cargo test
cd auth-token-manager && deno test
CLAUDE.md files for repo and service-specific workflowsStart here if you want more detail than the root README should carry:
.env.template as a local starting point only.SERVICE_SECRET is used for service-to-service authentication across multiple services.auth-hub is the identity boundary for forwarded user context.Contributions are welcome, but this is an opinionated monorepo with strong architectural constraints.
Before making changes:
CLAUDE.md for the area you are editing.stopped-using-k8s/ untouched unless the task explicitly targets historical manifests.If you are exploring the codebase for the first time, start with altctl/, alt-backend/, alt-frontend-sv/, and one pipeline service such as pre-processor/ or recap-worker/.
Alt is licensed under Apache License 2.0.