Selected work/
This selected work covers tools I build for the work around a business: finding product information, preparing campaigns, managing online shops and making sense of the results. AI agents do much of the implementation. I decide what to build, set the boundaries and check the work before it goes live.
Shared agents for everyday work
A shared OpenClaw setup gives colleagues access to assistants for website work, imagery and recurring jobs, through their own clients and team chat. I run it daily across a VPS and a local GPU workstation.
The useful part is the knowledge around the tools. A human-readable handbook records how our systems work, while agent memory holds working context and document search supplies product facts. Keeping those separate stopped the assistant treating its own conversation history as a source of product information.
Some jobs need an agent’s judgement; others are better handled by a fixed workflow. Deciding which is which, and who can approve changes, has mattered more than adding another model.
Technical details
The setup combines OpenClaw, Claude, Ollama, Outline and n8n, with private access over Tailscale. Agents have separate workspaces and memory; those organisational boundaries are not a substitute for access controls.
Operations include monitoring, offsite backups and rollback points before upgrades. Failed migrations and a corrupted session database informed the recovery runbooks.
Finding answers in 5,150 technical documents
For an industrial chemicals distributor, much of the useful product information was buried in data sheets, safety sheets and manuals. I built a search system that accepts questions in Icelandic or English and points back to the relevant document and page.
The difficult part was finding the right English source from an imperfect Icelandic query. The system searches both the original question and a translation, handles missing accents, and uses an editable glossary to correct terminology.
I chose the model that consistently supplied usable sources rather than the one that answered fastest. I also removed a ranking component when testing showed it made cross-language search worse.
The system helps people find and check a source. Retrieval tests do not establish that every generated answer is correct.
Technical details
The source collection covers roughly 58,700 pages, indexed as 118,387 chunks with OCR where needed. Search combines embeddings and BM25 using reciprocal rank fusion. Only 5 of the 18,673 product records originally linked a PDF, so search came before document generation.
On a 38-question set, the right document ranked first around 29–30 times. Eight tested typo queries found the right result first. In 24 paired answers, the selected model took about 10.6 seconds versus 3.8 seconds for the faster model, with 0 of 81 citation links broken versus 9 of 49. This was a preference comparison, not a blind trial.
One local platform for search, creative work and internal tools
I planned a local AI workstation to support document search, image and video work, internal applications and website staging in the same environment.
The main constraint was sharing 32 GB of GPU memory. Chat and document-search models stay available for routine work; larger creative jobs queue and take over the GPU when they need it. That makes the trade-off explicit rather than letting competing workloads fail unpredictably.
Document knowledge comes from retrieval, so the source collection can change without retraining a model.
Technical details
The workstation uses an RTX 5090, Ollama, Open WebUI, Qdrant and Docling alongside application services. Active data lives on NVMe, with archives on a separate disk.
Matching context settings avoided unnecessary model reloads. Cold-start checks covered Windows processes, WSL services, Docker engines and private networking, including startup sequencing and WSL persistence.
Creative freedom, without redrawing the product
A local creative studio brings image and video tools into an interface people can use without building model workflows themselves. It supports generating and editing images, restyling video and continuing a shot.
Product photography takes a different path. Existing distributor images are framed consistently, given a uniform background and upscaled only where needed. Generative models stay out of that process because they can alter packaging text or details that need to remain exact.
Rendering and source media stay local. Assistant messages use a cloud provider.
Technical details
React and FastAPI sit in front of ComfyUI. The implemented workflows use FLUX.2 Klein for images, LTX for video and Real-ESRGAN for small product-image sources. Seeds and settings can be retained for repeatable runs.
Model licensing is part of selection: one video model was archived without being used because its licence excluded our region.
Shop assistants that prepare changes for review
Assistants can work with catalogue information, page content, SEO and analytics across two online shops, without unrestricted access to either store.
Changes to published pages become linked drafts for review. Product-feed edits have their own approval step. Each shop has a separate connection, and the service that can compare data across both is read-only.
I used existing SEO tools where they already did the job. The custom work connects those tools to the stores and makes the boundary between suggesting a change and publishing it explicit.
Technical details
Typed MCP interfaces connect catalogue, taxonomy and content operations with OpenSEO, Search Console, GA4 and Bing Webmaster. Bing writes are limited to recrawl submissions. Code changes are developed on store mirrors before production approval.
From asset library to marketing workbench
A full-featured digital asset management system brings creative assets, campaign planning and advertising costs into one place. Spend is tracked over time by category and medium, with a calendar for bookings, delivery deadlines and placements.
Metrics across the ads show what peaked and when. Connected online-store data puts sales and visitor trends alongside campaign activity, so the team can review what happened before planning the next campaign.
The shared view connects the material being delivered with its schedule, cost and results. Comparing those trends supports review; it does not, by itself, prove which ad caused a sale.
Technical details
The Node and Express application handles uploads, previews, folders, ad sizes, delivery reminders and expiring partner links. Batched uploads respect server limits while showing combined progress and a separate processing state.
Measured PDF thumbnail rendering fell from 8.0 to 2.7 seconds per document. The UI-refresh regression suite recorded 228 passes and 10 skipped checks.
A catalogue people can find their way through
A B2B parts catalogue for an industrial supplier brings 3,049 products and 468 categories into a searchable WordPress site. The project is in development, with a focus on product discovery and content the business can maintain.
Site-specific search helps visitors navigate the catalogue. Custom editing blocks let the team update the front page while retaining its intended structure, rather than relying on a developer for each content change.
A separate, smaller project took a local auto-service business from a brief and logo to a live, editable website.
Technical details
The catalogue uses Meilisearch and custom server-rendered WordPress blocks. The conversion from the hand-built front page was checked against the original at seven viewport widths, with no visual differences in that comparison.
The auto-service site was handed over with an archive, repository bundle and restore notes.
A traffic spike that wasn’t growth
After a tagging and consent change, GA4 showed a sharp rise in traffic. Comparing it with Search Console and commerce data showed a change in measurement, not evidence of more visitors.
That distinction mattered before anyone treated the chart as a business result. The analysis also fed a homepage brief based on search behaviour, device use and the categories visitors were looking for.
Products I build and run myself
Poddið ↗
A place to discover Icelandic podcasts and browse their episodes. The collection includes around 47,000 episode pages, making individual episodes discoverable beyond a show’s main listing.
Voddið ↗
A TV companion for exploring shows and their information, built around programme data from TMDB.
Running my own products keeps me involved after launch, including the less visible work of maintaining the services behind them.
Technical details
Poddið uses PodcastEpisode structured data and chunked sitemaps. Voddið is built with Next.js and Prisma, with TMDB programme data and Amazon SES for transactional email.
Self-hosted operations include runtime upgrades, monitoring and offsite backups. In one agent-platform cleanup, the installation shrank from 1.8 GB to 456 MB and restart time fell from about 5.5 minutes to about 30 seconds.
Need something like this/
For the software behind this selected work, see the tools I use. To build your own agent, explore my OpenClaw workshop.
If your team is spending too much time finding information, moving content between systems or piecing together reports, I can help scope a tool around that work.
Start a conversation