Everything, as a list

abdullahhamza.lk: the site you're on

Type
Project

This site is a project of its own. Behind the pages sits a graph of my whole career record, and a chat assistant that answers questions from it.

Next.js 16 and React 19 render the pages, in TypeScript throughout, and most of them are built ahead of time as static HTML. Tailwind CSS does the styling. Motion runs the scroll reveals and the numbers that count up. The graph is drawn on a canvas with react-force-graph, and D3's force simulation decides where each node settles.

The chat runs on the Vercel AI SDK, calling the OpenAI API. Before the model answers, a hybrid search picks the relevant parts of the record by matching keywords and comparing OpenAI embeddings, so the answer comes from what is written here. Zod checks the content when the site builds, and what visitors send when it runs. Upstash Redis stores the conversations, and Cloudflare Turnstile keeps bots away from the chat and the contact form.

Resend delivers the contact form to my inbox, and Cal.com handles booking a call. Sentry reports errors and watches the scheduled jobs, and Umami shows which pages people visit. It is hosted on Vercel, and GitHub Actions runs the type check, lint and Vitest suite on every push.

Built with

Related