The Code Behind the Commercial

While my day job focuses on driving revenue retention and enterprise implementation, my foundation is deeply technical. This page bridges my commercial portfolio with my raw GitHub output.

Philosophy & Stack

I am a pragmatist. I run a Linux environment because it forces a logical understanding of the system, and I strongly advocate for Open Source tools because transparency beats proprietary black boxes.

I map CRM/ERP systems in raw SQL rather than through GUI tools, and work with Snowflake on the data side. For campaign execution, I write and hand-tune the HTML behind client email templates.

When troubleshooting API integrations, I live in Swagger, OpenAPI, and Insomnia, isolating payload errors long before they require an Engineering escalation.

My GitHub reflects this logical approach. This portfolio is built on a fast, lightweight stack (11ty, Nunjucks, Tailwind CSS) and deployed via GitHub Actions. It features a custom Firebase authentication flow for locked content. The Firebase web config is public by design, as it is in every Firebase web app, so access is enforced where it actually counts: server-side Firestore security rules that let an account read only its own record and reserve approval to the owner. For backend utilities and data formatting, I default to JavaScript and Python.

Linux
SQL
Snowflake
Terraform
JS
Python
HTML
Insomnia
Git
11ty

A system I run end to end

The signed-in app on this domain authenticates people, proxies four third-party APIs, writes to Postgres and deploys itself. I designed it, built it and keep it running. That is the same work as onboarding a customer onto a platform: making systems that were never built for each other agree on what a field means.

In your hands Served as files · no secret is in them The only thing that decides What it asks, on your behalf Your browser tzortzoglou.eu the portfolio · one call: the contact form app.tzortzoglou.eu signed in · pages only api.tzortzoglou.eu checks the token · re-reads your role · holds every key nothing below this line is reachable without it Firebase who you are Postgres messages · restarts Four upstreams two need a key Open-Meteo · Trafiklab ResRobot · Jolpica · GitHub Actions none of these four is ever called from your browserthe app’s map tiles are the one exception, fetched by your browser itself

Four APIs, twenty-six fields, one shape

Weather, Swedish transit, Formula 1 and GitHub Actions each answer in their own vocabulary. Twenty-six fields are mapped into one internal shape. The calculated ones (a delay in minutes, a position gained, which step of a build failed) are labelled as calculated, so nobody reads a derivation as a measurement.

A two-hour error that was not the vendor's fault

Every bus departure showed two hours out. The transit feed sends Swedish wall-clock time with no offset and the container runs in UTC, so the times parsed as the wrong instant. They are resolved against Europe/Stockholm now, with tests across both daylight-saving changeovers. The vendor's data was correct the whole time.

Authorisation that does not trust its own token

A signed token proves who signed in. It does not prove what they may do now, so every request re-reads the role and approval state from the database before anything happens. Withdrawing someone's access takes effect on their next request rather than whenever their token happens to expire.

A database browser with no query box

Administrators can read the tables. There is nowhere to type SQL, the readable tables are an allowlist rather than whatever the catalogue reports, and the columns holding a sender's IP address are never selected at all. Losing this screen to a stolen session costs a read, not a prompt.

The full reference lives inside the app: every endpoint, every field mapping, and why each cache window is the length it is. It is at app.tzortzoglou.eu/docs.

Live Code Activity

383 GitHub contributions between 2025-09-14 and 2026-09-17, shown as a grid of days shaded by how many contributions each holds.

383 contributions in the last year. See the profile on GitHub.