Planuojam - Multilingual Event Planning Marketplace
Scalable multilingual event marketplace built with Next.js and Strapi.
Rescued a failing event platform by architecting a robust headless marketplace supporting five languages, real-time messaging, and Stripe payments. Engineered a custom AWS Translate-powered engine in Strapi 5 to automate complex nested content localization while preserving SEO integrity.
Client
Jun 2026
Eduard Y
Founder, Planuojam
Role
Senior Full-Stack Developer
Year
2026
Category
EventTech · Marketplace · Headless CMS · Multilingual Platform · Strapi

Eduard Y
Founder • Planuojam
“Very professional developer, he helping to build really difficult project in time, and for reasonable price. Work with him not first time and really happy with his work”
“One if not the best proffecional which i met in Upwork. Fast and professional”
Confidential Enterprise Project (Protected Under NDA)
Proprietary source code, database architectures, and internal endpoint credentials are confidential. This case study highlights non-proprietary architectural patterns, technical solutions, and verified outcomes.
The Challenge#
The project started as a recovery job. The client already had a website, but it was not working properly and was not structured for long-term growth. Patching isolated issues would have kept the same underlying problems in place, so I suggested a more practical direction: rebuild the system around a proper content model, a cleaner backend, and a frontend that preserved the client-approved visual direction while improving the user experience.
The biggest technical challenge was multilingual content. Planuojam needed to support Lithuanian, English, Russian, Polish, and Estonian across pages, listings, categories, event types, navigation, email templates, SEO metadata, and user-facing workflows. A normal CMS translation setup would still leave the team manually duplicating large amounts of content. Listings were not simple text pages either. They included vendor and venue blocks, pricing packages, FAQs, working schedules, media galleries, location data, social links, rich text, SEO fields, and relations to categories and event types. Translating that manually across every language would have been slow, expensive, and error-prone.
The platform also had to work as a real marketplace, not just a directory. It needed listing management, user accounts, provider profiles, bookings, availability calendars, reviews, messages, promotions, subscriptions, invoices, payment flows, email notifications, map discovery, and search-engine-friendly pages.
The Solution#
I rebuilt the backend in Strapi 5 and used it as both a headless CMS and the main application data layer. The content model was structured around the real business objects: listings, categories, event types, pages, bookings, messages, reviews, promotions, invoices, subscriptions, SEO settings, header, footer, site settings, and user profile extensions.
On the frontend, I built the marketplace in Next.js with locale-prefixed routes and server-rendered listing pages. The design direction stayed close to the previous website, but I improved the areas that affected usability, content quality, SEO, and conversion. Listing detail pages became richer and more useful, with galleries, videos, vendor or venue information, pricing plans, FAQs, ratings, reviews, availability, booking actions, map location, hot deals, and recommended listings.
For multilingual content, I built a custom auto-translation system on top of Strapi. When content is created or updated, the backend detects the source locale, finds the target locales, loads the full populated entry, and translates the right fields using AWS Translate. The system handles normal text, rich text blocks, components, dynamic zones, media, relations, nested listing data, and localized slugs. It also preserves existing manual translations, skips URLs, avoids copying SEO fields across languages incorrectly, retries failed translation calls, chunks long text safely, and uses loop guards so translation updates do not trigger endless translation cycles.
This turned multilingual publishing from a manual content duplication problem into a repeatable workflow. The team can update content in one language and let the platform generate the other locale versions while still keeping the option to manually refine translated content later.
Key Features#
- Headless Strapi backend for content, marketplace data, SEO, and administration
- Next.js frontend with locale-prefixed routes for Lithuanian, English, Russian, Polish, and Estonian
- Dynamic CMS pages built from reusable Strapi content blocks
- Vendor and venue listing profiles with galleries, videos, descriptions, pricing packages, FAQs, contact information, social links, and working schedules
- Mapbox-powered vendor and venue discovery
- Listing creation and editing flows for service providers
- Booking and availability workflows with calendar support
- Fallback inquiry flow when a provider does not use the availability calendar
- User profile area for listings, bookings, messages, invoices, promotions, reviews, and account settings
- Real-time messaging with Socket.IO, attachments, unread counts, read status, and typing indicators
- Reviews and rating aggregation for listing trust signals
- Hot deals and promoted listings for marketplace visibility
- Star-based promotion logic and promotion usage tracking
- Stripe subscription checkout for paid listing plans
- Stripe payment intents for promotion and star purchases
- Webhook-driven subscription and invoice handling
- Public invoice links secured by unique invoice tokens
- Localized email flows for OTP verification, welcome emails, bookings, messages, subscriptions, invoices, and inquiries
- Custom authentication flows with email OTP, social login exchange, provider phone validation, preferred language, and password setup for social-auth users
- Centralized site settings for logo, currency, fallback SEO, star packages, cancellation rules, and promotion pricing
- SEO support with canonical URLs, hreflang alternates, Open Graph metadata, Twitter metadata, XML sitemaps, sitemap index, and JSON-LD structured data for listings and FAQs
My Contribution#
I handled the project as a full-stack rebuild and recovery engagement. I reviewed the broken project, identified that the client needed a stronger foundation instead of another patch cycle, and recommended a rebrand with a proper backend architecture.
I designed and built the Strapi backend, including the content types, relations, custom controllers, middleware, lifecycle logic, user extensions, payment-related schemas, invoice records, messaging support, site settings, SEO models, and the auto-translation system.
I built the Next.js frontend around the new backend while keeping the client-approved visual direction. I implemented the localized routing setup, dynamic page rendering, listing pages, map experience, profile dashboard, booking flows, messaging UI, promotions, subscriptions, invoice access, email notifications, sitemap routes, metadata generation, and structured data.
I also handled the production polish that makes the platform usable beyond launch: caching and revalidation, server-rendered listing content, localized SEO, safer invoice access, cleaner listing filtering, promoted-first listing sorting, translated email templates, and ongoing fixes from real testing and client feedback.
Technical Highlights#
The auto-translation system is the core technical highlight of the project. It does not simply translate a single title and description field. It understands Strapi content structures and translates nested content while preserving the data that should not be translated.
For example, listing content can include dynamic vendor or venue blocks, rich text, media, relations, pricing packages, working schedules, FAQs, and SEO components. The backend separates translatable fields from non-translatable fields, copies media safely, maps localized relations when available, skips fields that would corrupt SEO or URLs, and only processes changed fields on updates when possible.
The marketplace also includes several production-grade application workflows: authenticated real-time messaging, booking status management, provider dashboards, review aggregation, Stripe checkout, Stripe webhooks, subscription records, invoice generation, public invoice tokens, promotion tracking, and multilingual transactional emails.
On the frontend, listing detail pages are built to serve both users and search engines. The pages are server-rendered from Strapi, include localized metadata, expose JSON-LD for local business and FAQ content, and generate sitemaps for pages, listings, categories, services, and event types.
Gallery






Tech stack
next-intl
Strapi 5
AWS Translate
Mapbox
Resend
Nodemailer
REST APIs
JSON-LDTimeline & Milestones
Architecture & Recovery
(Q3 2025)Audited legacy codebase, redesigned the content schema, and established a decoupled Next.js and Strapi 5 headless architecture.
Core Engine & Payments
(Q4 2025)Implemented Stripe subscriptions, Mapbox discovery, and Socket.IO real-time messaging workflows.
Localization & Launch
(Q1 2026)Built the custom AWS Translate localization engine, finalized localized SEO routes, and launched the platform.
Outcomes & Impact
- Completed
Project Recovery
Broken project turned into a rebuilt marketplace platform |
- Delivered
Rebrand and Frontend Rebuild
Previous website direction preserved, with improved user flows and marketplace screens |
- Strapi 5
Headless CMS
Content, navigation, SEO, listings, categories, event types, site settings, and page blocks moved into Strapi |
- 5 Languages
Multilingual Publishing
Five-language setup supported with custom auto-translation across nested Strapi content |
- Production Ready
Marketplace Workflows
Listings, bookings, reviews, messages, availability, promotions, subscriptions, payments, and invoices implemented |
- Fully Configured
SEO Foundation
Localized URLs, canonical metadata, hreflang, Open Graph, Twitter metadata, JSON-LD, and XML sitemaps added |
- Enabled
Operational Control
The client can manage platform content and marketplace configuration without relying on code changes for routine updates |
Technical Insights
Related Architecture & Engineering Articles

Build vs Buy an Event Booking System: How to Decide
Should you build a custom event booking system or buy a ready-made tool? Learn when each makes sense, how to compare real cost, and why a hybrid often wins.

Before You Build a New SaaS Product: 10 Technical Decisions That Can Save You Thousands
The most expensive SaaS mistakes often happen before development begins. These 10 technical decisions can save you time, money, and costly rebuilds.

API Idempotency Keys: Stopping Duplicate Writes in Laravel
A retried POST request isn't a safe assumption — it's a duplicate charge waiting to happen. Here's how idempotency keys make retries actually safe.

Audit Logging Architecture in Laravel: Building Tamper-Evident History for SaaS Compliance
"We believe it was deleted correctly" isn't a compliance answer. Here's how tamper-evident audit logging in Laravel actually holds up.

AI Generated the Feature in an Hour. Making It Production-Ready Took Much Longer
AI can generate a feature quickly, but a working demo is not a production-ready system. Here is how I approach closing that gap.

Migrating a Legacy Core PHP Platform to Laravel Without Losing Client Data
Rebuilding the application was only half the job. The harder part was moving years of unreliable data and client assets without breaking production.

Shopify vs Custom Ecommerce: When Custom Is Worth It
Shopify or a custom ecommerce build? A plain comparison of cost, control and integrations, the situations where custom pays off, and a three-year cost method plus a checklist to decide.

How Much Does It Cost to Build an MVP in 2026?
A custom MVP does not have to cost $50K+. Here is what you can realistically build for $2K, $5K, $10K, and $20K in 2026.

Testing Strategy for Laravel SaaS: PHPUnit, Dusk, Load Tests
A passing CI pipeline and a production incident can coexist. Here's the Laravel testing architecture that closes that gap for real SaaS teams.

pgvector HNSW vs IVFFlat: Choosing a Vector Index for RAG
HNSW or IVFFlat? A practical guide to choosing and tuning a pgvector index for RAG search on PostgreSQL, covering recall, build time, memory, tenant filtering, and when to skip the index entirely.

Laravel vs Node.js for SaaS: How to Choose the Right Backend
A practical comparison of Laravel and Node.js for building a SaaS backend: time to launch, built-in features, real-time needs, hiring, hosting and maintenance, with examples from real SaaS products built on each.