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. Auto-close after N days. 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 post suggestions, you triage with status tracking (open / planned / shipped). Public or private.
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 pending to invited or joined.
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 inTipTap, 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 publish we trigger your static site's build so the post goes live without you touching CI. Image uploads handled, asset URLs returned. Your repo stays clean.
╭─ 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
✓ markdown committed → github:tim/blog
✓ site rebuild triggered (cloudflare pages)
✓ subscribers notified (142 emails queued)
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.
Cookieless first-party view tracking per page, path, and day, with dashboard charts for the signals that matter.
Email-invite teammates at Owner / Admin / Editor / Viewer. Editors write posts, admins moderate, owners own billing.
Packages for the frameworks we use ourselves — and plain HTML embed 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 — drop the <script> tag, add the data-*attributes. Works anywhere that renders HTML.
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.