I build the parts of a system nobody notices — until they'd have to notice their absence.
Building full-stack web platforms — embedding Qlik Sense Cloud analytics, standing up
web portals, and architecting auth, on Azure, PostgreSQL, and Supabase.
// at a glanceEnd-to-end web apps. Focus: Qlik, auth & payments.
// math ninjaReact Native · Firebase Solo-built, live on Google Play
// qlik extensionReplaced manual reports with one automated view
About
I'm a senior software engineer at a fast-paced data consultancy, building secure web solutions —
data visualization, authentication architecture, and custom Qlik Sense Cloud extensions — for
clients who need their data flowing safely from backend to frontend.
I didn't start here. I was a photographer first, and started teaching myself to code so I could build my own site instead of paying someone
else to. The photography mostly stayed a hobby; the code didn't let go.
These days I'm also the reason my eldest is curious about how computers actually work — not
something I set out to do, just a nice side effect of building things at the kitchen table.
Selected Work
Secure Auth & Embeddable Data Portals
Problem
each client needed their portal embedded in a different host platform (WordPress, Squiz, Webflow) and authenticated through a different identity provider (Qlik Sense Cloud's IdP, Microsoft Entra ID, Okta, or Salesforce) — no single template would fit every case.
Role
designed and built a distinct auth/authorization and embedding architecture for each client's portal, case by case rather than off one shared template.
Key decisions
fit each portal's auth flow to that client's specific IdP instead of forcing every client through one abstraction
built each embed to work safely within its own host CMS
Outcome
a secure standalone portal or safe CMS embed for each client, architected around their own platform and IdP rather than forced through one shared core.
Stack: Azure, SvelteKit, PostgreSQL, Node/Express, Qlik Sense Cloud, React
WordPress Plugin for Secure Qlik Sense Data Visualization
Problem
a WordPress site needed to show customizable data visualizations sourced from Qlik Sense Cloud, without exposing Qlik credentials or API calls to the browser, and without needing a developer involved every time the visualization needed to change.
Role
designed and built the plugin end-to-end — the secure backend and the customizable frontend visualization.
Key decisions
kept all Qlik Sense Cloud authentication and API calls server-side, so the browser never touches Qlik credentials or raw API responses directly
made the visualization configurable by non-technical editors from within WordPress, instead of hardcoding it per deployment
Outcome
a WordPress site securely displaying live Qlik Sense Cloud data through a customizable visualization, with no Qlik access exposed client-side.
Stack: WordPress, Node.js, Qlik Sense Cloud
Qlik Sense Cloud Data Visualization Extension
Problem
large, messy datasets needed an interactive visualization inside Qlik Sense Cloud; reporting relied on manual entry and multiple separate reports.
Role
designed and architected the extension end-to-end (a custom Qlik Sense Cloud visualization extension, not a tweak to an existing one).
Key decisions
smart, context-aware tooltips rather than generic labels
collapsible/expandable bar states so dense data shows an aggregate view by default and expands to detail on demand
auto-display logic that handles complex, variable data-loading conditions without per-dataset manual config
Outcome
replaced manual data entry and multiple separate reports with one automated visualization.
Stack: Qlik Sense Cloud Extension API, D3.js, jQuery
Math Ninja & Beep2Burn
Problem/what it is
Math Ninja: turn-based arithmetic dueling game for kids — challenge a friend, take turns solving questions, track scores and climb a leaderboard.
Beep2Burn: a workout timer and fitness-tracking app for interval-based training — plan exercises, execute with guided audio/visual cues, track progress over time.
Role
solo developer on both, published to Google Play.
Key decisions
Math Ninja: turn-based dueling against a friend instead of solo drills — makes repetition social and competitive rather than a chore.
Beep2Burn: guided audio/visual cues so users don't have to look at their phone mid-set.
Stack: React Native, Firebase
Country Indicators
Problem/what it is
an interactive dashboard visualizing 1800-era country data (GDP, life expectancy, population across ~200 countries/territories) — bar chart, scatterplot, beeswarm, and map, plus a sortable table, all over the same dataset.
Role
solo, personal project — built to demonstrate visualization range with full creative control.
Key decision
four distinct chart types over one dataset — bar for direct comparison, scatterplot for relationships between metrics, beeswarm for distribution, map for geography — so the same data supports four different questions rather than one fixed view.
Outcome
a fully public, interactive D3.js demo — dynamic, drivable proof of data visualization ability, standing on its own.
This is a place to capture my thoughts and ideas — I write here to think out loud about
whatever problem just fought me, and because turning a mess into a clear explanation is often
how I actually understand it.