Strategic Note: Teach the Pattern, Not the Host

Every host below works the same way at the conceptual level. Push an .html file to a repo. The host serves it at a public URL. If your unit moves between bases, networks, or contracts, the host name changes but the skill does not. Your Marines learn HTML, Git, and deployment once. They keep that for the rest of their career.

Power Apps skills die when you turn in your CAC. HTML skills do not.

Tier 1: Very Likely to Load on MCEN

Confirmed loading on at least one MCEN-attached duty workstation as of the last classroom run. Still: test before relying on it.

Host URL Pattern Notes
GitHub Pages https://<user>.github.io/<repo>/ Confirmed working. Free with personal account. Two-factor required. Auto-deploy from main branch.
GitLab Pages https://<user>.gitlab.io/<repo>/ Confirmed working. Free with personal account. Requires a one-line .gitlab-ci.yml in the repo root.
Azure Static Web Apps (Free) https://<name>.azurestaticapps.net/ Confirmed working. Free tier exists. Microsoft-owned, may align with DoD allowlists already in place.
Cloudflare Pages https://<project>.pages.dev/ Confirmed working. Free tier generous. Fast global CDN.

Tier 2: Probably Work, Test First

Plausible defaults. Some classrooms get them, some do not. Treat as backup if Tier 1 is blocked.

Host URL Pattern Notes
Netlify https://<name>.netlify.app/ Drag-and-drop deploy from the dashboard. Free tier generous. Sometimes blocked by base proxies.
Vercel https://<name>.vercel.app/ Connects to GitHub. Free tier. Mixed track record on MCEN depending on installation.
Firebase Hosting https://<project>.web.app/ Google-owned. Free tier. Some bases block Google domains aggressively.
Render https://<name>.onrender.com/ Static site free tier. Spins down on inactivity but a static page loads fine.
Codeberg Pages https://<user>.codeberg.page/ EU-based, non-profit, Git-backed. Lower profile, sometimes blocked, sometimes not.

Tier 3: Coin Flip

Useful only after you have tested. Higher likelihood of being categorized as "personal" or "uncategorized" by network filters.

Host URL Pattern Notes
Surge.sh https://<name>.surge.sh/ One-command deploy from terminal. Often blocked.
Glitch https://<name>.glitch.me/ Web-based editor with auto-deploy. Sometimes works on MCEN, sometimes not.
Replit https://<name>.replit.app/ Web IDE plus hosting. May be categorized as a development tool and blocked.
CodePen Full Page https://codepen.io/<user>/full/<id> Works for demos but not a real deploy target. Useful for showing a teammate a quick snippet.

Testing Methodology (Do This First Thing in Class)

  1. Pick one demo URL from each tier. The Course 3.5 reference builds work as demos:
  2. Open each from the duty workstation you intend to deploy from.
  3. Document for each: loads / blocked / partial (mixed-content warning).
  4. Mark which Tier 1 host you will use today. Move on.
  5. Capture the blocked hosts in a Capability Gap Map row. "Hosting reach blocked for X, Y, Z" is a real, fixable policy gap.

If All Three Tiers Are Blocked

You can still build. Every reference build runs from a local file:// path. Hand-carry the file to the Marine who will use it. Add a Capability Gap Map row for "Public static hosting reach blocked entirely." That is data leadership needs.

Terms of Service Note

Read the TOS of the host you choose. The summary points to know for the common ones:

  • GitHub Pages: TOS prohibits commercial / SaaS use. Educational and unit-level tools are fine. Personal projects are fine. Do not run a business off it.
  • Cloudflare Pages: Free tier permits personal and non-commercial use. Commercial use allowed with paid tier.
  • Netlify / Vercel: Free tier explicitly permits personal and team development. Production commercial use is a paid tier in both cases.
  • All hosts: Content is your responsibility. No CUI, no PII, no PHI on a public URL. If the file is reachable from the open internet, treat it as published.

Quick Deploy Walkthrough (GitHub Pages)

  1. Sign in at github.com.
  2. Click the + in the top right. Pick New repository. Name it after your tool (e.g., watch-bill). Set it Public. Click Create.
  3. On the empty repo page, click uploading an existing file. Drag your .html file in. Commit.
  4. Go to Settings → Pages. Source: Deploy from a branch. Branch: main, folder / (root). Save.
  5. Wait 60 to 90 seconds. The URL is https://<your-username>.github.io/<repo>/<filename>.html.
  6. Open it on your phone. If it loads, you just deployed.

One More Thing

The host is the means, not the end. The artifact is the tool, and the tool is the proof that the work can ship today, on what you have. Every Marine in the room leaving this course with a live URL is the goal. The URL is also a Capability Gap Map data point: it proves that the wall is not Marines, and it is not AI. It is the tenant.