Skip to content
View Tthanh2k6's full-sized avatar
😁
Looking for a job
😁
Looking for a job

Highlights

  • Pro

Block or report Tthanh2k6

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. 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
Tthanh2k6/README.md

πŸ‘‹ Hi, I'm Thanh

Full-stack developer in Ho Chi Minh City (UTC+7). I build and ship apps, and I review Supabase/Postgres projects for the access-control mistakes that fast-built apps often have. Open to remote contract work, about 20–30 hours a week, async and in writing.

Need a Supabase RLS review, or help on a React Native or Python project? Contra Β· Upwork Β· Email

πŸ› οΈ What I work on

  • πŸ” Supabase/Postgres security: Row Level Security and policy review, SECURITY DEFINER grants, Storage buckets. I wrote supabase-rls-check, an open-source CLI, MCP server and GitHub Action (17 catalog rules, a scan for secret keys in public env variables and client/agent configs, and a diff between two runs; 133 tests, CI on PostgreSQL 15).
  • πŸ“± React Native apps: full-time developer at Madalena, a cosmetics retailer, since March 2026. I built its loyalty app as the only developer (React Native, Expo, TypeScript, PHP REST API, Electron admin). It is on the App Store and Google Play.
  • βš™οΈ Python automation: five public Apify Actors, n8n and Make workflows, Google Apps Script, webhooks.

🧰 Stack

Python, TypeScript, JavaScript, PHP, Kotlin, Node.js, React, PostgreSQL, Docker, Git

SQL httpx Playwright Apify SDK n8n Make Google Apps Script React Native

πŸš€ Featured projects

supabase-rls-check: read-only checks for Supabase RLS, policies, SECURITY DEFINER grants and public buckets. CLI, MCP server and GitHub Action; 17 catalog rules, 133 tests. pipx install supabase-rls-check PyPI Β· Glama Β· Agent skill on Agensi Β· Cursor plugin

Race-safe salon booking (Cloudflare Workers + D1): five simultaneous requests for the same technician and time give 1 booking and 4 rejections. Per-technician iCal feeds, admin page, English/Vietnamese UI, 11 tests. Live demo (deposits are turned off on the demo)

supabase-multitenant-rls: reference migration for many customers in one shared Postgres schema on Supabase. Forced RLS, roles from a memberships table, composite keys that block cross-tenant references, tenant-scoped Storage. 19 tests sign in as real users and try to cross the boundary; CI also lints the schema with supabase-rls-check (0 findings).

market-data-pipeline: Python job that pulls free market data (indices, FX, crypto, commodities, bonds, VIX), normalizes OHLCV to UTC, validates it, adds indicators and upserts into Supabase on a GitHub Actions schedule. 23 tests.

remote-contract-jobs: CLI and MCP server that collects remote contract and part-time developer jobs from 8 public sources and filters out location, video-call and ID-document blockers. 84 tests. PyPI

n8n templates: n8n-retry-after reads Retry-After (seconds or HTTP date), falls back to jittered backoff and defers long waits instead of holding the workflow open (13 tests). n8n-lead-followup-drafts turns a Google Sheet of leads into AI-written Gmail drafts that a person reviews and sends; re-runs do not create duplicate drafts (27 tests). Both validated with n8n-mcp, not yet run against live accounts.

discord-membership-bot β€” Discord bot that gives a paid role to members with an active Stripe, Whop or Zapier/Make subscription and removes it when the paid period ends; posts Shopify order alerts without customer contact details. Node.js, discord.js, node:sqlite, 57 offline tests. Source

vn-sme-offline-tools β€” 9 offline browser tools for Vietnamese small businesses (VietQR cashier, debt aging, quotes, fleet fuel & toll reconciliation, e-invoice XML check). No server; data stays on the device. Live demo Source

Real screens: B2B debt aging, fleet reconciliation, VietQR cashier, wholesale quote

web-scraping-showcase B2B lead and contact enricher E-commerce price and stock monitor DiemDanhQR

The Apify Actors were published in October 2026 and are still new.

More public projects
Project What it is
apify-us-healthcare-clinic-contact-enricher Apify Actor: contact details from US clinic websites, with a simple chain-vs-independent keyword check
expo-upgrade-casebook Open-source Expo SDK 49 to 58 upgrade case study with commit-by-commit fixes (60 Jest suites, 187 tests, Android export CI)
expo-build-doctor Zero-dependency Node CLI checking Expo app.json, eas.json, and package.json for build and store blockers (21 rules, 26 tests)
rn-upgrade-check Zero-dependency Node CLI checking React Native and Expo dependencies against React Native Directory (22 tests)
chatbot-eval-harness End-to-end RAG chatbot QA harness using node:test, promptfoo, and Playwright (15 unit tests, 40-prompt suite)
twenty-crm-apify-b2b-sync Python sync from Apify results into Twenty CRM with dedupe and HMAC webhooks
moto-nav Android app + ESP32 handlebar display for turn-by-turn directions over BLE (learning project)

✍️ Latest articles

🀝 Open-source contributions

  • tabloy/keygate#144 β€” fix(web): restore default border color for Tailwind v4 (open-source self-hosted license management platform, ~250 GitHub stars; +15 lines of CSS restoring the default border colour after the Tailwind v4 upgrade, merged 13 Nov 2026).

πŸ“œ Certificates

HackerRank: Software Engineer HackerRank: REST API HackerRank: SQL (Advanced) HackerRank: Node.js HackerRank: JavaScript HackerRank: Problem Solving

Pinned Loading

  1. vn-sme-offline-tools vn-sme-offline-tools Public

    Offline browser tools for Vietnamese small businesses (VietQR, debt aging, quotes, fleet fuel reconciliation...)

    HTML

  2. discord-membership-bot discord-membership-bot Public

    Discord bot that syncs a paid role with Stripe, Whop or Zapier/Make subscriptions and posts Shopify order alerts. Node.js, discord.js, node:sqlite.

    JavaScript

  3. market-data-pipeline market-data-pipeline Public

    Free market data (indices, FX, crypto, commodities, bonds, VIX) to Supabase on a schedule, with validation and indicators

    Python

  4. remote-contract-jobs remote-contract-jobs Public

    CLI + MCP server: remote contract/part-time developer jobs from public feeds, filtered for location, video-call and ID-document blockers

    Python

  5. supabase-multitenant-rls supabase-multitenant-rls Public

    Reference migration + tests for tenant isolation on a shared Postgres schema with Supabase RLS

    PLpgSQL

  6. supabase-rls-check supabase-rls-check Public

    Read-only checks for Supabase RLS, policies, SECURITY DEFINER grants and public buckets. CLI + MCP server.

    Python