← All projects
PROJECT OVERVIEWPROMO WEBSITE

Sweatshirt — a pet food maker's promo website: points for receipts and tasks, a prize shop with the pet's photo

From September to November, purchases of the brand's food of 1500 ₽ or more in pet stores were registered on the site: every full 1500 ₽ in a receipt gave 2 points. Tasks added points — a pet questionnaire, a story about the pet, a photo of the pet and two games. For 3 points a participant could get a guaranteed prize at once, and saved-up points were exchanged for prizes from the catalogue — books about cats and dogs, wallpapers and stickers with the pet, an online vet consultation, T-shirts and sweatshirts with a photo of their own pet. Every month the receipts also entered a draw for a valuable prize.

Vue 3TypeScriptFrontendOpenAPI
Role
Frontend developer
Timeline
2026, July — October
Первый экран акции: призы с фотографией питомца за покупки кормов

The challenge

Build the frontend of the campaign on a new base — Vue 3, TypeScript and an API layer typed from OpenAPI: sign-up and sign-in, receipt registration, points, the prize shop, tasks with the pet, games, an account with prizes and the pet gallery.

What the solution includes

  • A base on Vue 3 and TypeScript: API types from the OpenAPI spec, axios refreshing the token on a 401 response and retrying the request, Pinia with the profile persisted, an own modal plugin with a promise interface, error logging, type checks and linters in pre-commit, versioned releases.
  • Sign-up with a phone, an email and a password: the number confirmed by an incoming call or SMS, the email confirmed with a code from a letter that earns points, password recovery, sign-in with an activation token from a link.
  • Receipt registration: a QR scanner, manual entry or a photo; the QR code is searched for on the uploaded photo right in the browser (BarcodeDetector or its WASM polyfill) and checked against the fiscal data format.
  • The prize shop for points: the price, the stock, ordering with a confirmation; in the account, an instant exchange of 3 points for a guaranteed prize, the request status of a physical prize, a variant choice and a check of the pet's photo for personalised items, pop-up notices about new prizes.
  • Tasks with the pet: a questionnaire with breeds from a reference list, a story of 500 characters or more, a photo upload with a canvas editor — dragging and zoom, JPG and PNG only, up to 10 MB; a «True or myth?» quiz of 10 statements with explanations; a match-three game in a frame, linked with the site through postMessage.
  • The pet photo gallery, winners with a search, FAQ, a "coming soon" mode before the start, analytics goals including scroll depth, a responsive layout.

A commercial team project: I built the whole frontend from a ready design; the match-three game is a separate build by another developer. Screenshots are from a local build with test data — the prizes and their pictures are test data too; the brand's logos and name are hidden, and its products and partner shops are not shown.

Next project Zyvra CMS — a headless CMS for websites and appsWEB APPLICATION