I'm rebuilding a friends' website that currently consists of plain HTML and an iframe linking to an external ticket shop. The new version should show upcoming events with detail pages and image galleries, support equipment-rental requests, include a small merch shop with checkout, and provide a backoffice for managing events, products, variable content, and user roles or permissions. A self-hosted ticketing system might be added later.
The public site will mainly be used on mobile, while the backoffice should work well on both desktop and mobile. I have about a year of professional web development experience and roughly three years of learning experience, mainly with PHP, JavaScript/jQuery, and SCSS. I initially started with Next.js, Supabase, and Vercel, but relied too heavily on generated code and ended up with a codebase I no longer understand or feel comfortable maintaining. I'm considering starting over with a stack that is modern but still approachable.
The project should be inexpensive to host—ideally free or only a few euros per month—and preferably use EU- or GDPR-friendly hosting. I don't need a CMS for ordinary static pages; the backoffice only needs to manage events, products, slides, and other changing content. What stack would you choose for this project, and why?
4 Answers
WordPress with WooCommerce is another reasonable option if the people managing the backoffice need a ready-made administration interface. It can be hosted cheaply in Germany, and your PHP and jQuery experience would make customization approachable. WooCommerce already handles many of the difficult shop concerns.
That said, if you want full control over the design and already plan to build a custom event-management backoffice, Laravel and Filament would likely be a cleaner fit than adapting WordPress. You could also keep the shop separate by using Stripe Checkout or a hosted commerce service.
Your original Next.js and Supabase approach can still work if the database schema and application boundaries are designed carefully. Supabase is useful for structured event, product, order, and user data, while server-side functions can handle order creation, payment intents, and payment webhooks. A Next.js backoffice can manage events, products, orders, and permissions.
For payments, Stripe Checkout Sessions are usually simpler than building a custom checkout. Make sure Stripe webhooks—not the browser—are responsible for confirming payments and updating order status. The main issue isn’t necessarily the stack; it’s avoiding generated code you don’t understand and keeping the data model, authorization rules, and business logic explicit.
If the traffic and feature set stay modest, a straightforward stack is enough: a server-rendered frontend with vanilla JavaScript or Alpine.js, a small Node.js backend using Fastify, and SQLite. It would be inexpensive to host and relatively easy to understand. You can later move to a larger database if the project outgrows SQLite.
For mostly static event pages, a static-site generator such as Hugo combined with Alpine.js could also work well, but the rental workflow, checkout, accounts, and role-based backoffice would still need a separate application or service.
A practical choice would be Laravel with Filament, hosted on an inexpensive German provider such as Hetzner. Laravel is well documented, widely used, and should feel familiar given your PHP background. Filament can provide the backoffice, forms, permissions, and resource management without forcing you to build all of that from scratch.
For interactive parts of the frontend, you could use Alpine.js, HTMX, or Livewire. HTMX is a relatively simple option if you want server-rendered pages with limited JavaScript. For the shop, I’d strongly consider an established commerce package or hosted checkout rather than implementing product variants, inventory, orders, and payments yourself. Stripe Checkout plus webhook handling would cover the payment flow while keeping sensitive payment logic out of your application.

Related Questions
How To: Running Codex CLI on Windows with Azure OpenAI
Set Wordpress Featured Image Using Javascript
How To Fix PHP Random Being The Same
Why no WebP Support with Wordpress
Replace Wordpress Cron With Linux Cron
Customize Yoast Canonical URL Programmatically