Client work first, then the products I build myself, then the rest of 15+ years: earlier
client projects, agency builds and personal experiments.
Client work
The long engagements, where I owned the system as well as the code.
ClassCharts
School Seating and Behaviour Management Software
Helped grow the platform from hundreds of thousands to more than ten million users, modernised the stack in place, and led the infrastructure migrations.
requests a second by the end
~1,000
instances, Rackspace to AWS
3 → ~100
migrated between clouds, platform up
40+ TB
app downloads
~2M
I joined as the first developer alongside the CTO and stayed while ClassCharts grew to more than ten million pupils, parents and teachers and was acquired by TES Global. Along the way I rebuilt the jQuery front end in React in place, replaced the Android-only native app with React Native, and took the platform from Rackspace to GCP to AWS.
Rebuilt the jQuery front end in React and Redux in place, one feature at a time as separate micro apps, with both stacks running side by side on a webpack build I owned
Replaced the Android-only native app with three React Native apps for teachers, pupils and parents: six store listings across iOS and Android from one codebase, and later a from-scratch rebuild of the parent and pupil apps
Push notifications, offline handling and the mobile release and signing pipeline
Containerised development and production with Docker, then moved the platform onto Kubernetes
Took the infrastructure from Rackspace to GCP to AWS, from three servers to roughly 100 instances, and wrote the tooling that migrated 40+ TB of images and assets with the platform up
Introduced Cypress end-to-end tests on every pull request through GitHub Actions, alongside unit and integration coverage and the CI deployment pipelines
Shipped homework file submission with virus scanning in under two weeks when schools closed for the pandemic
One of four code owners on the main repository as the team grew from two engineers to more than a dozen
Built the investment platform end to end, from AI signal pipelines and broker syncing to web, mobile, chat, alerts, and the AWS-to-GCP migration.
As founding engineer I took over an agency-built investment-intelligence platform covering 20+ global markets and owned the product end to end: the Next.js web app, both mobile apps, the Express API and the alerting engine, plus the AI layer that classified financial signals with hierarchical GPT models. I also led the move from AWS to GCP. The company wound down in March 2026.
A Next.js web app replacing the legacy React one, plus Expo and React Native apps for iOS and Android, all on one Express API with authentication, subscriptions, permissions and admin tools
The alert engine: ticker, watchlist, screener and research alerts with chosen triggers and frequency, delivered by email, Telegram and iOS and Android push through Firebase Cloud Messaging, on Redis-backed queues
Broker portfolio import and resync through SnapTrade, with connection flows for Interactive Brokers, Robinhood, E*TRADE and Webull
The AI classification layer on the data platform the data team ran: Python classifiers using hierarchical GPT models for financial events, fed by Airflow pipelines over SEC filings, earnings transcripts, research and news
An AI stock analyst chat with streaming answers backed by live web search (OpenAI and Perplexity), history shared across devices and voice questions with server-side transcription
Configurable dashboards, company analysis pages, trade-idea search and screeners that stay active and pick up new matches
Stripe billing with plan-based feature access, and Payload CMS behind the public website
Docker Swarm for the application and worker services, admin views for users, alerts, queues and broker connections, and the move from AWS to GCP across product and data workloads
An IoT Platform for smart city infrastructure management
Designed and delivered a 20+ microservice smart-city backend with real-time data processing on Kubernetes.
microservices, each with its own database
20+
city domains built in parallel
5
Designed and built the backend for a smart-city programme, split so several vendor teams could build their city domains in parallel. APISIX at the edge, Keycloak for identity, and device telemetry streaming through Kafka into Cassandra.
Designed the backend as 20+ microservices on Kubernetes, each with its own database and API, split into bounded contexts so several vendor teams could build five city domains in parallel
Turned an external consultancy's specifications into C4 architecture models, which became the reference the vendor teams built against
Built the platform services every domain ran on, in NestJS and TypeScript: users, onboarding, notifications, certification and mail
Built domain services including smart parking, smart lighting, a dashboard, a marketplace and support
Device telemetry from the IoT gateways streaming through Kafka into Cassandra for time-series data, with PostgreSQL for everything else
Grafana and Prometheus for monitoring, GitLab CI and Terraform for delivery
Billing and usage for an EdTech platform: subscriptions plus top-ups, the admin side, and a memory pipeline
Refactored usage onto one metered path across all subscription tiers, added top-up billing on top of it and built the admin panel behind it, on a platform serving 13M+ students, plus the memory extraction and reconciliation pipeline.
Backend work on an AI tutoring platform for secondary-school exam preparation, used by 13M+ students. I replaced message-count limits with cost-based usage metering across every plan tier, added credit top-ups with the admin side, and built the tutor's memory pipeline on Inngest.
Replaced message-count limits with cost-based usage metering, applied the same way on every plan tier, so the limit the product enforces matches what each request costs in tokens
An affordability check before the model call and the charge once it succeeds, so a failed request costs the student nothing
Credit top-ups alongside subscriptions through Stripe, including bank-transfer payments that settle days after checkout
The admin area for usage, with consumption broken down by user type so the cost of serving each tier is visible
The tutor's memory pipeline on Inngest: lasting facts extracted from conversations in the background, then merged and cleaned up nightly
Client
AI tutoring startup
Sector
Education
Role
Senior Software Engineer
Date
April 2026 - June 2026
Services
Development Architecture
Skills
Typescript Next.js tRPC PostgreSQL Drizzle ORM Inngest Stripe Bun AI/ML
Own products
Built and run end to end on my own time: product, architecture, code and operations.
Guestavo
Hospitality guest-engagement platform: reservations, menus, events, campaigns, loyalty, and a guest portal in one place
Guestavo is the software an independent restaurant, bar, cafe or event-led venue runs its guests on. A typical venue juggles a reservation widget, a menu PDF, a mailing tool and a paper loyalty card, and none of them know that the guest who booked, the guest who ate and the guest on the newsletter are the same person. Guestavo ties that guest's bookings, visits, campaigns and portal activity together, and covers the staff side of running the venue too. Designed and built by me, end to end: product, architecture, backend, frontend, design, infrastructure and deployment. Live in beta behind a waitlist, in English, German and Slovenian, aimed first at venues in Slovenia and the wider DACH region.
A TypeScript pnpm monorepo: a Next.js operator app and public venue pages, a Fastify API with an OpenAPI spec, a BullMQ worker, PostgreSQL via Drizzle, Redis, an MCP server and a CLI
An MCP server over stdio and streamable HTTP, so an operator can run menus, availability, bookings, events, contacts, shifts and reports from an AI client. Every change an agent makes is logged with its before and after state and can be undone, and API keys are scoped per organisation, property and action, rate-limited and behind a kill switch
Menu scan: up to ten photos of a paper menu go through OCR and an LLM (OpenAI, with Anthropic and Replicate as fallbacks) and come out as categories, items, prices, allergens and dietary tags, which the operator reviews and maps onto existing items. Typing in a menu is where restaurant onboarding stalls
Bookings on resources, service types and add-ons, with availability by party size, operating hours and blocked times, a waitlist, reminders, automatic completed and no-show settlement, and a reliability score per guest
Team scheduling: shifts, coverage, time off, timesheets with CSV export, labour cost against booked covers and an iCal feed
Loyalty with expiring points, tiers, badges, streaks, leaderboards and rewards, and a guest portal where guests see their visits, redeem rewards, RSVP to events, reschedule or cancel bookings and leave feedback
Campaigns on triggers such as a new contact, an added tag or a custom event, a two-way email inbox, and consent checked per contact before anything is sent. SMS and WhatsApp routing (Twilio, BulkGate, Meta) is built behind feature flags
Events with crew roles, song requests, guest photos, comments and reactions, an embeddable widget and Facebook event sync
Inquiries and quotes: a sales pipeline, versioned quotes, a tokenised acceptance page and conversion into a booking
Digital menus with allergens and dietary tags, printable menu PDFs and a slideshow for screens in the venue
QR touchpoints that capture guests with email verification and a consent step, plus printable QR sheets
A post-visit rating page that sends every guest on to a public review site, without filtering out the unhappy ones
Multi-property organisations with owner, admin and member roles, staff without seats, reports on covers, labour cost, bookings, loyalty and outreach, and billing behind an adapter layer (Stripe live; Paddle, PayPal, Polar and Lemon Squeezy adapters built)
GDPR data export and deletion, a Playwright end-to-end suite, and unit and integration tests in CI
Client
Personal
Sector
Consumer Discretionary
Role
Full-Stack Engineer
Date
February 2026 - present
Services
Development Architecture Planning DevOps Design AI Integration
A branded media hub for photographers: deliver private client galleries and collect guest photos from live events in one workspace
A white-label media hub for photographers and studios. It joins two jobs that usually live in separate products: delivering and proofing private client sessions, and collecting guest photos and videos at live events through QR-code uploads. Today the photographer's gallery lives in one tool while the guests' phone photos end up in a group chat; in AfterGather both land on the same event, under the photographer's brand, and the couple or host gets one place for all of it. Designed and built by me, end to end. In active development, with access through a public waitlist, in English, German, Slovenian, Spanish and Dutch.
A TypeScript pnpm monorepo: a Next.js 16 App Router web app, a Fastify 5 API with TypeBox schemas and Swagger docs, a BullMQ worker, PostgreSQL via Drizzle, Redis, Socket.IO and S3-compatible storage, plus a CLI
The API signs upload URLs and never touches the file bytes: guest uploads from a QR code go straight to object storage, with resumable multipart uploads for large files. At a wedding most of the room uploads in the same few minutes, so the upload routes are idempotent and rate-limited per guest
A worker pipeline on BullMQ: ClamAV virus scanning first, with quarantine if the scanner is down, then previews, thumbnails and optional watermarks for images, HEIC to JPEG, and ffmpeg transcodes of videos into 720p H.264 previews with poster frames
Credit billing on an append-only ledger: grants never change, balances are derived from transactions and reservation holds rather than stored, idempotency keys stop a redelivered payment webhook from adding credits twice, and payment providers sit behind an adapter layer with Stripe live
Six access modes per project, from public to invite-only, and links that can be scoped to one collection, password-protected, capped in uses, given an expiry and revoked
Moderation with approve, reject and bulk actions for uploads and comments, and an AI safety rating that keeps flagged photos off the screen at the venue
A live event slideshow over Socket.IO with a polling fallback, several rooms, and remote pause, pin and advance
Client proofing with favourites under soft or hard limits, a selects view, edit requests with voice notes, and watermarks
Custom domains verified by DNS, with on-demand TLS through Caddy and a renewal job, and branding carried into galleries and transactional email
AI image enhancement, restyling and background edits approved before publishing, photo-to-video, and recap captions and highlight ranking, across six model providers with allowlists per workspace and project and an evals harness
A workspace, project, collection and asset model with teams, roles and per-member permissions, so a studio runs its brand, its client projects and its live event hubs from one place
Guests claim their uploads later through a magic link and can withdraw usage rights; IP addresses are only stored as a salted hash
ZIP downloads with per-link rights to originals or previews, printable QR table cards, event recap pages, and reminder and digest emails
Two-factor login by email code or authenticator app, Google and GitHub sign-in, API keys, web push, GDPR export and deletion, versioned legal pages, and a Playwright suite on Chromium, WebKit and mobile
Client
Personal
Sector
Consumer Discretionary
Role
Full-Stack Engineer
Date
April 2026 - present
Services
Development Architecture Planning DevOps Design AI Integration
Large-scale financial news aggregation and AI classification system processing 100K+ articles daily
A long-running personal platform for aggregating, classifying, and indexing financial news and market data - perpetual work rather than a project with an end date, still being extended. The system processes around 100,000 articles daily using a microservices architecture with specialised data stores - Clickhouse for analytics, Meilisearch for search, Qdrant for vector search, and Redis for caching - with event-driven processing via BullMQ handling the article pipeline, and self-hosted models for embeddings, clustering, NER, sentiment and language detection.
Ingestion from 5,000+ RSS feeds, newsletters and archives around the clock, around 100,000 articles a day
An event-driven article pipeline on BullMQ and RabbitMQ
Storage split by job: PostgreSQL for relational data, ClickHouse for analytics, Meilisearch for full-text search, Qdrant for vector search and Redis for caching
Self-hosted models for embeddings, clustering, named-entity recognition, sentiment and language detection, plus LLM summaries across OpenAI, Anthropic and Ollama
Topic tagging and relations between entities, lined up against real-time market prices from Alpaca and Binance
NestJS and FastAPI services with a worker, a client API and an MCP server, in an NX monorepo on Docker Swarm and Kubernetes with Grafana
A desktop application for real-time voice transcription, built with Rust and Tauri and shipped for macOS, with code paths for Windows and Linux. Multi-provider support (Soniox, OpenAI and a local Ollama option), a floating overlay for live feedback, transcription history with saved audio, and configurable hotkeys.
A Rust core on Tauri 2 with a React and TypeScript front end, a tray menu and a separate floating overlay window
Microphone capture through cpal across sample formats, with input device selection and a live level meter
Soniox streaming over a WebSocket while you speak, keeping final and in-progress tokens apart and pushing progress to the overlay
OpenAI transcription over REST, streamed for the gpt-4o transcribe models
Every provider behind one Rust trait with a descriptor for streaming support and key requirements, so a new backend is one module
Configurable global hotkeys for toggle and for push-to-talk
History in SQLite with the audio saved as WAV and playable in the history panel, plus stats on sessions, words, duration and response time per provider
A personal dictionary applied to every transcript, and free-text instructions passed to the provider
A per-provider connection test, overlay placement across monitors, and a cleanup job that deletes cached audio past a set age
Client
Personal
Sector
Communication Services
Role
Full-Stack Engineer
Date
October 2025 - February 2026
Services
Development Architecture Desktop Apps
Skills
Rust Tauri React TypeScript SQLite WebSockets Audio Capture Vite
All-in-one productivity platform with calendar, tasks, habits, notes, and mood tracking
Towards the end of 2023, I was thinking about a new project I could work on. Being someone who is passionate about productivity and uses several different tools for all my needs, I decided to make an all-in-one tool that would cover all of them! The platform includes a calendar, tasks, habits, notes, focus sessions, mood tracking, and much more. Learn more about it on either my blog post or on GitHub.
Calendars and events, tasks and lists, habits with streaks, goals, notes, mood tracking and focus sessions, all linked to each other in one product
Teams and organisations, shared calendars, invitations and following other users
Achievements and experience points calculated by background processors, plus in-app notifications
A separate, tested recurrence package for repeating events
A NestJS API, a React web app, a Capacitor mobile app and a Commander CLI in one NX monorepo
BullMQ and RabbitMQ for jobs and global events, PostgreSQL and Redis, with the data layer tested at two levels
Passwordless login and user data export, open source and self-hostable
Every other project I've built, for clients and for myself. Search or filter to explore.
85 projects
Other client work 15
Direct engagements with product companies and startups, and my first job.
ProvisionMap
School Provision Mapping Software, including School Robins and Safeguard my School
Led the provision and safeguarding product line and built the workflow engine Welsh schools run their Individual Development Plans through.
Lead Engineer on ProvisionMap, School Robins and Safeguard my School, the provision mapping and safeguarding products in the Edukey range, built on the architecture and permission model from ClassCharts. I built the IDP workflow engine behind Wales' statutory Additional Learning Needs process, and worked on the customisability for a separate instance run for one country, which was later merged into the main product.
Lead Engineer across ProvisionMap, School Robins and Safeguard my School, reusing the ClassCharts architecture, tenancy and permission model on a smaller codebase
Built the IDP workflow engine that carries Wales' statutory Additional Learning Needs process, from the first migration through to the template builder
A workflow template builder, so a school or local authority could change a workflow without waiting for a release
A block library for workflow forms: text, date, select, checkbox, teacher select, file upload, decision forms and plan creation
Email requests to external professionals with attachments and reminders, and local authority users who can see every pupil in their area on a workflow
An access log recording who opened a child's safeguarding record and when, and an audit log on admin permission edits
Fixed redaction of accented characters on safeguarding printouts, where byte-based string offsets shifted every selection after a multi-byte character
Worked on the country-level customisability for a separate instance run for one country, work later merged into the main product
Client
Edukey Education Ltd
Sector
Education
Role
Lead Engineer
Date
November 2015 - December 2023
Services
Development Architecture Planning DevOps
Skills
PHP CakePHP MySQL Javascript Typescript Redis React Redux jQuery Webpack PHPUnit Jest Vue Docker Kubernetes React Native Cypress
Platform for assessing and tracking student literacy skills and reading progress
Led a full rewrite from Zend Framework to CakePHP, bringing it onto the same framework as the rest of the product range.
Completed a full redesign and rewrite of the application, transitioning from Zend Framework to CakePHP.
Led a full redesign and rewrite of the application from Zend Framework to CakePHP
Moved it onto the framework the rest of the Edukey product range already ran on, so the team had one fewer framework to maintain and shared patterns with the main application
Chose a full rewrite because the product was small enough that rewriting cost less than years of two stacks side by side, the opposite call to the in-place React migration on ClassCharts
Rebuilt assessment scoring, per-pupil result history, reading-band progression, cohort and class views, progress reporting and the exports schools use for their own reporting
Client
Edukey Education Ltd
Sector
Education
Role
Senior Software Engineer
Date
November 2015 - December 2023
Services
Development Architecture Planning
Skills
PHP CakePHP MySQL Javascript Redis Zend Framework jQuery PHPUnit
Tool for building and managing student report card comment banks
A second full rewrite, onto the same framework and with the same approach as Literacy Assessment Online.
A second full rewrite, led the same way as Literacy Assessment Online, moving the product onto CakePHP alongside the rest of the Edukey range.
Led a second full rewrite onto CakePHP, rather than a modernisation pass
Consolidated it onto the framework the rest of the product range ran on, for fewer frameworks in the team's head and shared patterns with the main application
Comment banks by subject, year group and category, at teacher level and school level
Tokenised comments that fill in each pupil's name, pronouns and attainment, assembled into report text and exported into the reporting flow
Client
Edukey Education Ltd
Sector
Education
Role
Senior Software Engineer
Date
November 2015 - December 2023
Services
Development Architecture Planning
Skills
PHP CakePHP MySQL Javascript Redis Zend Framework jQuery PHPUnit
E-commerce shop for a health and wellness retailer specializing in dietary supplements, eco-friendly products, and healthy living essentials
Built and maintained an e-commerce shop for Avena, a Slovenian health and wellness retailer. The shop offers a wide range of products including dietary supplements, eco-friendly perfumes and incense, LCHF foods, gluten-free products, and vegan options. The platform was built on WordPress with WooCommerce for the e-commerce functionality, using the XStore theme.
Crowdfunding platform for investment and project financing
A crowdfunding and crowd-investing platform built for MC Capital, covering the application itself and a promotional launch video. Built on Silex and Symfony; the original site is no longer online.
Crowd-investing platform for photovoltaic projects, built directly for MC Capital GmbH in Graz
The second build for the same client, after its corporate WordPress site
Built on Silex and Symfony
Client
MC Capital GmbH
Sector
Financials
Date
April 2014 - November 2015
Services
Development Architecture Planning Design Promotional Video
Skills
PHP Silex Symfony MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Interactive Hotel & Property Guide
Role: Senior Software Engineer
Interactive digital guide system for hotels, properties, and tourism services
Developed a suite of approximately half a dozen applications serving as an interactive digital concierge for hotels, properties, and tourist services. The system included an iPad app for guests and a web-based admin panel for management. Features covered interactive floor plans with navigation panels to browse between floors, property presentations with compare modes for rooms and properties, scheduling data, interactive maps, local landmark guides, and hotel complex walkthroughs - similar to the interactive screens found in hotel lobbies, but delivered as a full mobile and web experience.
Client
MonkeySource
Sector
Consumer Discretionary
Date
July 2015 - October 2015
Services
Development Planning
Skills
Javascript Angular Ionic Bootstrap
Recess Mobile App
Role: Senior Software Engineer
Social mobile app for discovering and organising spontaneous activities during downtime
A social iOS app for discovering and organising spontaneous activities, built from the initial commit in Ionic, AngularJS and Cordova for Recess Inc. The app is no longer available; the repositories are public.
Built the app from the initial commit for a US client
Activities you can create, edit and delete, with date and time pickers
Facebook login, user profiles and settings
Image upload, and Google Maps on the activity detail view
Follow and unfollow contacts, with activity feeds limited to friends
Online appointment booking platform for hair salons and beauty professionals
A Swiss online appointment-booking and calendar platform for salons and beauty professionals, with email and SMS reminders and multi-staff scheduling. Built on Symfony for Welante.
Website for a community adult education center in Thun, Switzerland
A WordPress site for the Volkshochschule Region Thun, a Swiss adult-education centre, covering its language, creative, health, and cultural courses with online registration. Built for Welante.
Corporate website for a financial services and investment firm
A corporate WordPress site for MC Capital, a firm offering green crowd-investing in photovoltaic and solar projects across Europe, with an investor login.
Developed a mobile social networking platform tailored for banking and finance professionals. The app enabled users to connect, share industry insights, and collaborate within a secure, finance-focused community. Key features included professional profiles, a real-time news feed with curated financial content, direct messaging, and group discussions organised by financial sectors and topics.
Client
Stina
Sector
Financials
Date
September 2014 - May 2015
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
MyWorkBook App
Role: Software Engineer
Job Portal for the Energy Sector
A job portal for the German energy sector, with a job board, employer profiles, and social-login sign-up. I built and architected the platform on Symfony. The original site is no longer online.
Client
MyWorkBook GmbH
Sector
Energy
Date
October 2014 - April 2015
Services
Development Architecture Planning Design
Skills
PHP Symfony MySQL Javascript jQuery Bootstrap
Links
Website (offline)
EZ Footprints
Role: Software Engineer
Hotel booking and travel planning website
A hotel-booking and travel-planning website. I handled development and design on a WordPress base. The original site is no longer online and could not be recovered from the archive, so details are limited.
Client
EZ Footprints
Sector
Communication Services
Date
October 2013 - January 2014
Services
Development Planning Design
Skills
PHP MySQL WordPress Javascript jQuery Bootstrap
Links
Website (offline)
Alstar Website
Role: Web Developer
Corporate website for a Slovenian telecommunications provider
A corporate website for Alstar, a Slovenian unified-communications provider offering VoIP and virtual PBX telephony, web hosting, and CRM. Built on Joomla; the original site is no longer online.
Corporate Joomla site for Alstar, a Slovenian VoIP, virtual PBX, hosting and CRM provider
Worked alongside on Prestashop e-commerce builds, plus client-specific plugins and themes for Joomla and Prestashop
Worked with Alstar's clients from requirements through deployment
Client
Alstar d.o.o
Sector
Communication Services
Date
June 2011 - January 2013
Services
Development Planning
Skills
PHP MySQL Joomla! Javascript jQuery Bootstrap
Links
Website (offline)
Custom CRM Solutions for Various Clients
Role: Web Developer
Tailored CRM systems built on vTiger for managing client relationships and business processes
A series of tailored CRM systems built on vTiger for various clients during my time at Alstar, customising the platform modules and workflows to match the sales and business processes of each client.
Client
Alstar d.o.o
Sector
Information Technology
Date
June 2011 - January 2013
Services
Development Planning
Skills
PHP MySQL vTiger Javascript jQuery Bootstrap
Agency work 52
Built as the engineer for agencies that held the accounts: Cuibono Media Network in Germany and Organizem in Slovenia. Campaign apps, configurators and company websites.
Einrichtungspartnerring VME Advent Facebook Apps
Role: Web Developer
Recurring seasonal advent calendar Facebook apps for a furniture retail network
A recurring set of seasonal advent-calendar Facebook apps, returning each December for the Einrichtungspartnerring VME furniture network. Each day of Advent unlocked a new door with content or a prize draw. A white-label campaign build via Cuibono Media Network.
Client
Einrichtungspartnerring VME, via Cuibono Media Network GmbH
Recurring seasonal advent calendar Facebook apps for a German brewery
Recurring seasonal advent-calendar Facebook apps for the Brauerei Königshof brewery, returning each December with a daily-door reveal and prize mechanic. A white-label campaign build via Cuibono Media Network.
Client
Brauerei Königshof, via Cuibono Media Network GmbH
Website for a cardiac diagnostics and health technology company
A website for Cardisio, a cardiac health-tech company behind Cardisiography, an AI-supported, non-invasive heart-screening method that produces results in around ten minutes. A white-label build via Cuibono Media Network.
Recurring seasonal advent calendar Facebook apps for a municipal utility provider
Recurring seasonal advent-calendar Facebook apps for the municipal utility Stadtwerke Krefeld, with a daily-door reveal and prize draw through December. A white-label campaign build via Cuibono Media Network.
Client
Stadtwerke Krefeld, via Cuibono Media Network GmbH
Cultural events and theater listings platform for the Ruhr region
A web app for RuhrBühnen, a network of theatres and stages across the Ruhr region, presenting venues, festivals, and a shared programme schedule. A white-label build via Cuibono Media Network.
Corporate website for an interior-architecture and design firm
A corporate website for Falkenberg, an interior-architecture and architecture practice that also does furniture and product design and consulting. A white-label WordPress build via Cuibono Media Network.
Personal portfolio website for a creative professional
A personal portfolio website for the creative professional Dudija Memeti, delivered as a white-label build via Cuibono Media Network. The original site is no longer online and could not be recovered from the archive, so details are limited.
Client
Dudija Memeti, via Cuibono Media Network GmbH
Sector
Communication Services
Date
June 2017 - September 2017
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Innogy Hausmeister App
Building surveys and 2D room configuration for SmartSchool and SmartOffice
I developed the Hausmeister web application for Innogy through Cuibono Media Network. It combined project, building and room data with a 2D editor for recording doors, windows and technical equipment for SmartSchool and SmartOffice proposals. I built PDF and Excel exports, worked on offline functionality, and implemented corrections to quote layouts, pricing and room-editing interactions.
Built the Hausmeister web application for Innogy through Cuibono Media Network, used to survey buildings for SmartSchool and SmartOffice quotes
Each survey structured as projects, buildings and rooms
A 2D room editor for recording doors, windows, radiators, LAN connections and thermostats
PDF and Excel exports from the project and building evaluation screen
Worked on offline support so surveys could continue without a connection
Final corrections to quote layout, pricing and the interface, including a room card that separated opening a room from uploading its image
Client
Innogy, via Cuibono Media Network GmbH
Sector
Energy
Role
Senior Software Engineer
Date
March 2017 - June 2017
Services
Development Planning
Skills
PHP MySQL Javascript Angular Polymer jQuery Bootstrap Symfony Silex
Real-time energy monitoring and management platform for connecting and tracking multiple energy sources
I developed an energy management app for the energy sector, allowing users to connect different energy sources, manage and monitor them in real time, with alerting and notifications, reports, and virtual and physical energy meters.
Built the MyENMS energy management platform for Axxerion through Cuibono Media Network
Connected multiple energy sources and pulled in their data on a schedule
Real-time monitoring dashboards across connected sources
Physical meters plus virtual meters built as sums, differences and ratios of them, with derived values computed from their inputs
Alert rules checked against incoming readings, with a notification delivery layer
Reporting across sources and meters, on PHP and Symfony over MySQL
A configurator for Philips that allows B2B customers to design their own custom LED lighting poles.
Client
Philips, via Cuibono Media Network GmbH
Sector
Energy
Role
Software Engineer
Date
May 2013 - October 2016
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
Links
Website (offline)
RWE Mint Music Awards App
Role: Senior Software Engineer
Interactive voting and showcase web application for the RWE Mint Music Awards
An interactive voting and showcase web app for the RWE Mint Music Awards, where visitors could browse the nominees and cast their votes during the campaign. Built as a white-label engagement for RWE via Cuibono Media Network.
Client
RWE, via Cuibono Media Network GmbH
Sector
Energy
Date
September 2015 - May 2016
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
Links
Website (offline)
A+C Plastic Website
Role: Software Engineer
Corporate website for a plastics manufacturing company
A corporate website for A+C Plastic, a manufacturer of LDPE plastic films and industrial packaging such as shrink hoods, bags, tubes, and flat films for pallet and transport protection. A white-label WordPress build via Cuibono Media Network.
Client
A+C Plastic Kunststoff GmbH, via Cuibono Media Network GmbH
Website for a collaborative nursing and home care services provider
A WordPress site for Pflege Gemeinsam, a Krefeld provider of ambulatory nursing and senior care: home care, assisted living, senior shared-housing, and dementia care. A white-label build via Cuibono Media Network.
Client
Pflege Gemeinsam GmbH, via Cuibono Media Network GmbH
Corporate website for a document-archiving and business-process services company
A corporate website (project-era version recovered via the Wayback Machine) for Brasi AG, a Krefeld provider of document archiving and business-process services, including digital archiving, ScanBot scanning, and factoring to cut paperwork and bookkeeping. A white-label WordPress build via Cuibono Media Network; the company has since rebranded.
A portfolio website for the visual artist Lorenzo Pompa, presenting his sculpture and contemporary-art works, exhibitions, and writing. A white-label WordPress build via Cuibono Media Network.
Corporate website for a flexographic prepress and printing-plate specialist
A corporate website (project-era version recovered via the Wayback Machine) for Luckyflex, a flexographic prepress specialist producing print-ready flexo plates designed for better ink transfer, sharper images, and shorter setup times. A white-label WordPress build via Cuibono Media Network.
Client
Luckyflex GmbH, via Cuibono Media Network GmbH
Sector
Consumer Discretionary
Date
August 2014 - October 2014
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Mengden Architekten Website
Role: Software Engineer
Portfolio and corporate website for an architecture firm
A portfolio and corporate website for Mengden Architekten, a Krefeld architecture firm offering building design, renovation and adaptive reuse, and expert assessment. A white-label WordPress build via Cuibono Media Network.
Client
Mengden Architekten, via Cuibono Media Network GmbH
Corporate website for a packaging solutions manufacturer
A corporate website for WEK, a maker of soft and rigid plastic packaging films and moulded plastic and aluminium containers, with in-house printing. A white-label WordPress build via Cuibono Media Network.
Corporate website for a motorhome sales and service center
A corporate website for Wohnmobilcenter Am Wasserturm, a dealer that buys up used motorhomes and caravans nationwide with pickup. A white-label WordPress build via Cuibono Media Network.
Client
Wohnmobilcenter Am Wasserturm, via Cuibono Media Network GmbH
Corporate website for a professional printing services provider
A corporate website for Druckerei Paniczek, a Krefeld print shop offering offset and digital printing alongside design and consulting, for everything from business cards and labels to books and calendars. A white-label WordPress build via Cuibono Media Network.
Client
Druckerei Paniczek, via Cuibono Media Network GmbH
Corporate website for a financial services and capital management firm
A corporate website for GET Capital, an asset manager using quantitative, machine-learning-driven strategies to run portfolios for institutional investors such as pension funds, insurers, and banks. A white-label WordPress build via Cuibono Media Network.
Corporate website for a retail and commercial services company
A compact brand landing page for Kommerz, built as a white-label engagement via Cuibono Media Network. The original was a minimal, wordmark-led page.
Client
Kommerz GmbH, via Cuibono Media Network GmbH
Sector
Consumer Discretionary
Date
November 2013 - March 2014
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Links
Website (offline)
PackItPerfect
Role: Software Engineer
Web application for a B2B packaging procurement and tender platform
A B2B web application for PackItPerfect, where buyers post packaging projects and receive bids from vetted packaging suppliers, managed through a single point of contact. A white-label build via Cuibono Media Network.
A website (project-era version recovered via the Wayback Machine) for Diederich & Schmitz, a family-run independent car workshop in Krefeld offering repairs, servicing, and TÜV main inspections for cars and trucks. A white-label WordPress build via Cuibono Media Network.
Client
Diederich und Schmitz GmbH, via Cuibono Media Network GmbH
Sector
Consumer Discretionary
Date
October 2013 - January 2014
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Dereinbauschrank Website
Role: Software Engineer
Website for a custom built-in wardrobe and furniture maker
A website for a maker of custom built-in wardrobes and furniture. The original site is no longer online (the business was later folded into a joinery and shop-fitting firm), so details are limited. A white-label WordPress build via Cuibono Media Network.
Client
Dereinbauschrank, via Cuibono Media Network GmbH
Sector
Materials
Date
October 2013 - January 2014
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Ljubljana Airport Olympic Games Quiz Facebook App
Role: Software Engineer
Olympic Games-themed quiz Facebook app for Ljubljana Airport
An Olympic-Games-themed quiz Facebook app for Ljubljana Airport (Aerodrom Ljubljana), built to engage followers during the Games. A white-label build via Organizem.
A WordPress site for Trattoria Da Bruno, a Venetian restaurant in Venice, presenting its à-la-carte menu, tasting menus, catering, and reservations. A white-label build via Cuibono Media Network.
Client
Trattoria Da Bruno, via Cuibono Media Network GmbH
Facebook promotional prize game app for an energy drink brand
A Facebook prize-game app for an energy-drink brand, built with the standard entry-and-draw campaign mechanic. A white-label build via Organizem.
Client
Sexes Energy Drink, via Organizem s.p.
Sector
Consumer Discretionary
Date
July 2013 - September 2013
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
Folienzentrum Sud Website
Role: Software Engineer
Corporate website for a flexible packaging-film maker and distributor
A corporate website for Folienzentrum Süd, a maker and distributor of flexible packaging films: produce, herb, and flower bags and specialty films for the food, agriculture, and pet-food industries across Europe. A white-label WordPress build via Cuibono Media Network.
Client
Folienzentrum Süd GmbH, via Cuibono Media Network GmbH
Digital Ludo board game Facebook app for the Radenska ORA beverage brand
A digital Ludo board-game Facebook app for the ORA beverage brand by Radenska, turning the classic board game into a branded social game. A white-label build via Organizem.
Facebook promotional prize game app for the Radenska mineral water brand
A Facebook prize-game app for the Radenska mineral-water brand, running an entry-and-draw campaign on the brand page. A white-label build via Organizem.
Interactive quiz and engagement app for the DIGGIT digital conference
An interactive quiz and engagement app built for Diggit, a Slovenian innovation and creativity conference in Ljubljana. A white-label build via Organizem.
Corporate website for an IT solutions and consulting company
A corporate website for InCaTec Solution of Münster, at the time the exclusive German reseller of the Axxerion facility-management (CAFM) software. A white-label WordPress build via Cuibono Media Network; the company has since rebranded.
Client
InCaTec Solution GmbH, via Cuibono Media Network GmbH
Talent and artist booking platform for events and entertainment
A WordPress site for Billig People Booking, a music booking and tour-management agency that books rock and punk bands for European tours, presenting the roster and tour dates. A white-label build via Cuibono Media Network.
Client
Billig People Booking, via Cuibono Media Network GmbH
Promotional wellness campaign website for the Danone Activia brand
A promotional wellness-campaign site for the Danone Activia brand in Slovenia, with nutrition tips, social-sharing features, and behind-the-scenes content from the brand TV campaign. A white-label build via Organizem.
Client
Danone, via Organizem s.p.
Sector
Consumer Discretionary
Date
March 2013 - June 2013
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Pepsi Slovenija My Life Quiz Facebook App
Role: Software Engineer
Interactive lifestyle quiz Facebook app for Pepsi Slovenia
A "My Life" lifestyle-quiz Facebook app for Pepsi in Slovenia, where users answered questions to get a personalised result as part of the campaign. A white-label build via Organizem.
Shark Energy Frisbie Find the Difference Facebook App
Role: Software Engineer
Interactive spot-the-difference game Facebook app for Shark Energy drink
A spot-the-difference game Facebook app for the Shark Energy drink brand, built to drive engagement and entries during a campaign. A white-label build via Organizem.
Corporate website for a construction and building-services group
A corporate website for the HEGERATH group, covering construction and building services: new build and renovation, fire protection, general contracting, and premium interior finishing. A white-label WordPress build via Cuibono Media Network.
Client
HEGERATH Unternehmensgruppe GmbH, via Cuibono Media Network GmbH
A corporate website for Pentacom, a Krefeld PR and marketing agency, presenting its services and client case studies. A white-label WordPress build via Cuibono Media Network.
Client
Pentacom, via Cuibono Media Network GmbH
Sector
Communication Services
Date
April 2013 - May 2013
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Perutnina Ptuj Slim & Fit Diary Facebook App
Role: Software Engineer
Interactive diet and fitness diary Facebook app for a major Slovenian food producer
An interactive Slim & Fit diet- and fitness-diary Facebook app for the food producer Perutnina Ptuj, letting users track their progress as part of a brand campaign. A white-label build via Organizem.
Website for a Berlin-based dance studio and ritual dance community
A WordPress site for Tanz Ritual Berlin, offering seminars, workshops, and training in dance therapy and ritual dance. A white-label build via Cuibono Media Network.
Website for a family medical practice in Fürstenwalde
A WordPress site for a family medical practice in Fürstenwalde, covering the practice profile, services, and online appointment requests. A white-label build via Cuibono Media Network.
Client
Hausarztpraxis Fürstenwalde, via Cuibono Media Network GmbH
Interactive product guessing game Facebook app for a natural health products brand
A "guess the product" game Facebook app for the natural-health brand Medex, where users identified products to enter the campaign. A white-label build via Organizem.
Facebook promotional prize game app for a major fashion retail group
A Facebook prize-game app for the Sportina fashion-retail group, run on the brand page with an entry-and-draw mechanic to capture entries and drive engagement during a campaign. A white-label build via Organizem.
Localisation of the Red Bull Wings for Fitness promotional campaign website
Localisation of the Red Bull Wings for Fitness campaign website for the Slovenian market, adapting the existing campaign experience to local language and content. Delivered via Organizem.
Client
Red Bull, via Organizem s.p.
Sector
Consumer Discretionary
Date
February 2013 - March 2013
Services
Development Planning
Skills
PHP WordPress MySQL Javascript jQuery Bootstrap
Les Mills Slovenija Facebook Prizegame App
Role: Software Engineer
Facebook promotional prize game app for the Les Mills fitness brand in Slovenia
A Facebook prize-game app for the Les Mills fitness brand in Slovenia, running an entry-and-draw campaign on the brand page. A white-label build via Organizem.
Interactive Facebook app that generates personalised Japanese names for users
A light, shareable Facebook app that generates a personalised Japanese name for each user, built in-house at Organizem as a social-engagement toy.
Client
Organizem s.p.
Date
October 2012 - December 2012
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
Thermana Lasko Facebook Prizegame App
Role: Web Developer
Facebook promotional prize game app for a Slovenian wellness and spa resort
A Facebook prize-game app for the Thermana Lasko wellness and spa resort, running an entry-and-prize-draw campaign on the brand page. A white-label build via Organizem.
Facebook promotional prize game app for the Maribor Student Club
A Facebook prize-game app for the Maribor Student Club (Klub Mariborskih Studentov), built to run an entry-and-draw campaign for its members. A white-label build via Organizem.
Real-time audience voting and engagement system for the Sempl marketing conference
A real-time online audience-voting system for the Sempl marketing conference, with a control panel to run live votes during sessions. Built in-house at Organizem.
Client
Sempl, via Organizem s.p.
Sector
Communication Services
Date
July 2012 - September 2012
Services
Development Planning
Skills
PHP MySQL Javascript jQuery Bootstrap
Links
Website (offline)
Personal projects and open source 18
Things I built for myself, to learn something or because I wanted them to exist.
Donna
Self-hosted AI personal assistant for chat, automation, knowledge, and tasks
A self-hosted AI assistant that runs on my own hardware, with its data in SQLite on the same machine. The model layer sits on the Vercel AI SDK across OpenAI, Anthropic, Google, xAI, Ollama and OpenRouter; on top of it I wrote per-model rate limiting, retries with error classification and per-request cost accounting, and the Claude Code, Codex and Gemini CLIs can act as backends. The agent runtime spawns sub-agents that report back to a parent, compacts its own context when a run goes long, and scores every action for danger before it executes. Memory is a graph of claims and evidence with provenance, so it can say what it believes, why, and when that changed. Around it sit chat with configurable agents, tasks and projects, calendars, automations and integrations, as a Bun monorepo with an Elysia API, a Vite and React web app and a Commander CLI.
A Bun monorepo: an Elysia HTTP and WebSocket API that also serves the built web app, a Vite and React 19 client on TanStack Router and Query with a typed Eden client, a Commander CLI and a separate background worker
A model gateway across OpenAI, Anthropic, Google, xAI, Ollama, OpenRouter and Z.ai, with its own per-model rate limiter, retry on classified errors and a cost figure for every request
The Claude Code, Codex and Gemini CLIs can serve as model backends, so a run can use a local CLI instead of an API key
Memory as a knowledge graph: entities with aliases, observations, claims backed by evidence and provenance, and a materialised table of current truths with confidence and expiry
Knowledge extracted and consolidated from conversations, embedded with OpenAI, Google or Ollama for retrieval, and browsable as an interactive graph
An agent loop that spawns sub-agents in their own threads, which report back to the parent, and compacts context on long runs
Every action scored for danger before it runs, with static scores for known actions, a model call for the rest, and approval required when the score is high
Agent tools for Playwright browser sessions, web search, files, tasks, projects and integrations
Triggers on cron, internal events and webhooks, executed by the worker with a run history
Integration sync for Google, Microsoft, GitHub, Notion, Linear, Jira, Slack and others; Telegram, Slack and Discord as chat channels; notifications by email and web push
SQLite in WAL mode through Drizzle, messages sharded into monthly files, and secrets encrypted with AES-256-GCM
Client
Personal
Sector
Information Technology
Role
Full-Stack Engineer
Date
August 2025 - August 2026
Services
Development Architecture Planning DevOps Design AI Integration
Skills
Typescript Bun Elysia React Vite TanStack Router React Query Zustand Tailwind CSS SQLite Drizzle ORM WebSockets Zod Commander Playwright Biome OpenAI Anthropic Google AI Ollama OpenRouter Vercel AI SDK xAI
WeWentCarRacing
Motorsport calendar covering 20+ racing series with live countdowns and weather
My third attempt at a motorsport calendar, and the first one I shipped, because I kept it small. It covers 20+ series (Formula 1, 2, 3 and E, WEC, WRC, DTM, BTCC, IndyCar, NASCAR, MotoGP and more) and every track they race on, with live session status, countdowns, weather per track and times shown in your own time zone. A side project I keep adding to.
Astro 6 on the Node adapter with React islands and Tailwind 4, with data in Astro DB under a normalised schema where the session is the unit
Seed data as typed TypeScript files per season, checked by Zod types and a validation script
Session times shown in the visitor's own time zone
Live status per event: the session on track now, countdowns to the next one and time left in the current one
A five-day weather forecast on every track page from WeatherAPI, cached in memory
Live YouTube streams per series through the YouTube Data API
A personal calendar that filters events to the series you follow and remembers the choice
A Leaflet map of events
Apex, an animated Three.js mascot on the homepage, modelled in Blender through a Python build script and loaded only when visible
A generated sitemap, web manifest and llms.txt, with Vitest tests on the event and homepage helpers
Plant-based recipe website with curated vegan and vegetarian meals
A plant-based recipe site I build together with my partner: a curated collection of vegan and vegetarian recipes in English, German and Slovenian. Astro with React islands and Tailwind CSS. Recipe content is in Astro DB, and ratings, newsletter signups and the admin area run on PostgreSQL through Drizzle with better-auth.
Recipes, meals, curated lists and tips in English, German and Slovenian, with a script that reports translation coverage
Recipe pages that scale ingredients, switch between metric and imperial, and have a cook mode that keeps the screen awake
Recipe structured data with ingredients and nutrition, and a rating that appears only once a real one exists
Anonymous ratings limited to one per recipe per IP per day, enforced in a PostgreSQL transaction with a per-IP lock, trusting Cloudflare's visitor IP only from Cloudflare's own ranges
A fridge finder that suggests recipes from what you have, and a unit converter
A publishing workflow in the admin area: Pinterest cards composited on demand from the recipe photo, a template editor with JPG export, and a log of where each recipe was posted
Rebranded software development studio focused on web applications and digital products
Our software studio, rebranded from Corcosoft with a sharper focus on web applications and digital products. Corco Labs is the home for both our client work and our own products.
The studio website on Astro 6 with React islands, an MDX blog with RSS, and service and industry pages built from typed data files
A free website audit: a visitor submits a URL, the server checks SSL, security headers, SEO and structured data, performance, accessibility and email DNS records, then renders a PDF report and emails it through Resend
SSRF-safe fetching for every submitted URL, with address blocklists and connection-pinned DNS lookups
A project wizard and an inquiry form with rate limiting and an append-only lead store
Case studies that state for each entry whether the work was done as an employee, founding engineer or subcontractor
The tools the studio runs on, from the same monorepo: a project manager where AI agents claim tasks and post progress over MCP, and an API and MCP gateway, both deployed on Dokploy
A self-hosted smart gallery application that scans and displays images from local folders with intelligent features. Integrates Amazon Rekognition for automatic image tagging, HERE Geocoding for location data, and includes a map view for photo locations. Built with a Symfony backend, React frontend, and a Python microservice for image processing.
Client
Personal
Sector
Communication Services
Date
January 2022 - July 2023
Services
Development AI Integration DevOps
Skills
PHP Symfony React Python Docker MySQL AWS Rekognition Nginx
Privacy-first personal finance tracking app with client-side calculations
A budgeting app focused on keeping user data private by performing financial calculations client-side. Built with RedwoodJS using a full-stack GraphQL architecture.
A resumable on-chain indexer pulling decentralised-exchange pairs and swaps into PostgreSQL
An indexer for decentralised-exchange data. It reads tokens from CoinGecko and pair-creation and swap events straight off the chain through web3 and ethers, and writes them into PostgreSQL with Grafana on top. The interesting part is the sync itself: it works in explicit block ranges, so a run can be resumed or replayed from any point, with flags to batch the inserts, to skip pairs already processed, and to spread a range across threads. The analytics layer on top was never finished, so it is an indexer rather than a product.
Client
Personal
Sector
Financials
Date
July 2021 - June 2022
Services
Development Architecture Data Engineering
Skills
Typescript Node.js PostgreSQL web3.js ethers.js Grafana Jest Docker
An earlier take on the motorsport-calendar idea I later shipped as WeWentCarRacing. Built as an NX monorepo with a Next.js and React front end and a NestJS and GraphQL backend over PostgreSQL via Prisma, plus a React Admin dashboard and a Puppeteer scraper that pulls Formula 1 schedule and results data season by season.
Experimental automated cryptocurrency trading bot for Binance
An experimental cryptocurrency trading bot for Binance, written in TypeScript. It provides a framework for writing your own trading strategies and running them against Binance, but only ever on a paper-trading account, never against real funds. A ground-up v2 was later started.
A multi-tenant inventory SaaS with barcode labels, a versioned API and a stock-scanning phone app
My own subscription inventory product, built and run end to end. Companies, warehouses, items and categories, with every stock movement recorded against an audit trail, plus clients and projects, barcode label generation and Excel export. Plan and seat limits were enforced in configuration, a versioned REST API served a phone app that scanned stock in and out, and the interface ran in three languages. It shipped through alpha, beta and production stages with functional tests in CI and a scripted deploy, and ran in production for a client. I never promoted or sold it beyond that, and wound it down rather than keep maintaining something I was not taking to market.
Client
Personal
Sector
Communication Services
Date
March 2016 - June 2021
Services
Development Domain Modeling Architecture Database Design DevOps
3D Formula 1 race data visualisation and replay tool
A 3D Formula 1 race-replay tool. The viewer uses three.js to animate cars along a curve-based 3D circuit, complete with ground plane, lighting, an HDR environment, and dat.gui controls, while a separate React and Redux editor lets you enter the drivers, laps, and incidents to replay. The backend is built on PHP and Symfony with MySQL.
AI system that learns to play video games autonomously
An experimental machine learning project that creates an AI capable of learning game controls through screen capture and neural network training. Built with TensorFlow and Python, it uses Inception V3 architecture to process 640x360 gameplay footage and generates control outputs for autonomous gaming. Features a specialised "WASD Network" optimised for driving games and supports 9 different control actions.
Text-classification trainer built on the Synaptic neural-network library
A small Node.js library that wraps the Synaptic neural-network library into a ready-to-use text classifier: feed it labelled text-and-class examples, call train, then test, with stop-word removal and a trained network that is saved and reused. Built to make simple sentiment and text classification approachable. Since archived.
A browser-based strategy game in the style of Travian, built as a personal learning project. The server runs on PHP with Doctrine ORM and Twig, with a tile-based map, a Docker-based setup, and custom console commands for environment preparation and data seeding.
Client
Personal
Sector
Communication Services
Date
September 2015 - April 2016
Services
Development Architecture Planning DevOps Design
Skills
PHP Silex Symfony MySQL Javascript jQuery Bootstrap
Open-source real-time team messaging platform, alternative to Slack and HipChat
An open-source, self-hosted team chat app, built as a Slack and HipChat alternative, with channels and channel, user, and emoji autocomplete. Built in PHP with Doctrine ORM. An early experiment, since archived.
Open-source office and team management system for tracking employees and resources
An open-source office-management app for small teams, covering time and event tracking, employee and employment records, and role-based access. Built with JavaScript and PHP on Doctrine ORM. Since archived.
Self-service platform for creating and managing Facebook prize game campaigns
A self-service platform for building and running Facebook prize-game campaigns, essentially productising the many one-off prize games and quiz apps I had built for agency clients into a tool brands could run themselves. The live site is no longer online, and there is no public source repository.
Client
Personal
Sector
Communication Services
Date
September 2013 - September 2015
Services
Development Planning Design
Skills
PHP MySQL Javascript jQuery Bootstrap
Links
Website (offline)
No projects match your filters.
Want the full story?
The flagship projects have detailed write-ups: challenges, decisions, and measurable
outcomes. Or if you have something to build, let's talk.