Skip to content

Troubleshooting

This page covers common issues you may encounter when embedding Seva components on your website.

The user has an account but is not a member of your organization.

Fix: Add the user as a member in the admin dashboard under Members → Add Member, using the same email address they signed up with.

Seva stores authentication tokens in localStorage. If the user is in private/incognito browsing mode or their browser blocks storage, the session will work but won’t persist across page refreshes.

All Seva components communicate via browser events (seva:authenticated, seva:signed-out). If <seva-auth> is on the page but <seva-event-register> doesn’t update after sign-in:

  • Verify both components have the same tenant-slug value.
  • Make sure no JavaScript on the page is calling event.stopPropagation() on Seva events.

Google OAuth opens a popup window. If the browser blocks it, the user sees an error. Ask users to allow popups for your site.

Every Seva component requires the tenant-slug attribute. Without it, API calls fail and authentication won’t persist.

<!-- Correct -->
<seva-auth tenant-slug="my-club"></seva-auth>
<!-- Wrong — missing tenant-slug -->
<seva-auth></seva-auth>

Components default to the production API (https://api.seva.tools). For local development, pass the local URL explicitly to every component:

<seva-auth
tenant-slug="my-club"
api-url="http://localhost:8787">
</seva-auth>

The <seva-event-register> component shows this when the event slug doesn’t match a published, active event. Check that:

  1. The event-slug attribute matches the slug in the admin dashboard.
  2. The event is Published (see Publishing Events).
  3. The event is Active.
  4. The current date is within the registration window (between Registration Begin and Registration End).

This means the Stripe keys are not configured on the API. Contact the system administrator to verify that STRIPE_SECRET_KEY is set in the API environment.

If the payment form area appears blank:

  • Check the browser console for network errors loading the Stripe library.
  • Verify your Stripe publishable key matches the environment (test vs. live).

Seva components dispatch CustomEvents with bubbles: true and composed: true, so they cross Shadow DOM boundaries and bubble up to document. If events aren’t being received:

  • Confirm all components are in the DOM (not hidden behind a conditional that removes them).
  • Check that no JavaScript on the page stops event propagation.

The <seva-cart> component listens for seva:add-to-cart events. Make sure:

  • <seva-cart> is in the DOM before the user adds tickets.
  • Both <seva-event-register> and <seva-cart> share the same tenant-slug.

The cart uses separate storage for guests and authenticated members. When a user signs in or out, the cart switches automatically. Items do not transfer between guest and member carts.

Seva components are built with Lit and target modern browsers (ES2022). They are not compatible with Internet Explorer or older browser versions. Supported browsers include current versions of Chrome, Firefox, Safari, and Edge.

If you’re stuck on an issue not covered here, check: