Ian Russel Adem
Welcome to the early 90s!
I build production systems that ship and stay running: end-to-end LLM fine-tuning pipelines, browser-automation tooling that powers AI-driven testing, and multi-service ERP, payroll, and logistics integrations on Azure and GCP. I work mostly in Python, across backend automation and hands-on model fine-tuning and training. Recent work includes LoRA/QLoRA supervised fine-tuning, dataset creation and synthetic data generation, embedding and vision-language fine-tuning, and managed tuning on Google Cloud Vertex AI, plus containerized FastAPI services that drive headless Playwright/Chromium to map web apps for automated test generation. On the backend I design multi-service Python systems and Azure Functions that tie together ERP, logistics, e-commerce, reporting, and BI, working with Flask, FastAPI, Django, SQLAlchemy, Celery, and Redis, and building frontends in Vue.js and React. I'm self-taught, and right now I'm focused on Generative AI: model fine-tuning, retrieval, and AI integration in modern web platforms. Always interested in solid backend and automation work in this space.
Selected Work
A few representative projects. Client names are under NDA, so these focus on the problem, the approach, and the result.
AI-driven web test automation
Problem. Generating reliable end-to-end Playwright tests by hand was slow, and the team often had no backend access to the apps under test.
Approach. Built a containerized FastAPI service that drives headless Playwright/Chromium to crawl any running web app and emit a structured JSON map of every reachable page: DOM skeletons, ranked locator strategies, forms, modal and sub-form state variants, observed transitions, and verification screenshots. Packaged with Docker Compose, a React UI, Swagger docs, and pluggable job stores (filesystem, PostgreSQL, MongoDB).
Outcome. The map feeds automated Playwright test generation with no backend access required. Reliability and design quality led to a renewed engagement.
End-to-end LLM fine-tuning pipeline
Problem. Needed task-specific small language models that run on modest, low-cost hardware instead of large hosted models.
Approach. Built a LoRA/QLoRA supervised fine-tuning pipeline for small instruction-tuned models (Qwen2.5) with Hugging Face Transformers, PEFT, and TRL, running on a 4 GB consumer GPU and a Kaggle T4. Hand-built JSONL instruction datasets and generated synthetic data with a locally hosted LLM (Ollama), with automated quality filtering and de-duplication to prevent eval leakage. Fine-tuned an embedding model with hard-negative mining, merged models with MergeKit, tuned a vision-language model (SmolVLM), and ran a managed Gemini job on Vertex AI for comparison.
Outcome. Measured retrieval gains with Recall@k and MRR before and after tuning, and mapped the task-versus-generality trade-off across local and managed training workflows.
Enterprise ERP integration platform
Problem. An enterprise ran business-critical operations across a legacy Microsoft NAV system and modern services that did not talk to each other.
Approach. Designed and own a suite of Python microservices and Azure Functions spanning logistics, reporting, e-commerce, document management, and BI. Built a Flask API layer wrapping Microsoft Dynamics 365 Business Central, integrated a third-party logistics carrier API, and synchronized legacy NAV tables with modern data models via Azure Functions. Built BI exporters and pipelines (Pandas, SQL, scheduled Functions), a Vue.js shopping cart and CMS, and reusable internal packages. Deployed to Azure with GitHub Actions CI/CD; tuned MSSQL and applied caching.
Outcome. A multi-service platform that supports day-to-day operations end to end, from architecture through deployment and maintenance.
Payroll integration middleware
Problem. A time-tracking system and a payroll system needed to stay in sync without manual re-entry.
Approach. Built middleware to synchronize data between the two platforms, architected with role-based access control and Celery task queues backed by Redis for background processing, with a clean separation between integrations and business logic.
Outcome. Reliable automated sync with a modular, maintainable design.
Chat with my AI assistant
Click ▮ CHAT.EXE in the bottom-right corner to launch the terminal and ask anything about my professional experience.
Languages
- Python
- JavaScript
- PHP
- Go
- SQL
AI / ML
- PyTorch
- Hugging Face (Transformers, PEFT, TRL)
- LoRA / QLoRA (fine-tuning)
- Transformers / PEFT / TRL
- LangChain
- Ollama
- Vertex AI / Gemini
Frameworks
- FastAPI
- Flask
- Django
- Celery (job queues)
- Playwright (crawl + test gen)
- Vue.js
- React
Databases
- PostgreSQL
- MySQL
- MSSQL
- MongoDB
- Redis
- Pinecone (RAG vectors)
DevOps & Cloud
- Docker
- GitHub Actions CI/CD
- Azure (App Service, Functions)
- AWS
- Google Cloud