Selected work/bestdinner
CASE · BRAND PARTNERSHIP·Campaign deck · Co-branded UX

BestDinner × Aibolit — partnership campaign

A pet-food retailer and a pet-care community ran a joint subscription campaign. I built the pitch deck — delivered as a static site, not a PDF — and the co-branded Telegram mini-app joint subscribers landed in. A working sample of how brand-partnership engagements get packaged.

Stack
Next.js 15
Live since
2025
Delivery
Static export
Live mirrors
EN + RU
Open the deck Open the mini-app Original Russian product ↗
Live preview · click to focus, then ← → to navigate

Flip through the deck without leaving this page

Open in full window ↗
01The brief

Problem

Two brands with overlapping audiences — one selling pet food, one running a pet-care community — wanted to run a joint subscription offer. The blocker was the pitch itself: a static PDF deck reads once and gets buried in an inbox, and a generic Notion page doesn't feel like a real partnership artefact.

They also needed somewhere for joint subscribers to land — a single surface that carried both brand identities without one visually swallowing the other.

02What I built

Solution

The pitch deck as a static site: one component per slide, deep- linkable, sharable as a URL instead of an attachment. Each slide is its own React component, which means the deck reads on a phone, supports inline embeds (the live mini-app sits inside the deck) and can be updated without re-exporting anything.

The co-branded mini-app re-uses the assistant from the Aibolit build but skins it with both logos in the header and a partner attribution row at the bottom of every reply. Identity stays balanced — neither brand reads like a sponsor.

Slide 01 — opening hook in Fraunces display serif, both brand marks at the top, deep-linkable via #N URLs.
Slide 01 — opening hook in Fraunces display serif, both brand marks at the top, deep-linkable via #N URLs.
03Under the hood

Architecture

Next.js 15 built to a static export — no server, drops onto any host, including the partner's own infrastructure if they want to white-label the deck. Each slide is a route segment so the URL identifies the slide; shared layout handles brand-marks, slide counter and arrow-key navigation.

The mini-app embedded in the campaign slide is the same React build from the Aibolit case, parameterised with the partner id. One codebase serves the standalone assistant and the partnered version.

Slide 07 — chat with the vet, with the embedded co-branded mini-app to the right.
Slide 07 — chat with the vet, with the embedded co-branded mini-app to the right.
04Selected slides

Four slides worth pausing on

Each slide is its own React component — that's why typography stays tight at any width and why a deep-link like cobrand.mkantaria.com/#7 jumps the partner directly to the answer to one specific question.

Slide 04 — brand mirror: the bet is already on the vet recommendation; the bot is the measurable digital extension.
Slide 04 — brand mirror: the bet is already on the vet recommendation; the bot is the measurable digital extension.
Slide 10 — between purchases the owner lives in the pet profile and watches the diet course progress.
Slide 10 — between purchases the owner lives in the pet profile and watches the diet course progress.
Slide 14 — three funnel layers with end-to-end attribution: category lock, vet prescription, receipt + LTV.
Slide 14 — three funnel layers with end-to-end attribution: category lock, vet prescription, receipt + LTV.
Slide 17 — three pricing tiers, one exclusive category in each. Bot / Bot + Mini App / Max exclusivity.
Slide 17 — three pricing tiers, one exclusive category in each. Bot / Bot + Mini App / Max exclusivity.
05The mini-app layer

Eleven phone screens, one codebase

The co-branded Telegram mini-app spans onboarding, an AI vet chat, a food card with prescription protocol, a renewable diet cycle, an escalation path to a real clinic, and partner attribution baked into the receipt. The same React build runs as the standalone assistant on aitelegram.mkantaria.com and as the co-branded version embedded inside the campaign slide — only the partner-id prop differs.

Each screen is hover-replayable on the live page. The screenshot below is a single static frame; the link above it opens the live interactive version.

Open the mini-app gallery 11 / 11 screens · cat & dog datasets · hover to replay
Mini-app gallery — all 11 screens in their natural states, with a single shared cat/dog toggle that switches every screen at once.
Mini-app gallery — all 11 screens in their natural states, with a single shared cat/dog toggle that switches every screen at once.
06Outcomes

Results

Sign-up and reach numbers belong to the partner brands and stay with them. What I can confirm is shape: deck shipped, mini-app shipped, both live in English and Russian, one campaign cycle run end-to-end.

Under NDA
Joint sign-ups
Brand internal
Under NDA
Partner reach
Brand internal
2
Brands co-marketed
BestDinner + Aibolit
1
Pitch deck + mini-app
Same codebase
Hard numbers under NDA — available on intro call.
07Tools

Stack

Next.js 15TypeScriptStatic exportSlide-per-componentTailwind v4Co-branded UXTelegram mini-app
08Forward

When this shape fits

Brand partnerships die in PDFs. A deck-as-site survives because it sits at a URL, the partner can open it on a phone, and the actual product being pitched embeds inline. If a studio is running a co-marketing engagement and the deliverable is currently a Keynote export — this is the alternative.

The mini-app layer is optional. The deck-as-site pattern works on its own; the embedded product sample is what flips it from "a sales doc" into "a working artefact".

Have a brand partnership to package?

If a studio's client is co-marketing with another brand and the deck currently lives in Keynote, I'll quote within 48 hours.

Start a project