Strictly necessary
Required for security, unlock verification, and core site operation.
Show details
| Name | Provider | Purpose | Duration |
|---|---|---|---|
| karot_unlock | karotammela.fi | Sentinel unlock verification for dashboard access | 14 days |
Karo tammela
Welcome to my site, a kind of AI-workshop. This is where I test and showcase different projects where I use AI - either in the coding itself or in the final implementations. You will also find my blog here, where I share what I've learned from different projects and from the journey overall.
Over the past couple of years, I've spent a big part of my free time learning how coding is changing in the agentic AI era. For example, I built this website in about three hours by orchestrating coding agents. I built the landing page, the AI bouncer, connected it to the Gemini language model, set up SQLite, built the dashboard, acquired the domain, hosted it on Vercel, and published everything.
I've moved from "vibe coding" to systematic end-to-end software development: through dozens of experiments and hundreds of hours studying different technologies, I've built a workflow where ideas now turn into working code, GitHub repositories, and Vercel deployments. The process is fast, but quality stays consistent and secure thanks to solid architecture, planning, documentation, and well-organized, carefully designed agents.
This site also lets you compare two completely different technology choices, live: the version you're reading now is built with Go+HTMX and hosted on my own Hetzner VPS with a SQLite database, but running alongside it is an identical Next.js implementation on Vercel (backed by a Turso database). I wanted to find out in practice what Go+HTMX is capable of compared to Next.js, what setting up a VPS on Hetzner actually feels like, and how running SQLite on your own server compares to a managed Turso database. You can compare both directly: the round button in the bottom-right corner (the letter G on this version, N on the Next.js version) opens a switcher and shows the response-time difference measured live from your browser.
Try your luck with the AI Bouncer below. If you manage to talk it around and get the access code, it will open the doors to the backstage - my actual portfolio dashboard. Enjoy exploring!
Consent center
Select which optional categories can be used. Essential storage stays enabled for security and core access.
Required for security, unlock verification, and core site operation.
| Name | Provider | Purpose | Duration |
|---|---|---|---|
| karot_unlock | karotammela.fi | Sentinel unlock verification for dashboard access | 14 days |
Stores language and theme preferences to improve your experience.
| Name | Provider | Purpose | Duration |
|---|---|---|---|
| NEXT_LOCALE | karotammela.fi | Persist selected language between visits | Session and refresh persistence |
| karot-theme | karotammela.fi | Persist preferred visual theme | Until cleared |
Helps us understand usage patterns. In this setup, Umami analytics runs cookieless.
| Name | Provider | Purpose | Duration |
|---|---|---|---|
| Umami cookieless analytics | Umami | Measure page views and engagement without cookies | No cookies used |
Reserved for future marketing integrations and campaign measurement.
No active items currently mapped to this category.
Tech switcher
Compare the Go + HTMX build against the original Next.js app.