Designing the interface as a physical object
A fixed 1024×580 UI layout with clear hierarchy, large touch targets, Metro rail route map, ticket options, contactless Tap & Go, accessibility, and bilingual support.

A fully integrated public-transport ticketing terminal for FiveM, rendered as a live DUI runtime texture on a physical 3D kiosk model with custom virtual camera cursor, calendar passes, and authoritative server economy.
The goal was not to create another fullscreen overlay. I wanted the player to walk up to a physical ticket machine in the world, look at its actual screen, and interact with it as if the object itself were running the application. The interface, 3D prop UV mapping, camera framing, cursor translation, and backend economy all had to cooperate to make one interaction feel natural.
From raw in-game camera deltas to real-time contactless banking and inventory transactions.
A fixed 1024×580 UI layout with clear hierarchy, large touch targets, Metro rail route map, ticket options, contactless Tap & Go, accessibility, and bilingual support.

Streamlined purchasing flow with authoritative server validation, balance verification, and inventory delivery via ox_inventory.

Players select travel days directly on a dynamic calendar enforcing continuous date ranges and calculating proportional fares automatically.

Contactless card payments linked to the player's bank account with automatic daily ($8.00) and weekly ($32.00) spending caps resetting at midnight.

Integrated support hotline, interactive FAQ accordion, station operational statuses, and high-contrast accessibility options.

Centralized configuration controlling prop model names, DUI dimensions, camera offsets, virtual cursor sensitivity, ticket prices, and Tap & Go spending caps.



The Vue 3 application renders at 1024×580 into a DUI browser and replaces the screen texture on the modified prop_train_ticket_02.ydr in real-time, allowing nearby players to see the active terminal.
Translates raw camera delta input from the game engine into browser coordinates (SendDuiMouseMove), with an in-game /dmetrotune tool for live camera positioning and framing.
Full backend validation via QBX and ox_inventory. Purchases, contactless Tap & Go daily/weekly spending caps, and automatic refunds on inventory overflow are handled on the server.
The player should feel like they are operating a machine, not opening a menu.”