Receive a contact
Put a form on the site, keep suspicious submissions in review, and track the conversations that still need a reply.
set up a form →Start with publishing or one interactive surface. Add reader analytics, audience capture, and moderation when they become useful — all in the same workspace.
start with the job
You do not need to adopt the whole toolkit. Pick the outcome your site needs now; the rest will still be there later.
Put a form on the site, keep suspicious submissions in review, and track the conversations that still need a reply.
set up a form →Write and schedule a Markdown-backed post, then trigger the static-site build when it is ready.
connect publishing →Add comments or reactions to an existing article without rebuilding the site around another platform.
add comments →Using React, Solid, or plain HTML? Choose your integration →
Reader participation without handing your traffic to a third-party JS monolith.
Threaded replies. Moderation queue, approve/reject/delete. No reader signup — they type, they send.
Hearts, claps, bookmarks, thumbs. Per-page, anonymous, lightweight. Signal without the noise.
Multi-choice, anonymous, real-time tallies. Ask "Should I write part two?" at the bottom of a post and see the response.
Readers send bugs, feature ideas, and notes. You triage them privately in the dashboard: new, reviewed, resolved, archived.
The widgets that turn visitors into a direct audience around your site.
Double opt-in, per-post notifications or weekly digest, and one-click unsubscribe. Build a direct audience around your site.
Pre-launch signups with status tracking. See who is waiting and move each entry from waiting to invited or converted.
Contact forms, surveys, custom fields. Honeypot + AI spam checks. Submissions stay actionable in the Jamwidgets Inbox with their history.
A focused headless CMS underneath the widgets. Write in TipTap, store in Markdown, schedule or publish immediately. Drafts for already-published posts — edit, review, publish the diff. Generate a clean excerpt from the opening text when you need one.
On Team, publishing fires your Vercel or Netlify deploy hook, or a GitHub repository_dispatch event, so your build fetches the new post without you touching CI. Image uploads handled, asset URLs returned.
╭─ draft ─────────────────────────────────╮
│ title the case against newsletters
│ slug /case-against-newsletters
│ excerpt (auto-generated, edit if you want)
│ scheduled tues 08:00 pt
│ status draft → queued to publish
╰─────────────────────────────────────────╯
# on publish
✓ repository_dispatch sent → github:tim/blog
✓ site rebuild fetches the post (your CI)
✓ subscribers notified (142 emails queued)
Two more ways to keep a static site current without a rebuild for every change.
Upload photos once and organize albums in the dashboard; Jamwidgets resizes them to WebP. Embed every published gallery, one album or tag, or a seeded random photo, without rebuilding your site.
Embed a gallery →Connect an MCP client to review the inbox, draft and edit posts, and schedule or publish them. Access is scoped: reading, writing, and publishing are separate permissions you can revoke.
Connect an agent →The small things that need to sit across pages instead of inside one.
Top-of-page banners, dismissible per-reader. Schedule start/end. Link-in, done.
First-party view tracking per page, path, and day, with dashboard charts for the signals that matter. No cookies and no cross-site tracking.
Email-invite teammates at Owner / Admin / Editor / Viewer. Editors write posts, admins moderate, owners own billing.
Packages for the frameworks we use ourselves — and a plain HTTP API for everything else.
<Comments>, <Subscribe>, <Form>, <Poll>. Server-rendered where it makes sense, hydrated where it doesn't.
Hooks for bringing Jamwidgets data and actions into Next, Remix, Gatsby, or another React site.
Primitives for wiring Jamwidgets into SolidStart or another Solid app with a small runtime.
Hugo, Jekyll, Eleventy, plain HTML, a WordPress theme — galleries embed with one <script> tag, and every other widget is a call to the widget API or @jamwidgets/core.
Start with one site for free, including the CMS, analytics, widgets, spam protection, and MCP. Team is $39/month for multiple sites, collaborators, higher limits, and governance.