Summary
Ma-Lowe Home Care Agency is a home care agency in Alexandria, Virginia, offering among other things nursing at home, personal care and respite care. The old site ran at an outside provider on WordPress 5.6 and PHP 7.2, which has had no security updates since 2020, and its content had not been touched since late 2022. The new site runs on Next.js 16 with Payload CMS 3 and Postgres on a VPS of its own, with the same 13 pages, 18 blog posts and images, and every old address still works. Behind it sits a Front Desk: one place where the office sees every care request and job application, sees who has picked it up, and replies to the person from the card. The first version went from the first commit to the server in a single night; in the week after, an audit log, content versions, a nightly backup, the Front Desk and new forms were added.
The brief
The office wanted the site away from the previous provider and under its own control, without losing its existing search visibility and links: all the content had to come along and the old addresses had to keep working. On top of that, form submissions arrived in two Gmail inboxes, with no way of telling whether a colleague had already called or emailed the person back. The administration had to suit a small office team without a technical background.
What I built
- A migration from the WordPress REST API and the rendered theme HTML: 13 pages, 18 blog posts and 41 images, through an idempotent import script that refuses to run once work has been done in the CMS
- A parity check across all 31 old URLs on status and content, and 308 redirects from the old blog addresses to their new place under /home-health-care-blog/
- Payload CMS 3 with pages built from blocks (hero, text, image and text, services grid, call to action, form, insurers) and up to 50 stored versions per page, post and site settings
- Two forms instead of four: a care request that follows the office's paper intake form and a job application, with a honeypot, rate limiting and zod validation; every submission becomes a record in Postgres plus a notification email through Resend
- The Front Desk: two boards (clients and applicants) with five steps each, call notes, a history per inquiry and replies by email with starter texts and a review step; the delivery status comes back through a signed Resend webhook
- An audit log outside the database: every sign-in, failed sign-in and content change as an append-only JSONL line on the server, with a viewer open to the administrator only
- On-page SEO that was missing or wrong on the old site: a description of its own per URL, https canonicals, a robots.txt that no longer hides stylesheets and images from search engines, and HomeHealthCareService, BlogPosting and BreadcrumbList schema
- Hosting on a VPS of its own behind Caddy, with a nightly backup of the database, media and audit log, and a deployment that builds into a separate folder and then swaps, so the site never appears unstyled during a build
In detail
- Old links keep working: pages sit at their old address, and every old blog post URL redirects permanently to its new place
- For every inquiry it is visible who has it, which step it is at and what has already happened; a new inquiry not picked up after two days turns red, an open one with no activity for seven days amber
- 'Take it' claims a card with a single conditional SQL update, so two colleagues do not call the same person back
- The Medicaid or insurance member number is shown in full in the Front Desk, but masked in the notification email and in the audit log
- On mobile a fixed bar to call or request care, and a button on a service page opens the form with that type of care already ticked
- Call-to-action copy, key points and insurer logos can be edited in the CMS; an empty field falls back on a default text
- 314 automated tests on the pure logic (forms, mail, rate limiting, SEO, audit, Front Desk rules), and a mobile Lighthouse score of 100 for accessibility and best practices
Outcome
Built and tested. The site is on a preview environment shielded from search engines and is waiting for the domain to switch over. A walk-through of the Front Desk with the office comes next, followed by a round on search visibility, reviews and conversion.