Where it lives

Hosting TaskAI Genius.

A static site has three good answers: a free global CDN, a fast deploy pipeline, or a box you own. Pick based on how much control you want, how much traffic you expect, and whether you already run a server somewhere.

The three options

At a glance

Cloudflare Pages

$0 / month

Free tier covers this site forever. Global CDN, auto-TLS, deploys on every push.

  • Setup time: 3 minutes
  • Build command: empty
  • Custom domain: free, one click
  • TLS: auto, Let's Encrypt under the hood
  • Limits: 500 builds/month, 100k requests/day

Hetzner + nginx

€4.35 / month (CX22)

A box you own. Full control, runs other things too. More work to set up and maintain.

  • Setup time: 30 minutes
  • Build command: none (just rsync)
  • Custom domain: A record + nginx vhost
  • TLS: certbot or Caddy
  • Limits: whatever the box can serve
The honest take: for a static content site, a CDN beats self-hosting on cost, speed, and operational load. The only reason to self-host is if you want a single box for static + dynamic (like running this site next to a Flask app) or you have a compliance reason to keep everything on your own metal.

Option 1

Cloudflare Pages (recommended)

Cloudflare Pages serves your site from their global edge network — ~300 cities. Your site loads fast for visitors everywhere, and you never think about capacity. Free tier is enough for a personal site forever.

Setup

  1. Push your site to GitHub

    The site must be in a GitHub repo (or GitLab/Bitbucket). See the README for the standard pattern.

  2. Sign in at dash.cloudflare.com → Pages

    Connect your GitHub account, pick the repo.

  3. Configure the build

    Framework preset: None. Build command: empty. Build output directory: website.

  4. Click "Save and Deploy"

    ~30 seconds later your site is live at <project>.pages.dev.

  5. Add the custom domain

    Custom domains → set up. Cloudflare walks you through changing your nameservers (or adding a CNAME). TLS issues automatically.

Ongoing

Every push to main triggers a deploy. Preview URLs are generated for every branch and PR. Rollbacks are a click in the dashboard.

Option 2

Netlify

Netlify is the original static-site host. The setup is slightly faster than Cloudflare (one less click), the dashboard is friendlier, but the free-tier limits are tighter and the CDN is smaller. Pick Netlify if you've used it before and prefer the workflow.

Setup

  1. Push to GitHub

    Same as Cloudflare — repo on GitHub first.

  2. Sign in at app.netlify.com → "Add new site" → "Import an existing project"

    Pick the GitHub repo.

  3. Configure the build

    Build command: empty. Publish directory: website.

  4. Deploy

    ~20 seconds later your site is live at <random>.netlify.app.

  5. Add the custom domain

    Domain settings → Add domain. Netlify walks you through the DNS records and issues the cert.

Netlify vs Cloudflare

If you've used neither before, the difference is mostly aesthetic. Both are excellent. The deciding factors:

Option 3

Self-host on Hetzner

Self-hosting is the right call when you already have a box running other things, or you want one machine for static + dynamic (e.g. this site + a CRM + an Ollama server). The setup is more work, but the control is total.

Provision a box

  1. Create a Hetzner CX22 (or similar)

    4GB RAM, 40GB NVMe, €4.35/mo. Ubuntu 24.04. Note the public IPv4.

  2. Point DNS at the box

    At your registrar, add an A record for taskaigenius.com → the box's IPv4. (And an AAAA for IPv6 if Hetzner assigned one.)

  3. SSH in and install nginx + certbot

    apt update && apt install -y nginx certbot python3-certbot-nginx
    ufw allow 22,80,443/tcp
    ufw --force enable
  4. Drop the site in place

    mkdir -p /var/www/taskaigenius.com
    rsync -av --delete ~/taskaigenius-site/website/ \
        root@<box>:/var/www/taskaigenius.com/
  5. Add the nginx vhost

    server {
        listen 80;
        server_name taskaigenius.com www.taskaigenius.com;
        root /var/www/taskaigenius.com;
        index index.html;
        location / { try_files $uri $uri/ =404; }
    }
  6. Issue the cert

    certbot --nginx -d taskaigenius.com -d www.taskaigenius.com

Ongoing

Updates are an rsync + reload away. No build step. certbot auto-renews via a systemd timer you didn't have to set up.

When to skip this: if your box goes down, your site goes down. There's no "edge cache" rescuing you from a regional outage. The Hetzner datacenter is in Falkenstein, Germany — fine for European visitors, ~150ms for US West Coast. Use Cloudflare in front of the Hetzner box if you want both: self-host + edge cache. It's a 10-line DNS change.

DNS primer

What actually happens when someone visits the site

Skim this if you've never set up a domain before — it's the only piece of the puzzle that's actually tricky.

  1. You buy a domain (e.g. taskaigenius.com)

    GoDaddy, Cloudflare Registrar, Namecheap, Porkbun. Pay yearly, point the nameservers somewhere.

  2. You add a DNS record

    For Cloudflare Pages: it adds the CNAME for you. For Netlify: same. For Hetzner: you add an A record pointing at the box's IP.

  3. DNS propagates

    Takes 5 minutes to 24 hours. Cloudflare and Netlify handle this in <5 min because they own the nameservers.

  4. TLS cert is issued

    The host (or Caddy/certbot) requests a Let's Encrypt cert the first time someone hits your domain. Auto-renews forever.

  5. Site is live

    That's it. Nothing more to do for a static site.

Decision tree

So which one?

Answer in order — the first match wins.

Default for this site: Cloudflare Pages. Fastest to set up, hardest to outgrow, free forever at this size. Swap to Hetzner if you start running this site next to a Flask app or a custom Ollama gateway.

Where to run it

Hardware to host the site (and the model).

Cloudflare Pages and Netlify run on their hardware — you don't pick the box. Hetzner + nginx is where you start choosing. This section is for the people who want a physical machine at home or in a rack, running the static site *and* the Ollama server that powers it. The site itself is trivial (a 6-page static directory is ~77KB); the real cost is the model serving behind it.

The four real options

Mac mini (M4 Pro / M4)

Apple's tiny desktop. The "default" for local-first AI in 2026. Silent, sips power, unified memory is genuinely good for LLM inference.

  • Recommended config: M4 Pro, 24GB unified memory, 512GB SSD — $1,599
  • Runs models up to: ~20B comfortably (Q4). 32B is tight at 24GB.
  • Power draw: ~25W idle, ~80W under 14B inference
  • Noise: silent (fanless on M4 base, near-silent under load)
  • OS: macOS, but Ubuntu ARM works fine via Asahi Linux if you want a real server
  • Best for: desk-side box, always-on, runs the site + Ollama + your agents

NVIDIA Jetson Orin

NVIDIA's edge-AI board. Has a real GPU, runs Linux natively, and draws ~15–60W. More "embedded" than "desktop" — perfect for headless racks, kiosks, robotics.

  • Recommended config: Jetson Orin Nano 8GB ($249) or Orin NX 16GB ($599)
  • Runs models up to: 7B–8B comfortably. 14B is tight even on the 16GB NX.
  • Power draw: 7W (idle) – 25W (Orin Nano under load) – 60W (Orin NX)
  • Noise: silent (fanless cooling possible for Nano)
  • OS: Ubuntu 22.04 + JetPack SDK (ARM64)
  • Best for: edge deployments, low-power always-on inference, embedding in other hardware

Windows desktop / mini-PC

The "I already have one" option. Any x86 box with enough RAM and a discrete NVIDIA GPU will run Ollama fine via WSL2. The mature path; the most software-compatible.

  • Recommended config: 32GB RAM + RTX 3060 12GB (used, $200–300) + 1TB NVMe
  • Runs models up to: 14B at full precision on the 12GB VRAM; offload to system RAM for bigger
  • Power draw: 100–300W depending on GPU load
  • Noise: depends on the case/cooling; gaming PCs are loud
  • OS: Windows 11 + WSL2 (Ubuntu) for Ollama, or native Linux dual-boot
  • Best for: people who already game on it, want raw GPU throughput, or have a spare tower

Linux x86 server / NUC

The "I run a homelab" option. Intel NUC, used Dell Optiplex, Beelink SER7, or a real 1U. Best price/perf, no Apple tax, no ARM weirdness.

  • Recommended config: Beelink SER7 (7840HS, 32GB, 1TB) — $500–600 new
  • Runs models up to: 14B–20B on CPU, much faster with a used RTX 3060/4060
  • Power draw: 35W (NUC idle) – 150W (with GPU inference)
  • Noise: depends; NUCs are silent, towers vary
  • OS: Ubuntu Server 24.04 LTS, no GUI needed
  • Best for: headless rack, 24/7 operation, homelab enthusiasts

At a glance

Pick by use case

Mac mini M4 Pro

"I want a quiet box on my desk that runs everything."

RAM: 24GB+
Best models: 14B–20B Q4
Power: 25–80W
Noise: silent
Price: ~$1,500 new

Jetson Orin NX 16GB

"I want an edge device that sips power and has a real GPU."

RAM: 16GB unified
Best models: 7B–8B Q4
Power: 15–60W
Noise: silent
Price: ~$600

Windows + RTX 3060

"I already have a gaming PC, give me a reason to use it."

VRAM: 12GB
Best models: 14B on GPU, 32B offload
Power: 200–400W
Noise: depends
Price: $0 (repurpose) or ~$300 used GPU

Honest tradeoff: the Mac mini is the best out-of-box experience for local-first AI. Quiet, fast, and Ollama just works. The Jetson is the best low-power option. The Windows + NVIDIA GPU is the best raw performance, especially if you want to run a 32B model at decent speed. The Linux x86 box is the best price/perf for headless operation.

Common patterns

What the "real" setups look like

  1. Mac mini under the TV, site on Cloudflare

    The Mac runs Ollama + Hermes + OpenClaw on your home network. The static site is on Cloudflare Pages (free, no port forwarding). Phone, laptop, and chat apps talk to the Mac over Tailscale. Cost: $1,500 one-time + $0/mo.

  2. Jetson Orin in a closet, site on the same box

    Jetson runs nginx serving the site + Ollama on the LAN. Tailscale for remote access, or a Cloudflare Tunnel for public access without opening ports. Cost: $600 one-time + $0/mo.

  3. Repurposed Windows desktop, site on the same box

    WSL2 + Ubuntu, nginx + Ollama + Hermes all running. Static site served from the box. Open port 80/443 to the world (or use Cloudflare Tunnel). Cost: $0 if you have a spare GPU, otherwise $300 used GPU.

  4. Beelink SER7 in the rack, Hetzner in front

    Beelink sits in a homelab rack or on a shelf, runs everything. Hetzner Storage Box (€3.50/mo) backs up the configs and Modelfiles. Cloudflare in front of the Beelink for DDoS protection. Cost: $500 one-time + €3.50/mo.

Refurbished & budget

Save 50–70% with used hardware

LLM inference doesn't need the latest silicon. A 3-year-old Mac mini or a 2-year-old gaming GPU runs the same models at 80–90% the speed of new hardware, for half the price.

All of these are 2-3 year-old silicon. The LLM world moves fast but inference is throughput-bound, not feature-bound — older hardware stays relevant longer than you'd expect.

What about a Raspberry Pi?

The short answer: skip it for inference, fine for the site

A Raspberry Pi 5 (8GB) can serve the static site fine — nginx + 77KB of HTML is nothing. But running a useful LLM on it is brutal: 8GB RAM, no GPU, slow CPU. You can technically run a 1B–3B model at 1–2 tokens/second, which is unusable for chat but might work for simple classification tasks.

If you want a tiny always-on box for *just the static site* (and Ollama is on a separate Mac/Jetson/desktop), the Pi 5 is fine. If you want the Pi to be the inference box, step up to a Jetson Orin Nano — same form factor, real GPU, 5–10× faster.