AJ JOHNSTONE

Systems Developer — Integrations & Platforms

AJ
Johnstone

I keep the platforms running and build the wiring between them.

Global Jira administrator and Python/SQLAlchemy integrator at a Free State agriculture group, now developing PHP/C# business systems. Ten years in IT, three internal promotions in four, and a nine-year business before all of it.

Open to PHP / C# / Python roles · Gauteng or Free State · remote-friendly (same working morning as Europe)

INTEGRATION MAP — LIVEDRAWN BY AJ
MapHover a node: every block on this sheet is real, running work. The orange pulse is the data.
TitleINTEGRATION MAP — M-01
DrawnAJ JOHNSTONE
Rev2026-09 · SCALE 1:1
ABOUT

The short version

I work for an agriculture group in the Free State. Nine years running my own IT support business for small clients, then temp operator, service desk, application administrator, and now developer. Three promotions in four years, each one because the previous job grew.

Along the way I became the global admin of the group's Jira, and at some point I got tired of watching people copy data out of it by hand, so I taught myself Python and built the thing that does it instead. That's still my favourite kind of work: a system somebody has to babysit, turned into something that just runs.

I taught myself Python from the docs at midnight. Right now I'm picking up Laravel and writing my first real unit tests. Slowly, and in public.

YEARS IN IT10+, most of them shipping
LANGUAGESEnglish, Afrikaans
SELF-TAUGHT INPython, JavaScript, HTML/CSS
NOW LEARNINGLaravel, automated testing, C# depth
BEFORE ALL THIS9 years self-employed IT
REGISTRY

Selected work

Shipped work. Each entry has a real user on the other end.

CS-01

Jira → BI integration platform

Production data pipeline from the Jira platform I administer into SQL Server, consumed daily by the business intelligence team. Built solo: Python, REST, SQLAlchemy. Case study below.

PRODUCTIONPYTHONSQLALCHEMY
CS-02

Jira desktop toolchain

Two PySimpleGUI applications: a Jira data extractor that writes straight to Excel for ad-hoc reporting, and a ticket-history tracker for full lifecycle audits.

PYTHONPYSIMPLEGUIJIRA API
CS-03

Open-source contributions: the dislike extensions

During the 2021 dislike-count crisis I shipped to both major extensions: six merged pull requests in ten days on yt-dislikes-viewer (295★), including cross-browser fixes and the backend API integration that replaced the dying YouTube API, plus commits to Return YouTube Dislike (13k★): the API online/offline status UI and icon cleanup.

OPEN SOURCEJAVASCRIPT2 PROJECTS
CS-04

Recent team systems — PHP / C#

Refactored a 360° feedback survey platform with new functionality; built and shipped an RSVP management site; developed a custom Joomla forms plugin in PHP.

PHPC#JOOMLA
CS-05

AI provenance research (personal)

An anonymous AI model appeared on a subscription I use, with no company behind the name. Public usage stats and published pricing let me estimate its effective cost per token, which pointed at one lab's rate card. The community's tokenizer tests and a leaked URL did the rest. To be honest about it: the lab still hasn't officially claimed it. The sums were mine; the confirmation was a group effort.

PERSONALDATA
SHOW-01

“Meridian” — WebGL watch site

A single-file product site with a fully procedural Three.js movement: live gear train, real-time hands, scroll-driven exploded view. Built to prove front-end range beyond the ordinary.

THREE.JSWEBGLFRONT-END
Case study · client anonymized

Jira → BI integration platform

A large South African agricultural group needed its work-management data inside the reporting stack. I was both the platform's global administrator and the only person building the integration, which shaped every decision on this page.

Problem

Manual pulls. The BI team copied data out of Jira by hand: slow, inconsistent, and impossible to audit afterwards.

What was hard

The platform keeps moving under you. Workflows and custom fields change as the business changes, so the extraction had to keep up. Being the admin helped: I could fix the schema mismatch at the source instead of patching the pipeline every month.

What happened

The BI team runs reports off the pipeline daily. Two desktop tools came out of the same work, and both get used by teams across the group.

The build: a Python service reads the Jira REST API (authentication, pagination, rate-limit handling) and maps entities onto SQLAlchemy models, landing in SQL Server on a schedule. Two PySimpleGUI companions handle ad-hoc extracts and ticket-history audits.
What I'd do differently: automated tests from day one. I wrote none and got away with it because I also administer the platform, which is exactly the kind of luck you shouldn't plan around. That's the gap I'm closing now.
STACK

Tools, honestly rated

Honest ratings. The dashed card is the gaps I'm working on.

Languages

  • Python: integrations, tools & APIs
  • Go: REST APIs with Fiber
  • PHP: vanilla + Joomla plugins
  • C#: team stack, growing
  • JavaScript: Node.js, Electron & front-end
  • SQL: Microsoft SQL Server

Frameworks & tools

  • Flask + Jinja2: Python web & services
  • SQLAlchemy: ORM & data modelling
  • Svelte + Bootstrap: front-end
  • Fiber: Go REST APIs
  • Node.js + Electron: desktop apps
  • PySimpleGUI: desktop tools

Platforms & ops

  • Atlassian Jira: global admin, JSM portal
  • Dynamics 365 BC: setup & administration
  • Windows Server: setup, config, ops
  • PowerShell: server automation
  • Git: version control
  • Excel automation: reporting pipelines

Learning now

  • C# + EF Core: going deeper on the team stack
  • Automated testing: first unit tests underway
  • Laravel: next up, the PHP market filter
  • AI coding tools: daily use, output verified
CONTACT

Contact

I'm currently a developer at an agriculture group in the Free State, open to PHP, C# and Python roles. Locally in Gauteng or the Free State, or remote for European teams: my timezone is your morning. Everything on this page is checkable. The GitHub is linked and the write-up below is there to read before we talk.