HV Tech Stack Chapter 05 · Operations

Operations.

Hosting. Backup. Monitoring. Seven corrections. Ten open decisions. The final gates before launch.

Contents

In this chapter

  1. i.HostingI
  2. ii.Backup and monitoringII
  3. iii.Gemini correctionsIII
  4. iv.Open decisionsIV
  5. v.Prerequisites, gates, risksV

I.

Part One

Hosting

Azure App Service is the recommended default. The stack already lives in Microsoft.

Why Azure App Service

Alternatives

HostCase forCase against
Azure App ServiceMicrosoft alignment, one bill, scalingLearning curve for WP-first admins
WP EngineManaged WordPress, human supportOff-Microsoft, separate SSO, less Dataverse synergy
KinstaFast, managed, strong cachingOff-Microsoft, less identity integration
DIY on a VPSCheapHeritage 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.

Environments

Power Automate flows exist in three environments too. Flow promotion uses Power Platform solutions.

II.

Part Two

Backup and monitoring

Three systems hold state. Each needs its own plan. Four signals matter on day one.

WordPress

Dataverse

MaintainX

Credentials and secrets

Monitoring: four signals

  1. Magic-link delivery. SendGrid bounce webhook writes to hv_sync_log. Alert if bounces exceed 2% of daily volume.
  2. Flow failures. Power Automate flow failure notifications post to Nate's Teams channel. Every failure writes hv_sync_log.status = Failed.
  3. WordPress uptime. Azure Application Insights or a third-party pinger hits the homepage every minute. Alert on a 5-minute outage.
  4. MaintainX proxy errors. WordPress logs proxy failures to a rotating log. Power Automate tails the log nightly; alerts on spikes.

Nice-to-have signals: form submission volume, magic-link-to-login conversion, Dataverse API usage against the daily cap.

III.

Part Three

Gemini corrections

Seven items from the source conversation needed correction during the write-up. Listed here for a single reference.

1 · Magic-link plugin name

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.

2 · MaintainX iframe embedding

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.

3 · Client-side API calls to MaintainX

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.

4 · ACF free vs Pro

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.

5 · Teams Adaptive Card multiplexing

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.

6 · HOA-sites CSV export

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.

7 · "WordPress needs MySQL to be fast"

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

Open decisions

Ten calls the user still owns. Recommended defaults below. Flip any of them before launch.

D1 · Variance status dashboard or email-only

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.

D2 · Adaptive Cards vs Power App for approvals

Default: both. Cards for one-click approvals (Sarah's newsletter opt-ins). Power App for Nate and Carol who need a richer queue.

D3 · Excel connector vs Export to Data Lake

Default: Excel connector. Data Lake is overkill for 3,600 residents. Revisit in year three if reporting volume climbs.

D4 · Directory privacy model

Default: opt-in per field. Name, unit, phone, email each separate. Default is everything hidden.

D5 · Message board gated or partially public

Default: keep fully gated for now. Revisit after launch based on community engagement.

D6 · Per-club and per-condo page maintenance

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.

D7 · Archive depth

Default: keep the last five years live on the site. Older minutes move to a "request archives" link that routes to office staff.

D8 · Accessibility target

Default: WCAG 2.2 AA. Build to it from day one. Audit before launch.

D9 · Multi-language

Default: English only at launch. Add Spanish in year two if resident demographics call for it.

D10 · Video hosting

Default: single YouTube channel for Heritage Village. Unlisted for resident-gated meetings. Public for the homepage pitch and tour videos.

V.

Part Five

Prerequisites, gates, risks

Confirm upstream. Pass every gate. Watch the five risks.

Pre-migration prerequisites

  1. Confirm the HOA-sites CSV export format with the current vendor.
  2. Confirm the MaintainX license tier and API access level.
  3. Confirm the Constant Contact subscriber export format.
  4. Confirm the WebTrac public event feed format (if any).
  5. Confirm the YouTube channel ownership for meeting videos.
  6. Resolve the Non-Disclosure vs Non-Discrimination file mismatch flagged in the gaps file.
  7. Run /site-search/ for known terms to surface orphan pages.

Launch gates

Known risks