HubexoPresent
Harvester
3,000+ production scrapers across the UK, DACH, ANZ, US and Asia
An Apache Airflow platform on AWS MWAA that harvests planning, construction and tender data from UK councils, Swiss cantons, Sweden, Australia, New Zealand and Singapore, turning raw portal data into customer-ready datasets.
- ▹Dynamically generated DAGs for daily, scheduled and historical runs
- ▹Rotating proxy downloader with Zyte / Bright Data failover
- ▹CloudWatch metrics and SNS alarms per region and source
PythonAirflowAWS MWAAS3SQSSeleniumcurl_cffi
HubexoPresent
Mandor
AI agent that turns a portal URL into a production-ready scraper
A multi-agent pipeline on Claude (scout, analyser, mapper, config and code generators) whose QA agent runs, validates and self-fixes every scraper it generates. Output plugs straight into the Airflow Source / Crawl / Parse pattern.
- ▹Around 30x faster scraper development
- ▹MCP browser server with SeleniumBase and Camoufox stealth backends
- ▹PDF portal support with pdfplumber; hosted on AWS EC2 for the team
PythonClaude APIMCPSeleniumBaseDockerAWS EC2
HubexoPresent
HarvesterAPI
GraphQL API serving millions of planning records to customers
A Nest.js + TypeScript GraphQL API (Apollo Server) over Oracle that gives customers and ETL teams a single source for planning applications, decisions, appeals and document metadata.
- ▹Normalised schema of 18 types and 100+ fields
- ▹Idempotent SQS FIFO consumer loading S3 events into Oracle
- ▹Profile-based multi-tenant access per customer and region
NestJSGraphQLApolloOracleAWS SQSElastic BeanstalkSentry
Web32026
Invictus
Concentrated-liquidity platform on EVM networks — US$5M+ monthly volume
A Telegram bot and a web dashboard over one Postgres database. Paste a contract address, pick a pool, amount and range, and the mint runs itself: approvals, funding swap, mint, receipt. Positions are priced live and every close is recorded, so PnL is real rather than reconstructed.
- ▹Append-only PostgreSQL ledger with in-transaction rollups
- ▹AES-256-GCM / HKDF encrypted custodial wallets
- ▹Redis cache and single-flight lock to cut RPC load
TypeScriptviemExpressPostgreSQLRedisNext.jsshadcn/ui
Web32022
Poinswap
Web3 ecosystem site with on-chain backer subscriptions on Polygon
Marketing site and dApp for a DeFi ecosystem that bridges crypto into real-world retail utilities. Visitors connect a wallet, sign in with Ethereum, and back the project by subscribing to on-chain packages, with referral tracking and an embedded swap.
- ▹Sign-In with Ethereum (SIWE) against a backend nonce
- ▹Subscription contract calls via useDApp and ethers on Polygon / Mumbai
- ▹MetaMask and WalletConnect support, network switching and referral links
ReactViteethersuseDAppSIWEWalletConnectRedux ToolkitTailwind CSS
AI2026
Video Maker
From a short written idea to a finished narrated video
Started as a local CLI (scene plan, stills, narration, motion, assembled MP4) and grew into a hosted, multi-tenant service: an API tier, background workers and a web app with live progress.
- ▹Schema-validated scene scripts from xAI (Grok)
- ▹Polyglot split: NestJS API tier, Python workers, sharing only Postgres, SQS and S3
- ▹Next.js frontend behind a same-origin proxy with httpOnly session cookies
PythonNestJSNext.jsPostgreSQLAWS SQSAWS S3xAI
AI2026
X Content Automation
AI-generated text and image posts for X, on a schedule
Connect an X account, choose a topic and language, generate content with an AI provider, manage drafts and set up automations. Includes premium membership logic.
- ▹Contract-compatible NestJS backend that replaced a temporary in-app API
- ▹Multiple AI providers: Google AI Studio, xAI, OpenAI
- ▹Typed API client, TanStack Query and Form on the frontend
Next.jsNestJSTypeORMPostgreSQLCloudinaryZod
Data2026
Interactive Web Scraper
Point-and-click scraping recipes, executed by distributed workers
A Next.js recipe builder where you pick elements on a page to define steps, and a FastAPI backend that plans each job, splits it into chunks and runs them on Arq workers with plain HTTP or headless Playwright.
- ▹Visual element picker with drag-and-drop step ordering
- ▹Live job status and tabular results preview
- ▹NDJSON output, Redis queue, Postgres state, Alembic migrations
FastAPIArqPlaywrightRedisPostgreSQLNext.jsdnd-kit
Data2024
Drilling Report OCR
Turns daily drilling report PDFs into a queryable database and live dashboard
A university team project (DTEDI UGM, PDU) that extracts tables from oil and gas daily drilling report PDFs, cleans them into structured records and visualises well progress over time.
- ▹Camelot table extraction and regex cleaning into profile, drilling parameter, AFE cost and time-breakdown tables
- ▹Flask API over PostgreSQL with hash-based dedup of re-uploaded reports
- ▹Streamlit + Plotly dashboard; Docker image deployed to a VPS via GitHub Actions
PythonFlaskCamelotSQLAlchemyPostgreSQLStreamlitPlotlyDockerGitHub Actions
Full-stack2026
Marketplace Rewards
Seller app that turns Tokopedia and Shopee purchases into reward points
See who buys your products across marketplaces, inspect transactions, watch amounts convert to points through a configurable rule, and redeem points for QR vouchers. Built spec-first against a swappable data provider.
- ▹Swappable mock/real data provider
- ▹TanStack Table views
- ▹Vitest coverage
Next.jsTanStack QueryTanStack TableZodVitest
Full-stack2025
Desa Digital
Official website for an Indonesian village
Village profile, news, agenda, demographics, development projects, public service forms and a marketplace for local products, with dark mode.
- ▹Prisma-backed content
- ▹Village marketplace (Lapak Desa)
- ▹Kanban-style admin tools
Next.jsTypeScriptPrismaRedux ToolkitChart.js
Client work2026
Medikpro
Clinic website and CMS with a dynamic page → section → item model
Public site plus admin CMS for a clinic network: doctors and schedules, treatments, branches, appointments, products, articles with tags, and fully dynamic page sections.
- ▹Reusable page/section/item content structure
- ▹SEO and PageSpeed audit fixes
- ▹Breadcrumbs, tables and tag system
LaravelLivewireTailwindFlowbiteGSAPMySQL
Client work2026
TACO Membership
Events, workshops and certificates for a professional community
Member registration with OTP, event and workshop management, QR check-in, surveys, points and downloadable certificates.
- ▹QR attendance with html5-qrcode
- ▹Certificate generation
- ▹Points and member dashboards
LaravelTailwindChart.jsRedisMySQL
Client work2026
Duara Sound
Bilingual lead-generation site for a sound-system rental business
Single-page marketing site in Indonesian and English with a small CMS for packages, services, portfolio, FAQ and static pages. Every call to action goes to WhatsApp.
- ▹ID / EN localisation
- ▹CMS-driven packages and portfolio
- ▹Mobile-first layout
Laravel 12ViteTailwindMySQL
Client work2026
Nippon
Corporate site performance work
Maintenance and PageSpeed work on a PHP corporate website: bundling, layout-shift fixes and log hygiene.
- ▹Reduced layout shift
- ▹Asset bundling for PageSpeed
PHPCodeIgniterJavaScript
Frontend2023
MoFE
Listing platform with AI-powered price prediction
Launched the frontend from scratch, turning Figma designs into a fully responsive UI and email templates, and integrated an AI price prediction feature with the backend services to give users real-time insights.
- ▹Listing previews and a content dashboard for publishing
- ▹Role-based user management
- ▹Per-page metadata for strong PageSpeed scores and search indexing
Next.jsTypeScriptReduxRTK QueryTailwind CSS
Frontend2023–2024
Tawar Cepat
Live auction flow for used motorcycles on MoFE
The "quick bid" auction section of MoFE: browse motorcycles up for auction, follow a live countdown, and place bids or submit your own bike with owner and vehicle details. Built on the Next.js App Router with RTK Query services.
- ▹Countdown-driven auction states (upcoming, live, ended, complete)
- ▹Multi-step bid and vehicle data forms with react-hook-form validation
- ▹Google / Facebook sign-in, blurhash image placeholders and CloudFront image loader
Next.jsRedux ToolkitRTK Queryreact-hook-formTailwind CSSSentry
Frontend2022–2023
Questeon
Quest-building platform with interactive modules synced to a mobile app
Launched the quest-building platform frontend from scratch and delivered a seamless cross-device experience and email templates from Figma designs.
- ▹Image puzzles synced with the mobile app and a live mobile preview
- ▹Time tracker, polling, image cropping, multiple-choice image tasks, Spot-it and QR scanning
- ▹Role-based user management
ReactTypeScriptReduxRTK QueryTailwind CSSBootstrap
Frontend2023–2024
Oh Circle
Community circles with posts, members and admin tools
A responsive React app where people create or join circles, publish and read posts, and search for communities. Circle admins get pages to manage members, posts, circle details and user settings.
- ▹Rich-text post editor with Draft.js
- ▹Paginated member and post tables with bulk selection
- ▹Separate desktop sidebar and mobile layouts
ReactViteReact RouterRedux ToolkitDraft.jsTailwind CSS