Skip to content

Phase 1: MVP Submission - #116

Open
ashishshaiju wants to merge 2 commits into
WeCode-Community-Dev:mainfrom
ashishshaiju:main
Open

Phase 1: MVP Submission #116
ashishshaiju wants to merge 2 commits into
WeCode-Community-Dev:mainfrom
ashishshaiju:main

Conversation

@ashishshaiju

Copy link
Copy Markdown

Description

This PR merges the completed BookMyVenue platform from qa into main, encompassing the full MVP implementation across the entire monorepo.

Includes:

  • Server: Express/TypeScript backend with auth (JWT, refresh tokens, sessions, password reset), RBAC, venue CRUD with review workflow, booking system with Razorpay payments, user management, wishlists, reviews, moderation (bans, flags), geo search via Nominatim, webhooks, email service, background workers, idempotency, and rate limiting
  • Client: React 19 + Vite + TailwindCSS frontend with auth pages, venue browsing with maps, booking flow with Razorpay, user profiles, wishlists, venue listing with draft persistence, and complete test suite (125+ tests)
  • Admin: React 19 + Vite + TailwindCSS dashboard with venue/booking/user/review moderation, role-based access (admin/superAdmin/owner), reports, settings, and test suite (86+ tests)
  • Infra: Docker Compose setup, CI/CD workflows (GitHub Actions), Husky pre-commit/pre-push hooks, lint-staged
  • Docs: Architecture, API overview, modules, setup guide, security policy

Phase Category

  • Phase 1: MVP Submission (Base Foundation)
  • Phase 2/3: Feature Implementation or Modularization
  • Phase 4: Scalability Optimization
  • General (Documentation, Bugfix, Chore, etc.)

Tech Stack

  • Frontend: React 19, Vite, TailwindCSS, TanStack Query, Zustand, React Router
  • Backend: Node.js, Express, TypeScript, Mongoose, Razorpay API
  • Database: MongoDB

Type of Change

  • New feature / Module (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update

Checklist:

  • I have read the Contribution Guidelines.
  • My code follows the community spirit and standards of the WeCode community.
  • I have performed a self-review of my own code.
  • I have commented my code, particularly in hard-to-understand areas.
  • My changes generate no new warnings or errors.

AI Disclosure

  • I did NOT use AI tools to generate this code.
  • I used AI tools (e.g., Copilot, ChatGPT, Claude) to help write this code, and I have fully reviewed, tested, and understand the output.

Screenshots / Screen Recording (if applicable)

N/A

ashishshaiju and others added 2 commits July 26, 2026 13:48
…es (#51)

* feat: initialize admin app

* feat: initialize client app

* feat: init server

* feat: add CI workflows for backend, frontend, and global monorepo (#1)

* feat: home page change

* feat: initialize client and admin projects with React-Router, TanStack Query, and Axios.

* feat:implement auth pages UI and validation

* feat: implement user auth system

* feat: restructure project server structure with authentication modules, email service, graceful shutdown utilities, and database configurations.

* feat: add homepage UI

* feat: implement password reset functionality and enhance authentication flow

- Added ResetPasswordPage component with token validation and password reset logic.
- Integrated toast notifications for user feedback during password reset.
- Created AuthGuard and GuestGuard components to manage route access based on authentication state.
- Implemented AuthContext for managing user authentication state and session verification.
- Added useAuth and useToast hooks for easier access to authentication and toast functionalities.
- Introduced ToastListener for handling global toast notifications based on custom events.
- Updated routing to include guards for protected and guest-only routes.
- Enhanced styling and loading states for better user experience during authentication processes.

* fix: type errors

* feat: create list your venue/add venue page

* chore(server): add core utilities, env constants, and custom error helper

* feat(server): implement database-driven RBAC models and middleware

* feat(server): integrate RBAC authorization within authentication controllers

* feat(server): implement venue module with review workflow and owner check

* feat(client): update authentication pages and navbar navigation links

* feat: Configure husky and lint-staged

* chore: update pnpm version in packageManager

* chore: make file paths in pre-push hook relative to workspace folders

* chore(server): add core utilities, env constants, and custom error helper

* feat(server): implement database-driven RBAC models and middleware

* feat(server): integrate RBAC authorization within authentication controllers

* feat(server): implement venue module with review workflow and owner check

* feat(client): update authentication pages and navbar navigation links

* feat: Configure husky and lint-staged

* chore: update pnpm version in packageManager

* chore: make file paths in pre-push hook relative to workspace folders

* Update pnpm version from 9 to 10

* Simplify pnpm and Node.js setup in backend workflow

Removed specific version settings for pnpm and Node.js.

* fix: pnpm & node versions

* fix: pnpm & node versions

* fix(server): type errors

* fix(client): type errors

* chore: remove max-warnings and add no-warn-ignored to eslint commands

* fix(client): implement page redirects

* feat: add booking UI

* feat: add booking UI

* Feat(server): implement session management, token validation middleware, and token utilities

* Feat(server): add transaction utility and wrap core auth actions in DB transactions

* Feat(server): refactor venue module types, constants, and route validations

* Feat(server): modularize routing for bookings and RBAC controllers

* Feat(server): integrate winston logger and clean up console logs

* Feat: minor configs and client venue form debug updates

* fix: server project with dependencies and build scripts

* feat(server): implement session management, and refactor controllers

* feat: implement explore page UI

* fix(client): Type errors

* feat: implemnt my-booking UI

* feat(pagination): add pagination middleware, types, and utilities

* chore(scripts): migrate scripts from src/scripts/ to scripts/

* feat(auth): move session model into auth module, require refresh token on logout

* feat(rbac): add requireRole middleware with role hierarchy support

* feat(config): strengthen CORS origin parsing with HTTPS validation in production

* chore(auth): use randomUUID for JTI, restrict refresh cookie path to /api/v1/auth

* fix(auth): refactor controllers to use shared handleError utility

* fix(server): fix global Express error handler to log unhandled errors

* chore(email): add TTL index on email tasks, add retryAfter filter and writeConcern to worker

* chore(dbutils): simplify transaction wrapper to return directly

* chore(logging): add module context identifier to all logError calls

* style: apply prettier formatting, fix EOF newlines, and clean up empty file

* feat/client: add venue listing form with image upload, draft storage, and India data

* feat/server: implement venue module with CRUD operations and validation

* feat: fix formatting and prettier

* feat(client): add My Venues page with card grid and status badges

Add a full-featured My Venues page with:
- API-driven venue list with skeleton loading, empty state, and error+retry
- VenueCard component with cover image, status badges, location, rejection reason
- VenueCardSkeleton animated loading placeholder
- VenueStatus and MyVenue types for type safety
- Removed old placeholder MyVenues.tsx

* feat(client): add responsive sidebar with mobile bottom navigation

Refactor ListSidebar for responsive layout:
- Desktop sidebar visible on md+ screens only
- New fixed bottom navigation bar for mobile with active state
- Moved ListVenueLayout from layout/ -> pages/listVenue/ with responsive padding

* feat(client): remove hardcoded margin from venue form steps and update routing

Clean up layout dependencies:
- Remove ml-72 (sidebar offset) from all three form step components
- Update router imports to point to new layout location
- Minor formatting fix in venueFormMapper

* feat(client): add server-side draft persistence for venue wizard

Add draft session management with server-side save/resume:
- Save/load/clear typed DraftSession in sessionStorage
- Fetch draft from server on mount (sessionStorage -> API -> blank)
- Auto-save form progress to server on step navigation
- Clear draft session on logout in AuthContext
- Add upsertVenueDraft/getMyDraft/updateVenue service methods
- Add VENUE_DRAFT and VENUE_UPDATE API endpoints

* feat(server): add venue draft persistence APIs and model

Add draft persistence for the venue creation wizard:
- Add VenueDraftModel schema for storing in-progress form data
- Add upsertDraft/getMyDraft controller functions
- Add upsertDraft/getDraft/deleteDraft repository functions
- Add PUT /draft and GET /draft routes
- Add upsertDraft/getDraft service functions

* feat(server): add validation error messages to venue refund schemas

Improve venue validation:
- Export refundRuleSchema for reuse
- Replace z.coerce.number() with z.number() for stricter validation
- Add custom error messages for daysBefore and refundPercentage

* feat: implement feat updates

* feat(client): add shared filter constants for price range and Kerala districts

* feat(client): add useDebounce hook for input debouncing

* feat(client): add venue filter types and pagination response interfaces

* feat(client): add public venue fetching and configure array params serialization

* feat(client): add useExploreVenues infinite scroll hook

* feat(client): integrate explore page with API, filters, search, and infinite scroll

* feat(client): update venue listing form to use shared district constants and remove state field

* feat(server): add pagination types, utilities, and paginated response helper

* feat(server): implement venue management module with filtering, and draft support

* feat(server): implement venue management module with drafting, and administrative workflows

* feat(client):Fix type errors

* chore: update workspace configurations and development setup

* refactor(server): update venue schema with nested structures and fields

* feat(server): setup skeleton for venue availability module

* refactor(client): update venue types, form mappers, and add venue steps to support nested schema

* feat(client): modernize venue details page and card layout in explore page

* feat(client): run types and formatter

* feat(client): fix type errors

* feat(client): restructure pages folder casing and booking layouts

* refactor(client): migrate relative imports to @ path aliases

* feat(client): register missing user bookings routes in router

* feat(client): implement booking system with Razorpay webhooks, email notifications, and availability management

* chore(server): update package dependencies, environment configurations, and routing initialization

* feat(server): implement venue availability computation and time slot overlap validation

* feat(server): implement slot locking mechanism and booking management module

* feat(server): implement Razorpay webhook handlers and signature verification

* feat(server): setup transactional email templates, queuing database, and background processing workers

* refactor(server): extract HTML templates from EmailService to a dedicated EmailTemplateFactory

* feat(server): implement Swagger API documentation and modularize route definitions across the application

* feat(server): implement strict layered architecture, refactor routers, and add complex workflows for bookings/owners

* feat(client): restructure authentication, venue details, and booking flow pages

* feat(admin): implement modal system, route guards, and owner/superadmin dashboards

* feat(admin): implement reusable detail panel components and admin dashboard pages for users, venues, bookings, and team management

* feat: add husky pre-push hook to perform targeted type-checking and linting

* feat(admin): add detailed admin panels for entities and implement workspace-aware pre-push validation hooks

* feat: add Husky pre-push hook for incremental type checking and linting

* fix: use ESM-compatible __dirname in vite.config, fix pre-push sed pattern

* chore: add lint cmd to package.json

- Github actions error @ .github\workflows\frontend.yml

* fix(client): Razorpay payment types

* fix(client): align page directory casing with router.tsx imports

router.tsx imported ./pages/Explore, ./pages/Booking, and
listVenue/{myVenue,addVenue}, but the committed directories were
lowercase explore/booking and listVenue/{MyVenue,Addvenue}. Windows
and macOS filesystems are case-insensitive so this resolved fine
locally, but GitHub Actions' Linux runners are case-sensitive,
failing the tsc build with TS2307 for all 8 paths.

Renames pages directories to match router.tsx's casing exactly.

* feat: add slot generator type definitions

* feat(client): implement slot generation logic and preview panel component for venue creation

* feat(server/admin): add env validation, RBAC seed check, admin booking filters, and dashboard role redirect

* feat(server): add reviews, wishlist, and moderation modules with RBAC permissions

* feat(server): improve booking system with duplicate prevention and owner review management

* feat(server): enhance venue system with featured venues, geospatial pins, and ratings

* feat(server): improve auth rate limiting and email worker reliability

* feat(admin): add user ban system, moderation panel, and featured venues management

* feat(admin): add owner reviews page and design system refresh

* feat(client): implement wishlist, review submission, and major UI overhaul

* feat(client): update types and services for coordinates, ratings, and featured venues

* feat: implement venue interaction features including geolocation, wishlist sync, reviews, and authentication layout

* fix: slot blocking mechanism and venue detail page

* WIP: Backup commit

* Refactor: Constants and fixes

* Fix: Dynamic imports and fixes

* feat: add venue moderation, deadline system, auth refactor, and contract snapshot types

* feat: add venue moderation system with admin review workflow

* feat: add inactivity and temporary block overlays to owner calendar

* feat: support inactive venue state with UI and navigation changes

- Server: approveReview now sets status to Inactive; offline booking
  guard for inactive venues
- Admin: TenantLayout allows inactive venues + purple banner;
  VenueSelectorPage shows inactive badge and allows dashboard access
  (navigates to bookings); OwnerBookingsPage disables offline booking
  button with tooltip; DangerZone removed obsolete closing period
- Sidebar: My Venues nav item, venue switcher allows inactive venues,
  sub-route tracking for venue switching preserves current page
- Store: activeVenueStatus and lastVenueSubRoute tracking

* fix: add cursor-pointer to button components and minor UI fixes

* feat: make booking ID clickable in owner bookings table to open detail panel

* feat: add review action dialogs and moderation store for admin review workflow

* feat: add venue settings page with edit/view mode, Cloudinary upload, and danger zone

* feat: add idempotency middleware with MongoDB-backed key store for safe retries

* fix: rename lint-staged.config.js to .mjs for ESM compatibility

* fix: pre-push hook whitespace bug and remove redundant tsc --noEmit

* fix: add test steps to CI workflows and fix hooks

- ci.yml: re-enable pnpm test after build
- backend.yml: add test step after build
- frontend.yml: add typecheck and test steps for both apps
- .gitignore: add coverage/ to prevent committing test artifacts
- lint-staged: rename config to .mjs for ESM compatibility
- pre-push: fix file path whitespace bug, remove redundant tsc

* fix: add test steps to CI workflows and fix hooks

* feat: implement venue status workflow engine, transaction utility, and standardized linting configuration

* fix: stabilize flaky webhook idempotency test and fix event override helper

* feat: add Docker setup, venue/booking workflow engine, swagger doc alignment, and code cleanup

- Add docker-compose.yml, Dockerfile, and .dockerignore for server containerization
- Implement venue status workflow engine with transaction utility
- Add idempotency middleware with MongoDB-backed key store
- Fix swagger path mismatches, add missing query param docs, align request bodies
- Add admin settings page, venue moderation, and owner review management
- Apply consistent formatting across admin and client codebase

* feat(client): add comprehensive vitest test suite with 125 tests

- Exclude test files from production build tsconfig

* feat(admin): add comprehensive vitest test suite with 86 tests

* fix(admin): exclude src/tests from tsc build to fix pre-push

* docs: add project documentation (setup, security, architecture, api, modules)

* Add logos/favicons, fix reports analytics validation, uncomment zrok header, update email templates with logo

* feat: implement owner repository tests and add environment configuration constants

* feat: add PaymentStatus enum, schema field, and updated partial index

* feat(client): add paymentStatus display to booking cards and details

* Feat: Add in_progress status, booking status worker, admin table scroll

* fix: type errors & add uiStatus enum

* fix(idempotency): await create() before response to prevent race condition

---------

Co-authored-by: MuneebMoosa <muneebmoosavv@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant