Fullstack Developer

Irfana D. F

I build the parts of a product most people never see — payment flows that can't double-charge, real-time bridges that can't drop a message, APIs that hold up under concurrent writes. Currently freelancing across three production systems, backend-first.

Bandar Lampung, Indonesia · building since Aug 2023

profile.ts
1interface Profile {
2 name: string;
3 location: string;
4 role: string;
5 focus: string[];
6 education: string;
7}
8
9const me: Profile = {
10 name: "Irfana Dwi Fangga",
11 location: "Bandar Lampung, ID",
12 role: "Fullstack Developer",
13 focus: ["Payments", "Real-time", "Concurrency"],
14 education: "D3 IT @ Politeknik Negeri Lampung",
15};
16
17const introduce = () =>
18 me.role + " from " + me.location;

01

Currently building

Three production systems, running concurrently, all backend-first.

Seria — Freelance Fullstack Developer

Seria

Jan 2026 — Present

Freelance Fullstack Developer

The web ecosystem for a Minecraft server community — storefront, admin CMS, and a Java/Spigot plugin that bridges the web backend to the live game server over RCON. Payment gateway (Duitku) integration with signature verification and webhook idempotency.

Next.jsTypeScriptPrismaSupabasePostgreSQLAWSAWSJavaRCONDuitku
GM Workspace — Freelance Fullstack Developer

GM Workspace

Jul 2026 — Present

Freelance Fullstack Developer

An internal management platform for a YouTube production team — automated payroll, a tiered bonus engine driven by asynchronous view-count syncing, and Google Drive integration with OAuth + encrypted token storage.

Next.jsTypeScriptTailwind CSSHeroUIPrismaSupabasePostgreSQLNextAuthYouTube APIGoogle Drive API
RSTPOS — Backend Developer Intern

RSTPOS

Feb 2026 — Jun 2026

Backend Developer Intern

A multi-branch Point of Sale system for retail/F&B. Built the REST API and internal dashboard — atomic stock adjustments, branch-scoped inventory, and role-based access.

Django REST FrameworkPostgreSQLDockerPython

02

System deep-dives

Not screenshots — the actual problems, and how they got solved.

Seria

Payments that can't double-charge

Duitku's payment webhook can retry, arrive out of order, or fire more than once for the same order — and every one of those has to end with exactly one entitlement granted, never zero, never two.

  • Verify every callback against Duitku's MD5 signature before touching the database
  • Treat the order row as the source of truth — a webhook for an already-PAID order short-circuits instead of re-granting
  • Only call the RCON bridge to grant the in-game item after the order state transition commits
Next.jsTypeScriptTailwind CSSShadcnUiPrismaSupabasePostgreSQLAWSAWSDuitku

Seria

A real-time bridge to a game server

The webstore and the Minecraft server are two separate processes. A purchase on the web has to reach the game server reliably, and the plugin side has to speak RCON correctly under load.

  • Built a small RCON client in Java implementing the packet protocol directly (auth, exec, response) rather than pulling in a heavier framework
  • Wrapped entitlement grants behind a single sendCommand path so retries and failures are handled in one place
  • Kept the plugin's responsibilities narrow — permission grants and in-game notifications, nothing else
JavaSpigotMCSpigotRCON

RSTPOS

Inventory that survives concurrent branches

Multiple branches can adjust stock for the same product at the same time. Without locking, two concurrent requests can both read the same quantity and one adjustment silently overwrites the other.

  • Used select_for_update() inside an atomic transaction to lock the stock row for the duration of the adjustment
  • Rejected adjustments that would push quantity negative, before the write ever happens
  • Logged every adjustment (branch, product, quantity, reason) for audit and reconciliation
Django REST FrameworkPythonPostgreSQLDocker

GM Workspace

A payroll engine that can't pay twice

Bonus tiers are driven by asynchronous view-count syncing jobs. If a sync job overlaps with a payroll run, or retries after a partial failure, the same bonus can get queued more than once.

  • Ordered guard logic around the payout step so a bonus can only move from 'pending' to 'paid' once
  • Decoupled the view-count sync from the payout calculation so a slow or retried sync never blocks payroll from running on schedule
  • Modeled tiers as data, not conditionals, so a new bonus tier is a config change, not a deploy
Next.jsTypeScriptTailwind CSSHeroUIPrismaSupabasePostgreSQLNextAuthYouTube APIGoogle Drive API

03

Tech stack

  • Languages: JavaScript, TypeScript, Java, Python, PHP
  • Frontend: Next.js, React, Tailwind CSS, HeroUI
  • Backend: Node.js, Django REST, Spring, Prisma, NextAuth, Celery, HTMX
  • Database: PostgreSQL, Supabase, Redis, Upstash
  • Tools: Docker, Git, GitHub, Vercel, AWS, Postman, Google Cloud Console
  • Currently learning: Go
CeleryhtmxAWS
Languages
JavaScript · TypeScript · Java · Python · PHP
Frontend
Next.js · React · Tailwind CSS · HeroUI
Backend
Node.js · Django REST · Spring · Prisma · NextAuth · Celery · HTMX
Database
PostgreSQL · Supabase · Redis · Upstash
Tools
Docker · Git · GitHub · Vercel · AWS · Postman · Google Cloud Console
Learning
Go

04

Experience

GM Workspace

Jul 2026 — Present

Freelance Fullstack Developer

Remote · Individual client

  • Designed the payroll and tiered bonus engine end to end, including concurrency-safe payout logic
  • Integrated Google Drive (OAuth + AES-256-GCM encrypted token storage) for team asset management

RSTPOS — PT. Rizq Sanjaya Teknologi

Feb 2026 — Jun 2026

Backend Developer Intern

Internship

  • Built REST APIs and the internal dashboard for a multi-branch retail/F&B POS system
  • Implemented atomic, race-safe stock adjustment logic across branches

Seria

Jan 2026 — Present

Freelance Fullstack Developer

Remote · Minecraft server community

  • Built the storefront, admin CMS, and payment gateway integration (Duitku)
  • Wrote a Java/Spigot plugin bridging the web backend and game server in real time via RCON

Politeknik Negeri Lampung

Aug 2023 — Present

D3 Information Technology

Bandar Lampung, Indonesia

  • Best Presentation winner at Expo 2025 for a digital building-reservation system for the campus — Next.js, Redis (Upstash), Supabase Postgres
  • Where the hands-on development track started — three years in, still going

05

Let's talk

Bandar Lampung, Indonesia. Open to remote fullstack roles — backend-first — and open to discussing relocation for the right one.

New Message
0/2000

Available for new work