πΈ See the Screenshots Guide for a complete walkthrough from dashboard to ticket creation.
A full-stack test case management system built with the MERN stack (MongoDB, Express, React, Node.js). Organize your QA workflow with projects, test suites, test cases, and test runsβfeaturing real-time collaborative editing, AI-powered test generation, comprehensive reporting, and a modern dashboard UI.
- π Projects & Test Suites β Organize test cases into projects with customizable fields and nested test suites
- π Test Cases β Create, edit, clone, and bulk-manage test cases with priority, status, steps, and expected results
- β‘ Virtualized Tables β TanStack React Virtual keeps large test case lists fast and responsive
- π Test Runs β Execute test cases, track results (Pass/Fail/Blocked/Skipped), and record actual outcomes
- π« Tickets & Discussions β Track bugs with full lifecycle management and thread comments on cases and tickets
- π Reports & Analytics β Visual dashboards with execution statistics, pass rates, and trend analysis
- π₯ Real-Time Collaboration β Google Docs-style live editing with presence indicators via Socket.io
- π€ Multi-Provider AI Generation β Generate test cases automatically using Gemini, OpenAI, OpenRouter, Anthropic, or DeepSeek
- π Secure Authentication β JWT-based auth with email/password and Google OAuth 2.0
See the "Getting Started" section below for a consolidated, full installation and running guide.
This project covers:
- Full-stack MERN development with TypeScript
- Test case management best practices
- Real-time collaboration with Socket.io
- JWT authentication & OAuth 2.0
- AI integration (Gemini) for test generation
- Modern React patterns with Zustand
- Tailwind CSS styling
- Comprehensive API design
TypeScript Migration: See migrate-to-typescript.md for migration details.
Recommended:
- π Projects β Create and manage testing projects with custom fields and member collaboration
- π₯ Project Members β Add/remove members who share access to a project
- βοΈ Project Settings β Hide default fields/columns and define custom fields (text, long text, dropdown, rich text) per project
- π Test Suites β Organize test cases into logical groupings within projects
- π Test Cases β Full CRUD with priority, status, steps, expected results, custom fields, areas, tags, and assigned testers
- π Bulk Operations β Clone, move, delete, and reorder multiple test cases at once
- π₯ Import Test Cases β Bulk import test cases from CSV/Excel, with or without creating a suite
- π€ Export Test Cases β Export test cases with selectable columns to CSV/Excel
- π Test Runs β Execute test cases and record Pass/Fail/Blocked/Skipped results
- π Run Execution Wizard β Step-by-step guided execution with pass/fail/skip/retry; failing an item prompts instant bug-ticket creation
- π Run Groups β Organize test runs into nested, color-coded groups (children reparent on group deletion)
- π·οΈ Tags & Environments β Tag test runs and track execution environments (staging, production, etc.)
- β±οΈ Run Item Details β Track time spent, attachments, assignees, and execution timestamps per test run item
- π« Tickets β Bug/defect tracking with status, priority, severity, assignee, tags, attachments, and links to related run items
- π¬ Discussions β Threaded comments on test cases and tickets with fix-state tracking and attachments
- βοΈ System Messages β Run item executions and ticket status changes automatically post status updates to discussions
- π Reports & Analytics β Visual dashboards with execution statistics, trends, suite comparisons, and test case health (flaky tests, never executed); exportable to CSV/PDF
- π Dashboard Statistics β Aggregated project overview stats via
/api/statistics - πΌοΈ Rich Text Editing β Tiptap-based WYSIWYG editor with image uploads to S3-compatible storage
- π€ AI Generation β Generate test cases automatically from multiple AI providers: Gemini, OpenAI, OpenRouter, Anthropic Claude, and DeepSeek
- π History Tracking β Full audit trail of test case changes with snapshots, viewable and restorable to any previous version
- π‘ WebSocket Integration β Socket.io for instant updates across all clients
- π₯ Live Presence β See who's viewing and editing in real-time (projects, test cases, and tickets)
- βοΈ Collaborative Editing β Google Docs-style field-level live editing for test cases and tickets
- π Automatic Sync β UI updates instantly when team members make changes
- π¬ Real-Time Discussions β New/updated/deleted discussion messages broadcast instantly
- π Email/Password Auth - User registration with password hashing and JWT
- π§ Email Verification - Mailtrap integration with OTP-style verification (24h token validity, 5-min resend cooldown)
- π Password Reset Flow - Secure forgot/reset password via email (1-hour token expiry)
- π Change Password - Update password for logged-in users
- π Google OAuth 2.0 - One-click sign in with Google
- π‘οΈ CSRF Protection - State parameter validation for OAuth
- π Account Linking - Link Google to existing email/password account
- πͺ HTTP-Only Cookies - Secure token storage
- π§ͺ Test Manager UI - Full-featured test case management interface
- π Projects Page - Create and manage testing projects
- π Test Suites Page - Organize test cases into suites
- π Test Cases Page - Table view with inline editing and bulk operations
- β‘ Virtualized Table - TanStack React Virtual keeps large lists responsive
- π Test Runs Page - Execute tests and record results
- π« Tickets Page - Track and manage bugs/defects linked to runs
- π Reports Page - Analytics dashboards and execution statistics
- π Dashboard - Overview with quick actions and recent activity
- π Analytics Page - Interactive charts with Recharts
- βοΈ Settings Page - Profile, security, AI provider preferences, and API key management
- π§ AI Generation Modal - Stream test cases from Gemini, OpenAI, OpenRouter, Anthropic, or DeepSeek with per-provider model selection
- ποΈ Filtering - Filter modal for narrowing down test cases and tickets
- π Report Export - Download analytics as CSV or print-to-PDF
- π Pagination - Paginated case/run/ticket lists and infinite scroll on projects
- π§· Deep Links - Shareable URLs for specific test cases, runs, run groups, and tickets
- πΌοΈ Rich Text Editor - Tiptap editor with S3-backed image uploads (test descriptions, steps, discussions)
- ποΈ Type-to-Confirm Deletion - Typing confirms destructive actions
- π¨ Modern UI - Tailwind CSS with Framer Motion animations
- π Dark Mode - Light/dark theme toggle
- π± Responsive Design - Works on desktop and mobile
- π― State Management - Zustand for global state
- π Toast Notifications - User feedback with react-hot-toast
- π¦ Code Splitting - Lazy-loaded routes and error boundaries
- π Comprehensive Documentation - Detailed guides for adding new features
- π§ͺ Backend Testing - Jest + Supertest with unit, integration, and service tests (mongodb-memory-server)
- π§ͺ Frontend Testing - Vitest + Testing Library for components and flows
- π Type Safety - Full TypeScript coverage on frontend and backend
- π Feature Guide - Step-by-step instructions in
Documentation/ADDING_FEATURES.md - π‘ Real-Time Architecture - Socket.io patterns documented in
Documentation/REALTIME_ARCHITECTURE.md
- Node.js (v14 or higher)
- MongoDB (local or Atlas)
- Google Cloud Console account (for OAuth)
- Mailtrap account (for email testing)
Create a .env file in the root directory.
Example (development):
# Server Configuration
PORT=5000
NODE_ENV=development
# MongoDB Connection
MONGO_URI=your_mongo_uri
# JWT
JWT_SECRET=your_secret_key
# Mailtrap (Email Service)
MAILTRAP_TOKEN=your_mailtrap_token
MAILTRAP_ENDPOINT=https://send.api.mailtrap.io/
# Optional: override the "from" address and display name used for sent emails
# If not set, the app falls back to mailtrap@demomailtrap.com /"MERN Auth"
MAILTRAP_SENDER_EMAIL=mailtrap@demomailtrap.com
MAILTRAP_SENDER_NAME=MERN Auth
# Google OAuth 2.0 (development)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:5000/api/auth/google/callback
# Comma-separated list of allowed redirect URIs (required)
# Used by the backend to validate the configured callback
GOOGLE_ALLOWED_REDIRECT_URIS=http://localhost:5000/api/auth/google/callback
# Google Drive (video evidence)
# Reuses GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET. Add the Drive callback to the
# OAuth client's Authorized redirect URIs in Google Cloud Console.
GOOGLE_DRIVE_REDIRECT_URI=http://localhost:5000/api/drive/auth/callback
# Encryption key for Drive refresh tokens (must be 32 characters; falls back to ENCRYPTION_KEY)
GOOGLE_TOKEN_ENCRYPTION_KEY=your_32_char_drive_token_encryption_key
# Name of the root folder created in each user's Drive (default: Test Case Manager)
GOOGLE_DRIVE_ROOT_FOLDER_NAME=Test Case Manager
# Maximum video size for evidence uploads in MB (default: 1024)
VIDEO_EVIDENCE_MAX_SIZE_MB=1024
# CORS Configuration
# Comma-separated list of allowed origins (required)
# Include all frontend URLs that should be allowed to make requests to the backend
ALLOWED_ORIGINS=http://localhost:5173
# Frontend URL (deprecated - use ALLOWED_ORIGINS instead)
# Kept for backward compatibility
CLIENT_URL=http://localhost:5173
# Encryption key for AI provider API key storage (must be 32 characters)
ENCRYPTION_KEY=your_32_char_encryption_key_here
# Optional: OpenRouter request identification headers (sent to OpenRouter)
#OPENROUTER_HTTP_REFERER=https://your-app.com
#OPENROUTER_TITLE=Test Case Manager
# Optional: Mailtrap template UUID for welcome emails (falls back to local HTML)
#MAILTRAP_WELCOME_TEMPLATE_UUID=your_mailtrap_template_uuid
# S3-Compatible Storage (Cloudflare R2, AWS S3, MinIO, etc.)
# Required for image uploads in the rich text editor
S3_ACCESS_KEY_ID=your_s3_access_key_id
S3_SECRET_ACCESS_KEY=your_s3_secret_access_key
# For Cloudflare R2: https://ACCOUNT_ID.r2.cloudflarestorage.com
S3_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com
S3_BUCKET_NAME=your-bucket-name
# For Cloudflare R2 use 'auto', for AWS S3 use your region (e.g., 'us-east-1')
S3_REGION=auto
# Optional: Public URL for uploaded files (falls back to S3_ENDPOINT/S3_BUCKET_NAME/key)
S3_PUBLIC_URL=https://your-custom-domain.com
# Optional: Custom DNS servers for development (defaults to 1.1.1.1,8.8.8.8)
#DNS_OVERRIDE_SERVERS=1.1.1.1,8.8.8.8
# Optional: cookie domain for auth cookies (e.g., .example.com)
#COOKIE_DOMAIN=Production / Render example (use your actual domain):
# Server Configuration
PORT=5000
NODE_ENV=production
# Google OAuth 2.0 (production)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=https://your-app.onrender.com/api/auth/google/callback
# Allowed redirect URIs (required)
GOOGLE_ALLOWED_REDIRECT_URIS=https://your-app.onrender.com/api/auth/google/callback
# CORS Configuration (required)
# Add all your frontend URLs, including preview deployments if needed
# Example: ALLOWED_ORIGINS=https://your-app.onrender.com,https://preview-123.onrender.com
ALLOWED_ORIGINS=https://your-app.onrender.com
# Frontend URL (deprecated - use ALLOWED_ORIGINS instead)
# Kept for backward compatibility
CLIENT_URL=https://your-app.onrender.comImportant Notes:
CORS Configuration:
ALLOWED_ORIGINSis now required and must be a comma-separated list of all frontend URLs allowed to make requests to the backend- Examples:
- Development:
ALLOWED_ORIGINS=http://localhost:5173 - Production:
ALLOWED_ORIGINS=https://your-app.onrender.com - Multiple origins:
ALLOWED_ORIGINS=https://your-app.vercel.app,https://preview-123.vercel.app,https://preview-456.vercel.app
- Development:
CLIENT_URLis deprecated but kept for backward compatibility. UseALLOWED_ORIGINSinstead.
Google OAuth:
GOOGLE_REDIRECT_URImust exactly match one of the Authorized redirect URIs configured in your Google Cloud Console for the OAuth client.GOOGLE_ALLOWED_REDIRECT_URISis required and must be a comma-separated list of valid redirect URIs the backend will accept.- On Render, set both
GOOGLE_REDIRECT_URIandGOOGLE_ALLOWED_REDIRECT_URISin the service's environment settings (do not commit secrets to source control).
GOOGLE_REDIRECT_URIshould contain the exact callback URL that Google will redirect to after auth, for examplehttp://localhost:5000/api/auth/google/callbackin development orhttps://your-app.onrender.com/api/auth/google/callbackin production.GOOGLE_ALLOWED_REDIRECT_URISis required and must be a comma-separated list of valid redirect URIs. In production you should include your deployed callback URL here. The same deployed callback URL must also be added in your Google Cloud Console (APIs & Services β Credentials β OAuth 2.0 Client β Authorized redirect URIs).
-
Go to Google Cloud Console
- Visit Google Cloud Console
- Sign in with your Google account
-
Create a New Project
- Click on the project dropdown at the top
- Click "New Project"
- Enter project name (e.g., "MERN Auth App")
- Click "Create"
-
Enable Google+ API
- In the search bar, type "Google+ API"
- Click on "Google+ API"
- Click "Enable"
-
Configure OAuth Consent Screen
- Go to "APIs & Services" > "OAuth consent screen"
- Select "External" user type
- Click "Create"
- Fill in the required fields:
- App name: Your app name
- User support email: Your email
- Developer contact: Your email
- Click "Save and Continue"
- Skip the Scopes section (click "Save and Continue")
- Add test users if needed
- Click "Save and Continue"
-
Create OAuth 2.0 Credentials
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth client ID"
- Select "Web application"
- Name: "MERN Auth Web Client"
- Authorized JavaScript origins:
http://localhost:5173(frontend URL)http://localhost:5000(backend URL)
- Authorized redirect URIs:
http://localhost:5000/api/auth/google/callback
- Click "Create"
-
Copy Credentials
- Copy the Client ID and Client Secret
- Paste them into your
.envfile:GOOGLE_CLIENT_ID=your_client_id_here GOOGLE_CLIENT_SECRET=your_client_secret_here
-
Update for Production
- When deploying, add your production URLs to:
- Authorized JavaScript origins
- Authorized redirect URIs
- Update
.envwith production URLs
- When deploying, add your production URLs to:
-
Clone the repository
git clone <your-repo-url> cd mern-advanced-auth
-
Install dependencies
npm run build
This will install both backend and frontend dependencies.
Development Mode:
npm run devThis starts the backend server with nodemon for hot-reloading.
Production Mode:
npm run startFrontend (separate terminal):
cd frontend
npm run devLint:
# Backend
npm run lint:backend
# Frontend
cd frontend && npm run lintType-check:
# Backend
npm run type-check
# Frontend
cd frontend && npm run type-checkThe application will be available at:
- Frontend:
http://localhost:5173 - Backend:
http://localhost:5000
mern-advanced-auth/
βββ backend/
β βββ config/
β β βββ googleAuth.ts # Google OAuth configuration
β βββ controllers/
β β βββ auth.controller.ts # Auth endpoints
β β βββ googleAuth.controller.ts # Google OAuth endpoints
β βββ db/
β β βββ connectDB.ts # MongoDB connection
β βββ mailtrap/
β β βββ emails.ts # Email sending functions
β β βββ emailTemplates.ts # HTML email templates
β β βββ mailtrap.config.ts # Mailtrap configuration
β βββ middleware/
β β βββ verifyToken.ts # JWT verification middleware
β βββ models/
β β βββ user.model.ts # User schema
β βββ routes/
β β βββ auth.route.ts # Auth routes
β βββ types/
β β βββ api.types.ts
β β βββ auth.types.ts
β β βββ express.d.ts
β β βββ index.ts
β β βββ user.types.ts
β βββ utils/
β βββ generateTokenAndSetCookie.ts
β βββ index.ts # Backend entry point
βββ frontend/
β βββ src/
β β βββ components/
β β β βββ AppLayout.tsx
β β β βββ FloatingShape.tsx
β β β βββ GoogleLoginButton.tsx
β β β βββ Header.tsx
β β β βββ Input.tsx
β β β βββ LoadingSpinner.tsx
β β β βββ PasswordStrengthMeter.tsx
β β β βββ Sidebar.tsx
β β β βββ SidebarMenuLayout.tsx
β β βββ pages/
β β β βββ ChangePasswordPage.tsx
β β β βββ DashboardPage.tsx
β β β βββ EmailVerificationPage.tsx
β β β βββ ForgotPasswordPage.tsx
β β β βββ LoginPage.tsx
β β β βββ OAuthRedirect.tsx
β β β βββ ResetPasswordPage.tsx
β β β βββ SettingsPage.tsx
β β β βββ SignUpPage.tsx
β β β βββ analytics/
β β β β βββ index.tsx
β β β βββ calendar/
β β β β βββ index.tsx
β β β βββ messages/
β β β β βββ index.tsx
β β β βββ posts/
β β β β βββ index.tsx
β β β βββ users/
β β β βββ index.tsx
β β βββ store/
β β β βββ authStore.ts # Zustand state management
β β βββ types/
β β β βββ api.types.ts
β β β βββ auth.types.ts
β β β βββ component.types.ts
β β β βββ index.ts
β β β βββ store.types.ts
β β β βββ user.types.ts
β β βββ utils/
β β β βββ date.ts
β β βββ App.tsx
β β βββ main.tsx
β β βββ index.css
β β βββ vite-env.d.ts
β βββ public/
β βββ package.json
β βββ postcss.config.js
β βββ tailwind.config.js
β βββ tsconfig.json
β βββ tsconfig.node.json
β βββ vite.config.js
βββ migrate-to-typescript.md
βββ package.json
βββ README.md
βββ ...
All API endpoints are prefixed with /api. Authentication endpoints are under /api/auth.
π For detailed API structure and how to add new features, see API URL Structure Guide
POST /api/auth/signup- Register new userPOST /api/auth/login- Login userPOST /api/auth/logout- Logout userGET /api/auth/check-auth- Verify authenticationPOST /api/auth/verify-email- Verify email with codePOST /api/auth/forgot-password- Request password resetPOST /api/auth/reset-password/:token- Reset passwordPOST /api/auth/change-password- Change password (protected)
GET /api/auth/google/url- Get Google OAuth URLGET /api/auth/google/callback- Handle Google OAuth callback
Projects (/api/projects)
POST /- Create project Β·GET /- List projects Β·GET /:id- Get projectPUT /:id- Update project Β·DELETE /:id- Delete projectPOST /:id/members- Add member Β·DELETE /:id/members/:memberId- Remove memberGET /:id/settings/PUT /:id/settings- Get/update project settings (custom fields, hidden fields/columns)DELETE /:id/settings/custom-fields/:fieldId- Permanently delete custom field data
Test Suites (/api/projects/:projectId/suites, /api/suites)
POST //GET /- Create/list suites within a projectGET /:id/PUT /:id/DELETE /:id- Suite CRUD
Test Cases (/api/projects/:projectId/cases, /api/suites/:suiteId/cases, /api/cases)
POST //GET /- Create/list test cases in a suiteGET /areas- List distinct areas Β·POST /bulk-import- Bulk import (CSV/Excel, optionally creating a suite)PATCH /reorder- Reorder test casesGET /:id/PUT /:id/DELETE /:id- Test case CRUD Β·POST /:id/clone- Clone a test casePATCH /bulk-status- Bulk status update Β·DELETE /bulk- Bulk delete
Test Runs (/api/projects/:projectId/runs, /api/runs)
POST //GET /- Create/list runs Β·GET /tags- List distinct tagsGET /:id/PUT /:id/DELETE /:id- Run CRUDPATCH /:id/items/:itemId- Update run item (status, actual result, time spent, attachments)PATCH /:id/reorder- Reorder run items Β·POST /:id/clone- Clone a run Β·POST /:id/complete- Complete a run
Run Groups (/api/projects/:projectId/run-groups, /api/run-groups)
POST //GET /- Create/list run groups Β·GET /:id/PUT /:id/DELETE /:id- Group CRUD
Tickets (/api/projects/:projectId/tickets, /api/tickets)
POST //GET /- Create/list tickets Β·GET /by-run/:runId- Tickets linked to a runGET /:id/PUT /:id/DELETE /:id- Ticket CRUD
Discussions (/api/cases/:testCaseId/discussions, /api/tickets/:ticketId/discussions)
GET //POST /- List/create messagesDELETE /:messageId- Delete a message Β·PATCH /:messageId/fix-state- Update fix-state
Per-provider endpoints (all protected; keys are encrypted at rest and per-user):
POST /api/gemini/keyΒ·GET /api/gemini/settingsΒ·GET /api/gemini/modelsPOST /api/gemini/generateΒ·POST /api/gemini/generate-stream- Same pattern for
/api/openrouter,/api/openai,/api/anthropic,/api/deepseek
GET /api/statistics- Dashboard overview statisticsGET /api/reports/project/:projectId/summary- Project summary reportGET /api/reports/project/:projectId/trends- Time-series trend data (day/week/month)GET /api/reports/project/:projectId/suite-comparison- Suite pass-rate comparisonGET /api/reports/project/:projectId/test-case-health- Flaky/never-executed/most-failing casesGET /api/reports/run/:runId/detailed- Detailed run reportPOST /api/upload/presigned-url- Generate presigned URL for image upload (S3-compatible storage)
- Express.js - Web framework
- MongoDB - Database
- Mongoose - ODM
- JWT - Authentication tokens
- bcryptjs - Password hashing
- Mailtrap - Email service
- google-auth-library - Google OAuth
- cookie-parser - Cookie handling
- cors - Cross-origin resource sharing
- Socket.io - Real-time collaboration
- @aws-sdk/client-s3 - S3-compatible image uploads (Cloudflare R2, AWS S3, MinIO)
- AI SDKs - Gemini, OpenAI, OpenRouter, Anthropic, DeepSeek (streaming + encrypted key storage)
- React - UI library
- Vite - Build tool
- Tailwind CSS - Styling
- Framer Motion - Animations
- React Router - Routing
- Zustand - State management
- TanStack React Virtual - Virtualized lists/tables
- React Hot Toast - Notifications
- Lucide React - Icons
- Socket.io Client - Real-time updates
- Recharts - Analytics charts
- Tiptap - Rich text editor
- PapaParse / SheetJS (xlsx) - CSV/Excel import & export
- @dnd-kit - Drag-and-drop reordering
- β Password hashing with bcrypt
- β JWT tokens stored in HTTP-only cookies
- β CSRF protection for OAuth
- β Email verification required
- β Secure password reset flow
- β Token expiration handling
- β Protected API routes
- β Input validation
- β Google OAuth 2.0 with state parameter
- β API rate limiting on test run, ticket, and upload routes
- OAuth Account Linking: If a user signs up with email/password and later uses Google OAuth with the same email, the accounts are automatically linked.
- Email Verification: Google OAuth users are automatically verified since Google verifies email addresses.
- Password Strength: The app includes a real-time password strength meter for better security.
- Responsive Design: The entire application is mobile-friendly and works on all screen sizes.
This application supports flexible deployment strategies:
Deploy frontend and backend as separate Vercel projects for maximum flexibility and performance:
Deploy Backend:
Deploy Frontend:
π Complete Guide: Separate Vercel Deployment β
π§ Troubleshooting Connection Issues? See the Vercel Connection Fix Guide for common issues and solutions.
Deploy to your own CapRover instance with automated CI/CD via GitHub Actions.
Required GitHub Secrets:
| Secret | Description |
|---|---|
CAPROVER_SERVER |
Your CapRover server URL (e.g., https://captain.your-domain.com) |
APP_NAME |
Your CapRover app name |
APP_TOKEN |
Deploy token from CapRover dashboard |
CI/CD Pipeline:
On push to main, the workflow:
- Runs all tests (lint, type-check, unit/integration tests)
- Builds the Docker image
- Pushes to GitHub Container Registry (GHCR)
- Deploys to CapRover
Files:
captain-definition- CapRover deployment config.github/workflows/deploy.yml- GitHub Actions workflow
Deploy to platforms like Heroku, Render, Railway, DigitalOcean, AWS, etc. as a single application:
npm run build
npm startπ Complete Guide: Traditional Deployment β
This application works on ALL platforms with the same code! β¨
- β
Local Development -
npm run dev(works exactly as before) - β Traditional Hosting - Heroku, Render, Railway, DigitalOcean, AWS, etc.
- β Vercel Separate - Deploy frontend and backend independently
- β
Vercel Monolithic - Deploy as a single application (use
vercel.json.monolithic)
The app automatically detects the environment and adapts. No code changes needed!
π Additional Documentation:
- Deployment Guide - Traditional hosting
- Separate Vercel Deployment - Separate Vercel deployment
- Vercel Connection Fix - Fix frontend-backend connection issues
- Environment Comparison - Compare deployment environments
- Vercel Configuration - Vercel config explained
These files live in Documentation/Deployment/.
This project covers:
- Full-stack MERN development
- JWT authentication
- OAuth 2.0 implementation
- Email verification systems
- Password reset flows
- Modern React patterns
- State management with Zustand
- Tailwind CSS styling
- API design and security
Feel free to fork this project and submit pull requests for any improvements.
This project is licensed under the MIT License.
Copyright (c) 2026 Brian Carlo (brian0309)
Happy Coding! π
