Skip to content

Case study · Freelance practice website

kristianbansil.com

A fast, secure Next.js website that explains 88 services clearly, quotes instantly with AI, and is built to be found by Google and by AI answer engines.

Client
Own project
Year
2026
Role
Design, development, SEO and hosting
Type
Freelance practice website
  • 50 → 85Mobile homepage speed scoreGoogle Lighthouse, live site, after moving the 3D scene off mobile
  • 3,070 → 0Mobile main-thread blocking (ms)Lighthouse total blocking time on the homepage
  • 100SEO and accessibility scoresOn every page audited with Lighthouse
  • 42Pages in the sitemapSubmitted to Google Search Console and to Bing via IndexNow

The goal

I needed a website that does three jobs at once: explain a wide range of services without overwhelming people, turn visitors into qualified enquiries, and be easy for both search engines and AI assistants to understand and cite.

What I built

  • A catalogue of 88 services in 11 disciplines, each with a published starting price in PHP and USD
  • Sidekick, an AI assistant that builds an itemised quote as you chat (see the Sidekick case study)
  • Service, industry and pricing pages, a blog with practical guides, and a free downloadable launch checklist
  • Answer-first page content, rich structured data and an `llms.txt` file for AI answer engines
  • Security hardening: a strict Content Security Policy, Cloudflare Turnstile on every form, per-visitor and edge rate limits, and email anti-spoofing records

Key decisions

Prices come from one source

Every price on the site, in quotes, PDFs and blog posts is calculated from a single catalogue, so a price change updates everywhere at once and nothing drifts out of date.

Built for answer engines, not just search

Each page leads with a short, direct answer, and structured data ties the site to one clearly identified person. AI crawlers are welcome in robots.txt, and new pages are pushed to Bing through IndexNow.

Fast on the phones people actually use

The interactive 3D logo only loads on large screens once the browser is idle. Phones get a lightweight static mark instead, which removed seconds of processing on mobile.

Secure by default

Forms are protected by Turnstile and rate limits, API routes only accept same-site requests with capped payloads, and visitor IP addresses are stored only as salted hashes.