About this project

Poindexter is an open-source (Apache 2.0, Glad Labs LLC) content pipeline meant to run on a single operator's own machine. According to the README it is the production system behind gladlabs.io, with 200+ live posts and 2,000+ pipeline runs recorded, and it is explicitly positioned for solo operators and indie publishers rather than marketing teams wanting a one-click hosted app. What the pipeline does: it discovers candidate topics from HackerNews, Dev.to and configurable niche feeds; researches each topic with web search and source verification; writes long-form drafts using local Ollama models; reviews every draft with multi-model adversarial QA; runs anti-hallucination validation over people, statistics and quotes; and publishes finished work as static JSON, RSS and JSON Feed 1.1 to any S3-compatible storage. Optional and opt-in stages add AI images, podcast audio and short text-to-video clips. The system also monitors itself through Grafana dashboards and a watchdog daemon, with alerts over Telegram or Discord. The default model set is four Ollama models: gemma3:27b as writer and fallback, phi4:14b as adversarial QA critic, qwen3:8b for fast tasks such as SEO and routing, and nomic-embed-text for embeddings into pgvector. The README notes the critic deliberately comes from a different model family than the writer. Model routing (writer, critic, research, summarizer, embedder) is stored in the database and can be changed at runtime; additional vision and voice models are pulled only for the features that need them. Cloud providers (Anthropic, OpenAI, Groq, OpenRouter and others) are available through an optional LiteLLM plugin gated by a cost guard. Quality control is the project's stated emphasis. The README describes 15 QA rails combining cross-model LLM critics, DeepEval and Ragas evaluations, deterministic anti-hallucination validators, citation verification against the research corpus, and vision QA on generated images. Each rail is database-configurable as advisory or blocking, thresholds are tunable at runtime, and near-miss drafts get one bounded revision pass before rejection. Architecturally it is a kernel plus modules plus capability plugins. Components do not import each other; PostgreSQL with pgvector acts as the shared bus. The content pipeline is a declarative LangGraph DAG stored in the database (about 47 nodes) with Postgres checkpointing for resumable runs, dispatched via Prefect. A standalone watchdog daemon checks services on a 5-minute cycle and restarts failures where it can. Configuration lives in an app_settings table (1,700+ settings) rather than environment variables, editable by CLI, SQL or REST, and auth uses OAuth 2.1 client credentials with per-consumer scoped JWTs. Extension points are organised into 18 plugin entry-point groups — Taps, TopicSources, LLM/image/TTS/video/audio/caption providers, PublishAdapters, Probes, Jobs, Stages, Reviewers and full Modules. Plugins are ordinary pip packages registering setuptools entry points, and the README states the first production plugin is the LiteLLM provider. Setup requires Docker, Ollama, Python 3.13+ and an NVIDIA GPU with 8 GB+ VRAM (CPU is supported but slow); native Windows cmd/PowerShell is not supported and Git Bash or WSL2 is required. Docker Compose profiles range from 4 containers for a bare installation to 45 for the full operator stack. The README is candid about status: the project is in alpha, there is no managed hosting or multi-tenant recipe, the database schema is not yet stable across releases, the third-party plugin ecosystem is nascent, and text-to-video remains alpha with roughly 28 GB VRAM headroom. It reports 17,000+ unit tests in CI along with migration smoke tests and link-rot checks, and every push runs secret scanning, CVE scanning and SBOM generation. The project is licensed Apache 2.0, relicensed from AGPL-3.0.