# Three GPU affiliate programs I wired into an AI tool directory

> Source: <https://dev.to/morinaga/three-gpu-affiliate-programs-i-wired-into-an-ai-tool-directory-11fb>
> Published: 2026-06-15 22:18:24+00:00

When I decided to [drop AdSense and bet on affiliate monetization](https://dev.to/articles/why-affiliate-beats-adsense-new-ai-directories) for my AI tools directory, Amazon was the obvious first integration — books and GPU hardware are contextually reasonable on a site full of open-source AI models. But Amazon's conversion story for developer-adjacent products is weak. The users landing on a LLaMA or Whisper model page are not there to buy a deep learning textbook; they're evaluating whether to self-host something.

That realization pointed toward GPU cloud affiliates. People who read model pages are more likely to spin up a pod than click a book link. Here's what I integrated, how, and what I'm watching.

| Program | Commission structure | Referral mechanism |
|---|---|---|
| RunPod | % of referred user's spending | Referral code in URL |
| Vast.ai | % of referred user's spending | Referral code in URL |
| Hetzner Cloud | One-time credit on signup | Custom referral link |

All three use simple referral codes embedded in URLs — no SDK, no iframe, just a URL parameter. That's intentional; I didn't want JavaScript dependencies on a statically generated site.

The monetization package exports three URL builder functions:

```
// packages/shared/src/monetization/index.ts

export function runpodReferralUrl(ref: string | null): string | null {
  if (!ref) return null;
  return `https://www.runpod.io/?ref=${encodeURIComponent(ref)}`;
}

export function vastReferralUrl(ref: string | null): string | null {
  if (!ref) return null;
  return `https://cloud.vast.ai/?ref_id=${encodeURIComponent(ref)}`;
}

export function hetznerReferralUrl(ref: string | null): string | null {
  if (!ref) return null;
  return `https://hetzner.cloud/?ref=${encodeURIComponent(ref)}`;
}
```

Each function returns `null`

when the environment variable isn't set — so links simply don't render in development or in preview deployments where I haven't configured the ref codes. No dead links, no placeholder text.

On the model detail page, I build the affiliate sidebar conditionally based on `pipeline_tag`

:

``` js
const aff = getAffiliateConfig();

// Only show GPU affiliates for model types where self-hosting is plausible
const showGpuLinks = isLLM || isVision;

const gpuLinks = showGpuLinks ? [
  { label: "RunPod", note: "On-demand GPU pods", url: runpodReferralUrl(aff.runpodRef) },
  { label: "Vast.ai", note: "Marketplace GPUs", url: vastReferralUrl(aff.vastRef) },
].filter((p): p is { label: string; note: string; url: string } => p.url !== null) : [];
```

Embedding models, classification models, and anything with a null `pipeline_tag`

don't get the GPU sidebar. The reasoning: someone using a 384-dim sentence transformer doesn't need a GPU pod — they're calling an API or running inference on CPU. Showing GPU rental links there would be noise.

I won't fabricate numbers at week four. What I can say:

**RunPod is easier to link to than Vast.ai.** [RunPod's](https://www.runpod.io/) referral URL resolves cleanly with no login wall before the landing page. [Vast.ai](https://vast.ai/) drops you directly on the instance marketplace, which is great if you already know what you're doing and confusing if you don't. For a cold click from a model page, RunPod's onboarding is softer.

**Hetzner is the odd one out.** Hetzner Cloud is a German VPS provider — good for CPU-heavy workloads, affordable storage, strong EU datacenter story. It's on the model pages for users who want to run lighter inference (embedding models on CPU, small classifiers) at a lower cost than GPU cloud. The problem: the conversion path is long. A user has to sign up, set up a server, install dependencies, and deploy a model before Hetzner earns anything. I added it anyway because the referral credit structure means even a few conversions matter, but I'm skeptical it'll generate meaningful revenue without editorial content guiding the setup.

**Amazon still outranks all of them in raw click volume** — because the Amazon links are on more pages (all model pages, not just LLM/vision) and Amazon's brand is more trusted for an impulse click. Whether clicks convert is a different question I can't answer yet.

**DigitalOcean and Vultr** are already in the affiliate config object but not yet wired to any page. DigitalOcean's GPU droplets are new-ish and not as well-known as RunPod; Vultr has a straightforward referral program. I'll add both once I have any signal about whether the current GPU links are being used.

**Contextual text around the affiliate links.** Right now the sidebar is just label + note + arrow. A one-sentence "why you'd use this" blurb next to each link would reduce the blank-stare click gap — especially for Vast.ai, where first-time users don't immediately understand the marketplace model.

**Separate referral codes per site.** I'm running the same referral codes across all three directories right now, which means I can't attribute a conversion to the AI tools directory vs a future expansion. When the programs reach any meaningful click volume, I'll register site-specific codes.

The actual implementation is simple — three URL builder functions, one conditional block in the page component, and a handful of env variables. The hard part isn't the code; it's choosing contextually relevant programs and placing them on pages where a user actually has purchase intent.

*Part of an ongoing 6-month experiment running three AI-curated directory sites. The technical claims here are real; this article was AI-assisted.*
