Photographs are heavy; the host should stay simple

A photography portfolio is mostly images plus enough HTML/CSS to sequence them. The failure mode is not “insufficient Kubernetes.” It is shipping 20 MB heroes, nesting the zip wrong, or choosing a history-mode gallery SPA that 404s on shared deep links. StaticHost keeps the hosting side boring so you can obsess over sequencing and tone.

Product shape: zip or GitHub of static output, HTTPS preview immediately, custom-domain cert after DNS verifies, deploy history/rollback. No remote builds, no SPA fallback (try_files $uri $uri/ =404), no cPanel, no email, no built-in CDN, no forever-free (trial ~1 day).

Storage-first plan choice

PlanPriceStorageSites
Starter$9/mo2 GB1
Pro$30/mo10 GB3 (+ staging)
Scale$65/mo30 GB10
Business$130/mo100 GB30 (+ teams)

Still images, carefully compressed, often fit Starter or Pro. Full-resolution archives for sale belong on a storefront or object storage; the public portfolio should show web renders. If you upload RAW files by mistake, you will blow quotas and gain nothing in-browser.

Image pipeline before upload

  1. Export web widths (e.g., 1600–2400 px long edge for lightbox heroes).
  2. Use WebP/AVIF with JPEG fallback if needed.
  3. Generate thumbnails for grids; do not scale 10 MB files in CSS.
  4. Name files stably (africa-001.webp) so deploys are diffable.
  5. Keep originals offline.

Hand-build HTML or use a generator (Eleventy image shortcodes, Hugo resources, Astro assets). Build locally—StaticHost will not run those tools for you.

Navigation that survives sharing

Each gallery and each featured image set should have a real URL:

/ 
/galleries/landscapes/
/galleries/portraits/
/info/

Avoid a single-page app where /galleries/landscapes exists only in the client router unless you hash (/#/galleries/landscapes) or pre-render files. Clients and curators hard-refresh and share links—SPA guide.

Zip discipline for large trees

cd public   # or dist
zip -r ../photo-site.zip .

Verify index.html at archive root. Large zips that nest public/ cost hours of confusion—zip without 404. Git LFS may appear in your repo workflow; the host still needs ordinary files in the deployed tree.

Performance without a fake CDN story

There is no built-in CDN product on StaticHost. You still:

  • Lazy-load offscreen thumbs (loading="lazy").
  • Preload only the LCP hero.
  • Avoid shipping three lightboxes “just in case.”
  • Measure on HTTPS preview with throttling.

Read fast static. If global edge caching becomes a measured need, you can evaluate placing your own CDN in front—do not pretend it is already included.

Client proofing

Use Pro staging to show a new gallery privately-ish (unlisted URL) before production. Roll back if color-managed exports look wrong on sRGB screens. Custom domain for the public brand—custom domain.

Watermarking and rights metadata are content decisions; hosting will not enforce licenses.

Worked example: landscapes gallery launch on Pro

Jordan has 80 web images and three gallery pages. They use Eleventy locally to emit public/.

  1. Export masters to 2000px WebP; average 250 KB. Thumbs at 600px ~40 KB.
  2. Storage estimate: 80×250 KB + 80×40 KB ≈ 23 MB of images plus HTML/CSS—comfortable on Starter, but Jordan picks Pro ($30) for staging proofs with a client.
  3. npx @11ty/eleventy (on the laptop—not on StaticHost); zip public/ contents.
  4. Deploy to staging; client reviews /galleries/landscapes/ via hard link share. Requested crop fixes → rebuild → redeploy staging.
  5. Promote to production site; attach jordanphoto.example; DNS verify; wait for certificate; grep mixed content.
  6. Opening night: a bad lightbox script ships; roll back from deploy history in minutes.

No RAW files, no PHP gallery plugin, no imagined CDN tier. When they later sell prints, checkout links go to Shopify—StaticHost still just serves the portfolio files.

Failure table: photography portfolios

SymptomLikely causeFix
Quota exhausted suddenlyUploaded RAW/TIFFRemove; web renders only
Shared gallery URL 404JS router history modeReal paths or hash
Images missing after zipNested folder / wrong pathsFlatten; verify on preview
Mobile grid jankFull heroes in img tagsSeparate thumbs; lazy-load
Client hates color on phoneUnproofed exportsStage on Pro; recalibrate exports
“Email me for rates” brokenmailto only / no form planForm SaaS; no host mailboxes
Slow LCPNo compression; giant PNGWebP/AVIF; preload one hero

Extra procedure: pre-exhibition publishing gate

  1. Freeze the image set; refuse last-minute 10 MB drops.
  2. Build locally; confirm find shows every gallery index.html.
  3. Upload to HTTPS preview or Pro staging; open each gallery in a fresh browser profile.
  4. Throttle mobile; confirm thumbs lazy-load and the first hero is acceptable weight.
  5. Check deploy history labeling (“exhibition-vFinal”) before DNS cutover.
  6. Custom domain: DNS → verification → certificate, then retest.
  7. After the show, archive the zip offline; tear down unused staging experiments so storage and site counts stay honest.

General portfolio craft: static portfolio hosting. Designers’ export path: static hosting for designers. StaticHost remains file hosting—no forever-free after trial, no cPanel, no email, no remote Hugo/npm, no SPA fallback.

Sequencing, captions, and print-resolution discipline

Curators read captions and order as carefully as they read light. Structure galleries so the HTML order matches your intended narrative even with JavaScript disabled—progressive enhancement beats a lightbox that owns all meaning. Keep caption text in the page HTML, not only in a JS array, so hard-refreshed gallery URLs remain intelligible.

Never upload print-resolution TIFFs “just in case a client asks.” Keep a separate offline vault; the public StaticHost tree should be web renders only. If a client needs a temporary high-res drop, use a transfer service with expiry rather than bloating plan storage toward Scale ($65) or Business ($130) by accident. When you do need more than Starter’s 2 GB, upgrade because the public web set honestly requires it—not because originals leaked into images/. After each shoot dump, re-run a storage estimate before deploy, and tear down unused staging galleries on Pro so proofs do not become permanent residents.

FAQ

Can I sell prints from StaticHost?

You can link out to Shopify/etc. or embed client-side checkout widgets. There is no server-side cart here.

Should I use WordPress photo themes?

They need PHP. Use a WordPress host, or export static if you accept losing dynamic plugins.

How do I protect images from download?

You cannot fully. Disable obvious right-click theater if you must; assume anything displayed can be captured. Prefer resolution strategy and watermarking.

Is 2 GB enough for 100 photos?

Yes if each web image is hundreds of KB, not tens of MB.

Do deep links into a JS lightbox work on refresh?

Only if the URL maps to a file or hash route. Design for that before the exhibition opens.