Static HTML on CloudMagnus

A working empty htdocs/ ready for your HTML, CSS, and JavaScript files.

What our scaffold installs

  • A placeholder htdocs/index.html that says "Your static site is ready. Upload your HTML, CSS, and JavaScript via SFTP."
  • nginx vhost configured for static file serving
  • No runtimes, no build tooling, no database

What you do next

  1. SFTP into your site (credentials on site detail page).
  2. Delete the placeholder htdocs/index.html.
  3. Upload your HTML, CSS, JS, images, fonts, etc. into htdocs/.
  4. Visit your domain. Done.

What works out of the box

  • Custom 404 pages. Drop htdocs/404.html and nginx serves it on missing files.
  • Pretty URLs. nginx tries index.html in any directory. So example.com/about/ serves htdocs/about/index.html.
  • Cache headers. Static files get sensible cache control by default.
  • HTTPS. Free Let's Encrypt cert; HTTP redirects to HTTPS automatically.

What doesn't

  • Server-side anything. No PHP, no Node, no Python. If you need a contact form, use a service like Formspree, Tally, or Web3Forms that takes form submissions on its end.
  • Build pipelines. If you're using Hugo, Jekyll, Eleventy, or any static site generator, build locally and ship the output.
  • Per-route routing logic. Static means static. For SPA fallback (single-page apps), use the React SPA type instead.

Static site generators

Build the output locally; SFTP the contents.

  • Hugo: hugo outputs to public/. SFTP public/* into htdocs/.
  • Jekyll: jekyll build outputs to _site/. SFTP that.
  • Eleventy: default output _site/.
  • Astro: astro build outputs to dist/.

Common static site issues

404 on a file you definitely uploaded

Check the case of the filename. Most filesystems are case-sensitive. About.html and about.html are different files; nginx serves what's there.

CSS or JS doesn't load

Open dev tools, check the network tab for the actual request. Usually a path issue: absolute paths (/styles.css) work; relative paths (styles.css) work from the page that includes them but not from subpages.

Everything's an HTTP, not HTTPS

The platform redirects HTTP to HTTPS automatically once your SSL cert is installed. If you're seeing HTTP, either the cert hasn't issued yet (check the dashboard) or you're hard-typing http:// in the URL (the redirect should still kick in).