managevent: who builds what

managevent is the one place where every MJCET club posts its events and every student finds them. Six developers work as peers, each owning a full slice: their pages, their APIs and their database tables. Nobody waits on a "frontend team" or a "backend team".

Creative brief for this page

Concept: every dev gets a ticket stub, like the ones at a college fest gate. Read your name, read your slice. Palette comes from MJCET's world: fog-grey notice boards, petrol-blue ink, and six stub colours so you can find yourself fast.

Assumptions: six developers (Ali, Amar, Syed Ayesha, Anas, Ayub and Adnaan). Stack suggestion is React + Node/Express + PostgreSQL + Socket.io; swap it if the team already agreed on something else. Real club logos and MJCET photos are needed from the club heads before launch.

Roles in the system

  • Student: browses, RSVPs, joins live, sees recaps
  • Club admin: registers a club, hosts events, approves people, runs the live room, builds the recap
  • Super admin: approves new clubs (a handful of staff)
ReactExpressPostgreSQLSocket.ioMulter + S3 or CloudinaryJWT

Balance at a glance

Everyone carries the same load: eleven REST endpoints, six or seven pages, three or four tables, and one signature challenge. Foundations (auth, sockets, uploads) are split three ways.

DevEndpointsPagesTablesSignature challenge
Ali11 + 4 guards63Auth, guards, the RSVP capacity and waitlist engine
Amar11 + WebSocket gateway64Socket gateway, live quiz engine, live client state
Syed Ayesha1174Event lifecycle state machine, discovery feed, live doubts board
Anas1163Approval and payment workflow, event-day check-in, dynamic form builder
Ayub1163Club approval workflow, upload service, design system
Adnaan1164Recap aggregation, bulk gallery, certificate assignment

The six slices

Counts are shown on every stub so you can check the split is fair.

Shared rules (agree on day one, 30 minutes)

One repo, six foldersBackend routes live in /server/modules/<name>, pages in /client/src/features/<name>. Touch only your own folder; open a PR for anything shared.
Response shapeEvery API returns { ok, data, error }. Errors carry a plain message the UI can show as is.
Contract files firstBefore writing logic, every dev commits /mocks/<endpoint>.json with a request and response example. UI is built against these until the real endpoint lands.
Schema ownerAli runs the first migration with all 21 tables as stubs. After that, each dev edits only their own tables.
Status writesNobody writes rsvps.status directly. Everyone calls Ali's rsvpService.transition(), so the capacity rule lives in one place.
Peer review ringAli reviews Amar, Amar reviews Ayesha, Ayesha reviews Anas, Anas reviews Ayub, Ayub reviews Adnaan, Adnaan reviews Ali. Everyone reviews one person and is reviewed by one.

Who owns which table

TableOwnerKey fields
users, password_resets, rsvpsAlirole, email, roll_no, branch, year; reset token and expiry; event_id, user_id, answers, status (pending, approved, rejected, waitlist)
quizzes, questions, quiz_answers, leaderboard_entriesAmarquiz state, timer, correct option, points per answer, rank, manual points
events, event_settings, doubts, doubt_votesAyeshaclub_id, capacity, approval_mode (auto_until_full or manual), is_paid, price, qr_url, status (draft, open, live, ended); upvote count, pinned
payments, checkins, rsvp_form_fieldsAnasrsvp_id, screenshot_url, verified_by, reject reason; checked_in_at; question label, type, required, order
clubs, speakers, uploadsAyubclub status (pending, approved), owner_id; name, bio, photo, topic; file_url, mime, size
gallery_items, certificates, tech_links, recap_settingsAdnaanevent_id, file_url, caption, position; user_id, file_url; link title and url; published flag

How nobody blocks anybody

DependencyWho needs itUnblock rule
Migration, guards, JWTEveryoneAli ships the migration with all 21 tables as stubs and the guards with a fake-user mode by day 2. Ayub and Amar ship their own foundations in parallel.
POST /api/uploadsAyesha (QR), Anas (screenshots), Adnaan (gallery), Ayub (logos)Ayub deploys a stub that returns a fake URL on day 1. The real implementation lands by day 4, with Ali reviewing.
Socket gatewayAyesha (doubts)Amar publishes emitToRoom(eventId, name, payload) as a no-op on day 2.
RSVP status transitionsAnasAli exports rsvpService.transition() as an interface first.
RSVP form schemaAli's RSVP POSTFix the JSON shape of rsvp_form_fields on day 1. Until then Ali uses a default form.
Room accessAmarHe calls requireApprovedAttendee from Ali, which returns true in mock mode.
Quiz scoresAdnaanHe reads GET /api/events/:id/leaderboard from /mocks until Amar's real one lands.

If uploads slips: whoever has the lightest week picks up /api/uploads for the first week (about a day of work). Nothing else in the plan changes.

Timeline that avoids blocking

PhaseWhat landsWho unblocks whom
Days 1 to 3Repo, migration, auth, guards, upload stub, socket stub, design tokens, mock JSON for every endpointAli, Amar and Ayub ship foundations. Others build UI against mock JSON in /mocks.
Days 4 to 8Club registration, host-event form, discover feed, RSVP flow, real upload service, RSVP form builderAyesha needs Ayub's club approval. Anas needs Ali's transition service and Ayesha's event detail.
Days 9 to 13Attendee approval queue, payment verification, check-in, live quiz with sockets, doubts board, recap page and galleryAdnaan reads Amar's leaderboard and Ayub's speakers. Amar reads Ali's approved status for room access.
Days 14 to 16Integration, bug bash on one real club event, phone testingEveryone. Pick one real club to test with.