HV Tech Stack Chapter 05 · Operations
Hosting. Backup. Monitoring. Seven corrections. Ten open decisions. The final gates before launch.
I.
Part One
Azure App Service is the recommended default. The stack already lives in Microsoft.
| Host | Case for | Case against |
|---|---|---|
| Azure App Service | Microsoft alignment, one bill, scaling | Learning curve for WP-first admins |
| WP Engine | Managed WordPress, human support | Off-Microsoft, separate SSO, less Dataverse synergy |
| Kinsta | Fast, managed, strong caching | Off-Microsoft, less identity integration |
| DIY on a VPS | Cheap | Heritage Village loses the "runs without a full-time developer" property |
The final call stays with the user. Run a scoped cost comparison once traffic estimates firm up.
Power Automate flows exist in three environments too. Flow promotion uses Power Platform solutions.
II.
Part Two
Three systems hold state. Each needs its own plan. Four signals matter on day one.
hv_work_orders is a read-only safety net; it is not a full backup.wp-config.php constants or in an Azure Key Vault bound to the App Service.hv_sync_log. Alert if bounces exceed 2% of daily volume.hv_sync_log.status = Failed.Nice-to-have signals: form submission volume, magic-link-to-login conversion, Dataverse API usage against the daily cap.
III.
Part Three
Seven items from the source conversation needed correction during the write-up. Listed here for a single reference.
Gemini wrote: "Using an established plugin like Passwordless Login or Solid Security will handle generating the secure, time-sensitive tokens." Solid Security is a hardening plugin. It does not issue magic links. The correct plugins are Passwordless Login by Cozmoslabs or Magic Login Pro.
Gemini wrote: "frame the MaintainX resident portal securely on the page."
MaintainX sets X-Frame-Options: DENY or a strict CSP header.
Iframe embedding fails. The correct pattern is a WordPress REST proxy
that calls MaintainX server-side.
Gemini wrote: "you can use JavaScript to make an API call directly to MaintainX."
Browser-side calls expose the API key to every visitor. The correct pattern is a
server-side proxy inside WordPress. The key lives in
wp-config.php or Azure Key Vault.
Gemini wrote: "The free version of Advanced Custom Fields (ACF) is incredibly robust and will likely cover 90% of your needs." True for a simple site. For 3,600 residents with multi-unit owners, snowbird addresses, vehicle fleets, and emergency contacts, the Repeater field is the right tool every day. ACF Pro at $49 per year is the correct call.
Gemini did not flag the license-scrutiny angle. The service-account pattern works for occasional approvals. Heavy daily use across many staff may draw Microsoft scrutiny. Price out per-user Power Apps licenses if any approver crosses roughly 30 decisions per day.
Gemini wrote: "Legacy platforms typically allow you to export your user roster as a CSV file." Typical, not guaranteed. Confirm the exact HOA-sites export format with the vendor before planning the migration.
Gemini wrote: "WordPress expects data to live in its own MySQL database so it can quickly render pages." True for the Heritage Village use case. Oversimplified in general. Headless WordPress runs fine without local MySQL queries on every page. For this project the local-MySQL pattern is correct. The architecture note stands without overstating the rule.
IV.
Part Four
Ten calls the user still owns. Recommended defaults below. Flip any of them before launch.
Default: build the read-only dashboard at
/residents/forms/variance-status. Feed it from
HV-DV-Sync-VarianceStatus. Send an email on every status change.
Residents get both.
Default: both. Cards for one-click approvals (Sarah's newsletter opt-ins). Power App for Nate and Carol who need a richer queue.
Default: Excel connector. Data Lake is overkill for 3,600 residents. Revisit in year three if reporting volume climbs.
Default: opt-in per field. Name, unit, phone, email each separate. Default is everything hidden.
Default: keep fully gated for now. Revisit after launch based on community engagement.
Default: minimum-content contract enforced by the CPT template. If a club or condo page goes 12 months without an update, it surfaces in a "stale pages" admin report.
Default: keep the last five years live on the site. Older minutes move to a "request archives" link that routes to office staff.
Default: WCAG 2.2 AA. Build to it from day one. Audit before launch.
Default: English only at launch. Add Spanish in year two if resident demographics call for it.
Default: single YouTube channel for Heritage Village. Unlisted for resident-gated meetings. Public for the homepage pitch and tour videos.
V.
Part Five
Confirm upstream. Pass every gate. Watch the five risks.
/site-search/ for known terms to surface orphan pages.