projects/2016–26 private
EverTech Memorial Platform
Memorial sites, obituaries, donations and livestreams for funeral homes across Canada.
- TypeScript
- React
- Gatsby 5
- GraphQL
- MongoDB
- WordPress

EverTech Solutions is the company I co-founded in 2016. We run the websites funeral homes use to publish obituaries, collect condolences and donations, and stream services. In 2026 I rebuilt the front of it: a monorepo of Gatsby sites on a shared UI package, plus a new admin dashboard that every site embeds.
The admin dashboard
The admin is where funeral-home staff do everything, so it’s the biggest part of the rebuild. It replaces a legacy Fluxxor app with a Gatsby 5, React 18 and TypeScript single-page app.
- Strict layering: components only call hooks. Hooks live in
context/, built onuseReducerwith async actions. Onlyservices/talks to the network. Every screen follows the same one-way flow. - Areas: memorials (a step-by-step creation wizard with a layout picker and live preview, plus approvals and an archive), donations, users, custom domains, traffic, audit logs and a system status page.
- One build, every site: it’s built once with a
/adminpath prefix and copied into each site at deploy, so it’s served same-origin at<site>/adminwith no CORS and no separate host. - Server contracts: every GraphQL input type and REST route is checked against the backend
(
rest-in-print-server: Node, GraphQL, REST, MongoDB and Redis) instead of assumed. - “Green” means green: Jest and React Testing Library pass,
gatsby buildexits 0 andtscreports zero errors.
The sites
- An npm-workspaces monorepo with one Gatsby 5 site per funeral home, using WordPress multisite for page content.
@evertech/funeral-uiis the shared package for the memorial and obituary UI and site sections.- Netlify edge functions proxy the obituary API with an allowlist and ObjectId validation. In local dev, a dev-server stand-in does the same job.
- For local dev, a Docker stack puts WordPress, the API and the admin behind one nginx proxy, demuxed by hostname.
Screenshots use a fictional funeral home with generated data.