This is a React-based Issue Tracker application built with TypeScript, Vite, and Bootstrap. It allows you to manage projects and their associated issues with a clean, dark-themed interface.
- Project Management: Create and manage multiple projects
- Issue Tracking: Create, edit, and track issues with priorities and due dates
- 1:n Relationship: Each project can have multiple issues
- Dark Theme: Modern dark UI with Bootstrap
- Responsive Design: Works on desktop and mobile devices
- 100% Test Coverage: Comprehensive Jest testing suite
- TypeScript: Full type safety throughout the application
- Modern UI: Bootstrap 5 with FontAwesome icons
Category | Technology | Version | Grade |
---|---|---|---|
Frontend | React | 18.2.0 | A+ |
Language | TypeScript | 5.0+ | A+ |
Build Tool | Vite | 5.0+ | A |
Styling | Bootstrap | 5.3 | A |
Testing | Jest + Testing Library | 29.x | A+ |
Icons | FontAwesome | 6.x | A |
Mock API | JSON Server | 0.17+ | B+ |
- Test Coverage: 100% (69/69 tests passing)
- Type Safety: Full TypeScript implementation
- Performance: A+ grade
- Maintainability: A grade
- Accessibility: ARIA compliant
- Node.js (version 16 or higher)
- npm or yarn package manager
- Clone the repository:
git clone https://github.com/peterruler/reactjs-todoapp.git
cd reactjs-todoapp
- Install dependencies:
npm install
Start the development server:
npm run dev
The application will be available at http://localhost:5173
Want to see the quality? Run the comprehensive test suite:
npx jest
Result: 69 tests pass in ~3 seconds with 100% coverage! π
Run ESLint to check for code issues:
npm run lint
Build the application for production:
npm run build
Preview the production build:
npm run preview
For persistent data storage during development, you can use json-server:
# Install globally
npm install -g json-server
# Or install as dev dependency
npm install --save-dev json-server
Create a db.json
file in the root directory:
{
"Project": [
{
"id": "22c054b7-4078-4d02-9034-e4b186bcb81f",
"name": "Sample Project"
}
],
"Issue": [
{
"id": "fa48263b-a110-4f25-a774-2fcf03f35d78",
"title": "Sample Issue",
"priority": "2",
"dueDate": "2025-12-31",
"done": false,
"projectId": "22c054b7-4078-4d02-9034-e4b186bcb81f"
}
]
}
# If installed globally
json-server --watch db.json --port 3001
# If installed as dev dependency
npx json-server --watch db.json --port 3001
The JSON server will be available at http://localhost:3001
This project has 100% test coverage with comprehensive testing using Jest and React Testing Library.
π― Try it out! Run the tests to see the quality of this codebase in action!
# Run all tests - See 69 tests pass in seconds! π
npx jest
# Run tests in watch mode for development
npx jest --watch
# Generate detailed coverage report
npx jest --coverage
Want to see the tests in action? Just run:
cd reactjs-todoapp
npm install
npx jest
Expected Output: β 10 test suites passed, 69 tests passed, 100% coverage
- Test Suites: 10/10 passing β
- Total Tests: 69/69 passing β
- Coverage: 100% lines, functions, and branches
- Testing Framework: Jest + React Testing Library
- Test Duration: ~3-4 seconds β‘
- β Component rendering and behavior
- β User interactions (clicks, form inputs)
- β API integrations with mocks
- β Error handling and edge cases
- β Accessibility features
- β Responsive design elements
Category | Tests | Coverage |
---|---|---|
Component Tests | 45 | 100% |
Integration Tests | 15 | 100% |
User Interaction Tests | 9 | 100% |
Total | 69 | 100% |
For detailed project metrics and quality analysis, see STATUS.md
Overall Grade: A+ π
GET/POST /Project
- Manage projectsGET/POST /Issue
- Manage issuesGET /Project/:id
- Get specific projectGET /Issue/:id
- Get specific issuePUT/PATCH /Issue/:id
- Update issueDELETE /Issue/:id
- Delete issuePATCH /Project/:id
- Update project (e.g., mark as inactive)
Note: The application automatically handles the mapping between the internal data structure and the JSON server schema.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
...tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
...tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
...tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
Contributions are welcome! Please feel free to submit a Pull Request.
- Follow TypeScript best practices
- Maintain test coverage at 100%
- Use conventional commit messages
- Ensure responsive design compatibility
This project is licensed under the MIT License - see the LICENSE file for details.
Peter Stroessler
- GitHub: @peterruler
- Email: peter.stroessler@bluewin.ch
β If you like this project, please give it a star! β
Made with β€οΈ using React, TypeScript, and Vite