semics Events

Events bookings and ticketing for EmDash

View source
Public name@semics.co.uk/semics-events

Or open Registry in your EmDash admin and search for this name.

Overview

Event bookings for EmDash, built on your own content. Each entry of your events collection becomes bookable: ticket types, capacity and holds that never oversell, a booking page, confirmation emails with calendar files, self-service cancellation, a waitlist that offers freed seats, recurring events, attendee CSV export and check-in from the admin.

  • Works without JavaScript; tested against WCAG 2.2 AA at 320 px.
  • English and Arabic built in, with right-to-left layouts.
  • Asks only for content:read, schema:read, email:send and network:request to Cloudflare Turnstile.
  • Booking data is erased after a period you choose; deletion on request from the admin.

The booking form and pages come from the npm package @semics-tech/emdash-events (the registry delivers the core only).

Events Pro (same plugin, separate licence) adds paid tickets with Stripe, promo codes, attendee questions, waivers through semics E-sign, QR passes with a check-in screen, reminders and broadcasts, sales reports and MCP tools.

Documentation: https://github.com/semics-uk/emdash-plugins/tree/main/apps/docs/pages

Permissions

Plugins get only the capabilities they declare and you approve. Your EmDash admin lists these again before anything installs.

  • Read content

    Read entries from your site’s content collections.

  • Read content structure

    Read the collections and fields defined on your site.

  • Make network requests

    Connect to the publisher-declared external hosts.

    Allowed hosts

    • challenges.cloudflare.com
  • Send email

    Send email through your site’s configured mail service.

FAQ

Why is there no booking form after installing from the registry? The registry installs the core only. Add the npm package @semics-tech/emdash-events for the form and pages.

Bookings are limited to 10 in 10 minutes for everyone. EmDash does not know visitors' IP addresses. Off Cloudflare, set trustedProxyHeaders to the header your proxy overwrites, and only that one.

Emails are slow. The plugin sends two emails a minute, rendered from current data.

Nothing happens on schedule. Open the events list or a plugin admin page once after deploying: the plugin then schedules its own jobs.

Can I sell paid tickets? With Events Pro and Stripe.

Does it work in my language? The visitor pages ship in English and Arabic, and you can add more. Emails, calendar files and the admin are English.

More: https://github.com/semics-uk/emdash-plugins/blob/main/apps/docs/pages/faq.md

Security

Report security problems to security@semics.co.uk, not in a public issue.

  • Booking access tokens are random, stored only as hashes, and never put in URLs. Emailed links carry a one-time code that is used only when the visitor presses a button, so mail scanners cannot use it up.
  • Every form the plugin adds refuses posts from other sites. Refusals never reveal another buyer's data.
  • Seat counts are checked as they are written, so concurrent bookings cannot oversell.
  • Turnstile protects checkout and the waitlist. Bookings are limited per visitor IP address.
  • The only outside host is challenges.cloudflare.com. Personal data is erased after the retention period.

Details: https://github.com/semics-uk/emdash-plugins/blob/main/apps/docs/pages/configure.md

Installation

  1. Install the core from the registry, or with npm together with the UI kit:
pnpm add @semics-tech/emdash-events @emdash-cms/sandbox-workerd
  1. Add the integration and the UI plugin to astro.config.mjs. A core installed from the registry has an r_… id: pass it as eventsIntegration({ pluginId }) and leave the core out of sandboxed.
import semicsEvents from "@semics-tech/emdash-events";
import { eventsIntegration } from "@semics-tech/emdash-events/integration";
import { eventsUi } from "@semics-tech/emdash-events/ui";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";

export default defineConfig({
	output: "server",
	integrations: [
		eventsIntegration(),
		emdash({
			siteUrl: "https://events.example.com",
			sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",
			sandboxed: [semicsEvents],
			plugins: [eventsUi()],
		}),
	],
});
  1. Create an events collection (title, starts_at, ends_at, timezone, venue), or map yours in the settings.
  2. Set EMDASH_ENCRYPTION_KEY, an email provider, and Turnstile keys.
  3. On an event entry, open Tickets & booking and choose Enable booking.

Full guide: https://github.com/semics-uk/emdash-plugins/blob/main/apps/docs/pages/install.md

Keep exploring

More plugins like semics Events

Browse by keyword, or see everything @semics.co.uk publishes.

Install on your site

Open in EmDash

semics Events

@semics.co.uk/semics-events

Choose the EmDash site where you want to review this plugin. Nothing is installed until you confirm its permissions in that site's admin.

This browser will remember the site. You can change it next time.