Woody and Friends — Multilingual Education and Digital Content Platform
An education platform bringing preschool English learning sets, a digital library, teacher academy, shop and blog together across ten languages.

Description
An education platform bringing preschool English learning sets, a digital library, teacher academy, shop and blog together across ten languages.
Case study
Challenge
Because the old site built its content in the browser, search engines and AI tools saw incomplete pages, and language versions had no real URLs. Sets for school, workshop and home audiences, physical and digital products, quotes and online sales were all mixed in one flow.
Approach
We rebuilt the platform on Next.js 16 and Fastify as a server-rendered site in 10 languages. We split the series by audience and added a per-product sale/quote mode, PayTR payment and refunds, an entitlement-based digital library and school accounts. The panel brings products, content, orders, quote follow-up and Search Console index status together in one place.
Outcome
The site is live in 10 languages with real URLs and hreflang; store, level finder, digital library, academy and blog run on the same codebase. The team manages content and sales follow-up from the panel and monitors search visibility on the same screens.
Tools
Next.js 16, React 19, TypeScript, Fastify, Bun, Drizzle ORM, MySQL, next-intl
Key Features
10 languages with real URLs and full hreflang (next-intl)
Separate paths for School, Workshop and Home series
Level Finder suggesting Basic/Junior/Senior by age
PayTR checkout, refunds from the panel, refund ledger
Per-product online sale or institutional quote mode
Storyland, Movieland, Musicland and Library content
My Library with time-limited access and school accounts
Sales follow-up for quote and contact records
Search Console index status inside the panel
Technologies Used
Next.js 16
React 19
TypeScript
Fastify
Bun
Drizzle ORM
MySQL
next-intl
Design Highlights
Server-rendered pages instead of the old CSR site; content is visible to bots on first response
Audience-specific entry paths and a clear buy/quote split make decisions easier
Open Graph images generated per language and page, JSON-LD and llms.txt
Active languages and home page sections come from the database, managed without code changes
Server-side GA4 purchase measurement unaffected by browser blockers
Details
Woody and Friends is Mina Yayınevi's preschool English brand: it provides story-based learning sets to kindergartens, workshop and course centres, and to families learning at home or with a private tutor. In this project we rebuilt the brand's old, browser-rendered (CSR) website as a server-rendered platform in ten languages, complete with a store, a digital content area, a teacher academy, a blog and an admin panel.
Context and requirements
On the old site most content was assembled in the browser with JavaScript. Search engines and AI-driven search tools saw empty or incomplete pages, and because language versions had no real URLs they could not be matched correctly. On the product side, sets for three audiences (school, workshop, home), physical products and digital content, institutional quotes and online sales were all mixed together. The goal was a structure where each audience finds its own path, buying and requesting a quote are clearly separated, content is managed from a panel and search visibility can be measured.
Solution and scope
Series and audience-specific pages
- School Series (preschool): teacher set, student set and digital content for kindergartens, with an institutional quote flow.
- Mini School / Workshop Series: sets for workshops and course centres.
- Home and Private Tutor Series: for parents and private English teachers.
- Level Finder: suggests Basic, Junior or Senior based on the child's age and English skills and links the result straight to the matching set in the store.
Store and payment
The store offers student sets, teacher sets and Level Set student sets for the Basic, Junior and Senior levels. Each product can be configured for “online sale” or “quote”, so institutional products lead to a quote form while individual products go to the cart. Cart, address book, checkout and “My Orders” are in place; payments are taken via PayTR, and refunds are triggered from the panel through PayTR. Distance-selling contract, pre-contract information, returns and withdrawal, delivery and shipping, KVKK (Turkish data protection) and cookie texts are published as separate legal pages.
Digital content and library
Storyland (stories), Movieland (videos), Musicland (songs) and Library are presented with separate product pages for every level. Purchased or institution-assigned content appears in the user's My Library area; access is handled through time-limited entitlements, including the number of days remaining. Schools additionally get a school account, teacher and student roles and assignment of digital materials.
Woody Academy, blog and local pages
Woody Academy explains the trainer support for teachers and institutions using the sets. The blog has grown with articles for teachers and parents, such as topic lists by age, annual plans, lesson plans and song guides. Local pages for Istanbul, Ankara, Izmir and Bursa focus on English for kindergartens and make the brand visible in city-level searches.
Admin panel
The panel is a separate Next.js application where the team manages:
- Products, series and levels; product images, specifications, FAQs, reviews and multilingual copy.
- Orders, PayTR transaction logs, payment settings and refunds.
- User entitlements (digital content access), schools and subscription plans.
- Quote requests and contact messages, plus a sales follow-up layer on top (stage, owner, institution/home/career purpose, next action date, loss reason).
- Blog posts, home page section layout, menus, site settings, email templates and notifications.
- Google Search Console index status and recommendations on the blog and product screens.
- A dashboard and a user activity view showing where visitors navigated.
Technical architecture
The front end runs on Next.js 16, React 19 and TypeScript with Tailwind CSS v4. Pages are rendered on the server, and changes made in the panel go live through on-demand revalidation. The back end is Fastify on Bun with MySQL; APIs live under /api/v1, with admin endpoints behind authentication and role checks. The data model covers products and their translations, series, levels, product contents, user entitlements, schools, orders, payment attempts, a refund ledger, and quote and contact records.
Multilingual: ten languages — Turkish, English, German, Arabic, French, Russian, Spanish, Italian, Dutch and Brazilian Portuguese — are live with real URLs via next-intl. Active languages are read from the database, and every page declares all languages plus x-default through hreflang.
SEO and GEO: pages carry JSON-LD schemas such as Organization, EducationalOrganization, WebSite and BreadcrumbList; Open Graph images are generated per language and page; llms.txt and llms-full.txt are provided for AI tools; and an IndexNow key enables fast indexing notifications.
Security and measurement: sessions are secured with JWT and admin actions with role checks; request and authentication events are written to audit logs. Purchase events are sent to GA4 server-side via an outbox queue, creating a measurement pipeline that browser blockers do not affect.
Integrations
- PayTR: payment, callback logging and refunds from the panel.
- Google Analytics 4: server-side purchase measurement.
- Google Search Console: index status per piece of content.
- SMTP for order and form notification emails.
- Content source API: making blog posts and products available to marketing tools.
Outcome and today
Today Woody and Friends runs on a single codebase in ten languages, with series pages split into three audiences, a level finder, a PayTR-powered store, an entitlement-based digital library, a teacher academy and a steadily growing blog. The team manages products, content and sales follow-up from the panel, and tracks search visibility on the same screens using Search Console data.