What I learned shipping a Next.js dashboard for VNG Games
Eight months, multi-game ops, and a few hard lessons about server actions, audit logs, and the cost of optimistic UI when compliance is watching.
The brief
The rewards platform powers airdrops, tier programs and seasonal campaigns across several VNG Games titles. Before this dashboard existed, every "new reward" required a Jira ticket, a Slack thread and a manual SQL script.
What changed
- A campaign builder with live previews and validation rules per game.
- A tier configuration UI that generates the underlying rules instead of hand-rolled JSON.
- A two-step approvals flow with a tamper-evident audit log.
- A live analytics view backed by a Kafka stream and Redis aggregates.
Lessons
Server actions over a separate API. Most flows live entirely inside the dashboard, so server actions kept the surface area small.
Optimistic UI, server-authoritative validation. Edits feel instant; the server is the only source of truth.
Every mutation is signed and logged. Compliance asked for it, and it turned out to be the most loved feature when something went wrong in production.