GrowKind World · Publishing and courses platform · 2026
Publishing an educational method as a paid digital product, in two languages.
Educational and publishing platform for neurodivergent childhood: digital book with paywall, module-based courses, shop and full i18n.
- Product
- Paid content
- i18n
- Client
- GrowKind World
- Status
- In production, Stripe in live mode.
- 30
- chapters in the reader with paywall
- 433+
- PT/EN translation keys

Book reader — chapter navigation with paywall from a defined point.
Context
An author and educator wanted to publish his method (RDF) and a 30-chapter book as a digital product, with separate courses for families and professionals, in Portuguese and English from day one.
The problem
Paid content has to be genuinely protected — course PDFs cannot sit on a public URL — while the reader has to be pleasant to use on a phone at night.
Real i18n means two complete editorial copies, not translated labels.
My role
Sole developer: architecture, reader, paywall, Stripe integration, protected content delivery, i18n and SEO.
Constraints
- Paid content genuinely protected: no PDF reachable by public URL.
- Two complete editorial copies, not translated labels.
- A reader that is pleasant on a phone, at night, for tired parents.
Solution
Next.js with per-locale routes (next-intl, 433+ keys), book reader with chapter navigation and paywall, course modules served by a protected, locale-aware route, Stripe checkout and an admin whitelist.
What was built
- BookReader with 30 chapters, reading view and ChapterNav.
- Course files outside /public, served via /api/curso/[curso]/[modulo] after purchase verification.
- RDF method page with an animated SVG diagram.
- Native Next.js SEO: per-locale metadata, JSON-LD, sitemap and robots.
- Shop with Printful (print on demand) and Stripe; email capture with Brevo.
Key decisions
Private content outside the bundle
Modules live in a private/ folder read only by the server. The URL never points at the file; it points at a route that checks session and purchase before responding.
Outcome
Platform in production, bilingual, with real sales through Stripe.
What I would change
Serving private files through an authenticated route was simple and robust; the expensive part was keeping the two editorial copies in sync — next time the content would live in a CMS with a translation workflow.
Stack
Next.js 15 · TypeScript · MongoDB · NextAuth · Stripe · next-intl · Cloudinary · Resend · Vercel
