Our Portfolio
Projects spanning AI, ML, LLMs, and automation
All Projects
Flagship Projects
6 projects-
Flagship LLMs, RAGs & Agents
Clinical RAG Pipeline with Source Citations & Alerts
A Retrieval-Augmented Generation pipeline that reads a visitor's description of their own concern and returns the procedures the clinic actually offers for it, every answer cited back to the document it came from. The data was provided by the client in the form of supporting PDFs and EXCEL files for details of procedures that can be performed in their aesthetic clinic for the specific issue that the users pre-diagnose. This app was just to give users an idea of what they can expect to be performed in the clinic. A final diagnosis was always provided by professionals.
-
Flagship Research & Publications
LoRaDRL: A DRL-Based Approach for LoRa Optimization
A deep reinforcement-learning algorithm (DDQN) that selects PHY-layer transmission parameters in LoRaWAN networks. Existing rule-based algorithms cause packet collisions in dense LPWAN deployments; this DRL approach reduces collisions and improves Packet Delivery Ratio by up to 500% in some scenarios. Published at IEEE LCN 2020 with a follow-up paper.
-
Flagship Full-Stack Apps
Notion Clone with AI & Live Collaboration
A collaborative note-taking application in the shape of Notion, with document intelligence and multiplayer editing built in rather than bolted on. Several people can open the same document and write in it at once, seeing each other's cursors and changes as they happen, with Liveblocks resolving concurrent edits so nobody's work is overwritten. Documents persist to Firestore, and Clerk handles sign-in and the user and workspace management around who may open what.
The AI side treats a document as something you can interrogate rather than only read: ask a question and get an answer drawn from the document's own contents, generate a summary of a long page, or translate it into another language on the spot. Those operations run on Cloudflare Workers at the edge instead of a central server, so the round trip stays short wherever the reader is. The front end is Next.js and React with Shadcn UI.
-
Flagship Web Scraping & Automation
AI Scraping Pipeline & Lead CRM Platform
An end-to-end pipeline that turns Germany's official company register into a working book of investor leads. A containerised, VPN-rotated Selenium fleet searches the register for each firm, opens that firm's document directory and downloads every filing it holds; each document is then stored in AWS S3 with a reference back to the firm it belongs to. LLMs then read those filings and extract who the investors in that firm are.
The extracted leads flow into a purpose-built lead management platform where the sales team works them. Each lead carries its own record of the conversations held with it, and anyone who accepts the offer to sell their holding moves through the platform's pipeline stages toward a completed sale. The database underneath — schema design, development and ongoing management — was built as part of the project.
-
Flagship Web Scraping & Automation
CRM-to-Kixie Lead Sync — Microservices & Reconciliation
A set of microservices keeping a sales team's calling lists correct across two systems that do not talk to each other. Leads are pulled from the CRM, segmented by type and ZIP code, exported per segment and uploaded into Kixie, with PlanetAltig supplying verified secondary phone numbers and duplicates and already-processed leads skipped.
The harder job is keeping the two in agreement afterwards. The services run continuously to find and resolve discrepancies between Kixie and PlanetAltig, so no lead is ever missed, and to keep the calling lists themselves accurate — callbacks and appointments added when they are booked and removed when they are not, rather than leaving agents dialling stale entries. It runs in Docker on a Linux server against PostgreSQL, with parallel processing to keep the reconciliation fast at volume.
-
Flagship Backend & APIs
Order & Fleet Management Platform — Microservices, ML Dispatch & Live Tracking
The complete backend behind an order-and-fleet management platform, built and led by a team of three backend engineers alongside three frontend developers and a separate mobile team. Rather than one service, it is a set of microservices covering the order and rider lifecycles, each encoding the client's own handling policies. The work spanned the database end to end — schema design, query optimisation, ongoing management and webhook handling — plus the REST APIs behind every surface of the product: the management portal, the onboarding panel, the driver portal and the riders' mobile app.
Three groups feed the same flow — the order providers who are the client's own customers, the internal management team, and the riders in the field — and every order follows one defined path through it. Riders join through a multi-step signup procedure they must complete before they can take work, and from there the platform handles blocking and unblocking, availability, and live location tracking, all behind JWT auth with per-role access controls.
Dispatch itself is automated. A K-Means clustering engine groups open orders against available riders on location, capacity and timing, then a business-rule layer applies the client's vendor and SLA constraints before an order is assigned. It replaced a team of human dispatchers and took daily assignment from roughly 1,000 orders to roughly 4,000.
LLMs, RAGs & Agents
3 projects-
AI Car Recommendation Agent — Multi-Marketplace Search
An AI-powered virtual sales advisor built over the three biggest Saudi car marketplaces — Dubizzle.sa, Syarah and Haraj. A scraping pipeline runs on a Linux server at regular intervals to keep roughly 10,000 active listings — and their images — current in a Supabase database, and the agent searches that index rather than the live sites. Buyers reach it through a chat interface and talk to it the way they would to a salesperson; it understands them in English and Arabic, filters across price, brand, mileage and condition, and surfaces ranked alternatives when there is no exact match. Listings and their photos are also browsable on the React comparison platform built alongside it.
-
Agentic HubSpot CMS Theme Builder from Any Website URL
A production multi-agent platform, built over the course of a year for a HubSpot agency, that turns any public website into a working HubSpot CMS theme. Agents download the source site along with its assets, work out its sections, and assemble the theme as fully editable, responsive HubSpot modules. Each agent first checks a shared module library for something that already matches the section being converted and only writes a new module when nothing fits — so the library grows with every site and each conversion gets cheaper than the last. The theme is built directly inside HubSpot over its API and comes back as a live HubSpot link. Base-theme setup that used to take 3 to 4 days of manual development now takes under an hour, with a developer needing about a day for final polish.
-
OpenAI ChatGPT-Powered LinkedIn Content Creation for Personal Branding
LLM-assisted LinkedIn posts written to build the client's personal brand, establish thought leadership, and attract qualified leads. The client supplied a set of his own posts up front; those were analysed for structure, tone and phrasing to build a profile of how he writes. For each new post he names the theme or category he wants, and drafts come back written in his own voice — grounded in verifiable information across economics, data analytics, leadership, growth, and sustainable development.
AI & ML
1 project-
Semantic News Matching with Knowledge Graphs
A semantic matching pipeline that relates news articles across thousands of sources. Custom scrapers pull articles from many publishers into a single PostgreSQL schema, each row keeping a reference back to the source it came from. Word embeddings then match articles semantically to recommend further reading to a reader on the site, and Neo4j renders those connections as a graph — so you can see not just which articles are related, but what actually links them.
Research & Publications
4 projects-
5G Networks Through an Adversarial ML Lens
A research study on the adversarial risks of using AI/ML for 5G network automation. The work covers supervised, unsupervised, and reinforcement-learning attack surfaces through three case studies, proposes mitigation approaches, and offers guidelines for testing how well ML models hold up to attacks in 5G contexts. Published in IEEE Internet Computing 2021.
-
Efficient Urdu Caption Generation using Attention-based LSTMs
An attention-based LSTM model that generates Urdu-language captions for input images. Image captioning research is built almost entirely on English datasets, so the work began with dataset preparation: assembling images paired with native Urdu captions, because nothing suitable existed to train on. Only once that dataset was in place could the model itself be built — a CNN encoder feeding an attention LSTM decoder — then trained and deployed as an online service that needs no setup to use.
-
COVID 19 Detection from Chest X-rays
CNN models trained to distinguish COVID-19 / Pneumonia chest X-rays from normal X-rays in a binary classification task. Multiple architectures and configurations were evaluated, with all code and findings published openly on GitHub.
-
Graph Neural Network Fraud Detection
A university research project reimplementing a published Graph Convolutional Network approach to fraud detection, then extending it. The model was trained on a public dataset (80/20 split), attacked with adversarial samples to measure how well it held up, and fine-tuned on those samples to harden it — which improved overall accuracy as well as robustness. The wider subject was adversarial attacks on advanced machine learning and deep learning models.
Web Scraping & Automation
13 projects-
Large-Scale Web Scraping Pipeline + Dashboard (50M+ Records)
Designed and built the backend and dashboard for a parts-catalog aggregator that ingests over 50 million product records from three high-volume supplier sites. The scraping pipeline handles each site's protections against bots — collection runs through NordVPN sessions rotated across different locations, so requests arrive from varied origins rather than one hammering address — and reconciles their schema differences, with incremental updates feeding a unified PostgreSQL catalog and a FastAPI monitoring dashboard for extraction health and data quality.
-
CSFloat Skin Trading Bot — Buy & Sell Signals
A trading bot for CSFloat that generates both buying and selling signals for CS skins and acts on them automatically. It monitors live listings and scores them on wear, float value, rare patterns and stickers against comparable sales, so an underpriced skin is spotted the moment it appears.
The strategy behind it is what makes the position worth taking: rather than flipping whatever is cheap, the code looks for skins where the discount today and the expected movement point to a realistic profit over the following month or two, and holds accordingly. A matching sell signal decides when that position is worth closing, and the bot relists it. Buying and selling both run unattended, generating profit for the client without a person watching the market.
-
MCA Lead Extraction — Automated Court Records to Daily Leads
An automated lead pipeline that turns public court filings into a daily book of qualified MCA leads across two states. In New York it works county by county, extracting cases from each county's court site and building a separate Excel file per county. In Florida it goes through Docket Alarm instead, searching against a maintained list of plaintiffs, with the rest of the process identical.
Reading the filings is the part that needed judgement rather than pattern matching: the OpenAI API extracts the lead's details out of the summons and its supporting documents, where the information sits in prose rather than in fields. Each extracted lead is then enriched with verified mobile and email contacts through AccurateAppend and Enformion, checked for consistency, and written back to a PostgreSQL store that exists specifically so the same lead is never extracted or sold twice.
A dashboard with user management sits over the whole thing, and a scheduler drives the runs — pending jobs are picked up by a pool of workers running in parallel, so a day's counties finish in the window rather than in sequence. The finished Excel files go out to the client by email every day.
-
Multi-Retailer Grocery Scraper
A large-scale data extraction pipeline built for Spoonful Inc. to centralize product data from major grocery retailers (Kroger, Walmart Food, Tesco, Tesco.ie, Woolworths). The scraper captures ingredients, allergens, nutrition facts, and product metadata while complying with each site's access structure.
-
Real-Time Stock Momentum Web Scraper
A real-time stock data system built around StockTitan.net's Gold Membership stream. Python scripts extract live market data (symbol, price, volume, % change, float) every few seconds, a custom dashboard displays the top 10 momentum stocks, and a module converts the latest symbol to speech. It's built for live YouTube broadcasts.
-
Web Scraping TripAdvisor: Reviews, Images & Data Extraction
A high-throughput Python scraper that collects TripAdvisor listings, descriptions, and images at scale. Text is stored in PostgreSQL with categorized location tables, while images are uploaded to Dropbox. Rotating proxies enable parallel collection across many regions.
-
Cross-Marketplace Price Arbitrage Scraper
A price-arbitrage pipeline across Amazon, eBay and several other retail sites. Scrapers pull the same products from each marketplace — titles, descriptions, product IDs, prices, condition and images — and the prices are then compared against each other rather than viewed one site at a time.
That cross-comparison is the point: where the same item sells materially cheaper on one marketplace than another, there is a buy-low, sell-high opportunity, and the report surfaces exactly those gaps so the client can act on them for profit. Runs land every four hours, so a gap is caught while it is still open.
-
Wine-Searcher Pricing Scraper
A price-comparison bot built so the client's company could always sell wine at the lowest price on the market. It collects wine names, providers and prices from Wine-Searcher and works out the cheapest provider for every wine, refreshing every four hours so the client's own pricing can be set against what the market is actually charging that day. The scraper mimics human browsing behaviour to stay under bot detection.
-
Church Directory Data Extraction
Structured data for thousands of churches, pulled from two directories that had no usable export. Neither could simply be listed: masstimes.org has no site search, so coverage is driven by sweeping US ZIP codes, and directory.charlestondiocese.org is walked in full. Because the ZIP sweep overlaps — the same church surfaces under several codes — every record is deduplicated so each church appears exactly once in the output.
From each listing the scraper takes the full set of details the client needed: church profile, mass timings, clergy assignments, and the church's images, downloaded and renamed to the client's own convention. Both sources run in parallel behind rotating proxies to stay ahead of rate limits at that volume, on a schedule from an Ubuntu server, writing JSON per church that syncs to Google Drive ready for the client's directory product to consume.
-
Marriott Hotel Price Checker
A price-monitoring tool built for a travel agency, tracking Marriott rates for the hotels and dates its staff care about. The agency's team — around six users — manage their own targets through a small Flask dashboard, adding and removing hotels and travel dates as bookings come up, with user management so each person works against the same shared list. Targets and results live in MongoDB, updated on every run.
Marriott's site was the hard part: it carries real anti-bot protection, so collection needed several mechanisms working together to get through reliably rather than a single scraping approach. Each run builds a price comparison table for the hotels nearby and emails it to the team as a formatted HTML report.
-
Binance Trading Bot — Strategy Backtesting & Automated Execution
An automated crypto trading system built on Binance. The data side keeps a continuously refreshed list of the top-100 USDT trading pairs and their pricing, pulled on a schedule so the strategies always run against current market data.
The trading algorithm itself was developed here too, through continuous backtesting of strategies against historical data before any of them went live. A deployment system then pushes a chosen strategy out to clients' own accounts over Binance's API, placing buy and sell orders according to the strategy and staying inside the limits each client sets for their account.
-
Automated Job Application System
An automation that submits job applications across the major ATS platforms — Workday, Greenhouse, ATS Ripple and ASBQ Jobs — filling forms, uploading the resume and submitting with barely any human involvement, adapting to each portal's own field structure.
What makes it fill applications properly rather than partially is the answer generation. Most fields are completed by an LLM working from the applicant's resume as context, along with other supplied text such as which kinds of role they are prioritising. Behind it sits a long library of prepared answers, so the open-ended questions ATS portals ask get a considered response instead of being skipped — applications go out complete.
-
CigarBid Auction Monitor — Deal Scoring & Alerts
A price-intelligence tool for CigarBid, watching a user's own list of search terms across both auction formats the site runs. Classic lots are ascending-bid, so it captures the current winning bid, quick-buy price, units claimed against units available, close time and the full bid ladder. Free Fall lots descend in price instead, so every drop is recorded as a timestamped floor event — which is what lets the system learn how fast a cycle moves and where a given lot historically bottoms out. Every active lot is then scored 0–100 and tiered HOT / WATCH / SOFT / PASS, with alerts on anything above the threshold.
The engineering constraint shaped the whole design: it runs on a 512 MB VPS, and Chromium alongside Postgres does not fit in that. Postgres was dropped for embedded SQLite in WAL mode behind a custom async connection pool; Chromium runs single-process with a 128 MB JS heap cap and images blocked; scrape concurrency is pinned at one and the container is capped at 420 MB. CigarBid itself sits behind Cloudflare, so collection uses stealth automation, rotating user agents, human-cadence typing and randomised delays, with a block detector and retry when it still trips.
The scoring is deliberately unwilling to be confident before it has grounds. A lot with no confirmed closing history is capped at 70 and can never reach HOT; a benchmark built only from live floors caps at 60; Free Fall walks a four-phase gate from no data through one observed floor, then several, and only reaches the full range once real closes are on record. The timing model is built for a person, not a sniping bot — it peaks 1 to 6 hours before close, when the price has settled but there is still room to act, and drops to almost nothing inside the final 15 minutes.
Backend & APIs
1 project-
AI Assistant Mobile App — Backend API, AWS Lambda & DynamoDB
The backend for an AI assistant mobile app, running serverless on AWS Lambda with DynamoDB as the primary store. It covers the app's own surface — signup, signin and password reset, conversation history, and uploads for image, audio and video, including a live video socket — with S3 for file storage, SES for transactional email, and CloudFront and Route 53 in front.
Behind that sits the media understanding side. Uploaded audio runs through transcription models on EC2 to produce text, and uploaded video is analysed on EC2 to describe what happens in it scene by scene, keyed to the points where the scene changes. Both results are written back to DynamoDB and exposed over APIs to a separate team, who built the RAG layer on top of them — so this work supplied the searchable text the assistant reasons over, rather than the retrieval itself.
No projects found in this category.
Ready to Start Your Next Project?
Let's talk about your project and how we can help