Production AI.
Not Prototypes.

Two years of building, deploying, and operating AI systems. Every project here is live, in production, and has been through the kind of iteration that only comes from real users and real failures.

View CV → See BiasFeed Live
BiasFeed homepage with latest bias analyses
BiasFeed bias analysis with highlighted framing differences
BiasFeed admin panel with content management
BiasFeed n8n workflow pipeline
01 Live at biasfeed.com

BiasFeed: AI Media Bias Analysis

An automated pipeline that deconstructs news articles into neutral facts, then rebuilds them through three AI personas (progressive, conservative, neutral) to show how the same information gets framed differently across the political spectrum. Full admin panel with content management, keyword tracking, analytics, and a direct pipeline trigger. Running uninterrupted since November 2025, with daily autonomous output, built from five separate n8n workflows including the reusable Battle Royale image selector.

How It Works

  • Source Ingestion: News articles ingested automatically from selected sources
  • Fact Extraction: AI strips opinion and charged language, distilling verifiable facts
  • Multi-Persona Generation: Three separate AI personas rebuild the story from the same facts
  • Bias Annotation: Interactive "Show Bias" toggles reveal exactly where and how framing differs
  • Admin Console: Full content management, analytics, keyword configuration, and manual pipeline triggers

What It Demonstrates

  • Multi-model orchestration: different AI models for different pipeline stages based on capability, cost, and reliability
  • Production workflow design: error handling, scheduling, monitoring, autonomous operation
  • Responsible AI: using AI to increase transparency rather than obscure it
n8n Multi-model AI Automated pipelines PHP Admin panel
Okavyx platform dashboard with all services
Okavyx platform dashboard, services view
02 Live at okavyx.ai

Okavyx: Agentic AI Platform

A full agentic AI platform built from scratch. More than a dozen production services including text and voice chat, sub-agent orchestration, and automated content pipelines. Persistent memory across sessions, multi-model routing, and security built into the architecture from day one.

Architecture

  • Persistent Memory: Long-term context across sessions, semantic search, temporal decay
  • Multi-Model Orchestration: Routes tasks to different AI models based on capability, cost, and complexity
  • Sub-Agent Delegation: Complex tasks broken into subtasks delegated to specialised coding agents
  • Real-Time Voice: Sub-second voice interaction via ElevenLabs, multiple interface options
  • SSO & RBAC: Google OAuth, JWT cookies, role-based access across every service
  • Autonomous Operations: Cron-driven tasks, scheduled workflows, background operations
Agentic AI Multi-model Voice interface Docker Node.js PostgreSQL Redis
YouTube Shorts dashboard with category selection and approval queue
03 Live on YouTube @okavyx

Automated YouTube Shorts Pipeline

A fully automated pipeline producing publish-ready YouTube Shorts from a single topic input at ~$0.03 per video. Script generation (GPT-4.1 Mini), voice synthesis (ElevenLabs), parallel video sourcing with AI-judged selection (Gemini Flash), ffmpeg assembly with Ken Burns effects and word-by-word subtitle highlighting, and a human-in-the-loop approval workflow.

Pipeline Stages

  • Script Generation: GPT-4.1 Mini produces structured scripts with narration, visual queries, SEO metadata, and hashtags
  • Voice Synthesis: ElevenLabs TTS with character-level timestamps for word-by-word subtitle sync
  • Video Sourcing: "Video Department" sub-workflow searches Pexels, Pixabay, and Openverse in parallel; AI judge picks the best clip per segment
  • Assembly: ffmpeg handles portrait cropping, crossfades, Ken Burns on stills, subtitle highlighting, background music mixing
  • Upload & Approval: Private YouTube upload, Pushover notification, one-tap approve/reject with SSE live feedback
  • 12 Content Formats: Did You Know, Myth vs Reality, How It Works, History in 60s, ELI5, Hot Take, Top 3, What Went Wrong, By the Numbers, Then vs Now, Around the World, Things You Missed
n8n ElevenLabs OpenRouter YouTube API ffmpeg $0.03/video
Social Content Hub draft queue with approval controls
Social Content Hub published post with engagement detail
04 Live at social.okavyx.ai

Social Content Hub: AI Drafting with Human Approval

Cron-scheduled social content drafting with a human-in-the-loop gate. The pipeline drafts posts on a schedule, surfaces them for inline approve, reject, or edit via Telegram, and only then publishes. Built on the same reusable Battle Royale image selector (parallel stock API queries with an AI judge picking the best match) and watchdog processes that keep it running without supervision.

Systems

  • Social Content Pipeline: Cron-scheduled drafting with inline approve/reject/edit buttons via Telegram
  • AI Image Battle Royale: Reusable workflow querying multiple stock APIs in parallel, AI selects the best match
  • Multi-Step Task Chains: Conditional logic, error handling, rollback capabilities
  • Cross-Platform Integration: Messaging, monitoring, version control, and infrastructure management
n8n Workflow automation LinkedIn API Telegram approval Cron scheduling
Image Library with AI-categorised images and filters
06 Live at images.okavyx.ai

Image Library: AI-Categorised Visual Asset Store

A private, AI-categorised home for the thousands of generated images scattered across DALL-E, Midjourney, and Gemini outputs. Every upload is stored in Cloudflare R2 and deep-analysed by Gemini 2.5 Flash using the model's native structured output, producing rich metadata: subjects, geography, natural features, mood, art style, and a controlled "suitable for" vocabulary. The result is a queryable backend that downstream AI pipelines (the Shorts generator first) hit through an API instead of regenerating images on demand.

How It Works

  • Structured Vision: Gemini 2.5 Flash with a native response schema returns typed JSON, with common filter fields denormalised into indexed database columns
  • Compound Queries: precise lookups like "wide landscape, water visible, no people, photorealistic, suitable for shorts background"
  • Access Control: Cloudflare Access JWT verified server-side, owner and viewer role split, internal bearer token for programmatic callers
  • Cost Tracking: per-call Gemini spend captured and surfaced in the UI, including parse-failure costs
Bun TypeScript Gemini 2.5 Flash Structured output Cloudflare R2 PostgreSQL
Eyeballs RSVP reader flashing a single word with the ORP letter highlighted
Eyeballs reader settings and article library
07 Live at eyeballs.okavyx.ai

Eyeballs: RSVP Speed Reader

A speed-reading app built on RSVP (Rapid Serial Visual Presentation): instead of moving your eyes across the page, it flashes one word at a time in a fixed spot with the optimal recognition point letter highlighted, so the eye fixates rather than scans. Paste text or import any article by URL, then read at your chosen words-per-minute. Per-user history and appearance settings are saved server-side.

How It Works

  • ORP Alignment: each word is positioned so its optimal recognition point sits at a fixed focal line, with guide lines to anchor the eye and eliminate jitter on long words
  • URL Import: Readability and JSDOM strip a web page down to clean article text ready to read
  • Auto-Fit Typography: the reader font auto-sizes to the article's longest word so nothing ever clips mid-flash
  • Per-User State: reading history and appearance settings persisted per account behind shared platform auth
Node.js Express Vanilla JS Readability PostgreSQL PWA
Pages public landing with available shares
Pages manage-shares admin view
Pages create-share form with access controls
Pages share detail with access log
Pages PIN gate protecting a share
08 Live at pages.okavyx.ai

Pages: Secure File Sharing with PIN-Gated Access

A self-hosted file-sharing service with a three-tier access model: fully public pages, account-gated private pages, and PIN-protected shares for sending files to people outside the platform. PIN gates are hashed with brute-force defence, recipients can upload files back through a locked-down allowlist, and every share keeps its own access log. A built-in form builder turns any share into a client feedback form.

How It Works

  • Three-Tier Access: public, account-gated private, and PIN-gated external shares, each with its own routing and auth path
  • PIN Security: bcrypt-hashed PINs with brute-force rate limiting, share content never served before the gate is passed
  • Safe Recipient Uploads: extension allowlist deliberately blocks executable types (.html, .js, .svg) so uploads can never run under the share origin
  • Audit & Forms: per-share access logs, plus a marker-driven form builder for collecting structured client feedback
PHP Node.js Caddy bcrypt PostgreSQL

Microsoft 365 & Azure AI

Enterprise solutions built entirely within the Microsoft ecosystem. Azure Functions, Graph API, SharePoint, Entra ID. All running on free or near-free tiers.

AskSite knowledge bot answering questions from SharePoint documents
AskSite bot in Microsoft Teams with document citations
09 Live in production

AskSite: Copilot Alternative at Near-Zero Cost

A Microsoft Teams bot delivering the same core experience as $30/user/month Copilot: ask a question in natural language, get an AI-generated answer citing your SharePoint documents. Built on Azure free tiers with pay-per-token OpenAI. For a 20-person company, this replaces $7,200/year in licensing.

Architecture

  • Teams Integration: Direct chat or @mention in any channel. No new tools to learn.
  • Azure AI Search: SharePoint documents indexed and chunked for semantic retrieval
  • Azure OpenAI (GPT-4o): RAG pipeline with document-grounded answers and source citations
  • Zero Infrastructure Cost: Azure Bot Service (free), Azure Functions (consumption), AI Search (free tier)
Azure OpenAI Azure AI Search Bot Framework Microsoft Teams SharePoint Entra ID
Tenant Health Check traffic-light report
10 Live, running daily

M365 Tenant Health Check

Automated daily security auditing for Microsoft 365 tenants. Runs inside the client's own Azure tenant, checks MFA coverage, stale accounts, admin sprawl, email authentication, and password policies. Emails a traffic-light HTML report designed for non-technical business owners. Built as a deployable product for MSPs and IT consultants.

Azure Automation Microsoft Graph API Entra ID Security auditing Python
Parsed VCDS scans in a SharePoint List with fault counts and chassis types
VCDS faults broken out by module, fault code, and description
11 Live, client deployment

Automotive Diagnostic Log Parser

An Azure Function that turns raw VCDS diagnostic scans into searchable data for a VW and Audi workshop. Scan logs land in a SharePoint folder, the function picks them up on a timer, a PowerShell parser extracts the vehicle and fault data, and Graph API writes structured records into SharePoint Lists. Staff get instant search, filtering, and fault history without opening a single text file. 108 out of 108 fault types validated.

How It Works

  • File Watcher: an Azure Function on a five-minute timer detects new diagnostic logs dropped into SharePoint, then moves each to a Processed folder once handled
  • Stateful Parsing: PowerShell handles the nested, variable-layout fault sections with regex, lookahead, and cross-line state tracking, the kind of parsing Power Automate's expression language simply cannot do
  • Structured Output: Microsoft Graph API writes clean vehicle and fault records into SharePoint Lists, surfaced in SharePoint or a Teams tab
  • Runs on What They Already Pay For: consumption-plan Functions and Graph API on the existing Microsoft 365 tenant, no new licences
Azure Functions Microsoft Graph API SharePoint Lists PowerShell Entra ID
TimeSheet time entry form in Microsoft Teams
TimeSheet invoice generator with unbilled summary
Generated invoice with line items and email delivery
12 Live, daily use

Time Tracking & Invoicing on M365

End-to-end time tracking and invoicing built entirely on Microsoft 365. SharePoint Lists for capture (mobile, desktop, or Teams tab), webhook-driven hour calculation, one-click PDF invoice generation with Entra authentication, automatic SharePoint storage and email delivery via Graph API. Replaces SaaS subscriptions with infrastructure you already pay for.

SharePoint Azure Functions Microsoft Graph API Entra ID PDF generation Webhooks

These projects span two domains: independent AI systems and enterprise Microsoft 365 solutions. The common thread: production systems solving real problems, at minimal cost, using the right tool for the job.

A pattern runs through the AI projects: agentic AI directed to build its own automation infrastructure. The design decisions are human: which models, which APIs, what the cost target is, where human approval gates belong. The AI agent implements those designs, building workflows that handle high-volume production work at near-zero marginal cost.

Every project listed here is live, in use, and has been iterated based on real operational experience.

Get in Touch

Interested in what you see? Whether it's AI strategy, automation, or just a conversation about what's possible.