← All projects
PROJECT OVERVIEWWEB APPLICATION

Jubilee — a pharmacy chain promo: a widget and an account

A prize draw for the anniversary of a pharmacy chain: customers register receipts, get a guaranteed prize and take part in weekly draws and the main one, a travel certificate. The promo page is made in Tilda; everything else is a Vue app.

Vue 3TypeScriptFrontendShadow DOM
Role
Frontend developer
Timeline
2026, September — October
Первый экран промо: предложение акции и кнопка загрузки чека

The challenge

Embed the Tilda promo page into the app and build receipt registration, winners and an account with sign-in through the chain's account around it — working both as a website of its own and as a widget on someone else's page.

What the solution includes

  • Two builds from one codebase: a website and a widget — a custom element in Shadow DOM, embedded with a single script and apart from the styles of the page.
  • The Tilda promo page: its export is synced into the repository through the Tilda API, its styles are isolated with @scope, its buttons open dialogs of the app, and the winners table is mounted right into its markup.
  • Sign-in through the customer's account of the chain (SSO), with no separate sign-up.
  • Receipt registration: a QR code through the camera, a photo or the data typed by hand.
  • The account: the receipt history with statuses and tickets to the draws, prizes with promo codes to copy, notifications about checked receipts and wins.
  • In the widget, fonts and the SVG sprite work inside Shadow DOM, while dialogs and scroll locking stay within it.
  • An API layer on TanStack Query with a request cache, the contract in OpenAPI and API tests without a browser or a backend.

A commercial team project: I built the whole frontend; the promo page is made in Tilda. Screenshots are from a local build with test data; the names and logos of the chain and its partners are hidden.

Next project Celebration — a pharmacy chain promo: Tilda inside a Vue appWEB APPLICATION