Home Our Work Tawny Trails

Case Study — Tourism & Arts Trail

Tawny Trails.
A rural arts trail
with a proper platform.

22 venues across the D'Aguilar Range and surrounds — art studios, sculpture gardens, horse riding, ceramics, accommodation, and bush walks — all connected through a WordPress-backed REST API feeding a Flutter PWA and a curated itinerary system.

22
Venues on the Trail
3
Curated Itineraries
1.7
Custom Plugins Built
6.9 MB
Flutter PWA

Overview

What it is

Tawny Trails is a self-guided arts and tourism trail covering the D'Aguilar Range, the Dayboro valley, and the surrounding hinterland northwest of Brisbane. Twenty-two venues — galleries, studios, sculpture parks, horse trail operators, accommodation, and bush walking areas — connected through a single platform that visitors can use on a phone without needing to install anything.

The brief was not just a directory with a map. It needed themed itineraries so a day-visitor from Brisbane could plan a route without spending twenty minutes reading. It needed opening hours that were actually current. It needed to work as a Flutter app on the phone — not a website that looks like it was designed for a desktop. And it needed a membership layer so venue operators could manage their own listings.

"The gap between 'a WordPress site with a map plugin' and 'an actual trail platform' is a custom REST API, a Flutter app, and a decent itinerary system. That is what we built."

WordPress Flutter Web Custom REST API ACF PMPro Membership Elementor Pro Custom CPT
Tawny Trails arts and tourism trail

The Trail

22 venues, all on one platform

Each venue is a custom post type (tt_venue) with ACF fields for opening hours, GPS coordinates, category, accessibility notes, and contact details. The Flutter app reads all of it from the REST API — no hardcoded content in the app itself.

Art StudioKylie Farrelly Art
Art StudioAnn Russell Art
Art StudioTatiana Afonina
Art StudioChrista's Art & Gilding
GalleryThe Artist Cove
GalleryDayboro Art Gallery
GalleryRunning Duck Studio
CeramicsWoodside Ceramics
SculpturePhoenix Sculpture Garden
HeritageSilverwood Butter Factory
WorkshopThe Gantry
RestaurantRendezvous
Horse RidingSlickers Horse Riding
Bush WalkMaiala Rain Forest
LookoutDahmongah Lookout Park
AccommodationMaiala Park Lodge
AccommodationLaceys Creek Homestead
AccommodationCascade Cottage
AccommodationWalkabout Retreat
AccommodationMercure Clear Mountain
AccommodationOcean View Estates
AccommodationOceanview Estates

Technical Architecture

A custom API feeding the Flutter app

The TawnyTrails API plugin (tt-api) is the backbone. It exposes venue data, itineraries, and opening-hour logic via a custom REST API. The Flutter app has no hardcoded content — everything it displays is fetched live from WordPress.

🔌

TawnyTrails API Plugin (tt-api)

A custom WordPress plugin built specifically for this project. Handles venue data storage, custom field management, the REST API layer, and data caching to keep the Flutter app fast without hitting the database on every request.

📱

Flutter PWA at flutter.tawnytrails.com

A Flutter Web app compiled to JavaScript and deployed as static files. 6.9 MB, runs on Android, iPhone (via Safari Add to Home Screen), and desktop. Reads venues and itineraries from the REST API on load. No App Store account required for iOS users.

🗺️

Live venue map

Every venue has GPS coordinates stored as ACF fields. The Flutter app renders an interactive map from the API data. Visitors can see all 22 stops, filter by category, and get directions from their current location.

🕐

Opening hours logic

Each venue's opening hours are stored as structured data, not free text. The API calculates whether a venue is open right now based on the current time and day. The app shows "Open now" or "Closed — opens at X" without the Flutter app doing any time calculations itself.

🧭

Three curated itineraries

A full day on Tawny Trails, a Brisbane scenic drive and arts highlight, and a creative country walk through Dayboro township. Each itinerary is a custom post type with ordered venue stops, timing estimates, and driving directions between them.

Accessibility map

A separate accessibility-focused view of the trail with venue-level accessibility notes. Flat access, parking proximity, and facility notes for each venue — stored as ACF fields and exposed through the same REST API.

Why not a standard map plugin

Standard WordPress map plugins (Google Maps, MapPress, etc.) embed a JavaScript widget on a page. They work fine for a simple business locator. They cannot serve a Flutter app, they cannot calculate opening-hour state, they cannot handle itinerary ordering or accessibility data in a structured way. When the Flutter app needs to consume venue data, you need a real REST API — not a plugin that renders HTML.

Platform Features

Membership and content management

Venue operators log in and manage their own listings. Visitors can purchase trail memberships for extended features. The whole thing runs on PMPro — the same membership engine used across the other platforms we manage.

The tt-pmpro-extensions plugin bridges PMPro and the TawnyTrails-specific access rules — which membership level gets access to which itinerary, gift certificate handling, and member discount logic for venue bookings.

Tour operator portal

A dedicated page for tour operators listing group experience options, with booking inquiry forms linked to each operator's contact.

Trail blog

Regular editorial content about venues, seasonal events, new openings, and trail news. Indexed and surfaced in search.

Gift certificates

Trail membership gift certificates configured in PMPro. Recipients redeem them at checkout for trail access.

Feature flags

A feature flag system in tt-api lets us enable or disable features for specific membership levels without a code deploy — controlled from the WordPress admin.

Custom plugins built

  • tt-api

    Core REST API. Registers CPTs, meta fields, routes, CORS, caching. The Flutter app's entire data layer.

  • tt-pmpro-extensions

    Membership access rules specific to TawnyTrails — itinerary gating, gift certificates, operator dashboard access.

  • tt-event-shortcodes

    Shortcodes for embedding trail events, seasonal listings, and venue availability in standard WordPress pages.

  • tt-site-tweaks

    Performance and display adjustments specific to the trail theme — header overrides, lazy load tuning, schema output.

Under the Hood

Full technology stack

WordPress 6.x PHP 8.4 MariaDB Flutter 3.x Dart Flutter Web REST API (custom) Advanced Custom Fields PMPro Membership Elementor Pro Custom CPT (tt_venue) Custom CPT (tt_itinerary) Redis cache CleanTalk spam protection DirectAdmin
What is still being built

The platform is live and functional. A few pages are not yet published — some shortcode-driven content sections are still being completed, and the gift certificate flow is in draft. The REST API, Flutter app, venue directory, itineraries, and membership system are all fully operational. This is a normal state for a growing platform — it is not abandoned or broken.

What we can build for you

Got a trail, a precinct, or a cluster of venues?

The same architecture — custom REST API, Flutter PWA, itinerary system, opening-hour logic, accessibility map, and membership layer — can be built for any arts trail, tourism precinct, or multi-venue experience. The venue count does not matter. The complexity does not matter. The pattern is proven.

Talk to us about your project See more of our work