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.
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.
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 contributions in the last year. See the profile on GitHub.