Inspiration

Lots of sites geo-block (food delivery, streaming, local services, Gaming, Enteprise). Visitors outside the allowed region usually hit a “not available in your area” page and leave. We wanted to turn that moment into something useful, show them relevant local alternatives and let the publisher earn affiliate revenue instead of wasting that traffic.

What it does

AffiliGate is a one-script widget for geo-restricted sites. You set allowlist or blocklist rules in the dashboard. In-region visitors see your site as normal. Out-of-region visitors see a friendly overlay with location-matched partner offers. They get alternatives, you get paid per click. No backend changes, drop the script, configure rules, and add offers.

How we built it

API: Node.js, Express, TypeScript, MongoDB, MaxMind GeoIP2, Zod, JWT, CORS, express-rate-limit

Dashboard: Next.js 15, React 19, Tailwind CSS, NextAuth (MongoDB adapter), Resend (magic link), Framer Motion, TanStack React Query, React Hook Form, Zod, Radix UI, Lucide React

Widget: Vanilla JavaScript, script tag with data-pub / data-website

Challenges we ran into

  • Geo accuracy
  • Widget embedding
  • Offer relevance

Accomplishments that we're proud of

  • One-script integration
  • Real geo decisions
  • Polished overlay
  • Full loop

What we learned

  • Geo-blocking is common, turning that moment into affiliate revenue is a clear use case.
  • A tiny, dependency-free widget (vanilla JS) is easier to adopt than a framework-based embed.
  • MaxMind GeoIP is enough for country/region for most use cases; combining it with explicit dev params makes debugging and demos much easier.

What's next for AffiliGate

  • More offer sources: Connect real affiliate networks/APIs and support multiple verticals.
  • Analytics in the dashboard: Funnel views (decisions → offers shown → clicks) and revenue estimates.
  • Customization: Let publishers tweak overlay copy, logo, and CTA so it fits their brand.

Built With

Share this project:

Updates