← Selected work

WordPress / Custom theme / Performance optimisation / SEO / Copywriting / Design

Australian Music Teachers Register

A national music-teacher directory, engineered into a connected WordPress platform for discovery, membership and growth.

Visit website
AMTR website: finding the right music teacher

The project

A directory on the surface. A platform underneath.

Finding a music teacher should feel simple. Making that simplicity work across locations, lesson formats, membership tiers and thousands of profiles takes much more than a directory plugin.

Our work with the Australian Music Teachers Register spans design, copywriting, SEO, a custom WordPress theme and extensive development around Directories Pro and Ultimate Member. We connected search, subscriptions, enquiries and member administration into a coherent platform, then examined the database queries and resource loading beneath it.

During our partnership, membership grew from around 100 to more than 2,000. The engineering below describes how the platform works; the recorded query comparisons measure specific operations within that wider work.

01 / Discovery

A better match starts below the search box.

Instrument. Lesson format. Location. Distance. A small set of controls conceals a carefully defined search system.

We built geographic discovery around canonical Australian localities and the directory’s own published teaching relationships. Nearby results come from candidate filtering and exact distance calculations, with online teaching treated independently. The interface preserves the search context when visitors return from a profile.

AMTR teacher directory: public search results
Music-teacher search results captured from the public AMTR website, showing lesson formats, instruments and teaching specialities.

From a place name to a relevant teacher.

  1. Resolve the location

    Match suburb, state and postcode to a canonical locality and its accepted coordinates, with source provenance.

  2. Narrow the candidates

    Use an indexed bounding rectangle, adjusting longitude for latitude, before calculating distance.

  3. Calculate proximity

    Apply Haversine distance to the candidate set and enforce the selected radius across relevant listing locations.

  4. Apply the rules

    Respect published teaching relationships, membership priority and distance bands, while preserving a stable random seed.

Distances are calculated between locality coordinates. They represent geographic proximity, not street-address accuracy or driving time.

02 / Targeted performance

Make the database do less work.

Performance work begins with the operation that is actually expensive. We examined lookup shapes, relationship tables and index column order, then introduced targeted composite indexes for the geographic and directory search paths.

These recorded V7 development comparisons show the effect on two representative operations.

Geographic candidate lookup

Moss Vale, 40 km radius: bounding-box query path.

Before the indexed path
25.3 ms
With the indexed path
1.2 ms

Teaching relationship lookup

Suburb + Teaching query across 77 relationships.

Without the targeted index
101 ms
With the targeted index
2 ms

Approximate elapsed query times recorded in the V7 development decision log. These are historical comparisons, not new production benchmarks, percentile measurements or whole-page load times. Each chart uses its own scale. The locality index is a composite database index; exact radius filtering still follows the candidate lookup.

03 / Platform architecture

One decision. Consistent behaviour everywhere.

A member account, a directory listing and a paid subscription describe different things. Treating them as interchangeable creates the kind of edge cases that surface as support requests.

We built a shared entitlement decision around the listing, its plan and its linked subscription. The same result governs access and presentation across the platform, including renewal and replacement-subscription scenarios.

  • Member identity

    The account and the person who owns the listing.

  • Directory plan

    The listing, its assigned plan and the capabilities that plan enables.

  • Subscription state

    The linked product, owner, current status and relevant end date.

Shared entitlement logic

What is this listing entitled to now?

Validate the relationships, resolve the effective tier and apply the same answer wherever a feature depends on membership.

  • Visibility and feature limits
  • Enquiries and private notes
  • Search priority and reporting
  • Campaign audience eligibility
Cached decisions are invalidated on relevant changes and bounded by entitlement end dates.

04 / The human experience

The complexity stays behind the experience.

The public profile gives prospective students a clear path from discovery to an enquiry. Behind that interaction, the server checks the listing owner, its current membership tier and the permitted workflow.

Member inbox access, Premium notes and notification behaviour all follow those checks. An identifier submitted in a form is context to validate, never permission to trust. This is where careful plugin integration becomes a better everyday product.

AMTR public profile: Viva School of Music
A public teacher profile on AMTR. Public pages illustrate the experience; the diagrams explain the systems behind it without exposing private member information.

05 / Engineering detail

The work you don’t see. The difference you feel.

The platform combines a custom theme with carefully scoped plugin extensions and operational tooling. The aim is to keep existing systems authoritative, make dependencies explicit and give future changes somewhere sensible to live.

Load resources for the job the page is doing.

We analysed asset loading by page capability, including search, listing details, member forms and discovery results. Conditional loading is only effective when dependency declarations agree: retained Ultimate Member scripts must not silently bring removed widgets back into the page.

The recorded shared JavaScript file is 7,339 bytes on disk, supported by six conditional module families. That is a source-file measurement, not a claim about total JavaScript or compressed transfer size. Image derivatives are sized for their use, while selected embedded media waits until it is needed.

The same principle extends to the document head: derive search metadata from the relevant taxonomy data instead of executing a full directory shortcode just to discover a title.

Extend the plugins without editing their vendor files.

Directories Pro, Ultimate Member and subscriptions each retain a defined role. Custom logic connects them through native hooks and APIs, keeping billing history and listing relationships intact.

A terminated old subscription must not revoke a valid replacement. Listing ownership and one-listing permissions are checked on the server. These are explicit rules with transition checks, rather than assumptions buried in template conditions.

Broad asset pruning for logged-in flows remains opt-in where wider compatibility needs verification. Performance changes should earn their place without breaking account management.

Treat every enquiry as a permissioned workflow.

Gravity Forms transports the enquiry; server-side logic validates its listing context, owner and current tier. Invalid context fails closed. Free and Premium membership receive distinct notifications, while the owner-authorised inbox and Premium notes enforce their own access checks.

Protected email reveal uses a short-lived signed token, rate controls and uncached responses to add harvesting friction. It is not presented as encryption or a guarantee against determined scraping.

Analytics distinguish impressions from views. A visibility threshold, dwell time, batching and deduplication make the event definitions deliberate; they do not turn an impression count into a count of unique people.

Make communications resumable and eligibility current.

Campaigns use separate campaign, recipient and delivery records, with small scheduled batches and explicit rate limits. Eligibility and the destination address are rechecked at send time, rather than trusting a stale export.

Claim recovery and retries allow interrupted work to resume. The design acknowledges the boundary between a message accepted for sending and one delivered to an inbox; it does not promise exactly-once delivery.

Move data with checks, not crossed fingers.

The location migration preserves canonical identities and relationships across WordPress and Directories Pro. Stable references replace assumptions about local database IDs.

Preview evidence and source hashes detect drift before a write. Bounded, resumable batches make progress inspectable, and verification covers both relationship stores. The process was designed around preserving the meaning of existing data, not merely completing an import.

Keep editorial control separate from business logic.

An ACF-backed editorial registry gives the site team control of supported messages without moving membership rules into editable copy. Validated placeholders, escaped output and code fallbacks keep that boundary clear.

The registry avoids autoloading its full content on every request, and deploying new defaults does not overwrite existing editorial choices. Maintainability is part of performance: the next change should be understandable as well as fast.

Based on the AMTR V7 implementation and release notes through September 2026.

Built to perform. Engineered to last.

Has your platform outgrown its defaults?

Complex WordPress work is our territory. We help businesses, agencies and designers turn ambitious requirements into coherent, maintainable websites — from a design concept to the systems behind it.

Enjin optimised our complex site to handle high traffic seamlessly and delivered outstanding SEO results. Such a great team to work with.

Carolyn TrickettAustralian Music Teachers Register