Integrating Premagic Widgets into Your Event Site
Premagic offers three drop-in features that boost attendee engagement and help you measure ROI on advocate-driven ticket
sales. This guide walks you through integrating them using our open-source sample apps.
What you get
- LoginWidget β LinkedIn "Quick Register" button + automatic form autofill. Place it on your registration / sign-up
page.
- PosterWidget β Personalised attendee poster creator + social sharing. Place it on your success / confirmation page.
- Advocate Revenue Tracking β Attribute ticket sales to the advocate who shared the poster. Place it on your checkout
/ payment success page.
Sample apps
We maintain a public sample repo with complete, runnable apps for the three most common frameworks:
Repo: https://github.com/premagic/example-premagic-poster-widget
- React 18 β folder react/ β cd react && npm install && npm start
- Angular 17+ β folder angular/ β cd angular && npm install && npm start
- Vue 3 β folder vue/ β cd vue && npm install && npm run dev
Each sample contains a 4-page flow (Home β Register β Success β Profile) so you can see every widget in context.
Step 1 β Add the tracking scripts
Add these two tags to the <head> of every page of your site. They are required for all three features.
<link rel="preload"
href="https://asts.premagic.com/s/poster-widget/premagic-poster-widget.js"
as="script" crossorigin="anonymous" />
<script src="https://asts.premagic.com/s/poster-conversion-tracker/ptm.js"></script>
Step 2 β Configure your shareId
All you need is your Premagic share ID:
const premagicConfig = {
shareId: "YOUR_SHARE_ID" // Required
};
Note: projectId, eventId, websiteId, and domain have all been removed. Do not include them.
Step 3 β Drop the widgets into your pages
LoginWidget β on your registration page
import LoginWidget from './premagic-widgets/LoginWidget';
function RegistrationPage() {
return (
<div>
<h1>Register</h1>
<LoginWidget config={{ shareId: "YOUR_SHARE_ID" }} />
{/* Your registration form below */}
</div>
);
}
The LoginWidget will autofill name, email, company and job title from the user's LinkedIn profile.
PosterWidget β on your success page
import PosterWidget from './premagic-widgets/PosterWidget';
function SuccessPage() {
return (
<div>
<h1>Registration Successful!</h1>
<PosterWidget config={{ shareId: "YOUR_SHARE_ID" }} />
</div>
);
}
Equivalent Angular and Vue components are in the corresponding folders.
Step 4 (optional) β Track revenue from poster shares
When someone clicks an advocate's shared poster link and later completes a purchase, call trackPurchase on your checkout
success page so we can attribute the sale:
window.AdvocateTracking.trackPurchase({
orderId: '12345', // Your unique order ID
orderCount: 2, // Number of tickets / items
value: 100.00, // Total value (number, no currency symbol)
currency: 'USD' // ISO 4217 (USD, EUR, GBP, EGP, β¦)
});
This is plain JavaScript β no framework wrapper required. Calls from non-referred purchases are safely ignored.
Already have user data? Skip the LinkedIn login
For attendee profile pages, post-purchase confirmation, or exhibitor dashboards where the user is already logged into
your system, pass prefillData to the PosterWidget to go straight to poster creation:
const premagicConfig = {
shareId: "YOUR_SHARE_ID",
prefillData: {
externalId: "ext_12345",
userName: "John Doe",
userTitle: "Senior Developer",
userCompany: "Acme Corp",
userPhoto: "https://example.com/photo.jpg",
email: "john@example.com",
phone: "+1234567890",
registrationId: "reg_12345",
sessionTitle: "Conference 2025",
exhibitorLogo: "https://example.com/logo.jpg",
exhibitorBoothNumber: "101"
}
};
All prefillData fields are optional β pass only what you have. Each sample app includes a /profile page demonstrating
this pattern.
Important notes
- Container ID must be widget-premagic β both widgets render into <div id="widget-premagic"></div>.
- Always call cleanup β call unmountWidget() on component unmount/destroy to prevent memory leaks. The sample
components do this for you.
- Framework form autofill needs polling. React, Angular and Vue do not detect programmatic DOM .value changes. To
capture autofilled data on form submit, poll the inputs every 500 ms and sync them into your form state. See the
autofill sync section in LLM_GUIDE.md for the exact pattern.
Working with AI assistants (Cursor, Copilot, ChatGPT, Windsurf, Codex)
The repo includes ready-to-feed integration guides for AI coding assistants:
- Root: LLM_GUIDE.md β full integration reference
- React: react/LLM_GUIDE.md
- Angular: angular/LLM_GUIDE.md
- Vue: vue/LLM_GUIDE.md
Just paste the relevant guide into your AI assistant β it has everything needed to generate working integration code.
Need help?
- Issues / feature requests: https://github.com/premagic/example-premagic-poster-widget/issues
- Questions: Reply to this article or contact your Premagic account manager.