Skip to content
karim.semaan(open to work)
WorkExperienceAboutSkillsContactResume ↓
← All work
Covey Town preview
Full-stackCompleted2024

Covey Town

achievements system for a live multiplayer virtual town

Delivered a working achievements layer for Covey.Town: event-driven progress tracking, a filterable modal, global completion stats, custom achievement creation, and in-chat earned-achievement popups, all covered by 7 test files.

Full-stack · PreviewCovey Townachievements system for a live multiplayer virtual town

Team feature on the Covey.Town course codebase, with no public deployment or repo.

Built as the CS4530 Software Engineering final project by a team of four, this adds a complete achievements layer to the existing Covey.Town codebase. On the backend (Node.js, Express, Socket.IO, tsoa), an AchievementManager loads achievement definitions from JSON at startup, registers per-player progress listeners keyed to criteria event types (PLAYER_WALK, INTERACT_WITH_GAME_OBJECT, WIN_CONNECT_FOUR, GET_ACHIEVEMENT), and emits an in-game chat-message popup over the socket broadcast when a player earns an achievement. The REST layer (tsoa-generated OpenAPI) exposes endpoints for listing achievements, fetching and updating per-player progress, reading global completion rates, toggling achievement activation, and creating custom achievements. On the frontend (React, Chakra UI, Phaser), a keyboard-triggered progress modal lets players view their own or another player's achievements filtered by status (All, Completed, Incomplete, Unstarted, Self-Made) or category (Global, Tic-Tac-Toe, Connect Four), with per-achievement progress bars and global-completion percentages. Players can also author custom achievements directly from the video-call menu bar. The feature ships with 5 preset achievement definitions and 7 dedicated test files covering components, listeners, and the manager.

  • TypeScript
  • React
  • Chakra UI
  • Phaser 3
  • Node.js
  • Express
  • Socket.IO
  • tsoa
  • Jest
  • React Testing Library
Team size
4 engineers
Preset achievements
5
Criteria event types
4 (walk, interact, win, chain)
Achievement test files
7
Achievement categories
3 (Global, Tic-Tac-Toe, Connect Four)
Custom achievements
‹fill in›

What I'd improve

The progress modal re-fetches from the server on every open rather than subscribing to a socket event, which causes a visible round-trip delay. A socket-push model, or even a local cache invalidated by the existing chatMessage event, would make progress feel instant. I would also extract the achievement definitions from flat JSON into a typed builder API to catch schema drift at compile time.

Request accessProject report (PDF)↗
Want something like this? Get in touch →
© 2026 Karim SemaanBuilt with Next.js, Tailwind & Supabase.LinkedIn ↗GitHub ↗