HomeTown Social
1 Executive Summary
HomeTown Social is a hyper-local community platform combining a social network, six local news publications, a marketplace, events, a member CRM (the Growth Desk), and an Academy. This guide explains — in plain language — exactly how the platform is built, where every piece lives, what could go wrong, and precisely how to recover it if any single provider fails.
The key message is reassuring: HomeTown Social is built on a resilient, decoupled architecture. The website's core data does not live with the company that serves the web page. No single provider going offline can destroy the platform or its data. The most important asset — our members, their content, and our business data — is stored independently and can be reconnected to a new host quickly.
- Decoupled design: the application, database, and network layer are three separate services from three separate providers. One failing doesn't take the others down.
- Portable application: the entire member-facing app is a single self-contained file that can be served by almost any web host in minutes.
- Independent data: all member and business data is stored in a professional cloud database (Supabase) not tied to our web host.
- Main gap to close: formalize automatic database backups and stand up a warm standby host — both addressed in this plan.
2 How HomeTown Social Is Built
The platform is made of three independent layers, each from a different company. Think of a business: the storefront (where customers walk in), the warehouse (where inventory is kept), and the road network (how goods move between them). If the storefront's landlord has a problem, the warehouse and its inventory are untouched.
The Application
A single self-contained web file containing the entire member experience — feed, People, News, Marketplace, Events, the Growth Desk CRM, and the Academy. Because it's one portable file, it can be hosted almost anywhere.
The Database
All live data — members, profiles, posts, comments, follows, events, businesses, news items, settings, and CRM leads — stored in Supabase, a professional managed cloud database. The single most valuable technical asset, independent of the web host.
The Network Layer
A Cloudflare Worker is the secure middleman between app and database. It also fetches news feeds and proxies images. Cloudflare adds security and global delivery speed.
Current Hosting
The application file is currently served through Ghost, via the managed Ghost host Midnight. Ghost also powers our news/blog publishing and provides the news feeds (RSS) that flow into the six news channels. So Ghost plays two roles: it serves the app file, and it is the content engine behind the news portals.
Supporting Services
- Domain name: hometownsocial.ca — controlled at the registrar and pointed via DNS (managed through Cloudflare).
- Cloudflare: runs the Worker (network layer), manages DNS, and provides security/CDN.
- Supabase: the live database (Layer 2).
- JSONBin (legacy/secondary): an older secondary store for a few minor items; no longer relied on for critical data. Supabase is now primary for everything essential.
Plain-English Data Flow
- A member opens hometownsocial.ca in their browser.
- The domain (via Cloudflare DNS) directs them to the current web host (Ghost/Midnight), which serves the single application file.
- As the member uses the app, it talks to the Cloudflare Worker (the network layer).
- The Worker securely reads and writes data to the Supabase database.
- The member sees live, up-to-date content.
3 Provider & Account Inventory
The master list of every service the platform depends on. Keeping this current — with account owners and login recovery details stored securely — is itself a key safeguard. (Do not store passwords here; keep them in a shared password manager.)
| Service | Role | Provider | Why It Matters |
|---|---|---|---|
| Domain / DNS | Web address & routing | Registrar + Cloudflare | Without it, nobody can reach the site by name. |
| Application host | Serves the app file | Ghost via Midnight | Delivers the member experience; also powers news. |
| Database | Stores all live data | Supabase | The crown jewel — members, content, CRM. |
| Network layer | App-to-database bridge | Cloudflare Worker | Connects the app to the data; feeds & images. |
| News engine | Publishing & RSS feeds | Ghost | Content behind the six news channels. |
| Secondary store | Legacy minor data | JSONBin | Non-critical; Supabase is now primary. |
4 Risks We're Guarding Against
A good plan names the specific things that can go wrong so each has a countermeasure. In rough order of importance:
| Risk | What It Looks Like | Severity | Countermeasure |
|---|---|---|---|
| Database loss or corruption | Supabase data deleted, corrupted, or account lost | Critical | Automated off-site database backups (§5) |
| Web host outage | Ghost/Midnight down; site won't load | High | Warm standby host + fast DNS switch (§6) |
| Account lockout | Lost login/2FA to a key provider | High | Shared password manager; 2+ recovery owners |
| Domain lapse | Domain expires or is lost | High | Auto-renew on; registrar locked; monitored |
| Network layer failure | Cloudflare Worker misconfigured or down | Medium | Worker code backed up in version control |
| Accidental app breakage | A bad update breaks the live file | Medium | Keep every prior version; roll back instantly |
| Provider shuts down | A vendor goes out of business | Low/Med | Portable architecture; documented migration |
5 Backup Strategy
Backups follow the well-proven 3-2-1 rule: keep three copies of anything important, on two different types of storage, with at least one copy off-site (away from the primary provider).
5.1 The Database (Highest Priority)
Supabase is the most valuable asset. It must be backed up automatically and regularly, with copies stored somewhere other than Supabase itself.
- Enable Supabase's built-in automated backups (available on paid plans — worth the cost for a business asset).
- Schedule an independent export of the full database weekly, stored off-site — Google Drive, Dropbox, or an S3/R2 bucket not inside the Supabase account.
- Retain a rolling history (e.g. last 8 weekly backups) so we can recover from corruption noticed late, not just the newest copy.
- Test a restore at least once — an untested backup is only a hope.
5.2 The Application File
- Keep every version of the app file, labelled by version number and date. (Already our practice.)
- Store master copies in version control (private GitHub repo) and a shared cloud folder both partners can access.
- Record which version is currently live so a rollback is unambiguous.
5.3 The Network Layer (Cloudflare Worker)
- Keep the Worker's code in version control so it can be redeployed exactly if the account is lost or misconfigured.
- Document its settings (the database address it points to and any keys) securely.
5.4 Configuration & Credentials
- Maintain a secure shared password manager (1Password / Bitwarden) with every login, API key, and recovery code.
- Grant at least two partners access to every critical account.
5.5 Recommended Backup Schedule
| Asset | Method | Frequency | Stored Where |
|---|---|---|---|
| Database (Supabase) | Provider auto-backup | Daily (automatic) | Supabase |
| Database (Supabase) | Independent export | Weekly | Off-site cloud storage |
| Application file | Version control + cloud folder | Every release | GitHub + shared drive |
| Cloudflare Worker | Code in version control | On any change | GitHub |
| Credentials | Password manager | On any change | 1Password / Bitwarden |
6 Recovery Plan (Step-by-Step)
The heart of this guide: exactly what to do if something fails. Keep this plan and the credentials accessible offline, not only inside the systems it protects.
The Web Host Fails (Site Won't Load)
The most likely disruption and the least severe — the data is safe in Supabase. Just serve the app file from a different place and point the domain at it.
- Confirm the outage is the host, not the domain or database (try loading the site; check the host's status page).
- Take the latest known-good application file (from the shared folder / version control).
- Deploy it to the standby host (see §7 — a warm standby such as Cloudflare Pages, Netlify, or a second Ghost host should already be prepared).
- Update the domain's DNS (in Cloudflare) to point hometownsocial.ca to the standby host.
- Verify the site loads and members can log in and see live data (confirms the Supabase connection is intact).
Database Problem (Data Loss or Corruption)
The most serious scenario — which is why the backup strategy in §5 exists. Restore the database from a recent backup.
- Stop making changes — avoid writing new data over a corrupted state.
- Identify the most recent clean backup (Supabase automated backup, or the weekly off-site export).
- Restore that backup into Supabase (or into a new Supabase project if the account itself is the problem).
- If a new project was created, update the Cloudflare Worker to point to the new database address.
- Verify data integrity — log in; check members, posts, and CRM leads are present and correct.
Network Layer Fails (Cloudflare Worker)
- Confirm the app loads but cannot read/write data (a sign the Worker is the issue).
- Redeploy the Worker from its saved code in version control.
- Confirm it points to the correct Supabase database address and keys.
- Verify live data flows again.
Account Lockout
- Use the shared password manager and documented recovery method (backup email, phone, 2FA codes) to regain access.
- If one partner is unreachable, the second partner's recovery access (§3) allows continuity.
- Once restored, rotate credentials and update the password manager.
Domain Problem
- If expired: renew immediately at the registrar (auto-renew should prevent this).
- If DNS is misconfigured: correct the records in Cloudflare to point to the current host.
- Allow time for the change to propagate, then verify.
Accidental App Breakage (Bad Update)
- Identify the last known-good version number (we keep every release).
- Re-upload that version to the live host, replacing the broken file.
- Verify the site works. Because data lives in Supabase, rolling back the app does not lose any member data.
7 Hosting Options & Recommended Standby
Because the application is portable, we have many hosting options. For resilience we want a warm standby ready to take over. (Prices/URLs are indicative — confirm on each provider's site before committing.)
7.1 Managed Ghost Hosts (Like Our Current Setup)
These keep the exact experience we have now — someone else runs the Ghost server, updates, backups, and email. Best for a like-for-like backup of the news/publishing side.
| Provider | Notes | Website |
|---|---|---|
| Ghost(Pro) | Official host from the Ghost Foundation; most reliable | ghost.org/pricing |
| Midnight | Our current provider; managed, competitive pricing | midnight.dev |
| Magic Pages | Excellent value; flat pricing; ~5-min setup; free trial; EU servers | magicpages.co |
| FirePress | Unlimited traffic; Cloudflare CDN; free trial | firepress.org |
| DigitalPress | Established; low-cost entry tier | digitalpress.blog |
| Typetale | Newer indie host; EU servers | typetale.com |
| CloudClusters | Cloud-based, scalable Ghost hosting | cloudclusters.io |
| HostArmada | 24/7 support; competitive pricing | hostarmada.com |
| FastComet | cPanel-based; note: newsletters need Mailgun | fastcomet.com |
7.2 Static Hosts (Ideal for the App File Itself)
Because the member app is a single file talking to Supabase directly, it can be served by simple, extremely reliable static hosts — an excellent, low-cost (often free) warm standby for the application, separate from the Ghost news side.
| Provider | Notes | Website |
|---|---|---|
| Cloudflare Pages | We already use Cloudflare; free; near-instant failover | pages.cloudflare.com |
| Netlify | Simple, reliable static hosting; free tier | netlify.com |
| GitHub Pages | Free; pairs naturally with version control | pages.github.com |
7.3 Self-Hosted / VPS (Maximum Control, Needs Technical Management)
| Provider | Notes | Website |
|---|---|---|
| DigitalOcean | 1-click Ghost droplet; recommended in Ghost's own docs | digitalocean.com |
| Hetzner | Low-cost, high-quality European VPS | hetzner.com |
| Hostinger | Budget VPS with one-click install | hostinger.com |
| Vultr / Linode | Standard, dependable VPS providers | vultr.com |
7.4 Recommendation
- For the app (member experience): prepare a warm standby on Cloudflare Pages. Free, we're already on Cloudflare, and it can take over in minutes because the data is in Supabase regardless of host.
- For the news/publishing side: set up a second managed Ghost host (Magic Pages or Ghost(Pro)) as a like-for-like backup, since the news portals rely on Ghost's feeds.
8 Recommended Action Checklist
Concrete steps to move from "well-positioned" to "fully protected," in suggested priority order:
- Enable Supabase automated backups (paid plan) Critical
- Set up weekly off-site database export + retention Critical
- Create shared password manager; add all accounts High
- Give both partners recovery access to every account High
- Put app file + Worker code in a private GitHub repo High
- Stand up a Cloudflare Pages warm standby for the app High
- Set up a second managed Ghost host for news Medium
- Confirm domain auto-renew + registrar lock are on Medium
- Perform one test database restore Medium
- Review this plan every 6 months; keep it current Ongoing
💡 Tip: Use your browser's Print → Save as PDF to create a shareable PDF of this guide.