Fictional demonstration site — a portfolio build by Niels van Eck. See how it works →

How this works

ClubCore is a from-scratch WordPress platform. This page is the map: every feature below is a self-contained module that describes its own engineering. 38 of 38 modules are wired up in this demo.

Getting started

The annotation system

Every feature documents its own engineering; the floating toggle reveals it inline.

  • Module registry
  • Shortcodes
  • localStorage state
  • Progressive disclosure

Demo data engine

An idempotent seeder that fills the whole site with a fixed cast of fictional breeders and their data.

  • Idempotent seeding
  • Shared action hook
  • Meta markers
  • Admin tool

Members

Member account & profile

Members edit their kennel name, town and contact preference from the front end.

  • User meta
  • Declarative fields
  • Per-type sanitisation
  • Nonce-guarded form

Members-only area

A front-end dashboard for members, with wp-admin blocked for everyone but staff.

  • Shortcode dashboard
  • admin_init redirect
  • login_redirect filter
  • Capability gating

Photo uploads + moderation

Members upload photos from the front end; staff approve them before they go public.

  • Front-end file upload
  • Byte-level type checking
  • Moderation queue
  • Attachment meta

Member messaging

A private inbox so members can contact each other without sharing email addresses.

  • Private post type
  • Sender/recipient meta
  • Read tracking
  • No PII exposure

Ownership transfer

Move an animal to another member with a two-step handshake β€” proposed by the owner, accepted by the recipient.

  • Two-party state machine
  • Per-side authorisation
  • Idempotent handshake

Privacy & data export

Members download all their data as JSON and can request erasure β€” the access and erasure rights, built in.

  • Live data export
  • Nonce-protected download
  • Erasure workflow
  • JSON streaming

Marketplace

Marketplace

Members list animals for sale; visitors browse; contact runs through the member account, never a raw email address.

  • Custom post type
  • Post meta
  • WP_Query grid
  • Front-end form

Shows & judging

Champions gallery

The top winners across every published show, gathered automatically from the results.

  • Derived data (no duplication)
  • meta_query with OR
  • Photo gallery

Judges register

A public register of judges and their breed specialisms, linked to the shows they officiate.

  • Custom post type
  • Cross-linking to shows
  • Scoped permissions

Year-end points

A live season league table where each animal’s best few shows count toward its total.

  • Live aggregation
  • Best-N ranking
  • Single-source scoring rules

Results & publishing

Staff or the assigned judge enter placings, then publish β€” which makes the results public on the show page.

  • Bulk array-named inputs
  • Per-row authorisation
  • Publish gate
  • Grouped output

Show entries

Members enter their animals into a show’s classes; each entry gets a catalogue number and, later, a result.

  • Join records
  • Server-side re-validation
  • Per-show numbering
  • Progressive enhancement

Show management

Exhibitions with a date, venue, classes and a status that drives the whole entry-to-results lifecycle.

  • Custom post type
  • Status lifecycle
  • Extensible via filters
  • Meta-ordered queries

Pedigree

Breeding schedule

Plan matings between your own animals; the expected kindling date is calculated automatically.

  • Linked records
  • Date arithmetic
  • Sex-filtered selects
  • Status workflow

Health register

A dated log of vet checks, vaccinations and results per animal.

  • One-to-many records
  • Meta queries
  • Status pills

Litter registration

Register a whole litter in one step β€” kits are auto-numbered and pre-linked to their parents.

  • Batch insert
  • Number allocation
  • $wpdb query
  • Relationship inheritance

Pedigree chart

A multi-generation family tree, built by recursively walking each animal’s sire and dam links.

  • Recursion
  • Self-referential data
  • Flexbox layout
  • Print stylesheet

Animal registry

Every animal is a record with a registration number, owner, and a sire and dam that are themselves records.

  • Custom post type
  • Self-referential meta
  • Lookup by reg. number
  • Ownership by user

Content

Regional chapters

A page per region, each editable from the front end by its own coordinator β€” and no one else.

  • Scoped capabilities
  • Per-object ownership check
  • Front-end editing
  • wp_kses_post

Events calendar

Upcoming events, each with a one-click .ics download and a subscribe-all feed.

  • iCal / VCALENDAR
  • Custom query var endpoint
  • template_redirect
  • Streaming a file

Photo gallery

A responsive masonry gallery of every staff-approved member photo.

  • CSS columns masonry
  • Attachment query
  • Lazy loading
  • Shared moderation state

Magazine archive

Browsable covers for everyone; the actual issue PDFs are members-only, served through the protected viewer.

  • Members-only files
  • Protected viewer reuse
  • Public/gated split

News

Federation announcements as a dedicated post type with its own archive and feed.

  • Custom post type
  • Excerpts
  • Shortcode attributes

Show reports

Long-form show write-ups authored in the block editor and linked back to the show.

  • Block editor (show_in_rest)
  • Cross-linked content
  • Custom post type

Video gallery

Categorised video embeds where only a URL is stored β€” the player comes from oEmbed.

  • oEmbed
  • Custom taxonomy
  • Responsive iframes

Documents

Show catalogue PDF

The printed show catalogue, generated on demand from the live entries.

  • Print-to-PDF
  • Live data (no export step)
  • Grouped tables

Registration certificate

A one-click, print-ready registration certificate per animal, complete with pedigree.

  • Print-to-PDF
  • Reused pedigree builder
  • Capability gate
  • Print stylesheet

Protected PDF viewer

Serves member-only files through an access gate so the real upload URL is never exposed.

  • Access-gated streaming
  • Hidden upload paths
  • readfile()
  • Print-to-PDF (no library)

Transport documents

Print-ready movement paperwork for an animal changing keepers, filled from your own records.

  • Print-to-PDF
  • Ownership re-check
  • Prefilled from registry

Platform

Bulk email to members

Segmented mailings with an audit trail, batched sending, and a safe dry-run default.

  • Segmentation
  • Audit trail
  • Batched sending
  • Safe-by-default dry run

Security hardening

Login throttling, security headers, XML-RPC off, and quieter error messages.

  • Transient rate-limiting
  • Security headers
  • Attack-surface reduction
  • Generic errors

External registry import

Import animals from a CSV by mapping columns β€” matching on registration number, never wiping unmapped data.

  • CSV parsing
  • Column mapping UI
  • Match-and-merge
  • Non-destructive by design

PWA / offline

Installable to a phone’s home screen, with a lean service worker and an offline page.

  • Web app manifest
  • Service worker
  • Network-first + offline fallback
  • Versioned cache

JSON REST API

Clean, read-only public endpoints for shows, results, champions and standings.

  • register_rest_route
  • DTO shaping
  • Published-only gating
  • Argument validation

Roles & capabilities

Four purpose-built roles β€” member, coordinator, judge, staff β€” each with its own capabilities.

  • add_role()
  • Custom capabilities
  • current_user_can gates
  • Versioned migration

SEO & schema.org

Meta tags, Open Graph and Event structured data β€” no SEO plugin needed.

  • JSON-LD (schema.org)
  • Open Graph
  • Per-template output
  • REST hardening