Web Accessibility
Accessible engineering: semantics, keyboard and focus, forms, testing and WCAG in practice.
- Semantic HTML
- Keyboard & focus
- Manual testing
- WCAG
My WordPress experience goes beyond page builders. I've worked with custom themes, plugins, integrations, payments, external APIs and accessible WordPress development for client websites and business workflows.
Custom themes · Plugins · Accessibility · Security
How I think about it
WordPress is a good solution when its content model and ecosystem match the product. The goal is to use WordPress where it simplifies ownership and publishing, not force it into problems better solved by a custom application.
Key experience
Scope
Deep dive
A custom theme should be a small, intentional codebase: templates for the content types the site actually has, reusable template parts instead of copied markup, responsive layouts built on semantic HTML, and only the scripts and styles each page needs.
Heavy multipurpose themes trade a fast start for years of unused code, conflicting settings and slower pages.
Business functionality — booking rules, integrations, custom workflows — belongs in a plugin, not in the theme's functions.php, so it survives a redesign. Plugins hook into WordPress through actions and filters instead of modifying core or other plugins, keep their logic in classes with a clear structure, and register their admin screens, settings and capabilities explicitly.
// Lives in a plugin, not the theme — it survives a redesign.
add_action('init', [Bookings::class, 'registerPostType']);
add_filter('the_content', [Bookings::class, 'appendAvailability']); Much of the maintenance pain on WordPress sites comes from content modelled as formatted pages. Custom post types for distinct things (rooms, events, team members), taxonomies for how they're grouped and filtered, and custom fields for structured attributes let templates render consistently — and let editors change content without breaking layouts.
External APIs — booking engines, CRMs, email platforms — are called from server-side code with timeouts and error handling, credentials kept out of the database where possible, and responses cached with transients so a slow third party doesn't slow down every page view. When an integration fails, the page degrades gracefully instead of breaking.
Payment flows are where WordPress code needs the most discipline. The payment provider confirms payment through a verified callback or webhook — never through a redirect URL the customer's browser could fake. Amounts are calculated on the server, orders move through explicit states, and callbacks are idempotent because providers retry them.
A large share of WordPress accessibility problems comes from themes and plugins rather than content: missing landmarks, inaccessible menus and sliders, forms without labels, plugin output that injects unlabelled buttons.
Accessible WordPress means semantic templates, keyboard-operable navigation with visible focus, form plugins configured with proper labels and errors, checking what each plugin actually outputs against WCAG — and giving editors the structure (headings, alternative-text fields) to keep content accessible after launch.
Slow WordPress sites are usually slow for the same reasons: plugins loading scripts on every page, unoptimised images, uncached pages and heavy database queries inside templates. The fixes follow directly — remove what isn't needed, load assets only where they're used, serve responsive compressed images, cache pages and objects, and watch for queries inside loops.
Most WordPress compromises go through outdated plugins and themes, weak credentials or excessive permissions. Core, themes and plugins are kept updated; abandoned plugins are replaced; users get the lowest role that works.
Custom code follows WordPress's own rules: capability checks and nonces on every action, sanitize input on save, escape output on render, and prepared statements for custom queries.
Clients live in the admin, so it's part of the product. Custom fields with clear labels and help text, editor blocks restricted to what the design supports, simplified menus for editors, and admin pages for business settings turn WordPress into a tool clients can use confidently without breaking the site.
The REST API lets WordPress serve content to other applications — a mobile app, a JavaScript frontend, another system. Custom endpoints get proper permission callbacks and validated arguments, and it's worth checking what default endpoints expose: data that should be private leaking through them is a common oversight.
Headless WordPress — WordPress for editing, a separate frontend for rendering — makes sense when the frontend needs to be an application, when content feeds several channels, or when performance and tooling requirements outgrow themes.
It also adds a second application to build, host and secure, breaks previews and many plugins, and moves responsibility for SEO and accessibility to the frontend. For a content-led business site, a well-built traditional theme is usually the better trade-off.
A WordPress site is never finished: updates tested on staging before production, automated off-site backups that have actually been restored at least once, compatibility checks before major PHP or core upgrades, and uptime and error monitoring. A maintenance routine is what keeps a site secure two years after launch.
In practice
Real products
WordPress has been part of client websites and business workflows I've delivered — used where it simplified publishing and ownership.
Hospitality / Tourism
Hotel, restaurant and spa website built on WordPress, presenting rooms, dining and experiences with a booking entry point on the homepage.
Events / Business Website
Bilingual (French / English) WordPress website for an event agency, presenting its event services and technical solutions.
Client work at WESHORE and INVENEO
Custom themes, plugins, integrations, payments and accessible WordPress development for client websites.
Accessible engineering: semantics, keyboard and focus, forms, testing and WCAG in practice.
Predictable API contracts: validation, errors, authorization, idempotency and webhooks.
Build reliable web platforms, SaaS products, dashboards, APIs, and internal tools with modern full-stack technologies.
Learn moreIdentify, document, and fix accessibility issues in modern websites and web applications.
Learn moreWhether it's an architecture decision, a delivery problem or something specific to WordPress, I can help you find a practical path forward.
What happens next
Share your goal
A few lines about the product, problem, or audit need.
Get a quick read
A practical reply on the best technical path forward.
Move forward
A clear scope, estimate, or concrete next step.