Our Portfolio

Projects spanning AI, ML, LLMs, and automation

28+ Projects on this site
11+ Happy Clients
8+ Years Experience
600+ Citations

All Projects

Flagship Projects

6 projects

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.

Ready to Start Your Next Project?

Let's talk about your project and how we can help