AH Original · Case study 07
AffiLinks
An affiliate and influencer marketing agency’s website and client portal: each brand signs in to a live dashboard of their program, read from the team’s Google Sheets through the Sheets API, with updates written back from the site.
- Role
- Full-stack · freelance
- Stack
- Next.js 15 · Hono · Sheets API
- Year
- 2026


- Type
- Agency website · client portal
- Role
- Full-stack · freelance
- Stack
- Next.js 15 · Hono · Sheets API
- Access
- Public site · private portal
01. The brief
Win the brand, then show them the work.
AffiLinks.io runs affiliate and influencer programs for e-commerce and SaaS brands. The team already tracked every partner, click and order in Google Sheets, one sheet per client. They needed a website that wins new brands, and a portal where each brand sees its own program without asking for a report. I built both, with the sheets as the source of truth.
- 26page routes
Marketing site
Services, case studies, white papers, blog, and free tools that turn visitors into leads.
- 7sections
Client portal
Overview, affiliate and influencer management, project details, meetings, calendar, account.
- 2ways
Google Sheets
Read every tab the team keeps, and write back the one thing clients change.
- 27screens
Admin console
Clients, CRM board, visitor sessions, content, media and staff permissions.
02. The website
Light, airy,and built to convert.
The site follows a design system I wrote for it: white and lavender surfaces, one indigo accent, a gradient phrase in every heading, and motion that explains how partners turn into revenue. Free tools and forms do the selling.
- One indigo accent, every heading with a gradient phrase
- Animated illustrations that show money moving through a network
- Designed for phones: fixed action bar, 16px fields, 28px slider hit areas
- Calculator, contact and audit forms all land on one CRM board

03. Every section sells
From first visit to booked call.
A comparison that makes the case for an operator team, a preview of the client portal, a 90-day plan for existing and new programs, and a revenue calculator built from the benchmarks behind the case studies. Each ends in a call to action, and every lead lands on the same CRM board.




04. The client portal
Their program, at a glance.
Each brand signs in to its own dashboard: where every partner stands, the team’s follow-ups, weekly KPIs, sales and campaigns. Nothing is typed twice. The views are mine; the numbers come straight from the sheet the team already keeps.
- KPIs, pipeline, sales, outreach, campaigns and deals
- Week vs week and month vs month comparisons
- Charts and tables, with CSV download
- Every figure in the client's own currency




Portal screens use a fictional client and a local stand-in for Google
05. Google Sheets as the backend
The team keeps the sheet. The site does the rest.
The Worker reads each client’s sheet as a Google service account, so sheets stay private. Month tabs in a four-week layout become KPIs; tabs like Recruitment, Active, Potential and Sales become the pipeline and lists. A copy is kept in D1 and read again at most once a minute, so the portal never comes up empty when Google is slow. When a client changes an order’s status, that one cell is written back.
- Service-account JWT signed in the Worker with WebCrypto
- Sections found by their headings, not fixed cell addresses
- Read at most once a minute; the D1 copy covers Google outages
- One cell written back when a client changes an order status




06. Architecture
Two Workers, no servers.
The Next.js site runs on Cloudflare Workers through OpenNext and holds no secrets. A Hono API on a second Worker owns everything else: content and media in D1 and R2, leads and the CRM, visitor analytics, client accounts and the Sheets sync.
Google Sheets
One tab per month and list
Backend Worker
Hono · service account
D1 copy
Read once a minute
Next.js site
OpenNext on Workers
Client portal
Signed-in brands
07. In numbers
Site, portal and API in six weeks.
The first commit landed in September 2026. Every line of code in the repository is mine; the client’s own commits are edits to the README.
- 70k
- Lines of TypeScript and CSS
- 26
- Database migrations
- 12k
- Lines in the client portal
08. Technologies
- Next.js 15
- React 19
- TypeScript
- Tailwind CSS v4
- Framer Motion
- Hono
- Cloudflare Workers
- OpenNext
- D1
- R2
- Google Sheets API
- WebCrypto JWT
- Resend
AH Originals
More Like This
Next episode
Want something like AffiLinks?
Tell me about your idea and I'll reply with honest advice and a free quote. Replies within 24 hours.