Projects
Funny Projects
Vietnamese Card Board Scorer
Active

Vietnamese Card Board Scorer

"Ghi điểm Tiến Lên" - A mobile-first score tracker for Vietnamese card games like Tiến Lên. Born on the first day of Tết, built to replace paper and pen.
Minh-Tri Le
February 24, 2026
Tech Stack
reactReact
nextdotjsNext.js
chakrauiChakra UI
framerFramer
tailwindcssTailwind
Source CodeLive Demo

01Why does this project exist?

I have a lovely family of four. It was a nice day - the first day of the Lunar New Year in Vietnam, which we call Tết. We decided to play a board game called Tiến Lên, a popular card game in Vietnam. We had a lot of fun playing together.

We kept score on paper, which is very traditional, but by the end of the game we realized we had lost track of some points and it was difficult to figure out where the mistakes were. At that moment, I realized that keeping score can be quite cumbersome and distracting from the enjoyment of the game.

That's when I thought about creating an app to help us and other players easily manage and track scores. Fortunately, I had free time during the Tết holiday and decided to learn Next.js by building this idea. This project was born out of a desire to enhance our gaming experience and make it more enjoyable for everyone involved.


02Key Features

🃏
Multi-player Scoring
Track scores for 2–6 players simultaneously with a clean, real-time table.
🏆
Session History
Review past games and see who has the best win rate across sessions.
📊
Live Leaderboard
Auto-ranked leaderboard updates instantly after each round.
📱
Mobile-First Design
Built for phones - play on the coffee table without squinting at a laptop.
🎮
Game Rules Built In
Tiến Lên rules baked in; auto-calculates penalties and bonus points.
🌙
Dark Mode
Easy on the eyes for those long Tết holiday gaming sessions late at night.


04Tech Stack

Each technology was chosen deliberately. This was my first real Next.js project - the goal was to learn the framework while shipping something genuinely useful.

Next.js
App Router + server components for fast initial loads. Also great practice for learning the framework.
Chakra UI
Component library with a solid theming system. Gave me dark mode and responsive layouts nearly for free.
Framer Motion
Page transitions and micro-animations that make the app feel snappy and polished.
Tailwind CSS
Utility classes for quick layout work alongside Chakra, especially for the score table grid.

05Under the Hood

The core of the app is a score reducer that handles all game state - adding players, submitting round scores, and computing the running totals with penalty logic.

TypeScript

// Score reducer - handles round submissions function scoreReducer(state, action) { switch (action.type) { case 'SUBMIT_ROUND': { const { scores, penalty } = action.payload return { ...state, rounds: [...state.rounds, scores], totals: state.players.map((p, i) => ({ ...p, score: p.score + scores[i] - (penalty[i] ?? 0) })) } } case 'ADD_PLAYER': return { ...state, players: [...state.players, action.payload] } default: return state } }

06Project Stats

~1 week
Dev time
4
Screenshots
1
Game supported
4
Max players

07Future Work

Multi-game support
Add Xì Dzách, Phỏm, and other popular Vietnamese card games via a start-menu selector.
Session history & database
Persist session data so players can track win rates and rivalries over time.
Offline mode
PWA support so the app works without internet - important for family gatherings in rural areas.
Mobile-first layout
The current design already prioritizes mobile phones for in-game use.
Dark mode
Dark theme implemented for those late-night gaming sessions.

Try it yourself
The live demo is deployed on Vercel. Works great on mobile - just open it on your phone next time you play Tiến Lên.
Related Projects
NeoVim Pomodoro Timer
Pomodoro timer plugin written in Lua
NeoVim Toggle Terminal
Lightweight terminal toggle for Neovim
On this page
Loading...
N

Subscribe to my newsletter

Get notified when I publish new posts on my blog

© 2026 Minh-Tri Le. All rights reserved.