A comprehensive QA Management System that helps teams organize test suites, track test execution, and manage releases. The system includes automated Linear ticket creation for failed tests and provides detailed analytics on testing progress.
- Test Management: Create, organize, and manage test cases with steps, prerequisites, and test data
- Test Suites: Group related tests into reusable test suites
- Release Tracking: Track test execution across releases with comprehensive progress monitoring
- Test Run Recording: Document test execution with pass/fail/defects statuses
- User Management: Invite team members via email with secure invitation tokens
- Linear Integration: Automatically create Linear tickets for failed tests
- Dashboard Analytics:
- Current release status overview
- Stale test detection (tests not run in 7+ days)
- Testing activity charts with label filtering
- Priority & Label System: Organize tests with customizable labels and priority levels
- User Assignments: Assign tests and test suites to team members
- React 18 with TypeScript
- Vite for fast development
- React Router for client-side routing
- Tailwind CSS for styling
- shadcn/ui component library
- Recharts for data visualization
- Axios for API requests
- date-fns for date formatting
- Node.js with Express
- TypeScript for type safety
- MongoDB with Mongoose ODM
- JWT for authentication
- bcrypt for password hashing
- Postmark for email delivery
- Linear API for issue tracking integration
Before running this application, ensure you have:
- Node.js (v18 or higher)
- npm or yarn
- MongoDB (local or Atlas cloud instance)
- Postmark Account (for sending invitation emails)
- Linear Account (optional, for ticket integration)
-
Clone the repository
git clone <repository-url> cd QAManageSys
-
Install dependencies
# Install root dependencies npm install # Install client dependencies cd client npm install # Install server dependencies cd ../server npm install # Install shared dependencies cd ../shared npm install
-
Set up environment variables
Create a
.env
file in theserver/
directory:PORT=3000 MONGODB_URI=mongodb://localhost:27017/qamanagesys JWT_SECRET=your-secret-key-here JWT_REFRESH_SECRET=your-refresh-secret-key-here POSTMARK_API_KEY=your-postmark-api-key POSTMARK_FROM_EMAIL=[email protected] CLIENT_URL=http://localhost:5173 LINEAR_CLIENT_ID=your-linear-client-id LINEAR_CLIENT_SECRET=your-linear-client-secret LINEAR_REDIRECT_URI=http://localhost:3000/api/linear/callback
Create a
.env.local
file in theclient/
directory:VITE_LINEAR_CLIENT_ID=your-linear-client-id
Run both frontend and backend concurrently:
npm run start
This will start:
- Frontend on
http://localhost:5173
- Backend on
http://localhost:3000
Run frontend only:
cd client
npm run dev
Run backend only:
cd server
npm run dev
# Build the entire project
npm run build
# Start production server
npm run start:prod
npm run start
- Run both client and server in development modenpm run build
- Build client and server for productionnpm run lint
- Lint the entire projectnpm run lint:fix
- Lint and fix issues across the project
npm run dev
- Start Vite dev servernpm run build
- Build for productionnpm run preview
- Preview production buildnpm run lint
- Lint client codenpm run lint:fix
- Lint and fix client code
npm run dev
- Start server with nodemonnpm run build
- Compile TypeScriptnpm run start
- Run compiled servernpm run lint
- Lint server codenpm run seed:admin
- Create admin usernpm run seed:data
- Seed initial test datanpm run seed:releases
- Seed release datanpm run seed:stale
- Seed stale testsnpm run clear:invitations
- Clear pending invitations
QAManageSys/
βββ client/ # React frontend
β βββ src/
β β βββ api/ # API request functions
β β βββ components/ # React components
β β β βββ modals/ # Modal components
β β β βββ ui/ # shadcn/ui components
β β βββ contexts/ # React contexts
β β βββ hooks/ # Custom hooks
β β βββ pages/ # Page components
β β βββ types/ # TypeScript types
β β βββ utils/ # Utility functions
β βββ ...
βββ server/ # Express backend
β βββ config/ # Configuration files
β βββ models/ # Mongoose models
β βββ routes/ # Express routes
β β βββ middlewares/ # Route middlewares
β βββ scripts/ # Database scripts
β βββ services/ # Business logic
β βββ utils/ # Utility functions
βββ shared/ # Shared code between client/server
β βββ config/ # Shared configurations
β βββ types/ # Shared TypeScript types
βββ ...
The application uses JWT-based authentication with access and refresh tokens:
- Access Token: Short-lived token (1 hour) for API requests
- Refresh Token: Long-lived token (7 days) for obtaining new access tokens
Protected routes require the Authorization: Bearer <token>
header.
- User: User accounts with authentication
- UserInvitation: Email invitation tokens
- Test: Test case definitions with steps and metadata
- TestSuite: Collections of tests
- Release: Release tracking with status
- TestRun: Test execution records
- Label: Categorization tags for tests
- LinearIntegration: Linear workspace connection data
- PasswordReset: Password reset tokens
POST /api/auth/register
- Register new userPOST /api/auth/login
- Login userPOST /api/auth/logout
- Logout userPOST /api/auth/refresh
- Refresh access tokenGET /api/auth/me
- Get current user
GET /api/tests
- Get all testsPOST /api/tests
- Create testGET /api/tests/:id
- Get test by IDPUT /api/tests/:id
- Update testDELETE /api/tests/:id
- Delete test
GET /api/test-suites
- Get all test suitesPOST /api/test-suites
- Create test suiteGET /api/test-suites/:id
- Get test suite by IDPUT /api/test-suites/:id
- Update test suiteDELETE /api/test-suites/:id
- Delete test suite
GET /api/releases
- Get all releasesPOST /api/releases
- Create releaseGET /api/releases/:id
- Get release by IDPUT /api/releases/:id
- Update releaseDELETE /api/releases/:id
- Delete releaseGET /api/releases/:id/stats
- Get release statisticsGET /api/releases/:id/untested
- Get untested tests
GET /api/test-runs
- Get all test runsPOST /api/test-runs
- Create test runDELETE /api/test-runs/:id
- Delete test run
GET /api/users
- Get all usersPOST /api/users/invite
- Invite new userGET /api/users/invitation/:token
- Verify invitationPOST /api/users/complete-registration
- Complete registrationDELETE /api/users/:id
- Delete user
GET /api/labels
- Get all labels
GET /api/dashboard/stats
- Get dashboard statistics
GET /api/linear/settings
- Get Linear settingsPOST /api/linear/connect
- Connect Linear accountPOST /api/linear/disconnect
- Disconnect Linear accountGET /api/linear/callback
- OAuth callback
To populate the database with sample data for testing:
# Create admin user (email: [email protected], password: Admin123!)
npm run seed:admin
# Seed users, labels, tests, and test suites
npm run seed:data
# Seed releases and test runs
npm run seed:releases
# Seed stale tests (for testing dashboard alerts)
npm run seed:stale
# Clear pending invitations
npm run clear:invitations
- Sign up for a Postmark account
- Get your API key from the dashboard
- Add the API key to
server/.env
asPOSTMARK_API_KEY
- Configure the sender email as
POSTMARK_FROM_EMAIL
- Create a Linear OAuth application
- Set the redirect URI to
http://localhost:3000/api/linear/callback
(development) - Add credentials to environment variables:
LINEAR_CLIENT_ID
LINEAR_CLIENT_SECRET
LINEAR_REDIRECT_URI
- Local:
mongodb://localhost:27017/qamanagesys
- Atlas: Get connection string from MongoDB Atlas dashboard
All server logs are output to the console. Key operations are logged:
- Database connection status
- Authentication attempts
- API requests and responses
- Email sending status
- Linear API interactions
- Error traces with full context
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Follow existing code conventions
- Run
npm run lint:fix
before committing - Write meaningful commit messages
- Add tests for new features
This project is licensed under the MIT License - see the LICENSE file for details.
- shadcn/ui for the beautiful component library
- Tailwind CSS for the utility-first CSS framework
- Linear for the issue tracking integration
- Postmark for reliable email delivery
For issues, questions, or contributions, please open an issue on the GitHub repository.
Built with β€οΈ by the QA Management Team