Six-person software-engineering course project · 2025

TaskAdventure

A task manager that turns getting things done into an RPG.

  • React
  • Vite
  • Express
  • MongoDB
  • JWT
  • Cypress
TaskAdventure task page with active and completed tasks
finishing a task moves it into progress and earns XP
the short version:
task → XP
the core game loop
the product

a full-stack task loop with a small RPG reward system

TaskAdventure turns normal CRUD actions into a lightweight progression loop. A task carries a difficulty and one of six social-stat categories; completing it awards deterministic XP that changes the corresponding stat and overall level.

It is a six-person software-engineering course project, not an AI system. The useful technical story is how a team-built MERN app was structured, migrated, authenticated, tested, and configured for Vercel and Render deployment.

what someone can do

the task loop around one user account

01

Account + session

Users sign up, log in, and send a one-day JWT on protected API requests.

02

Task CRUD

Create, edit, complete, and organize tasks by date, difficulty, and social-stat category.

03

XP + levels

Easy, medium, and hard tasks award different XP; per-stat and overall progress turns completion into a game loop.

04

Navigation + themes

A shared MUI app shell connects task, stats, calendar, profile, and contact surfaces in light or dark mode.

how it works

from login to a changed progress bar

  1. 01

    Authenticate

    React submits credentials to Express; bcrypt verifies the password and the server returns a signed JWT.

  2. 02

    Enter the app shell

    The token and username restore the protected MUI layout, drawer, and routed pages.

  3. 03

    Create a task

    The UI validates label, date, difficulty, and stat before POSTing with the Bearer token.

  4. 04

    Persist per user

    Express routes use authenticated userId values to read and write Mongoose task documents.

  5. 05

    Complete + award XP

    Completion updates task state and increments the matching social-stat record according to difficulty.

  6. 06

    Recompute progress

    Stats endpoints aggregate XP so the UI can render the per-stat and overall level state.

  7. 07

    Exercise the journey

    The committed Cypress specs cover signup, login, protected-route redirects, and navigation through the browser.

under the hood

the MERN system by responsibility

React + Vite

Runs the routed frontend and replaced the slower, deprecated Create React App setup.

Material UI + CSS Modules

Provides the shared shell and component system while keeping page-specific styles scoped.

Express

Exposes auth, task, stats, user, calendar, and contact routes behind middleware.

MongoDB + Mongoose

Stores users, tasks, stats, calendar events, and contact messages as per-user documents.

JWT + bcrypt

Hashes credentials, signs one-day sessions, and attaches user identity to protected requests.

Cypress

Provides four committed browser specs for login, signup, protected routes, and navigation.

GitHub Actions

Runs lint, builds, and the configured test command for the monorepo. The committed behavioral coverage comes from Cypress rather than a Jest unit suite.

game loop

From task to progress

A task stores its label, date, difficulty, social stat, completion state, and user. Completing it updates deterministic XP and level progress. This is gamification, not machine learning.

Completed task UI
the point where a to-do becomes progress
modernization

Moving the frontend to Vite

I migrated the project away from Create React App, then reorganized flat frontend and backend files into clearer page, component, route, controller, model, and middleware boundaries.

testing

Testing journeys, not isolated buttons

I introduced Cypress end-to-end coverage around signup, login, and user flows. Auth and database code were team work; my contributions included validation, documentation, and the testing foundation.

TaskAdventure login page
authentication is the beginning of each user journey
my contribution

the foundational and cross-stack work I led

I had the largest single commit share and focused on project foundations, structure, frontend modernization, shared navigation, selected backend/user flows, and the E2E testing pattern.

  • Migrated the frontend from Create React App to Vite and moved styling toward CSS Modules.
  • Refactored flat frontend/backend code into pages/components and routes/controllers/models/middleware.
  • Built the MUI app shell, drawer, username display, and persistent light/dark theme.
  • Added signup validation, auth-flow sequence diagrams, user/stats routes, and level-pacing adjustments.
  • Introduced Cypress specs for login, signup, protected-route, and navigation flows.
team delivery

six people working through sprints and pull requests

The team used sprint branches, user stories, Figma/UML artifacts, pull requests, linting, and CI. Some final product features, including the calendar and recent stats-page design, were teammate-owned. They remain part of the system tour because they complete the user experience.

what happened

results, with context

MERN

full stack

React and Express connected to a per-user MongoDB data model.

4

committed Cypress specs

Login, signup, protected routes, and navigation gained browser-level checks.

2 themes

light + dark

The task loop remains consistent across both visual modes.

looking back...

Migration, project structure, auth, API boundaries, and browser tests all met in one app. If I returned to it, I would centralize the duplicated XP rules, finish unit coverage, and move token storage away from localStorage. The old hosted database no longer resolves, so I link the repository rather than presenting the deployment as live.