[ Ihar Petushkou ]
Ihar Petushkou · freelance

Linux engineer.
Python & AI automation.

I set up, secure, fix and automate Linux servers, and write the Python that keeps them, and the business around them, running without manual work. Around that: infrastructure as code with Ansible and Terraform, AWS, and AI agents built on Claude Code that take routine engineering work off a team. 15+ years in software engineering, the last years mostly Linux, backend and automation.

linux · python · ai agents · ansible · terraform · aws · claude code · mcp · ollama

ihar@work: ~
Ihar Petushkou, Linux engineer

$ whoami

Ihar Petushkou, Linux engineer

$ systemctl is-active freelance

active

$ cat focus.txt

servers that stay up · work that runs itself

15+years in software engineering and Linux infrastructure
4,000+total hours on Upwork
40+hands-on Linux labs built in Norboten
10lab tracks, from RHCSA to MCP
Expertise

What I do, in order of weight

Linux first: it is under everything else. Then the Python and AI that take manual work away, the infrastructure code that makes it repeatable, and the Claude tooling that lets an AI agent help without getting open access.

01 Core

Linux engineering

  • Server setup, hardening and migration: Ubuntu, Debian, Fedora, Rocky Linux, RHEL, Alpine
  • Administration: users, patching, logs, cron, capacity
  • systemd services, timers and drop-ins, boot problems and emergency mode recovery
  • Storage: LVM, filesystems, swap, fstab, disks that fill up for no visible reason
  • SELinux, AppArmor, firewalld, ufw, fail2ban, SSH hardening, TLS, automatic security updates
  • Nginx and Caddy reverse proxies with certificates that renew themselves
  • KVM/QEMU virtualization, VPS, dedicated and on-prem servers
  • Monitoring with Prometheus, Grafana, Loki and Alertmanager; backups that are restore-tested
02 Python

Python & AI automation

  • Python automation: scripts, CLI tools and terminal apps (Typer, Textual) that teams actually use
  • FastAPI backends: REST APIs, WebSockets and live streams, auth, rate limits, background jobs
  • Python on AWS: boto3, Lambda, S3, SQS, DynamoDB, EventBridge jobs
  • AI agents on Claude, OpenAI or Gemini that act through tools, with human approval for anything risky
  • Private AI on Ollama: local models on your own servers, secured and measured for the task
  • Email, ticket and document processing: classify, extract, summarize, draft the reply
  • Bots on Telegram, Slack, Discord and WhatsApp; workflow tools like n8n, Make or Zapier when a team already uses them
03 Infrastructure

Ansible, Terraform, AWS

  • Ansible: roles and playbooks that re-run cleanly, secrets in Vault, no one-off SSH sessions
  • Terraform: AWS environments as code with modules and remote state
  • AWS: EC2, VPC, IAM, S3, RDS, Lambda, ECS, EKS, CloudWatch, Route 53, SQS, Secrets Manager
  • Docker, Compose and Kubernetes (EKS, Helm, ArgoCD): multi-service stacks, deploys with rollback
  • CI/CD with GitHub Actions, GitLab CI and Jenkins: test, build and deploy on every push
04 AI engineering

Claude Code, MCP, AI Agents

  • Claude Code set up for a team: CLAUDE.md, permission rules, hooks, subagents, skills and plugins, kept in git
  • Headless Claude Code in CI: jobs that triage issues, review pull requests and draft release notes
  • MCP servers for Claude: your API and data as tools, resources and prompts, Streamable HTTP, OAuth, read-only first
  • Custom agents on the Claude Agent SDK and the Claude API
  • Costs under control: event triggers, turn caps, the cheapest model per job
The Norboten terminal app: doctor's checks of this machine, the base images and the account and sessions beside them
The Norboten terminal app, as it renders: the sections along the top, doctor's checks of the machine, and the base images the labs boot from.
Flagship project

Norboten

My open-source platform where people learn Linux by fixing real broken machines. I built all of it:

  • A Python terminal app that boots a real VM (QEMU/KVM + Lima), breaks it on purpose, then grades the fix by checking the machine, rebooting it and checking again
  • Over 40 hands-on labs: RHCSA, Linux, Bash, Python, Ansible, Docker, Terraform, AI agents, Ollama, Claude Code and MCP. CI proves every lab solvable on a clean machine before it can merge
  • An MCP server that gives Claude the platform itself: labs, journals and your progress as tools, resources and prompts, with OAuth sign-in
  • The whole server as code: Ansible, Docker Compose, a one-command Python installer for a fresh VPS, and GitHub Actions with deploy and rollback
  • FastAPI on PostgreSQL and Redis, live terminal streaming, Prometheus and Grafana
  • Claude Code agents run the chores in GitHub Actions, each with a turn cap, a tool allowlist and a measured cost. A Claude Code plugin turns an idea into a new lab, questions or a journal
  • An AI tutor that runs on the learner's own Claude Code or local model and never sees the solution
  • 1,000+ automated tests
Services

What you can hire me for

Each of these is a fixed-price project on my Upwork profile, with clear tiers and delivery days. Anything close to them works too: send me the details.

Linux servers that boot, stay up and survive a reboot
Linux & Systems

Linux server setup, hardening, troubleshooting: Ubuntu, Debian, RHEL

You get a Linux server that is set up properly, secured, and easy to maintain. Or, if something is already broken, you get it found and fixed with a clear explanation of the cause.

I work with Ubuntu, Debian, Fedora, Rocky Linux, RHEL and Alpine. Typical work: services that will not start or keep crashing, disks that fill up, servers stuck in emergency mode after a reboot, SELinux or AppArmor denials, broken networking, slow machines.

For new servers I do the full setup: users and sudo, SSH keys only, firewall, fail2ban, automatic security updates, Nginx or Caddy with TLS, systemd services, backups that are actually tested by restoring them.

Every fix is checked after a reboot, because a fix that disappears on the next boot is not a fix. I built my own platform, Norboten, around exactly this idea: it breaks real Linux VMs on purpose and grades the fix before and after a reboot.

On the Advanced tier the whole setup is an Ansible playbook in git, so the server can be rebuilt from zero in minutes.

linux serverserver hardeninglinux administrationubuntu servertroubleshooting

See the packages on Upwork →
Python tools that run on schedule and tell you when they fail
Python Engineering

Python automation scripts, integrations and AWS tools, with tests

You get Python code that does a real job and keeps doing it: a script, a CLI tool, an integration between two systems, a scraper, a data pipeline, or an automation on AWS.

Not a quick hack that works once on my laptop. The code has clear config, logging, timeouts and retries, exits with a proper status when something is wrong, and comes with tests and a README.

What I often build:

  • scripts that pull data from APIs, clean it and push it to a database, Google Sheets or S3
  • AWS automation with boto3: EC2 and S3 housekeeping, cost reports, Lambda functions on a schedule
  • web scraping with Playwright or httpx
  • CLI tools and terminal apps (Typer, Textual) for internal teams
  • jobs that run under cron, systemd timers or EventBridge

My own project, Norboten, is a Python terminal app that boots, breaks and grades real Linux VMs over SSH, with 1,000+ tests. One of its labs is about the bugs that usually hide in Python jobs: errors swallowed silently, no timeouts, and files half-written on a crash.

Python 3.12, uv, ruff, pytest, Pydantic, asyncio.

python developerpython automationpython scriptboto3data pipeline

See the packages on Upwork →
AI that does the work, with a human approving what matters
AI Automation (AI agents, Python)

AI agents and AI automation with Python, Claude, OpenAI or local LLMs

You get AI automation that takes real work off your team, not a chatbot demo. Emails sorted and answered in draft, support tickets routed, leads qualified, invoices and PDFs turned into clean data, weekly reports written from your numbers.

I build it in Python, on Anthropic Claude, OpenAI, Google Gemini, or local models on Ollama when your data must not leave your server. It runs as a small service or scheduled job on your server or AWS, next to the tools you already have.

How I keep it reliable:

  • the AI returns structured data that is validated, not free text that breaks the next step
  • agents act only through tools I define, never with open access to your systems
  • anything risky (sending, deleting, paying) waits for a human to approve it in Slack or Telegram
  • I test models on your real examples and pick the cheapest one that is accurate enough

In my project Norboten, an AI tutor helps people fix broken Linux servers, on their own Claude Code. It never receives the answer, and every reply is checked before it is shown, so it cannot leak it. Issue labels come from a small Claude model held to a fixed list: it ignored a prompt injection hidden in an issue, for under a cent.

ai agentai automationpython automationopenaillm automation

See the packages on Upwork →
Scripts that fail loudly, never silently
Bash tooling + Python

Bash and Python scripts for Linux: backups, deploys, cleanup, cron

You get Bash or Python scripts that automate the boring Linux work and do not break in surprising ways: backups, deploys, log and release cleanup, health checks, user management, report generation.

Most scripts I get asked to fix have the same problems: no error handling, so they report success after failing, unquoted paths that break on a file name with a space, a cron job that works by hand but not at 3am, a cleanup that deletes the wrong files. I write scripts so these cannot happen:

  • set -euo pipefail, checked exit codes, a clear message when something fails
  • safe quoting, safe temp files, atomic moves
  • a --dry-run mode for anything that deletes
  • ShellCheck clean, with --help
  • scheduled by systemd timers or cron with the right environment

When Bash starts to get long, I switch to Python for proper data handling, retries and tests.

In my project Norboten I wrote hands-on labs about exactly these bugs: a deploy script that took a site down, a cleanup that kept the wrong releases, a backup script that lied. They are graded by actually running the scripts, not by reading them.

bash scriptshell scriptlinux automationpython scriptcron job

See the packages on Upwork →
terraform apply, ansible-playbook, docker compose up. Done.
Ansible + Terraform + Docker

Infrastructure as code with Terraform, Ansible and Docker Compose

You get infrastructure you can rebuild from zero with three commands, instead of a server someone set up by hand two years ago.

Terraform creates the cloud side: servers, network, firewall, DNS, storage, IAM. Ansible configures the machines: users, SSH, packages, hardening, services. Docker Compose runs your app and its dependencies the same way on a laptop and in production. Everything lives in git.

What I pay attention to:

  • Terraform state stored safely, with no secrets in plain text
  • playbooks that run twice without changing anything the second time
  • secrets in Ansible Vault or AWS SSM, never in the repo
  • a real test: I destroy and rebuild the environment before handing it over

Works with AWS, Hetzner, netcup, DigitalOcean, GCP or bare metal.

My own project, Norboten, runs this way: Ansible bootstraps and hardens the server and also builds the VM images, one Docker Compose project runs the backend (API, PostgreSQL, Redis, Ollama, Prometheus, Grafana), and a Python installer sets up a fresh VPS in one command. The playbook is rehearsed on a local VM first. I also wrote hands-on labs about Terraform and Ansible mistakes, so I know where they usually go wrong.

terraformansibledocker composeinfrastructure as codedevops

See the packages on Upwork →
AWS set up right the first time, in Terraform
AWS core services

AWS infrastructure setup with Terraform: VPC, EC2, RDS, S3, IAM, ECS

You get your application running on AWS the right way: secure by default, reproducible, and without a surprise bill at the end of the month.

Everything is built with Terraform, so the whole environment is code in your git repository, not clicks in the console that nobody can repeat.

What I set up:

  • VPC with public and private subnets, security groups, NAT only where needed
  • compute on EC2, ECS Fargate, EKS or Lambda, depending on the app
  • RDS PostgreSQL or MySQL with automated backups, S3 with lifecycle rules
  • IAM roles with least privilege, no access keys on servers, secrets in Secrets Manager or SSM
  • Route 53, ACM certificates, CloudFront or a load balancer
  • CloudWatch logs and alarms, budget alerts

Already on AWS? The Starter tier is a review of your account: open security groups, unused resources, missing backups, IAM users with too much power. You get a report and the most important fixes.

I have also built mobile and web products with their backends on AWS for years, so I understand the app side, not only the cloud side.

awsamazon web servicesaws terraformaws ec2cloud infrastructure

See the packages on Upwork →
Claude Code agents with a turn cap, a tool allowlist and a bill you can predict
Claude Code & AI agents

Claude Code setup and AI agents for your team: CI, hooks, plugins

You get Claude Code working for your whole team, not only on one laptop: shared rules in git, safe permissions, and agents that take routine engineering work off people.

More

What I set up:

  • CLAUDE.md, settings and permission rules, so Claude knows the project and cannot touch what it should not
  • hooks that format, lint and block risky commands on their own
  • subagents and skills for the tasks your team repeats: reviews, migrations, new endpoints, docs
  • headless Claude Code jobs in CI: issue triage, pull request review, release notes, fixes drafted as pull requests a human merges
  • plugins that share those skills, agents and hooks across all your repositories

The cost stays predictable. Agents run on events, not on a timer. Every job has a turn cap, a tool allowlist and the cheapest model that does it well. Tests run against a fake API, so they cost nothing.

In my project Norboten, headless Claude Code runs in GitHub Actions: issue triage, release notes, and new labs drafted as draft pull requests. I measured every job on real runs: labelling an issue costs under a cent. Its Claude Code plugin turns an idea into a new lab.

claude codeclaude aiai agentsclaude code pluginsai devops automation

See the packages on Upwork →
Claude reads your systems through an MCP server with sign-in, scopes and an audit log
MCP servers for Claude

MCP server for Claude: connect your API, database and tools safely

You get an MCP server that lets Claude work with your own systems: your API, database, internal tools or product data, with the access you decide.

More

What I build:

  • MCP tools for the actions Claude may take, resources for the data it may read, prompts for the tasks your team repeats
  • a local server for Claude Code and Claude Desktop, or a remote one over Streamable HTTP for your whole team or your customers
  • OAuth sign-in and per-user scopes, so Claude only sees what that person may see
  • read-only first; anything that changes data asks for confirmation and lands in an audit log
  • tests with MCP Inspector and in CI, and a Docker deploy

Safety is part of the build, not an extra: tool results are treated as untrusted text, secrets never reach the model, and every tool has limits.

In my project Norboten, an MCP server gives Claude the platform itself: labs, journals and a learner's progress, with sign-in. I also wrote a track of six hands-on labs about MCP going wrong: a file server that shows everything, a fetched page that gives the agent orders, a token accepted for the wrong audience, a server that breaks its own stdout, a stream a proxy cuts off.

mcp servermodel context protocolclaude mcpai integrationclaude code

See the packages on Upwork →
Your own AI server: the data never leaves, the model is measured, not guessed
Ollama & private AI (self-hosted LLMs)

Self-hosted LLMs with Ollama: private AI server, RAG and team chat

You get AI that runs on your own servers: your documents, customer data and code never go to OpenAI, Google or anyone else, and there is no bill per token.

More

I set up Ollama on your Linux server, a GPU box or a VPS, and make it production-ready:

  • models picked for your hardware and your task, by measuring speed, memory and answer quality on your own examples
  • TLS, authentication and rate limits, because an open Ollama port is a real security hole
  • a chat for your team (Open WebUI) that answers from your documents
  • an OpenAI-compatible API, so your apps and scripts can switch to the local model with a config change
  • structured JSON output, streaming, monitoring and backups

In my project Norboten, Ollama runs in the same Docker Compose stack as the API and answers the site's chat assistant. I measured instead of guessing: the 0.5B model answered 8 of 10 test questions and the 1.5B model 9, so the small one stays and the server needs far less memory. Four hands-on labs are about Ollama going wrong: behind Nginx, open to the network, a context too short for its rules, a model too big for its memory.

Plus 15+ years of engineering and Linux administration underneath.

ollamalocal llmself-hosted aiprivate llmrag

See the packages on Upwork →
Your own hardware, set up like a cloud
KVM/QEMU + Lima, on-prem, VPS and dedicated servers

KVM/QEMU virtualization on VPS, dedicated or on-prem Linux servers

You get your own servers working like a small private cloud: a VPS, a dedicated machine or an on-prem box running your services in VMs or containers, secured, backed up and monitored.

More

For steady workloads, a dedicated server often costs a fraction of the same capacity on AWS or GCP. The trade-off is that someone has to set it up properly. That is what I do.

What I set up:

  • KVM with libvirt, or Proxmox if you want a web UI
  • VM templates from official cloud images with cloud-init, so a new VM takes a minute
  • bridged or private networking, WireGuard between sites
  • storage with LVM or ZFS, snapshots, and backups that are restore-tested
  • Docker Compose for services, Caddy or Nginx with TLS in front
  • Prometheus and Grafana to see what the host is doing

I built my own platform, Norboten, on QEMU/KVM and Lima: it starts a real Linux VM from a prepared image, snapshots its disk and resets it in about 10 seconds. I tuned the images so Alpine boots in 7 seconds instead of 22, and built serial console access for VMs that are stuck at boot. Its server side is designed for one VPS or bare-metal machine.

kvmqemuvirtualizationdedicated serverself hosting

See the packages on Upwork →
Push, test, build, deploy. No one logs into the server
CI/CD with GitHub Actions, GitLab CI and Jenkins

CI/CD pipeline on GitHub Actions, GitLab CI or Jenkins, auto deploy

You get a pipeline where every push is tested and every merge is deployed, without anyone copying files to a server or running commands by hand.

More

I build pipelines on GitHub Actions, GitLab CI and Jenkins for web backends, Python and Node.js services, Docker apps and mobile apps.

A typical pipeline:

  • lint and tests on every pull request, with caching so it stays fast
  • Docker images built for amd64 and arm64 and pushed to GHCR, ECR or Docker Hub
  • deploy to a VPS over SSH, to AWS (ECS, EC2, Lambda) or to Kubernetes
  • the deploy waits for a health check, and rolls back on its own if the new version is not healthy
  • secrets in the CI secret store, a manual approval before production, a message in Slack when it is done

In my own project, Norboten, GitHub Actions runs 1,000+ tests, builds multi-arch images and deploys with automatic rollback. Another pipeline boots a clean Linux VM or container for every lab and proves it can be solved before the change can merge.

I also have 7+ years of mobile development, so App Store and Google Play release pipelines are familiar ground.

ci/cdgithub actionsgitlab cijenkinsdeployment pipeline

See the packages on Upwork →
Know about the problem before your users do
Monitoring and dashboards with Prometheus and Grafana

Prometheus and Grafana monitoring, dashboards and alerts

You get dashboards that show what your servers and apps are doing right now, and alerts that wake the right person only when something really needs attention.

More

I set up Prometheus, Grafana, Alertmanager and Loki on your servers or in Kubernetes, and connect everything you run:

  • Linux hosts: CPU, memory, disk, network, systemd services
  • Docker containers, Nginx, PostgreSQL, MySQL, Redis
  • your own application: request rates, errors, latency, queue sizes
  • business numbers straight from your database: signups, orders, revenue per day

Alerts go to Telegram, Slack or email, with rules tuned so you do not start ignoring them: disk filling up in the next 24 hours, error rate above normal, a backup that did not run.

Dashboards and alert rules are files in git, provisioned automatically, so a rebuilt server gets the exact same monitoring back.

My own project, Norboten, exports metrics from its FastAPI backend, PostgreSQL and the host to Prometheus, with Grafana and its data sources provisioned from the repository. It also has an analytics section built with pandas and scikit-learn from the database.

grafanaprometheusmonitoringgrafana dashboardalerting

See the packages on Upwork →
One AI layer, any model, measured on your data
OpenAI / Anthropic / Gemini API integration

OpenAI, Claude or Gemini API integration into your app or backend

You get AI features built into your product properly: fast, reliable, with a predictable cost, and safe to put in front of real users.

More

I integrate the OpenAI, Anthropic Claude and Google Gemini APIs, or open models on Ollama, into Python and Node.js backends, web apps and Flutter mobile apps.

What production-ready means here:

  • responses stream to the user, so nothing hangs for 20 seconds
  • structured outputs checked against a schema, so your code never parses broken JSON
  • function calling so the model can use your data and actions, but only the ones you allow
  • retries, timeouts, rate and cost limits per user
  • fallback to another model or provider when one is down
  • a test set of real examples, so a prompt change or model switch is measured, not guessed

In my platform Norboten, one provider layer picks Claude (Claude Code or the API), OpenAI, Gemini or local Ollama by model name. The AI tutor never receives the lab's solution, and every answer is checked before it is shown. New quiz questions are answered blind by two other models, checked by a critic and a sandbox, then read by a person.

Plus 10+ years of mobile, frontend and backend work, so the AI fits into your app.

openai apichatgpt integrationclaude apigemini apillm integration

See the packages on Upwork →
Bots that do real work inside your chats
Telegram, Discord, WhatsApp, Slack bots and integrations

Telegram, WhatsApp, Discord or Slack bot with AI and integrations

You get a bot that does useful work where your customers and team already are: Telegram, WhatsApp, Discord, Slack or Viber.

More

Common bots I build:

  • customer support bots that answer from your own FAQ and documents, and hand off to a person when they are unsure
  • order, booking and lead bots connected to your CRM, Google Sheets or database
  • internal bots: alerts from servers and apps, daily reports, approvals ("approve this refund?" with two buttons)
  • community bots for Discord: roles, moderation, announcements
  • bots with payments through Stripe or Telegram Payments

Built in Python (aiogram, discord.py, Slack Bolt, WhatsApp Cloud API), with FastAPI webhooks and a database behind them. AI answers use OpenAI, Anthropic Claude or Gemini, with limits so a busy day does not become a big bill.

The bot runs on your server or a cheap VPS in Docker, restarts on its own, and logs every error. You own the code and the bot account.

In my project Norboten, a chat assistant on every page answers from the project's docs, streams its replies, and checks each answer before it goes out.

Plus: 10+ years of mobile and backend development, so a bot can grow into a full app if you need it.

telegram botwhatsapp botdiscord botslack botchatbot

See the packages on Upwork →
A backend your frontend and mobile team will enjoy using
Backend on FastAPI

FastAPI backend with PostgreSQL, Redis, auth, Docker and API docs

You get a Python backend built on FastAPI that is fast, documented and ready for real users: the API for your web app, mobile app, SaaS or internal tool.

More

What is included:

  • REST API with automatic OpenAPI docs your frontend and mobile developers can use from day one
  • PostgreSQL with SQLAlchemy and Alembic migrations, Redis for caching, sessions and rate limits
  • authentication: email and password with argon2, JWT or sessions, OAuth login, roles
  • background jobs with Celery or arq, scheduled tasks, file uploads to S3
  • real-time updates with WebSockets or server-sent events
  • tests with pytest, Docker Compose for local dev, CI/CD deploy to a VPS or AWS

My own platform, Norboten, runs on this stack: FastAPI, PostgreSQL and Redis, with accounts, a device-code login for its terminal app, Glicko-2 skill ratings, live terminal sessions streamed to the browser through Redis pub/sub, rate limits, Prometheus metrics, a chat assistant on a local Ollama model and an MCP server for Claude. 1,000+ tests across the project.

I also have 7+ years of Flutter apps for iOS and Android, and React frontends before that, so the API is designed around what the client apps actually need.

fastapipython backendrest apipostgresqlapi development

See the packages on Upwork →

Have a similar task?

Invite me to your job on Upwork, or buy one of the projects above. I reply with honest questions and a plan, not a template.

Invite me on Upwork
git log

How I got here

For years I shipped complete products on my own: mobile apps (Flutter, iOS and Android), web frontends (React, Vue), and the backends behind them (Python, Node.js, Java). The other half was the database, the cloud, the release pipeline and the Linux servers underneath, which I provisioned, hardened and kept running.

I did not learn Linux from tutorials. I learned it because I was the one on call when something broke at 2am and there was nobody to escalate to.

  1. 7e9917a (HEAD → now) Aug 2025 to Present

    Linux Engineer | Python & AI Automation | Ansible, Terraform, AWS

    Linux engineering and administration: server provisioning, hardening and troubleshooting, automated with Ansible and Python; AWS environments with Terraform; AI agents on Claude Code that run engineering chores in CI with tool allowlists, turn caps and cost limits; private AI on Ollama for data that must stay in-house; MCP servers that give Claude a product's API and data. Built Norboten, a platform that teaches Linux on real broken VMs: QEMU/KVM + Lima, FastAPI, PostgreSQL, Redis, Ollama, Prometheus, Grafana, Ansible, GitHub Actions, Claude Code, an MCP server.

    Linux (Ubuntu, Debian, Fedora, Rocky, Alpine)BashPythonFastAPIAnsibleTerraformAWSDockerKubernetesClaude CodeClaude Agent SDKMCPPostgreSQLRedisPrometheusGrafanaLokiOpenAI / Anthropic / Gemini APIsOllama

  2. ef98860 Oct 2024 to Aug 2025

    Backend & DevOps Engineer, Mobile Development

    Owned products end to end: Python and Dart backends, cloud infrastructure as code, container orchestration, automated release pipelines, and LLM features in production. Flutter was the client layer; everything behind it was mine too.

    PythonDart/FlutterAWSGoogle CloudKubernetesTerraformAnsibleDockerPostgreSQLMySQLRedisMongoDBFirebaseSupabase

  3. f233a3d Dec 2018 to Oct 2024

    Full-Stack Mobile Developer

    Six+ years shipping cross-platform apps together with the backends and infrastructure behind them: real-time and data-driven architectures, Linux servers, databases, release automation to the App Store and Google Play. Solo ownership throughout.

    Flutter/DartPythonLinuxGoogle CloudFirebaseSupabasePostgreSQLSQLite

  4. a49fe05 2015 to 2018

    Full-Stack JavaScript Developer

    Web applications and data visualization for production use, deployed and maintained on Linux.

    JavaScript (React, D3)Node.jsPython/DjangoMongoDBLinux

  5. 5cb5f91 2010 to 2013

    Java Developer

    Enterprise web applications. Oracle Certified Professional, Java Programmer.

    JavaGWTOracle DB

  6. e346873 2006 to 2008

    Web Developer

    First commercial projects. Linux as a daily driver ever since.

    PHPJavaScriptMySQLLinux

How I work

What you can expect

I automate the repetitive parts and leave you a system you can read and maintain: documented, in git, reproducible.

One rule I keep: AI in my systems never gets open access. An agent works from a list of allowed tools with a turn and cost limit, and anything destructive waits for a human to approve it. AI that can take down production is not automation, it is a liability.

If you have a Linux stack nobody wants to touch, or a process that still runs on manual steps, send me the details. I will tell you honestly what is worth automating and what is not.

Contact

Let's work together

I would be glad to hear about your project. The easiest way to start is Upwork: you get payment protection, and I get the job details in one place.

Hire me on Upwork

Invite me to your job, send me a message, or buy a fixed-price project. Your money stays in Upwork's escrow until you approve the work.

Open my Upwork profile

Found me here? Direct Contract

If you found me outside Upwork, we can still work through it with an Upwork Direct Contract. I send you the contract, you accept it with a free Upwork client account, and you keep the same escrow and payment protection. Write to me on LinkedIn to set one up.

Ask for a Direct Contract

Write to me personally

Not sure yet, or want to talk before a job exists? Message me on LinkedIn. I answer in English.

Message me on LinkedIn
CV

The one-page version

Everything above on a single page: the summary, the skills, every role with its dates, Norboten, education and languages. Plain text in one column, so it reads the same to a person and to an applicant-tracking system.

Download the CV (PDF)