A dual-platform event and lifestyle app for Namibia's premier festival brand. Web admin, public website, and an offline-first Flutter mobile app — all powered by one Laravel backend.
Namib Rage is a Namibian event curation and experiential design company founded in 2013. They produce multi-sensory gatherings that blend music, motorsport, food, and culture across Namibia — from intimate desert experiences to their flagship Sound of Summer beach festival at Langstrand, Walvis Bay, now in its tenth year.
They needed a platform that could do two things: give their team a powerful admin panel to manage events, performer lineups, schedules, ticket tiers, and content — and give their audience a mobile app that works at a beach festival where cellular signal is unreliable at best. Plus a public website that showcases upcoming events, blog posts, and vendor partnerships.
We built it as a Laravel backend serving both a Livewire-powered website and a Flutter mobile app through a single REST API. The mobile app loads all public content in one bootstrap call and works entirely offline until the next sync. The admin panel handles everything from performer galleries to push notifications.
The admin panel is the nerve centre. Create an event, set its status (draft, scheduled, published, archived), upload hero images and galleries, then build out everything nested underneath: performer lineups grouped by stage, schedules grouped by day, ticket tiers with pricing and availability, FAQs, info sections, and external links. Every piece of content is managed through relation panels so the data model stays clean and the admin UI stays fast.
Events support featured flags for homepage promotion, location coordinates for map integration, and visibility controls (public vs private). The whole thing publishes instantly to both the website and the mobile app through the API — no separate content entry, no sync delays.
Performers organised into stage groups — Main Stage, Jetty Stage, Studio Stage. Each performer has a profile image, gallery, genre, role, headliner flag, and time slot. The mobile app renders the full lineup with stage-by-stage navigation.
Schedules grouped by day and stage. Each slot has a performer, start/end time, and stage assignment. The mobile app shows a tabbed day view so festivalgoers can plan their set list without needing signal.
Multiple ticket categories per event — General, VIP, Backstage — each with price, currency, quantity cap, max per person, sold-out flag, and a link to the external ticketing partner. Displayed on both the website and the mobile app.
The Flutter mobile app is built around one core assumption: when you need it most, you won't have internet. When the app opens it makes a single bootstrap API call that returns every event, blog post, push notification, and site config in one response. That data is cached locally, and the app runs entirely from the cache until the next background refresh.
Five tabs: Home (featured event + upcoming + latest blogs), Events (searchable, filterable list with full detail views), Stories (blog feed), Inbox (push notification history), and Connect (contact and vendor inquiry forms). Event detail is tabbed — Overview, Schedule, Performers, Tickets, Gallery — with everything available offline down to the performer bios and stage maps.
The admin drafts a push notification from the panel — optionally linked to a blog post or event. It goes through a draft, queued, sent workflow. The notification service delivers it to all registered devices, and the Inbox tab in the mobile app keeps a persistent history so users can tap back to the full content any time.
Events and performers each have hero images and multi-image galleries, served via CDN. The mobile app pre-caches hero images during bootstrap and lazy-loads galleries on scroll. Full-screen photo viewer with pinch-to-zoom for the detail views — essential for a brand built on visual identity.
The public website is a set of Livewire components consuming the same models and media as the API. Home page with a featured event hero, upcoming events grid, and latest blog posts. Event detail pages with the full lineup, schedule, ticket info, FAQs, and image galleries. A blog with published/draft workflow. Contact and vendor inquiry forms that validate, persist, and send email notifications.
Response caching keeps public pages fast — pages are cached for 10 minutes with smart invalidation when content changes in the admin panel. The admin team sees real-time previews; the public sees a fast, CDN-friendly site.
Rich blog posts with hero images and galleries. Published/draft workflow with timestamps. Auto-draft push notifications from blog posts so the team can announce new content to the mobile app with one click from the admin panel.
Two separate Livewire forms — one for general inquiries, one for vendors and partners. Both validate, store in the database with IP tracking, and send email notifications. The vendor form captures business details so the events team can evaluate partnerships.
Site name, tagline, hero text, contact details, and social media links are all configurable from the admin panel — no deploys required. The mobile app pulls the same config via the bootstrap endpoint so branding stays consistent across platforms.
The REST API is designed for mobile-first consumption. A single /api/v1/bootstrap endpoint returns events, blogs, push notifications, and site config in one cached response — so the app makes one round trip and has everything it needs. Individual endpoints exist for event detail, blog detail, push history, contact submissions, and vendor inquiries, all returning structured JSON through dedicated resource transformers.
The bootstrap endpoint is cached for 120 seconds server-side. Public web pages are cached for 10 minutes. A cache registry handles smart invalidation — when an admin publishes an event or blog post, only the affected cache keys are flushed. The mobile app doesn't care about staleness; it syncs in the background and never blocks the UI.
A full admin dashboard with resource management for events, blogs, users, and push notifications. Nested relation panels for performers, schedules, tickets, FAQs, and info sections. Role-based access, activity logging, and media management with CDN integration — all without writing custom CRUD.
The backend runs Laravel with Livewire for the website, a full admin panel for content management, and a REST API for the mobile app. The Flutter app targets both iOS and Android with an offline-first architecture, push notifications, and map integration. Redis powers caching and queue workers, and all media is served through a CDN.
We build web + mobile platforms that work offline, push notifications to thousands, and give your team full control over content. Let's talk about yours.