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).
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í:
- Vysvětlit pozicování (žádný "manifestační kurz", ale konkrétní byznysové výsledky)
- Ukázat reálné testimonials klientek (zvýšené příjmy, work-life balance, založené vedlejší byznysy)
- Prodat workbook přes Stripe Checkout
- Spustit 5-denní email onboarding sequence po nákupu
- 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:
| Den | Subject | Úč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čí.