Dmitry Antonov, photographed in profile against coastal cliffs
Dmitry Antonov, photographed in profile against coastal cliffs

Dmitry Antonov

Senior Frontend Engineer. I own Vue 3 + TypeScript frontends for real-time, multi-brand products - architecture, design system, and the metrics after ship.

Punta del Este, Uruguay · Remote

Vue daily · React when needed · TS always

Six years of Vue, owned end to end.

Open to Senior Frontend and UI Platform roles. Vue.js, TypeScript, Design Systems, Real-Time Web Apps.

I ship Vue, React, and TypeScript products end to end: spec, architecture, UI, tests, then the numbers. At Looptain that was one codebase for three live brands, a token-driven design system, and real-time gameplay plus wallet sync over WebSockets. I am now building Noxaren, a white-label demo casino: React player app, operator console, and the NestJS API behind them.

The work I care about is usually invisible in a GitHub sample. Animation pipelines that hold 60/30 FPS. A JavaScript bundle cut by about 30%. Lighthouse load from ~2.0s to ~1.5s. PostHog owned on the frontend - flags, experiments, offer timing - not bolted on after launch.

I use AI as leverage, not as the author. It handles research, scaffolding, refactors, and first drafts. I keep architecture, taste, and review. I do not ship generated slop. If it goes out, I can defend every line.

At Looptain I worked with product, design, backend, QA, and data in a six-engineer team. Native Russian. English for speech, writing, and technical docs. Remote from Punta del Este.

Numbers I can stand behind.

Noxaren is the platform I built alone. Below that, Looptain is the measured frontend: load, bundle, brands, components, and frame budget. The component line is an illustrative path to the 50+ floor.

Noxaren, built alone

Three systems, one person. The player, the API, and the admin. A win is settled on the server, and the platform runs without SQL.

Player

React 19 · Vite · Socket.IO

What
Separate games in one client, plus account and a virtual NOX wallet. Four of them have their own runtime.
How
Crash and plinko draw their own frames. Chicken and tower are boards driven by transforms. Socket.IO brings the round.
Why
The server names the result. The client still has to play it while the player is mid-move.

API

NestJS · Postgres · Redis

What
Accounts, billing, the game engine, and provably fair settlement.
How
Prisma on Postgres, Redis for prices and jobs. Games debit and credit through one billing port.
Why
The server settles every result. Demo NOX can be swapped for a real wallet without rewriting a game.

Admin

React · MUI · NestJS

What
Users, risk alerts, bans, balance adjustments, per-game RTP, VIP, and retention.
How
An operator console on its own NestJS API, reading and writing the same Postgres as the player platform.
Why
The day is run from a screen, not from a query. Password, TOTP, and CSRF guard the writes.

Crash

noxaren.com/crash

One camera for the curve, the ship, and every cash-out.

The multiplier is a curve that keeps growing. A camera follows it. A 3D ship rides that curve, with flame, spin, and parallax stars and planets behind it. Other players' cash-outs pin to the same camera, so a marker stays on the curve as it moves. On crash the chart freezes and the ship blows. Axis labels, markers, and the rocket have to agree on one frame, including when motion is reduced.

Plinko

noxaren.com/plinko

Many balls in the air, one decided bucket each.

A drop is a peg path the server already chose. The board draws it in Pixi: a trail, the bounce, then the ball slips behind the bucket rim and the bucket fires. Autoplay keeps several balls in flight. Changing rows or risk rebuilds the pegs and the buckets. A narrow screen takes a lighter draw path. The motion has to look physical and still finish in that bucket.

Chicken

noxaren.com/chicken

A hop, a scrolling road, and traffic that has not arrived yet.

Each step is a short hop with a ghost trail. The road scrolls so the chicken stays in the middle of five visible lanes and never slides off either end. Cars run in lanes ahead, so the next lane is not shown as safe before the player commits. Cash out, or take the hit. The hop, the camera, and the traffic have to land on the same lane.

Tower

noxaren.com/tower

One live floor, then the whole tower climbs.

Only the next floor accepts a pick. A press settles into safe or trap. A safe door clears the floor and the board climbs by one measured row, so a resize does not leave the climb short. A trap blows that door and reveals the rest of the floor. Glow steps up as you climb. The pick, the reveal, and the climb offset have to move together.

Lighthouse load

Gameplay UI, not a marketing landing page. Lazy routes, asset delivery, render strategy.

Lighthouse load 2 seconds before, 1.5 seconds after.

JavaScript bundle

Vite analyzer: code splitting, dependency cleanup, build config.

  • Removed~30%
  • Still in the bundle~70%
One codebase, three brands

One tree. Three live production skins. Same components, tokens, and ship path.

Codebase

Vue 3 + TypeScript

1 frontend

01

Live brand

02

Live brand

03

Live brand

One Vue 3 and TypeScript codebase serving 3 live production brands.

Production components

Illustrative build-up on the current platform, from first tokens to the Storybook floor. Fifty is the landed count, not a sprint log.

  • Reusable UI50+

Component library growing from 6 to 50 or more.

Frame budget

Crate and gameplay UI. The clay line is one pass before the render budget - it hunts between 50 and 15. After: desktop holds 60, mobile holds 30.

Held floor

Average before vs after, desktop and mobile.

  • Before50 / 15
  • After60 / 30

One live pass

Same UI over time. Jagged is the old pass. Flat is the held budget.

  • Before, unstable50–15
  • Desktop after, held60 FPS
  • Mobile after, held30 FPS

Before optimizations, frames swung between 50 and 15 FPS. After, desktop holds 60 and mobile holds 30.

Touch the work, not just the résumé.

Tokens, a wallet sheet, a live feed, a roll, a stack you can try, and an upgrader on those marks - the kind of UI I ship, compressed into this page.

Brand tokens

Switch skins. The tree stays. Open wallet for the real sheet.

Atlas

live · 3 brands

One codebase. Three skins.

Same tree, same tokens contract. Figma tokens in, one component out.

$2,480.00

Realtime desk

Wallet, live count, and a roll over a synthetic socket.

Wallet

$2,480.00

184 live

Start the roll. The land is the reveal.

  • socket.tick 16:41:08
  • wallet.sync +$12.00
  • room.join 184 players
  • flag.on offer_modal
  • socket.tick 16:40:55

Live feed

Newest events land first. The rail carries them off.

  • flag

    nile

    44ms

  • join

    orio

    40ms

  • sync

    ash

    36ms

  • ship

    lumen

    32ms

  • tick

    rex

    28ms

  • flag

    mira

    24ms

  • join

    kade

    20ms

  • sync

    nova

    16ms

Stack

Tap a mark to load the wheel, then spin.

Chance dial

Tap a mark to load it. Drag the hold to aim. A thinner hold is harder to keep.

0% to hold

Vue

0%

Set the hold, then spin.

Daily driver. Vue 3 Composition API on the current platform, plus earlier Vue 2 / Nuxt work.

Work

  1. Aug 2026 – Present2 moIndependent · Remote

    Senior Frontend Engineer

    Noxaren

    Building Noxaren, a white-label demo casino: player app, operator console, and the NestJS API. Virtual NOX only. The server settles every result.

    • Built the React player around four modes that do not share a runtime. Crash keeps a live multiplier curve, a tracking camera, a 3D ship, and other players' cash-outs on one frame. Plinko draws many balls through a peg board that still has to land the server's bucket. Chicken hops a scrolling road while traffic runs in lanes ahead. Tower is a floor-by-floor pick: a safe door climbs the board by a measured row, a trap blows the door and reveals the floor.
    • Game and wallet state over Socket.IO. The server settles every result; the client owns the motion and the interaction.
    • White-label theme tokens and brand assets so one frontend reskins without forking the game UI.
    • Shipped the operator console (React, MUI): users, risk alerts, bans, balance adjustments, per-game RTP, VIP, and retention on the same API.

    React 19 · TypeScript · Vite · Tailwind · TanStack Query · Socket.IO · MUI

    noxaren.com/crashnoxaren.com/plinkonoxaren.com/chickennoxaren.com/tower

    Role 1 of 5
  2. May 2024 – Oct 20262 yr 5 moRemote

    Senior Frontend Developer

    Looptain.Limited

    Owned the Vue 3 + TypeScript frontend for a real-time web platform: architecture, design system, gameplay UI, wallet, and product analytics. Spec → ship → metrics with product, design, backend, QA, and data.

    • Built and maintained core real-time surfaces (live rooms, rounds, and match flows) with low-latency WebSocket game state and wallet sync for hundreds of concurrent players.
    • Owned the V2 UI platform: 50+ reusable components, Storybook, Figma design tokens; one codebase serving 3 production brands.
    • Cut JS bundle ~30% (Vite analyzer: code splitting, deps, build config) and Lighthouse load ~2.0s → ~1.5s (lazy routes, asset delivery, render strategy).
    • Engineered animation pipelines that hold 60/30 FPS on live gameplay UI (render + DOM budgets, mobile and desktop).
    • Designed wallet and transaction UI synced with backend over REST and WebSockets.
    • Owned frontend PostHog: SDK, identify, feature flags, experiments, session replay, surveys; offer-modal targeting with backend and product.
    • Code review and architecture guidance in a 6-engineer team; Vitest/Jest and Playwright on gameplay and money paths.

    Vue 3 · TypeScript · Pinia · Vite · Tailwind · WebSockets · Storybook · PostHog · Playwright

    Role 2 of 5
  3. Sep 2021 – Jul 202211 moTürkiye · Remote

    Middle+ Frontend Developer

    Insider

    Customer-engagement and marketing automation platform used by global enterprise clients.

    • Shipped complex Vue.js and vanilla JavaScript UI integrated with PHP and Go APIs.
    • Designed and published internal NPM packages reused across multiple frontend projects.
    • Contributed to frontend architecture and component standards with backend and product.

    Vue.js · JavaScript · NPM · REST · PHP · Go

    Role 3 of 5
  4. Dec 2020 – Dec 20211 yr 1 moMoscow · Remote

    Middle Frontend Developer

    Unicode

    Visual website constructor - a Tilda-style site builder for user-generated pages.

    • Built and maintained the Vue.js editor and site-rendering UI: layout, blocks, preview, and publish.
    • Integrated frontend with Python APIs for save/load, assets, and publish.
    • Improved desktop and mobile performance of the constructor and the generated sites.
    • Automated tests with Jest on critical editor and publish paths.
    • Mentored junior developers and reviewed PRs with design and backend.

    Vue.js · JavaScript · Jest · REST · Python

    Role 4 of 5
  5. Dec 2019 – Jan 20211 yr 2 moPoland

    Junior+ / Pre-Middle Frontend Developer

    SEDEMO Trading and Investments

    Real-time live platform - the same product class as the later roles.

    • Built responsive Vue.js and Nuxt.js UI for live room flows and related game surfaces.
    • Integrated frontend with PHP APIs for catalog, open/result, and user state.
    • Improved performance and layout across desktop and mobile in production.

    Vue.js · Nuxt.js · JavaScript · SCSS · REST · PHP

    Role 5 of 5

Selected work

Noxaren

Independent · Aug 2026–present

White-label demo casino: React player app, operator console, and a NestJS API. Virtual NOX only.

Crash holds one camera for the curve, the ship, and every cash-out. Plinko keeps several balls in flight and lands each in the decided bucket. Chicken times a hop against traffic on a road that scrolls to stay centered. Tower climbs one measured floor per safe pick and reveals the floor on a trap. Admin covers users, risk, bans, RTP, VIP, and retention.

React 19 · TypeScript · Vite · Tailwind · Socket.IO · MUI

noxaren.com/crashnoxaren.com/plinkonoxaren.com/chickennoxaren.com/tower

Multi-brand real-time platform

Looptain · 2024–2026

One Vue 3 + TypeScript frontend serving three live brands, with gameplay and wallet state over WebSockets.

Hundreds of concurrent players on live rooms and match surfaces. Low-latency game state and wallet sync.

Vue 3 · TypeScript · Pinia · WebSockets · Vite

V2 UI platform

Looptain · design system

Token-driven component library that replaced one-off brand UI with a single production system.

50+ reusable components, Storybook, Figma tokens. One codebase, three production brands, CDN-delivered assets.

Storybook · Figma tokens · Tailwind · SCSS

Client performance program

Looptain · platform

Bundle, load, and frame-budget work on interactive gameplay UI - not a marketing landing page.

JS bundle about −30%. Lighthouse load ~2.0s → ~1.5s. Animation pipelines holding 60/30 FPS on live gameplay screens.

Vite · Webpack · Lighthouse · GSAP

Visual site constructor

Unicode · 2020–2021

Editor and renderer for user-generated sites: layout, blocks, preview, publish.

Python API integration for structure and assets. Jest coverage on editor and publish. Mentored juniors on the same codebase.

Vue.js · Jest · Python APIs

Let’s talk about the next frontend you need owned.

Open to Senior Frontend and UI Platform roles. Punta del Este, Uruguay. Remote.

Download PDF resume