Cadensend is open source under the MIT licenseRead the source

OPEN SOURCE EMAIL CURRICULUM ENGINE

Teach with sources, not vibes.

Cadensend turns one learning goal into a structured email series. It plans the curriculum, writes every issue grounded in your own sources with real citations, and delivers on schedule — exactly once.

MIT LICENSED · SELF-HOSTED · NO HOSTED SIGNUP

Cadensend dashboard with an AI assistant and three example learning series

0

Duplicate deliveries

Tolerated, by design

<60s

Scheduler claim lag

p95 target

<2min

Approved-send lag

p95 target

Engineering targets from the project's design blueprint. Read the spec

SCOPE

Narrow on purpose.

Cadensend does one thing: turn a single learning goal into a structured email series, and deliver every approved issue reliably and only once. It is not a marketing suite, not a CRM, not an autonomous research agent, and not a bulk-email provider. That discipline shows up in every layer of the architecture.

Not a marketing suiteNot a CRMNot an autonomous agentNot a bulk sender

HOW IT WORKS

Four stages, each one bounded.

01

PLAN

From a learning goal to a validated curriculum.

Describe the topic, the outcome, and who it is for. A LangGraph planning graph turns that brief into a structured plan of modules and issues, then validates coverage and prerequisite ordering before you ever see it.

Create Series wizard

Topic, included and excluded concepts, outcome, audience level, cadence, timezone, and tone — captured once, up front.

Validated plans

Coverage and prerequisite ordering are checked automatically, with a revision pass when validation fails.

Plan Studio

Reorder issues, edit objectives, and lock approved issues so they survive a regeneration of everything around them.

Cadensend series creation screen for defining a learning goal and configuring a new email series
02

GROUND

Every claim traces back to a source you supplied.

Upload files or point Cadensend at URLs. Structure-aware ingestion preserves heading hierarchy, keeps code and tables intact, and records section anchors — so a citation lands on a real location, not a vague gesture at a document.

Idempotent ingestion

Fetch, parse, chunk, embed, verify. Every step is content-hash keyed and safely resumable after a failure.

Scoped retrieval

Queries are filtered to workspace and series before they reach the vector store, then deduped and diversified by source.

Structural citations

The model returns source and chunk references. A deterministic renderer turns them into links, so citations cannot be fabricated.

Cadensend source library showing indexed references with workspace and series scope
03

WRITE

A bounded agent, not an open-ended one.

Separate graphs handle planning and issue generation: retrieve, write, spec the visual, critique, gate on quality, revise within a hard limit. The model returns a validated content tree — never raw HTML, never a raster image.

Structured output only

A validated block AST goes to a deterministic renderer that produces the final email HTML and plain text.

Editorial workspace

Edit subject and preheader, inspect retrieved context, regenerate a single section, and diff against version history.

Diagrams as dataBETA

Mermaid and D2 specs render server-side to SVG, convert to PNG for email, and carry required alt text.

Cadensend Content Studio showing writing controls, an outline, and the editorial workspace
04

DELIVER

Exactly once, even after a restart.

Jobs are claimed from Postgres with FOR UPDATE SKIP LOCKED — a durable queue, not an in-memory timer that forgets on deploy. The delivery record is written before the provider call, so a retry returns the original attempt.

Idempotent sends

Keyed on workspace, issue, recipient, and issue version. Retrying is safe because it cannot produce a second email.

Timezone-correct

Stores the UTC instant beside the original IANA zone, preserving local intent across DST without shifting existing schedules.

Run Center

Every job across generating, awaiting review, scheduled, sending, and failed — with stable error codes and safe retries.

Cadensend dashboard with an AI assistant and three example learning series

SECURITY

Retrieved content is data, never instruction.

The prompt-injection boundary is structural rather than a warning in a system prompt. Retrieval tools return content and metadata only: source text cannot register a tool or change policy, and the writer has no arbitrary network or code-execution access.

Tenant isolation

Workspace scope is enforced in every repository query and tested adversarially across tenants, not left to the model.

No tool escalation

Tool inputs are schema-validated against an allowlist. Ingested text cannot introduce new capabilities.

Hardened ingestion

SSRF controls, size and type limits, and sanitization on everything fetched or uploaded.

Secrets and transport

KMS-backed encryption, and a private, authenticated, TLS-only vector store.

Verified webhooks

Email provider callbacks are signature-checked and replay-protected before they mutate state.

Redacted logging

Prompts and source text are redacted from logs; identifiers are kept for tracing.

ROADMAP

Every release is gated on the last.

No update starts until the previous release's acceptance criteria and operational gates are met.

MVP

NOW

Plan, grounded generation, scheduling, and delivery to a single verified recipient.

Individual learner / creator

Update 1

Hybrid dense and sparse retrieval, reranking, citation coverage scoring, OCR, charts, brand kits.

Technical educators

Update 2

Opt-in audiences, consent and suppression, unsubscribe, analytics, public archives, billing.

Newsletter creators

Update 3

Reader-level segments, quizzes, progress tracking, branching paths, multilingual issues.

Learning businesses

Update 4

Roles, approval chains, SSO, SAML, SCIM, audit export, and data residency.

Companies / training teams

Update 5

Public API, webhooks, LMS and CMS integrations, marketplace, measured scaling.

Partners

BUILT WITH

  • Next.js
  • TypeScript
  • Go
  • Python
  • FastAPI
  • LangGraph
  • PostgreSQL
  • Qdrant
  • Redis
  • MinIO / S3
  • Brevo

FAQ

Common questions.

Is there a hosted version I can sign up for?

No. Cadensend is an open-source, MIT-licensed project. There is no hosted signup — you clone the repository and run it yourself.

Can it send to a mailing list today?

Not yet. The current build sends only to your own verified address, by design. Opt-in audiences, consent, and suppression are scoped for a later update and gated on those controls being hardened first.

How does it avoid sending the same issue twice?

Delivery is keyed on workspace, issue, recipient, and issue version, and the record is written before the provider call. A retry returns the original attempt instead of creating a second send.

Can the model browse the web or run code on its own?

No. The writer has no arbitrary network or code-execution tool. Retrieval returns content and metadata only, and every tool input is schema-validated against an allowlist.

What does it cost to run?

Cadensend itself is free. You pay for whatever you plug into it: your LLM provider, your email provider, and the infrastructure you host it on.

Clone it, run it, send your first series.

Cadensend is MIT licensed and self-hosted. Everything you need to run it is in the repository.