[{"data":1,"prerenderedAt":362},["ShallowReactive",2],{"index-en":3,"home-projects-en":82},{"id":4,"title":5,"about":6,"availability":9,"body":10,"brand":11,"contact":12,"description":17,"extension":18,"hero":19,"locale":24,"meta":25,"navigation":26,"path":27,"seo":28,"services":29,"skills":45,"stem":76,"work":77,"__hash__":81},"index\u002Fen\u002Findex.yml","double9",{"title":7,"description":8},"About","double9 does both systems and UI. Designs in Figma, then builds them so they can be used for real.\nAbout 3–4 years of experience, and open for full-time work.\n","Open for full-time",null,"D9 DEV",{"title":13,"description":14,"label":15,"githubLabel":16},"Contact","Custom FiveM systems and server support. Message about a job or a full-time role.","DM on Discord","GitHub","Back-end developer & UI designer — FiveM \u002F Lua scripts, system support & monitoring.","yml",{"links":20},[21],{"label":15,"color":22,"icon":23},"primary","i-simple-icons-discord","en",{},true,"\u002Fen",{"title":5,"description":17},{"title":30,"description":31,"items":32},"Services","New scripts, changes to existing ones, and looking after a server.",[33,37,41],{"title":34,"description":35,"icon":36},"Write from scratch, or fix and extend","Start a new script, or repair and extend one that already exists.","i-lucide-code-xml",{"title":38,"description":39,"icon":40},"Maintenance and monitoring","Look after a server and keep watch on how it is running.","i-lucide-activity",{"title":42,"description":43,"icon":44},"Investigate worrying problems","Check system behavior that looks wrong, and find the cause.","i-lucide-search",{"title":46,"description":47,"items":48},"Skills","Tools used on the job.",[49,52,55,58,61,64,67,70,73],{"name":50,"icon":51},"Lua","i-simple-icons-lua",{"name":53,"icon":54},"HTML","i-simple-icons-html5",{"name":56,"icon":57},"JavaScript \u002F jQuery","i-simple-icons-javascript",{"name":59,"icon":60},"Vue.js","i-simple-icons-vuedotjs",{"name":62,"icon":63},"CSS \u002F Tailwind","i-simple-icons-tailwindcss",{"name":65,"icon":66},"MySQL","i-simple-icons-mysql",{"name":68,"icon":69},"MongoDB","i-simple-icons-mongodb",{"name":71,"icon":72},"JSON","i-lucide-braces",{"name":74,"icon":75},"Figma","i-simple-icons-figma","en\u002Findex",{"title":78,"description":79,"allLabel":80},"Projects","Six featured FiveM systems are below. The rest are on the projects page.\n","See all projects","7TfbcUKbAsdm_kqLlEP8cJhpGXljhMxWqqa-FLn17IA",[83,104,130,151,169,186,204,219,233,250,265,280,294,315,334,349],{"id":84,"title":85,"date":86,"description":87,"extension":18,"featured":26,"gaps":10,"image":88,"images":89,"linkLabel":10,"locale":24,"meta":95,"placeholder":96,"slug":97,"sort":98,"stem":99,"tags":100,"url":10,"__hash__":103},"projects\u002Fen\u002Fprojects\u002Finventory-custom.yml","Inventory Custom","May 2026","A FiveM inventory with its own UI, built in 2026. It has categories, a weight bar, and a confirm step when giving an item.\n","\u002Fwork\u002Finventory-custom-1.webp",[90,92],{"src":88,"alt":91},"Custom inventory showing categories and item slots",{"src":93,"alt":94},"\u002Fwork\u002Finventory-custom-3.webp","Confirm dialog for giving an item",{},false,"inventory-custom",1,"en\u002Fprojects\u002Finventory-custom",[101,50,102],"FiveM","Vue","elP0un7gjc6GFv5zV5s5_h3rhcEwYHLh5prFBokeAGk",{"id":105,"title":106,"date":107,"description":108,"extension":18,"featured":26,"gaps":10,"image":109,"images":110,"linkLabel":10,"locale":24,"meta":124,"placeholder":96,"slug":125,"sort":126,"stem":127,"tags":128,"url":10,"__hash__":129},"projects\u002Fen\u002Fprojects\u002Finventory.yml","Inventory","Oct 2025","A FiveM inventory with categories. Change a weapon skin from the side panel, open the mailbox, and open a vehicle trunk from the same screen. Giving or dropping an item asks for confirmation.\nThe weapon skin system lives on this card.\n","\u002Fwork\u002Finventory-3.webp",[111,113,116,119,121],{"src":109,"alt":112},"Inventory with a weapon-skin panel",{"src":114,"alt":115},"\u002Fwork\u002Finventory-4.webp","Inventory with the mailbox open",{"src":117,"alt":118},"\u002Fwork\u002Finventory-5.webp","Vehicle trunk screen",{"src":120,"alt":94},"\u002Fwork\u002Finventory-1.webp",{"src":122,"alt":123},"\u002Fwork\u002Finventory-2.webp","Confirm dialog for dropping an item",{},"inventory",2,"en\u002Fprojects\u002Finventory",[101,50,102],"wIkuwpCg5GIvt7hRQv5bTnvsqkJU-pKHxfi4vRVIvZA",{"id":131,"title":132,"date":133,"description":134,"extension":18,"featured":26,"gaps":10,"image":135,"images":136,"linkLabel":10,"locale":24,"meta":145,"placeholder":96,"slug":146,"sort":147,"stem":148,"tags":149,"url":10,"__hash__":150},"projects\u002Fen\u002Fprojects\u002Fd9-bingo.yml","d9_bingo","Mar 2026","Bingo v3.1.0. Entry can be limited by job or group, and a room can require conditions before you join.\nDrawing a number has a cooldown. Rewards follow winner order, and the room deletes itself when the game ends.\nGame types are Free, Prize Pool, and Tournament. Open the board with \u002Fbingoboard.\n","\u002Fwork\u002Fbingo-1.webp",[137,139,142],{"src":135,"alt":138},"Bingo board in Free mode",{"src":140,"alt":141},"\u002Fwork\u002Fbingo-3.webp","A bingo card during a game",{"src":143,"alt":144},"\u002Fwork\u002Fbingo-2.webp","Bingo panel for drawing a number",{},"d9-bingo",3,"en\u002Fprojects\u002Fd9-bingo",[101,50,102],"MwbQlHSQLDu_GFHJVHSE64KhAfrM_4l1U-esf3QrRaA",{"id":152,"title":153,"date":154,"description":155,"extension":18,"featured":26,"gaps":10,"image":156,"images":157,"linkLabel":10,"locale":24,"meta":163,"placeholder":96,"slug":164,"sort":165,"stem":166,"tags":167,"url":10,"__hash__":168},"projects\u002Fen\u002Fprojects\u002Fgang-system.yml","Gang System","Jun 2025","A gang list with search, filters, and a member panel for the gang you open.\n","\u002Fwork\u002Fgang-system-1.webp",[158,160],{"src":156,"alt":159},"Gang list",{"src":161,"alt":162},"\u002Fwork\u002Fgang-system-2.webp","Gang member panel",{},"gang-system",4,"en\u002Fprojects\u002Fgang-system",[101,50,102],"Z14PO0xpC3l8m7fW00dVKS0yHAmv5ZVnftsRipDMwSY",{"id":170,"title":171,"date":172,"description":173,"extension":18,"featured":26,"gaps":10,"image":174,"images":175,"linkLabel":178,"locale":24,"meta":179,"placeholder":96,"slug":180,"sort":181,"stem":182,"tags":183,"url":184,"__hash__":185},"projects\u002Fen\u002Fprojects\u002Ffashion-showcase.yml","Fashion Showcase","Jun 2026","A fashion showcase with a themed UI. It has Prop and Ped modes, a smooth camera, several items at once, and a heading you can drag.\n","\u002Fwork\u002Ffashion-showcase.webp",[176],{"src":174,"alt":177},"Fashion showcase with camera controls and an item list","Watch the video",{},"fashion-showcase",5,"en\u002Fprojects\u002Ffashion-showcase",[101,50,102],"https:\u002F\u002Fyoutu.be\u002FgUBCXICHbLM","Wjxt6KVo2FnMeQHHD_9rSnZtn3x5Xb9s5c3YOv1xk9s",{"id":187,"title":188,"date":189,"description":190,"extension":18,"featured":26,"gaps":10,"image":191,"images":192,"linkLabel":10,"locale":24,"meta":198,"placeholder":96,"slug":199,"sort":200,"stem":201,"tags":202,"url":10,"__hash__":203},"projects\u002Fen\u002Fprojects\u002Fstory-mode.yml","Story Mode","Dec 2025","A story-room list with a status on each room. The lobby splits players into two teams, can take a password, and starts the match.\n","\u002Fwork\u002Fstory-mode-1.webp",[193,195],{"src":191,"alt":194},"Story Mode room list",{"src":196,"alt":197},"\u002Fwork\u002Fstory-mode-2.webp","Match lobby with two teams",{},"story-mode",6,"en\u002Fprojects\u002Fstory-mode",[101,50,102],"Qd-RDKMtksSRr6rLv_ysvwWENnl_kn3DOy7hKCGhHa8",{"id":205,"title":206,"date":207,"description":208,"extension":18,"featured":96,"gaps":10,"image":209,"images":210,"linkLabel":10,"locale":24,"meta":213,"placeholder":96,"slug":214,"sort":215,"stem":216,"tags":217,"url":10,"__hash__":218},"projects\u002Fen\u002Fprojects\u002Fagency-case-alert.yml","Agency Case Alert","Sep 2026","Every agency shares one case system. The board shows cases on a map, with counts and a message box on the open case.\n","\u002Fwork\u002Fagency-case-alert.webp",[211],{"src":209,"alt":212},"Case dashboard on a map",{},"agency-case-alert",7,"en\u002Fprojects\u002Fagency-case-alert",[101,50,102],"XdcGGHXQ-u6xlszEJGhF3ziJqnhm9yo_nKkc3f3H-lY",{"id":220,"title":221,"date":207,"description":222,"extension":18,"featured":96,"gaps":10,"image":223,"images":224,"linkLabel":10,"locale":24,"meta":227,"placeholder":96,"slug":228,"sort":229,"stem":230,"tags":231,"url":10,"__hash__":232},"projects\u002Fen\u002Fprojects\u002Frune-weapon.yml","Rune Weapon","Wearable weapon effects. Pick a rune on this screen and craft it.\n","\u002Fwork\u002Frune-weapon.webp",[225],{"src":223,"alt":226},"Rune select and craft screen for a weapon effect",{},"rune-weapon",8,"en\u002Fprojects\u002Frune-weapon",[101,50,102],"ABWuXmND12GfTXHDDQ02CZlQDSoSHADHqPE4b6TiFtE",{"id":234,"title":235,"date":107,"description":236,"extension":18,"featured":96,"gaps":10,"image":237,"images":238,"linkLabel":10,"locale":24,"meta":244,"placeholder":96,"slug":245,"sort":246,"stem":247,"tags":248,"url":10,"__hash__":249},"projects\u002Fen\u002Fprojects\u002Fairdrop.yml","Airdrop","Pick an airdrop and join it. A bar at the top counts down to the start.\n","\u002Fwork\u002Fairdrop-2.webp",[239,241],{"src":237,"alt":240},"Airdrop picker with a join button",{"src":242,"alt":243},"\u002Fwork\u002Fairdrop-1.webp","Airdrop countdown bar",{},"airdrop",9,"en\u002Fprojects\u002Fairdrop",[101,50,102],"RlxPWawusviAEjumB1m8g0ZSekpz9o8boN8NsalgOIg",{"id":251,"title":252,"date":253,"description":254,"extension":18,"featured":96,"gaps":10,"image":255,"images":256,"linkLabel":10,"locale":24,"meta":259,"placeholder":96,"slug":260,"sort":261,"stem":262,"tags":263,"url":10,"__hash__":264},"projects\u002Fen\u002Fprojects\u002Faudition-event.yml","Audition Event","Jul 2025","A dance event minigame. It shows arrows to hit on time, and a timer.\n","\u002Fwork\u002Faudition-event.webp",[257],{"src":255,"alt":258},"Arrow panel for the dance event",{},"audition-event",10,"en\u002Fprojects\u002Faudition-event",[101,50,102],"eyPv4o954vANkIUDIM5bw2g5cXRRsegVb_o4Brd6whQ",{"id":266,"title":267,"date":268,"description":269,"extension":18,"featured":96,"gaps":10,"image":270,"images":271,"linkLabel":10,"locale":24,"meta":274,"placeholder":96,"slug":275,"sort":276,"stem":277,"tags":278,"url":10,"__hash__":279},"projects\u002Fen\u002Fprojects\u002Fbusking.yml","Busking","Aug 2025","A busking board in front of the performer, with a list of people who gave.\n","\u002Fwork\u002Fbusking-board.webp",[272],{"src":270,"alt":273},"Busking board in front of a performer",{},"busking",11,"en\u002Fprojects\u002Fbusking",[101,50,102],"Cl6WrKid4CvjZrJt8JVQVicT7bGx5Uoh1ZgVrZZLZc4",{"id":281,"title":282,"date":107,"description":283,"extension":18,"featured":96,"gaps":10,"image":284,"images":285,"linkLabel":10,"locale":24,"meta":288,"placeholder":96,"slug":289,"sort":290,"stem":291,"tags":292,"url":10,"__hash__":293},"projects\u002Fen\u002Fprojects\u002Ffriend-invite.yml","Friend Invite","A screen for entering a friend invite code. It shows your own code and how many people have used one.\n","\u002Fwork\u002Ffriend-invite.webp",[286],{"src":284,"alt":287},"Friend invite code screen",{},"friend-invite",12,"en\u002Fprojects\u002Ffriend-invite",[101,50,102],"mrNuhKYCJqcokmJDzRHvZiYZSizJUT-U-yTrnwecI78",{"id":295,"title":296,"date":297,"description":298,"extension":18,"featured":96,"gaps":10,"image":299,"images":300,"linkLabel":10,"locale":24,"meta":309,"placeholder":96,"slug":310,"sort":311,"stem":312,"tags":313,"url":10,"__hash__":314},"projects\u002Fen\u002Fprojects\u002Fd9-dance.yml","d9_dance","Nov 2025","A dance minigame. Each song has levels, each level has its own dance set, combos count, and the UI size can be configured.\n","\u002Fwork\u002Fd9-dance.png",[301,303,306],{"src":299,"alt":302},"Dance minigame with arrows, score, and a leaderboard",{"src":304,"alt":305},"\u002Fwork\u002Fd9-dance-rooms.png","Room picker for the dance event",{"src":307,"alt":308},"\u002Fwork\u002Fd9-dance-countdown.png","Countdown card before the dance starts",{},"d9-dance",13,"en\u002Fprojects\u002Fd9-dance",[101,50,102],"i-73IYc6Z9RbyOzFAiHmT4pkl493Puub7YDdo1xpfsk",{"id":316,"title":317,"date":10,"description":318,"extension":18,"featured":96,"gaps":319,"image":321,"images":322,"linkLabel":10,"locale":24,"meta":328,"placeholder":96,"slug":329,"sort":330,"stem":331,"tags":332,"url":10,"__hash__":333},"projects\u002Fen\u002Fprojects\u002Fradial-menu.yml","Radial Menu","A radial menu for FiveM.",[320],"No year yet","\u002Fwork\u002Fradial-menu.png",[323,325],{"src":321,"alt":324},"Radial menu with a vehicle action selected",{"src":326,"alt":327},"\u002Fwork\u002Fradial-menu-ring.png","Ring radial menu along the bottom of the screen",{},"radial-menu",14,"en\u002Fprojects\u002Fradial-menu",[101,50,102],"drzo0e3HQk82tWDNNlpvl2guNregA4BXCHgU9Tv6La0",{"id":335,"title":336,"date":337,"description":338,"extension":18,"featured":96,"gaps":339,"image":10,"images":10,"linkLabel":10,"locale":24,"meta":341,"placeholder":96,"slug":342,"sort":343,"stem":344,"tags":345,"url":347,"__hash__":348},"projects\u002Fen\u002Fprojects\u002Fd9-itemstory.yml","d9_itemstory","2025–2026","A FiveM resource that makes painkiller, armor, and AED items usable. Written in Lua. It depends on es_extended, ox_lib, and d9_lib.",[340],"No screenshot yet",{},"d9-itemstory",15,"en\u002Fprojects\u002Fd9-itemstory",[101,50,346],"ESX","https:\u002F\u002Fgithub.com\u002Fdouble9e\u002Fd9_itemstory","cesECFmDEigaJQv49oZMIuU6K9-rZmeecmtx-tJoSFM",{"id":350,"title":351,"date":10,"description":352,"extension":18,"featured":96,"gaps":353,"image":10,"images":10,"linkLabel":10,"locale":24,"meta":355,"placeholder":96,"slug":356,"sort":357,"stem":358,"tags":359,"url":10,"__hash__":361},"projects\u002Fen\u002Fprojects\u002Fweapon-default-sound.yml","Weapon Default Sound","A FiveM weapon system that uses the game's own sounds. Each weapon can be adjusted on its own, and it is straightforward to connect to a weapon-skin system.",[354,320,340],"No public link yet",{},"weapon-default-sound",16,"en\u002Fprojects\u002Fweapon-default-sound",[101,50,360],"Sound","PM53os_2-sFsaSi1s2HHeRmrgS4tCctuQRM4JcqEWRU",1793453515416]