Notes from a slow week
A post rendered from Markdown. The editor placed a poll right here:
live demo
This page is a static Astro page using the same components you would install. Vote, react, comment and subscribe: everything goes to a demo site on Jamwidgets.
One component in your layout records pageviews, referrers and campaigns, and your dashboard shows what readers do.
Waiting for this pageview to send. A content blocker can stop it.
---
import Analytics from "@jamwidgets/astro/Analytics";
---
<Analytics siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} />Counts a visit when the page loads and shows the running total. Reload and watch it go up.
---
import Views from "@jamwidgets/astro/Views";
---
<Views siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} pageId={Astro.url.pathname} showUnique />Anonymous, per-page reactions. One tap each; tap again to take it back.
---
import Reactions from "@jamwidgets/astro/Reactions";
---
<Reactions
siteKey={import.meta.env.JAMWIDGETS_SITE_KEY}
pageId={Astro.url.pathname}
reactions={["love", "clap", "fire", "think"]}
/>Ask a question and show the tally after people vote. One vote per visitor.
The demo site has no published "features-demo" poll, so the widget hides itself, exactly as it would on your site. The console names the missing slug.
---
import Poll from "@jamwidgets/astro/Poll";
---
<Poll siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} slug="features-demo" />Bring your own fields; submissions land in your dashboard. Spam checks hold suspicious ones for review instead of dropping them.
---
import Form from "@jamwidgets/astro/Form";
---
<Form siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} formSlug="features-demo">
<input name="name" required />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</Form>Readers send bug reports and feature ideas; you triage them privately in the dashboard.
---
import Feedback from "@jamwidgets/astro/Feedback";
---
<Feedback siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} />Double opt-in email subscriptions. Subscribers confirm by email and can unsubscribe in one click.
---
import Subscribe from "@jamwidgets/astro/Subscribe";
---
<Subscribe siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} buttonText="Get updates" />Collect pre-launch signups and see each person's place in line. Move them to invited or converted from the dashboard.
---
import Waitlist from "@jamwidgets/astro/Waitlist";
---
<Waitlist siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} />A site-wide banner you change from the dashboard without a rebuild. Readers can dismiss it.
---
import Announcements from "@jamwidgets/astro/Announcements";
---
<Announcements siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} />Drop a poll into a post in the editor; the Embed component brings it to life wherever the post renders.
Notes from a slow week
A post rendered from Markdown. The editor placed a poll right here:
The "demo-embed" poll isn't published on the demo site, so the embed stays hidden and the post reads as plain text.
---
import Embed from "@jamwidgets/astro/Embed";
const { Content } = await render(post);
---
<article><Content /></article>
<Embed siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} />Upload photos once and publish responsive galleries, or show one random photo from a gallery.
random photo
The demo site has no published "demo-gallery" gallery, so both widgets hide themselves, exactly as they would on your site.
---
import Gallery from "@jamwidgets/astro/Gallery";
import RandomPhoto from "@jamwidgets/astro/RandomPhoto";
---
<Gallery siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} slug="demo-gallery" />
<RandomPhoto siteKey={import.meta.env.JAMWIDGETS_SITE_KEY} slug="demo-gallery" />Write in the dashboard and publish to your static site at build time, as a content collection or a plain fetch.
Analytics without cookies
Pageviews, referrers and campaigns from one component, with no cookies and no cross-site tracking.
Oct 12, 2026
Write here, publish to your static site
Posts written in the Jamwidgets editor reach your static site at build time, through a content loader or a plain fetch.
Oct 12, 2026
Comments without accounts
Readers reply with a name and a comment. Spam checks queue anything suspicious for you to review.
Oct 12, 2026
---
import { fetchPosts } from "@jamwidgets/astro/loader";
const posts = await fetchPosts({
siteKey: import.meta.env.JAMWIDGETS_SITE_KEY,
limit: 3,
});
---
{posts.map((post) => <a href={`/blog/${post.slug}`}>{post.title}</a>)}One free site includes every widget on this page. Your snippets come with your own site key in the dashboard.
Comments
Threaded comments and replies with no reader accounts. New comments wait in your moderation queue, so yours won't appear until it's approved.