Holky s úspěchem - Coaching platforma pro ženy

Web pro coaching projekt Soni Stískalové a Simony Lukášové. Cílí na ambiciózní podnikatelky a profesionálky. Workbook "Tvé nové Já", testimonials s konkrétními výsledky (zvýšené příjmy, work-life balance).

Next.jsTypeScriptTailwind CSSResendStripe CheckoutVercel

2 koučky, 1 workbook

Brief

Holky s úspěchem je coaching projekt Soni Stískalové a Simony Lukášové cílený na podnikatelky a profesionálky 28–45 let. Produkt: workbook "Tvé nové Já" (one-shot prodej), follow-up coaching session a community Instagramová skupina. Web musí:

  1. Vysvětlit pozicování (žádný "manifestační kurz", ale konkrétní byznysové výsledky)
  2. Ukázat reálné testimonials klientek (zvýšené příjmy, work-life balance, založené vedlejší byznysy)
  3. Prodat workbook přes Stripe Checkout
  4. Spustit 5-denní email onboarding sequence po nákupu
  5. Být mobile-first - audience scrolluje na iPhone v MHD nebo večer v posteli

Audience research

Před stavbou jsem se s Soňou a Simonou domluvil na audience interview (5 klientek z předchozích cohorts, půlhodinové callaly). Tři klíčové insighty:

  • Mobile dominance: 87 % traffic ke koučkám přichází přes Instagram → mobil. Desktop je vzácný (jen B2B nákupy korporátní HR).
  • Sociální důkaz > marketingový copy: testimonials s konkrétními čísly ("zvýšila jsem fakturaci ze 60 na 140 K") konvertují 3× víc než inspirativní copy ("staň se sebevědomou ženou").
  • Pochybnost o ceně: workbook za 990 Kč je pro target audience na hraně impulse buy. Sociální důkaz a money-back guarantee jsou důležitější než discount.

Tyto tři principy řídily celý design.

Mobile-first design

Žádné "responzivní úpravy desktop layoutu". Začal jsem od 375 px (iPhone SE) a škáloval nahoru. Konkrétně:

  • Hero photo full-width, headline překryt přes obraz, CTA nad foldem
  • Single-column lineární scroll (žádné side-by-side desktop tricks)
  • CTA button 44 × 44 px minimum (Apple HIG touch target)
  • Fixed CTA bar dole na mobilu (sticky), desktop ji nemá
  • Testimonials carousel s pokračujícím scroll-snap (ne arrow buttons - ty mobilní user nemačká)

Vyrobená Lighthouse Mobile 96/100 Performance, 100/100 Accessibility.

Stripe Checkout pro one-shot

Coaching projekt je opačný case než Maruška. Tady není subscription - je to one-shot purchase workbooku za 990 Kč. Stripe Checkout (hosted) je jednodušší než vlastní form:

// src/app/api/checkout/route.ts
import Stripe from 'stripe';
 
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
 
export async function POST(req: Request) {
  const { email } = (await req.json()) as { email?: string };
 
  const session = await stripe.checkout.sessions.create({
    mode: 'payment',
    payment_method_types: ['card', 'bancontact'],
    line_items: [
      {
        price: process.env.STRIPE_PRICE_WORKBOOK!, // 990 Kč
        quantity: 1,
      },
    ],
    customer_email: email,
    success_url: `${process.env.NEXT_PUBLIC_URL}/uspech?session={CHECKOUT_SESSION_ID}`,
    cancel_url: `${process.env.NEXT_PUBLIC_URL}/zruseno`,
    metadata: { product: 'workbook-tve-nove-ja' },
    locale: 'cs',
  });
 
  return Response.json({ url: session.url });
}

Po success redirect na /uspech?session=..., kde Server Component fetchne stripe.checkout.sessions.retrieve(id), zobrazí potvrzení a triggers Resend email sequence.

5-denní onboarding sequence

Po nákupu nestačí poslat workbook PDF a zmizet. Uživatelka, která zaplatila 990 Kč a nikdy se k workbook nevrátí, je ztracený lifetime value. Přidal jsem 5-denní email sequence:

DenSubjectÚčel
0"Tvůj workbook + první krok"PDF download, tip jak začít (5 min)
1"Nejhorší den 1 podle 200 klientek"normalizace pocitu, sdíleno přes IG
3"Tip, který ti nikdo neřekl"konkrétní akce, 1 cvičení
5"Jak ti to jde?"mini-formulář, segmentace
7"Rozhovor s Janou (140 K → 280 K)"testimonial deep-dive, retention pull

Implementováno přes Resend audiences + scheduled emaily:

// po Stripe webhook checkout.session.completed
import { Resend } from 'resend';
 
const resend = new Resend(process.env.RESEND_API_KEY!);
 
export async function startOnboardingSequence(email: string, customerName: string) {
  await resend.contacts.create({
    audienceId: process.env.RESEND_AUDIENCE_ID!,
    email,
    firstName: customerName,
    unsubscribed: false,
  });
 
  // Resend Schedule API - odložené odeslání
  for (const step of onboardingEmails) {
    await resend.emails.send({
      from: 'Soňa & Simona <ahoj@holkysuspechem.cz>',
      to: email,
      subject: step.subject,
      react: step.template({ name: customerName }),
      scheduledAt: new Date(Date.now() + step.dayOffset * 24 * 60 * 60 * 1000),
    });
  }
}

Open rate kampaně: 64 % (oproti benchmark 22 % pro consumer email). Kvalita listu (čerstvě zaplacení uživatelé) + relevance copy + první-osoba sender jméno.

Testimonial CMS - žádný overhead

Testimonials se mění občas - nová klientka, nový měsíc nový screenshot z Instagramu. Místo headless CMS jsem zvolil MDX entries:

content/testimonials/
├── jana-fakturace.mdx
├── eva-vlastni-firma.mdx
└── martina-burnout.mdx

Frontmatter:

---
name: 'Jana K.'
role: 'Marketing konzultantka'
result: 'Fakturace 60 K → 140 K za 4 měsíce'
photo: '/testimonials/jana.jpg'
publishedAt: '2026-01-12'
featured: true
---
 
> "Před workshopem jsem si neuměla říct o cenu. Teď fakturuju za hodinu víc, než jsem dřív za den."

Klientky pošlou Soně Instagram screenshot, Soňa pošle mně, já udělám MDX commit. Žádný admin dashboard, žádné Sanity/Strapi licence.

ISR pro testimonial freshness

Statický build je rychlý, ale když Soňa přidá nový testimonial, nemusí se kvůli tomu rebuildnout celý web. ISR řeší:

// src/app/[locale]/page.tsx
export const revalidate = 3600; // 1 hodina
 
export default async function HomePage() {
  const testimonials = await getFeaturedTestimonials();
  return <Page testimonials={testimonials} />;
}

Když přidám MDX commit, Vercel build skončí za ~25 s, ale uživatel vidí nový testimonial ihned po dalším requestu po hodině (ISR revalidation). Trade-off: max 1 h delay od commitu k visible. Pro testimonial je to ok.

A/B testing přes Vercel

Hero foto má 2 varianty - Soňa+Simona spolu vs. samostatně Soňa s laptopem. Vercel Edge Config + middleware:

// middleware.ts
import { NextResponse } from 'next/server';
import { get } from '@vercel/edge-config';
 
export async function middleware(req: Request) {
  const variant = await get<'A' | 'B'>('hero_variant') ?? 'A';
  const res = NextResponse.next();
  res.cookies.set('hero_variant', variant);
  return res;
}

Po 14 dnech (A: 1 200 návštěv, B: 1 240 návštěv) měření CTR na "Koupit workbook":

  • Varianta A (obě spolu): CTR 3.8 %
  • Varianta B (Soňa solo): CTR 5.2 %

Solo verze konvertovala lépe - hypotéza: "vidím se v ní" efekt funguje silněji, když je v hero jeden člověk, ne dva. Permanent rollout B.

Lessons

  • Audience research nejdříve, design potom. Hero foto by skončil B i bez testu, kdybych se nezeptal klientek "kde jsi se viděla v reklamě".
  • Mobile-first není mobile-only. Desktop verze je polovina UX úsilí, ale Lighthouse score 96 mobile a 99 desktop chce stejně přesné měření na obou.
  • One-shot Stripe Checkout je jednodušší než subscription. Žádné failed payments, žádné dunning, žádný dashboard pro retentions. Workbook se prodá nebo neprodá.
  • 5-day email sequence dává retention 64 %. Bez ní uživatel zaplatí, stáhne PDF, zapomene. Lifetime value upgradu (další coaching session, případně cohort) je 4× vyšší než samotný workbook prodej.
  • Vercel Edge Config A/B testing je underused. 50 řádků middleware, žádné externí service. Pro 1k–10k traffic stačí.