{"id":51475357,"url":"https://github.com/asmuelle/stringer","last_synced_at":"2026-07-06T20:30:32.662Z","repository":{"id":366029329,"uuid":"1266480736","full_name":"asmuelle/stringer","owner":"asmuelle","description":"An always-on research desk for paid-newsletter operators: living beat wikis plus a daily citation-pinned delta brief, deduplicated against everything you've already published.","archived":false,"fork":false,"pushed_at":"2026-07-05T14:54:32.000Z","size":1020,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-05T16:16:58.612Z","etag":null,"topics":["journalism","llm","media","monitoring","newsletters","research","saas"],"latest_commit_sha":null,"homepage":"https://asmuelle.github.io/stringer/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asmuelle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-11T16:51:55.000Z","updated_at":"2026-07-05T14:51:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/asmuelle/stringer","commit_stats":null,"previous_names":["asmuelle/stringer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/asmuelle/stringer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fstringer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fstringer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fstringer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fstringer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asmuelle","download_url":"https://codeload.github.com/asmuelle/stringer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmuelle%2Fstringer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35205739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["journalism","llm","media","monitoring","newsletters","research","saas"],"created_at":"2026-07-06T20:30:32.075Z","updated_at":"2026-07-06T20:30:32.644Z","avatar_url":"https://github.com/asmuelle.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stringer\n\n[![CI](https://github.com/asmuelle/stringer/actions/workflows/ci.yml/badge.svg)](https://github.com/asmuelle/stringer/actions/workflows/ci.yml)\n\n\u003e An always-on research desk for paid-newsletter operators: living beat wikis plus a daily citation-pinned delta brief, deduplicated against everything you have already published — turning 20 hours of weekly research into 2 without ever pitching a story you already covered.\n\n**Category:** LLM wiki / auto-research (living documents + delta alerts, à la Karpathy)\n\n## Concept\n\nAn always-on research desk for paid-newsletter operators: living beat wikis plus a daily citation-pinned delta brief, deduplicated against everything you have already published — turning 20 hours of weekly research into 2 without ever pitching a story you already covered.\n\n## Target User \u0026 Payer\n\nSolo and small-team paid-newsletter operators on Substack/Beehiiv/Ghost in business, finance, policy, and tech — from the 45+ newsletters above $1M ARR down to $5-50K/mo operators. The writer pays personally because research hours are their core cost of goods and their byline rides on every sourced claim.\n\n## Auto-Research Mechanic (the living document + delta engine)\n\nOnboarding ingests the writer's full archive to build an 'already-covered' memory. The operator defines beats ('EU AI regulation', 'fintech infra M\u0026A'); the agent maintains a living beat wiki — entities, narrative timelines, open questions — updated overnight via batch from 50-200 sources per beat (RSS, primary feeds, filings, earnings transcripts, niche forums, X lists) with diff-based ingestion. Flash/Haiku triage scores each item for novelty against the archive AND all prior briefs, with slop filtering and source-quality scoring. Each morning a delta brief lands: what changed, why this publication's readers care, three suggested angles, pull-quotes with pinned quote + URL + timestamp, and callbacks ('you covered this March 3 — the new development is X'). One-click pulls any wiki section with sources into a draft; the archive doubles as a fact-checked back-catalog and corrections log.\n\n## Product Surface\n\nDaily email/Slack delta brief (the operator's native medium) + web workspace for beat wikis and draft pulls, with one-click export to Notion/Google Docs/Substack drafts. Overnight latency is irrelevant — exactly what makes batch economics work.\n\n## Why Now (2026 timing)\n\nSubstack's paid boom concentrated in exactly the business/finance/politics/tech verticals where research is heaviest; ChatGPT Pulse validated the morning-brief format but is $200/mo, mobile-only, lifestyle-skewed, with no export or citation workflow; 'AI slop' as 2025 Word of the Year means provenance-rich sourcing is a differentiator writers pass through to paying readers; picks-and-shovels sells to curators instead of competing with them.\n\n## Competition \u0026 Gap\n\nFeedly's real monitoring tier ($14.4-19.2K/yr enterprise MI), Particle ($2.99 consumer catch-up), generic ChatGPT/Perplexity (one-shot, no beat memory, 37% citation misattribution — career-ending under your own byline), human VAs at $1-3K/mo.\n\n## Comparables\n\n- Feedly Market Intelligence — $1,600/mo Standard, $2,400/mo Advanced, billed annually ($19.2-28.8K/yr); the enterprise monitoring price ceiling\n- Feedly Pro/Pro+ — ~$7-12/mo prosumer RSS monitoring; the low anchor for individual writers\n- ChatGPT Pro with Pulse — $200/mo; 5-10 generic daily morning briefs, mobile-only, no export/citation workflow; rollout to $20/mo Plus planned\n- Perplexity — Pro $20/mo, Enterprise $34/seat/mo; cited one-shot research, no beat memory or archive dedup\n- Brand24 — from $79/mo; Mention Solo $41/mo; Awario $24/mo; Prowly $119/mo — mid-market media monitoring ladder\n- Meltwater / Brandwatch / Talkwalker — custom quotes, typically $1,000+/mo enterprise media intelligence\n- Human VA/researcher — $1-3K/mo, the manual alternative Stringer displaces\n- Substack platform economics (payer health) — 8.4M paid subs Q1 2026 (+68% YoY), $45M platform revenue 2025 via 10% take, ~45-50 newsletters \u003e$1M ARR\n\n## Tech Stack \u0026 Unit Economics\n\nIngestion: own RSS/Atom + sitemap diff poller (near-free) with content-hash dedup; Firecrawl or Zyte for JS-heavy/anti-bot pages; free primary feeds (SEC EDGAR full-text, Federal Register, EUR-Lex, GovInfo, court RSS); entry-tier transcript API (Finnhub/API Ninjas ~$50-150/mo shared) — skip X or pass through the customer's own API key; YouTube captions API. Archive memory: ingest public archive RSS/exports, chunk + embed (Voyage-3 or text-embedding-3-large), pgvector on Postgres (Neon/Supabase); novelty = cosine-sim against archive + all prior brief items with an LLM tiebreak. Triage: Gemini Flash or Claude Haiku 4.5 via Batch API (50% discount) with structured outputs for novelty/slop/source-quality scoring. Synthesis: Claude Sonnet 4.6 (or GPT-5-class) with prompt caching for the morning brief + wiki diffs. Citation grounding: verbatim-quote extraction with post-hoc exact string-match verification against fetched HTML — reject any quote that fails match; store quote + URL + timestamp + content hash (this gets precision to ~99%; recall remains unguaranteed and should never be promised). Orchestration: Inngest or Temporal nightly DAGs per customer timezone; SQS-grade queue fine for v1. Surface: Next.js workspace, Postmark/Resend email, Slack app; Notion/Google Docs export APIs; Substack draft export via browser automation (fragile, no official API). Unit economics per $99 pro user (15 beats, ~1,500 nightly source checks): crawl/proxy $10-40, batch triage $5-10, synthesis w/ caching $8-25, embeddings/storage $1-3, email/infra $2 = $25-80/mo COGS → 20-75% gross margin on commodity-source coverage; adding real X/transcript/paywall coverage pushes COGS past $100/user and breaks the model. Viable as a 2-3 person niche business at $49-99/mo targeting $1-3M ARR; not venture-defensible.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasmuelle%2Fstringer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasmuelle%2Fstringer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasmuelle%2Fstringer/lists"}