The CS35L project to rule them all.
Sidequest is a platform for Bruins to find other Bruins willing to perform small tasks, called "quests", for them in exchange for virtual currency or cash.
- Node.JS 24.14.1
- pnpm ^10
Run the following for a BETTER_AUTH_SECRET value.
openssl rand -base64 32You will also need to set up a Neon database and Resend environment. In lib/sendEmail.ts, the from: 'Sidequest <welcome@sidequest.markets>', line uses a hardcoded domain that is specific to our project. For your Resend environment to work, the domain section (i.e., sidequests.markets) should either be replaced with your domain OR replaced with the Resend fallback domain of resend.dev.
pnpm ipnpm db:pushpnpm devOpen http://localhost:3000 with your browser to see the result.
pnpm i
pnpm exec playwright install chromiumRun the route/page assertion tests:
pnpm run test:allRun one assertion test directly:
pnpm run test:quest-routesThen run the Playwright e2e tests:
pnpm run test:e2eThe e2e tests use DATABASE_URL, BETTER_AUTH_SECRET, and BETTER_AUTH_URL from .env. They start or reuse the local app at http://localhost:3000, seed two demo users, and clean up their test data after each run.
To help clarify the architecture of our project, the diagrams below detail the two main aspects of our project: the quest completion cycle and the report/user strike flow.
Diagrams made with the help of PlantUML
The use of Generative AI for agentic coding purposes was constrained to these uses:
- Restyling components to use the existing design system through the folowing types of prompts:
Restyle `[X]` `[lines/component]` to use the current design system in the codebase.- Generating a comprehensive test suite to rigorously test our backend API routes against a multitude of edge cases.
Look at @/api/users/me/notifications/[id] and write a unit test verifying the `PATCH` method works as intended.- Generating seed data for demo purposes.
You are writing PostgreSQL seed script for a campus task-marketplace app called Sidequest where students post “qests, bid on them, exchange a currency in the form of credits, complete work, and review each other. The output should be a single .sql file to be run against a database for a class presentation. You can use db schema for reference.
Tables (snake_case): "user", quests, bids, reviews, reports, cases, notifications, skills, courses. The id on quests/bids/reviews/reports/cases is GENERATED ALWAYS AS IDENTITY; users use text IDs; notifications use UUIDs. Quest status: 0=open,1=in-progress,2=completed,3=disputed,4=awaiting-confirmation,5=cancelled. credits_offered: -1=cash, 0=free, >0=credits.AI models (ChatGPT and Claude) were consulted for minor code requests, such as on how to implement a specific/niche framework feature or explain a cryptic NextJS/React/pnpm bug. All generated code were thoroughly reviewed, and often heavily refactored by us.
Questions? Contact Rizwaan Bana or Siddhant Patil.

