Available for devops and developer roles
Building dependable systems with operational discipline.
I design and ship resilient developer experiences, automation layers, and production-ready interfaces. This portfolio can now be edited in Payload CMS and persisted in MongoDB.
Selected work
Real roles and projects from my CV.
Backend developer across Laravel and legacy PHP
Morphsites
Built and maintained new Laravel projects and older PHP/Statamic sites, while handling support tickets autonomously through Jira.
PHP Developer with DevOps responsibility
Rawnet Ltd.
Supported in-house developers and AWS infrastructure, built local Docker setup commands, handled WAF blocking, monitored uptime, and managed Ubuntu patching with Canonical Landscape.
Full stack PHP and Vue work for business tooling
Project Better Energy
Worked in a small team maintaining Laravel applications, built Vue.js finance wizards, and delivered a stockist map feature for EV chargers.
Experience
Recent delivery history.
2024 - Present
Personal infrastructure · Homelab and service automation
Building portfolio tooling, reverse-proxy deployments, and containerized services that I can operate end-to-end.
2021 - 2024
Platform support · Managed hosting and application teams
Kept production systems stable, handled support workloads, and improved developer delivery paths across PHP and AWS stacks.
Live architecture example
Live architecture snapshot
Topology
Docker + Linux host overview
Separate Go service exposing live Docker daemon, container, image, and Linux host telemetry.
client
-> portfolio site
-> /api/architecture (https://archview.rossmoney.me/api/architecture)
-> host Go service
containers
- rossmoney_me-cms-1
- bookstack
- bookstack_db
- archview
- socket-proxy
- archview-dev
- watchtower
- tailscale
- monitoring-dashboard-1
- trivy
- portainer
- trivy-docker-api
- npm
- docker-daemon
images
- ghcr.io/tekkifox/rossmoney_me-cms
- ghcr.io/tekkifox/archview
- ghcr.io/tekkifox/monitoring-dashboard
- ghcr.io/tekkifox/monitoring-trivy
- ghcr.io/tekkifox/rossmoney_me-host-report
- ghcr.io/tekkifox/image-mosaic
- ghcr.io/tekkifox/archview
- ghcr.io/tekkifox/monitoring-lynis-report-converter
- lscr.io/linuxserver/bookstack
- portainer/portainer-ee
- lscr.io/linuxserver/mariadb
- lscr.io/linuxserver/socket-proxy
- mongo
- tailscale/tailscale
- nickfedor/watchtower
- portainer/portainer-ee
- portainer/portainer-ce
- docker
- jc21/nginx-proxy-manager
- alpine
- alpine
regions
- host
- Ubuntu 26.04.1 LTS
- aarch64Raw payload
{
"cluster": "archview",
"description": "Separate Go service exposing live Docker daemon, container, image, and Linux host telemetry.",
"docker": {
"containers": [
{
"created": 1793643506,
"id": "8bb7010555d5",
"image": "ghcr.io/tekkifox/rossmoney_me-cms:latest",
"name": "rossmoney_me-cms-1",
"state": "running"
},
{
"created": 1793638184,
"id": "59aad2d9c5a7",
"image": "lscr.io/linuxserver/bookstack:latest",
"name": "bookstack",
"state": "running"
},
{
"created": 1793638184,
"id": "3237941589a7",
"image": "lscr.io/linuxserver/mariadb:latest",
"name": "bookstack_db",
"state": "running"
},
{
"created": 1793633420,
"id": "b06544b70e34",
"image": "ghcr.io/tekkifox/archview:latest",
"name": "archview",
"state": "running"
},
{
"created": 1793633420,
"id": "bb9ecc86e68e",
"image": "lscr.io/linuxserver/socket-proxy:latest",
"name": "socket-proxy",
"state": "running"
},
{
"created": 1793631207,
"id": "c5c926d7f0b8",
"image": "ghcr.io/tekkifox/archview:dev",
"name": "archview-dev",
"state": "running"
},
{
"created": 1793601977,
"id": "c7f76f1b699f",
"image": "nickfedor/watchtower",
"name": "watchtower",
"state": "running"
},
{
"created": 1793600355,
"id": "a7ea2f4ccaa8",
"image": "tailscale/tailscale:latest",
"name": "tailscale",
"state": "running"
},
{
"created": 1793592818,
"id": "52cb161f55b4",
"image": "ghcr.io/tekkifox/monitoring-dashboard:latest",
"name": "monitoring-dashboard-1",
"state": "running"
},
{
"created": 1793592813,
"id": "828ffcd9b483",
"image": "ghcr.io/tekkifox/monitoring-trivy:latest",
"name": "trivy",
"state": "running"
},
{
"created": 1793590975,
"id": "64d994458994",
"image": "portainer/portainer-ee:sts",
"name": "portainer",
"state": "running"
},
{
"created": 1793474536,
"id": "75b531860fb4",
"image": "lscr.io/linuxserver/socket-proxy:latest",
"name": "trivy-docker-api",
"state": "running"
},
{
"created": 1793204524,
"id": "596ceec84228",
"image": "jc21/nginx-proxy-manager:2.15.1",
"name": "npm",
"state": "running"
}
],
"daemon": {
"architecture": "aarch64",
"containers": 14,
"containersRunning": 13,
"driver": "overlayfs",
"images": 56,
"memoryTotalBytes": 6187405312,
"ncpu": 1,
"operatingSystem": "Ubuntu 26.04.1 LTS"
},
"images": [
{
"created": 1793643399,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/rossmoney_me-cms:latest"
],
"sizeBytes": 378535786
},
{
"created": 1793630319,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/archview:latest"
],
"sizeBytes": 23664757
},
{
"created": 1793592806,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/monitoring-dashboard:latest"
],
"sizeBytes": 93277502
},
{
"created": 1793540333,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/monitoring-trivy:latest"
],
"sizeBytes": 248124688
},
{
"created": 1793408191,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/rossmoney_me-host-report:latest"
],
"sizeBytes": 276197451
},
{
"created": 1793362704,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/image-mosaic:latest"
],
"sizeBytes": 51484100
},
{
"created": 1793316171,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/archview:dev"
],
"sizeBytes": 23667909
},
{
"created": 1793300941,
"dangling": false,
"repoTags": [
"ghcr.io/tekkifox/monitoring-lynis-report-converter:latest"
],
"sizeBytes": 274159353
},
{
"created": 1793230185,
"dangling": false,
"repoTags": [
"lscr.io/linuxserver/bookstack:latest"
],
"sizeBytes": 506669770
},
{
"created": 1793226338,
"dangling": false,
"repoTags": [
"portainer/portainer-ee:sts"
],
"sizeBytes": 343636944
},
{
"created": 1793108149,
"dangling": false,
"repoTags": [
"lscr.io/linuxserver/mariadb:latest"
],
"sizeBytes": 568707130
},
{
"created": 1793059591,
"dangling": false,
"repoTags": [
"lscr.io/linuxserver/socket-proxy:latest"
],
"sizeBytes": 25882804
},
{
"created": 1793057442,
"dangling": false,
"repoTags": [
"mongo:7"
],
"sizeBytes": 1128268175
},
{
"created": 1793054302,
"dangling": false,
"repoTags": [
"tailscale/tailscale:latest"
],
"sizeBytes": 179464923
},
{
"created": 1792640652,
"dangling": false,
"repoTags": [
"nickfedor/watchtower:latest"
],
"sizeBytes": 75669999
},
{
"created": 1792625419,
"dangling": false,
"repoTags": [
"portainer/portainer-ee:latest"
],
"sizeBytes": 272444975
},
{
"created": 1792625232,
"dangling": false,
"repoTags": [
"portainer/portainer-ce:sts"
],
"sizeBytes": 190318492
},
{
"created": 1792624338,
"dangling": false,
"repoTags": [
"docker:cli"
],
"sizeBytes": 228092559
},
{
"created": 1780461197,
"dangling": false,
"repoTags": [
"jc21/nginx-proxy-manager:2.15.1"
],
"sizeBytes": 1807680173
},
{
"created": 1776383604,
"dangling": false,
"repoTags": [
"alpine:3.20"
],
"sizeBytes": 13660215
},
{
"created": 0,
"dangling": false,
"repoTags": [
"alpine:latest"
],
"sizeBytes": 13026061
}
]
},
"endpoints": [
{
"name": "architecture",
"url": "https://archview.rossmoney.me/api/architecture"
},
{
"name": "docker",
"url": "https://archview.rossmoney.me/api/docker"
},
{
"name": "system",
"url": "https://archview.rossmoney.me/api/system"
},
{
"name": "healthz",
"url": "https://archview.rossmoney.me/healthz"
},
{
"name": "readyz",
"url": "https://archview.rossmoney.me/readyz"
},
{
"name": "docs",
"url": "https://archview.rossmoney.me/docs"
}
],
"environment": "docker",
"extra": {
"containerCount": 13,
"imageCount": 21
},
"nodes": [
{
"kind": "linux-host",
"name": "archview",
"status": "1.25 load average"
},
{
"details": {
"image": "ghcr.io/tekkifox/rossmoney_me-cms:latest",
"state": "running"
},
"kind": "container",
"name": "rossmoney_me-cms-1",
"status": "running"
},
{
"details": {
"image": "lscr.io/linuxserver/bookstack:latest",
"state": "running"
},
"kind": "container",
"name": "bookstack",
"status": "running"
},
{
"details": {
"image": "lscr.io/linuxserver/mariadb:latest",
"state": "running"
},
"kind": "container",
"name": "bookstack_db",
"status": "running"
},
{
"details": {
"image": "ghcr.io/tekkifox/archview:latest",
"state": "running"
},
"kind": "container",
"name": "archview",
"status": "running"
},
{
"details": {
"image": "lscr.io/linuxserver/socket-proxy:latest",
"state": "running"
},
"kind": "container",
"name": "socket-proxy",
"status": "running"
},
{
"details": {
"image": "ghcr.io/tekkifox/archview:dev",
"state": "running"
},
"kind": "container",
"name": "archview-dev",
"status": "running"
},
{
"details": {
"image": "nickfedor/watchtower",
"state": "running"
},
"kind": "container",
"name": "watchtower",
"status": "running"
},
{
"details": {
"image": "tailscale/tailscale:latest",
"state": "running"
},
"kind": "container",
"name": "tailscale",
"status": "running"
},
{
"details": {
"image": "ghcr.io/tekkifox/monitoring-dashboard:latest",
"state": "running"
},
"kind": "container",
"name": "monitoring-dashboard-1",
"status": "running"
},
{
"details": {
"image": "ghcr.io/tekkifox/monitoring-trivy:latest",
"state": "running"
},
"kind": "container",
"name": "trivy",
"status": "running"
},
{
"details": {
"image": "portainer/portainer-ee:sts",
"state": "running"
},
"kind": "container",
"name": "portainer",
"status": "running"
},
{
"details": {
"image": "lscr.io/linuxserver/socket-proxy:latest",
"state": "running"
},
"kind": "container",
"name": "trivy-docker-api",
"status": "running"
},
{
"details": {
"image": "jc21/nginx-proxy-manager:2.15.1",
"state": "running"
},
"kind": "container",
"name": "npm",
"status": "running"
}
],
"region": "Ubuntu 26.04.1 LTS",
"regions": [
"host",
"Ubuntu 26.04.1 LTS",
"aarch64"
],
"services": [
{
"image": "ghcr.io/tekkifox/rossmoney_me-cms:latest",
"kind": "container",
"name": "rossmoney_me-cms-1",
"status": "Up 57 minutes"
},
{
"image": "lscr.io/linuxserver/bookstack:latest",
"kind": "container",
"name": "bookstack",
"status": "Up 2 hours"
},
{
"image": "lscr.io/linuxserver/mariadb:latest",
"kind": "container",
"name": "bookstack_db",
"status": "Up 2 hours"
},
{
"image": "ghcr.io/tekkifox/archview:latest",
"kind": "container",
"name": "archview",
"status": "Up 4 hours (healthy)"
},
{
"image": "lscr.io/linuxserver/socket-proxy:latest",
"kind": "container",
"name": "socket-proxy",
"status": "Up 4 hours (healthy)"
},
{
"image": "ghcr.io/tekkifox/archview:dev",
"kind": "container",
"name": "archview-dev",
"status": "Up 4 hours (healthy)"
},
{
"image": "nickfedor/watchtower",
"kind": "container",
"name": "watchtower",
"status": "Up 12 hours (healthy)"
},
{
"image": "tailscale/tailscale:latest",
"kind": "container",
"name": "tailscale",
"status": "Up 13 hours"
},
{
"image": "ghcr.io/tekkifox/monitoring-dashboard:latest",
"kind": "container",
"name": "monitoring-dashboard-1",
"status": "Up 15 hours (healthy)"
},
{
"image": "ghcr.io/tekkifox/monitoring-trivy:latest",
"kind": "container",
"name": "trivy",
"status": "Up 9 hours (healthy)"
},
{
"image": "portainer/portainer-ee:sts",
"kind": "container",
"name": "portainer",
"status": "Up 16 hours"
},
{
"image": "lscr.io/linuxserver/socket-proxy:latest",
"kind": "container",
"name": "trivy-docker-api",
"status": "Up 2 days (healthy)"
},
{
"image": "jc21/nginx-proxy-manager:2.15.1",
"kind": "container",
"name": "npm",
"status": "Up 15 hours"
},
{
"kind": "daemon",
"name": "docker-daemon",
"status": "14 containers, 56 images"
}
],
"status": "healthy",
"telemetry": {
"hosts": [
{
"cpu": 125,
"cpuCount": 1,
"diskPercent": 36.1,
"diskTotalBytes": 47321268224,
"diskUsedBytes": 17070649344,
"loadAverage": [
1.25,
0.75,
0.52
],
"memoryPercent": 25.8,
"memoryTotalBytes": 6187405312,
"memoryUsedBytes": 1598783488,
"name": "archview",
"networkRxBytes": 15796878,
"networkTxBytes": 3334375,
"os": "Ubuntu 26.04.1 LTS",
"processes": 251,
"swapFreeBytes": 0,
"swapTotalBytes": 0
}
],
"metrics": {
"cpuAvg": 125,
"diskPercent": 36.1,
"diskTotalBytes": 47321268224,
"diskUsedBytes": 17070649344,
"hostCount": 1,
"loadAvg": 1.25,
"memoryPercent": 25.8,
"memoryTotalBytes": 6187405312,
"memoryUsedBytes": 1598783488,
"networkRxMB": 15.06507682800293,
"networkTxMB": 3.17990779876709,
"processCount": 251,
"swapFreeBytes": 0,
"swapTotalBytes": 0,
"topOS": "Ubuntu 26.04.1 LTS"
}
},
"title": "Docker + Linux host overview",
"updatedAt": "2026-11-02T19:15:37Z"
}Recent commits
Last few GitHub commits from my portfolio repo.
git log
tekkifox / rossmoney_me
$ git log --oneline -n 5 23185d1 feat(payload-cms): report archview source failures instead of falling back (#307) 59c69ed fix(payload-cms): seed Map link in header nav (#305) c61967e feat(cms): let pages choose their own template (#301) 3c88442 fix(map): tighten vertical rhythm and drop address-free copy (#303) 490e500 fix(payload-cms): allow the map diagram through the image optimiser (#299)
Contact
Open to platform, DevOps, and development work.
I am available for contract and full-time work, and I enjoy collaborating with teams to improve delivery and reliability.