Skip to content
View jamesvincentsiauw's full-sized avatar
🏠
Working from home
🏠
Working from home

Block or report jamesvincentsiauw

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
jamesvincentsiauw/README.md

Vincent Siauw

Software engineer in Jakarta, working across the backend, the frontend and the LLM parts of a product. Most of my services are written in Go and Python, with Next.js on the frontend.

I work at Jobkred, a Singapore-based HR tech company, where I build an LLM workflow platform: a ReactFlow canvas where users chain AI agents into scheduled workflows, backed by FastAPI. Before that I spent four years at Offerland Technologies, first as a freelancer and then full time, building scraping infrastructure in Python and Django on GCP that collects over a million data points a day from more than 20 e-commerce platforms. While freelancing for Offerland, I also spent a few months at Tokopedia on a real-time seller analytics platform built with Go, Kafka and Redis.

I studied Informatics Engineering at Institut Teknologi Bandung. My day-to-day work lives in company repositories, so this profile holds side projects.

Tools I reach for most: Go, Python, TypeScript, React, PostgreSQL, Redis, Kafka, RabbitMQ, Docker, GCP, OpenAI API.

Projects

Repository What it does
go-llm-gateway OpenAI-compatible LLM gateway in Go. When a provider drops in the middle of a streamed answer, the next one continues from the last word the client received. Also handles token quotas in Redis and per-provider circuit breakers.
go-rabbitmq-retry RabbitMQ worker in Go. Failed messages come back after a delay that grows with each attempt, and the ones that keep failing are parked with the reason attached. CI runs the tests against a real broker.
web The code behind my portfolio site, with a Payload CMS admin in the same Next.js app.
scraping_insight Compares free-tier scraping APIs on success rate, latency and credit cost, with a dashboard for the results.
etl-pipeline Small Python ETL pipeline configured in YAML that loads CSV data into SQLite.
tampered-image-detector Flags edited photos using Error Level Analysis and a CNN, served through a Flask API.

Portfolio · LinkedIn

Pinned Loading

  1. tampered-image-detector tampered-image-detector Public

    Simple Tampered Image Detection using Error Level Analysis and Convolutional Neural Network with Flask

    Jupyter Notebook 2

  2. etl-pipeline etl-pipeline Public

    Modular, YAML-configured ETL pipeline in Python (CSV to SQLite)

    Python

  3. scraping_insight scraping_insight Public

    Benchmark of free-tier web scraping APIs: success rate, latency, cost, with a dashboard

    Python

  4. web web Public

    Personal portfolio with built-in CMS: Next.js 16, Payload CMS, PostgreSQL, S3

    TypeScript

  5. go-rabbitmq-retry go-rabbitmq-retry Public

    Go worker for RabbitMQ with tiered retries, a parking queue and idempotent processing

    Go

  6. go-llm-gateway go-llm-gateway Public

    OpenAI-compatible LLM gateway in Go that fails over between providers mid-stream

    Go