PATRIK
DINH
Available for work

Patrik Dinh

Building internal systems,automation and AI tools.

I build practical software for real workflows, with a strong focus on security, testing and whether the final system can actually be trusted in day-to-day use.

EmailGitHub

Work

Real systems built for everyday use, not just portfolio demos.

What you see here are public-facing versions of larger production systems. I share enough to explain the thinking and the work, but not the private implementation details and internal workflows behind them.

Lootea Operations System thumbnail

Lootea Operations System

A POS-first system that runs real day-to-day cafe operations.

An in-house cafe operations system built around real bubble tea workflows, not generic restaurant assumptions. POS is the center: checkout, orders, payments, receipts, labels and refunds, with the wider operation connected through products, employee cards, shifts, calendar sync, invoice AI, stock, recipes and reporting.

  • Built around the POS core: fast checkout, configured drinks, payments, receipts, labels and refunds.
  • Connects the wider operation through products, stock, recipes, employee cards, shifts, calendar sync, invoice AI and reporting.
  • Supports parked orders, split payments, cash rounding, refunds, vouchers and dual-currency receipts in daily use.
  • Connected to a custom Print Agent for instant receipts, drink labels and cash drawer actions without extra staff steps.

Challenge: Keeping checkout, products, staff, shifts, invoices, printing, permissions and reporting coherent in daily operation.

Cloud POSsends tokenized jobsGET /healthPOST /print-jobsreceipt / kitchencash_drawerPrint AgentElectron app - 127.0.0.1:47821Token auth + config UIRole routing + printer queuesPDF/ESC-POS + Windows fallbackHealth + 24h dedupeReceiptSumatraPDF/PDF - ESC/POS rawKitchen labelImage/PDF - Windows fallbackDrawer kickESC p pulseAPI contractsReceipt taskKitchen taskCapabilitiesPrint result

Print Agent

Windows desktop print bridge with local admin UI and token-protected HTTP API.

A maintained Windows desktop app that lets a cloud POS print through local receipt printers, kitchen label printers and cash drawers. The current public implementation replaces the original Node-only bridge with an Electron tray app, installer, local admin UI, token-protected API, printer role configuration and safer runtime behavior.

  • Built as an Electron desktop app with tray integration and a local admin UI for device setup.
  • Exposes a token-protected HTTP API with GET /health, GET /printers, PATCH /config and POST /print-jobs.
  • Routes receipt, kitchen and cash_drawer tasks to configured Windows printers.
  • Supports receipt printing through SumatraPDF/PDF or POS/ESC raw mode, kitchen labels through image/PDF fallback paths and cash drawer pulses.
  • Uses 24-hour local dedupe by jobId + normalized request content to suppress accidental duplicate prints.
  • Keeps checkout behavior non-blocking: print failures surface as warnings while receipts, kitchen labels and drawer actions can be retried through explicit POS flows.
  • Ships as a Windows NSIS installer with prerequisite bootstrap for SumatraPDF, IrfanView and ngrok, plus a simulated backend for testing without physical printers.

Challenge: Turning a fragile browser-printing workaround into an installable, token-protected Windows desktop bridge that staff can ignore while it keeps working.

Lobby Mates

A squad planning app that helps friend groups decide what they can play together.

A live full-stack product for gaming groups, currently deployed in production and still actively evolving. Lobby Mates brings Steam and Microsoft/Xbox sign-in, squad invites, seasons, shared libraries, play intent, Steam wishlist overlap, profile presence, suggested games, top picks, comparison filters and Discord room setup into one focused dashboard, with a public read-only demo for portfolio review.

  • Built around the practical question: what can this group play together right now?.
  • Uses Steam OpenID, Microsoft/Xbox sign-in and Steam Web API for account identity, profile data, current activity, game ownership, playtime, public library sync and squad wishlist discovery.
  • Supports multi-squad membership, invite codes, seasons, active squad switching and leader/member permissions in one production database.
  • Ranks games with audit-friendly score breakdowns, readiness, ownership, play intent, wishlist overlap, sort modes and member comparison instead of a generic list.
  • Includes cards/list views, setup guidance, paginated browsing and status/platform/genre/search filters for a dashboard that stays usable as the squad library grows.
  • Adds an optional Discord integration for private squad text and voice rooms managed from the app.
  • Includes a public read-only demo route powered by a viewer role, normal session cookies and server-side write guards.
  • Production deployment is live, but the product is still under active development as the core group workflow, ranking model and integrations continue to improve.

Challenge: Making group game choice clear while shipping a live product whose multi-provider sign-in, seasons, Steam sync, invites, permissions, scoring and Discord state are still being actively refined.

Live preview

VOUCHER GENERATOR

Automated PDF voucher generation with live preview, batch creation, and Supabase-backed sequencing.

A precision tool for marketing operations that replaced slow, error-prone manual voucher preparation with a controlled PDF generation workflow. It handles print-ready output, batch creation, sequential IDs and DEMO/PROD safeguards without sacrificing layout accuracy.

  • Replaced a manual voucher workflow with a faster, more reliable batch process.
  • Generates print-ready PDF vouchers using a high-resolution A4 template.
  • Supports batch generation of up to 200 vouchers in a single transaction.
  • Uses pixel-perfect X/Y coordinate mapping with live preview for layout accuracy.
  • Handles sequential numbering safely via Supabase in PROD and sandbox logic in DEMO.
  • Protects production data with a clear DEMO mode, watermarking and disabled writes.

Challenge: Keeping print precision, batch sequencing and DEMO/PROD safety reliable at once.

Live preview

Invoice AI Extractor

AI-powered invoice data extraction using Google Gemini.

An AI-powered invoice extraction pipeline built for real accounting workflows, not demo screenshots. It converts complex PDF invoices into a structured JSON schema, then validates, corrects and normalizes the result so it can be used directly in our internal ERP.

Challenge: Making AI extraction trustworthy enough for accounting and ERP use, not just demos.

Live preview

About

About me

I got into software because I like figuring things out and making them actually useful. Most of what I build lives somewhere between internal tools, automation and practical systems for day-to-day work, usually in places where generic software does not fit very well.

I use AI tools a lot, but I am not interested in just getting an app on the screen and calling it finished. I care about the parts that decide whether something is actually usable: security, testing, validation, reliability, and whether it still makes sense once real people start depending on it.

I am still early in my career, so I am learning constantly. But I already know I work best when I can take a messy problem, break it down, build something practical, and keep improving it as it gets used in the real world.

What I do

I build internal tools, automation and full-stack web apps for workflows that need more than a generic template.

Who I'm useful for

People who have a real workflow problem, not just a vague app idea, and want someone who can turn it into something practical and usable.

Where I'm still growing

Most of the systems I have built so far were built independently, so one area I am still growing in is the team side of software development - code reviews, shared ownership and larger engineering workflows.

A small truth

I probably spend more time thinking about edge cases than is healthy.