A modern, responsive ticket management system built with React, featuring full CRUD operations, authentication, and an intuitive user interface.
- Landing Page with hero section and wavy decorative background
- Authentication System (Login & Signup) with validation
- Dashboard displaying ticket statistics (Total, Open, Resolved)
- Ticket Management with full CRUD operations
- Protected Routes for authenticated users only
- Session Management using localStorage
- Real-time Validation with inline errors and toast notifications
- Maximum width: 1440px (centered layout)
- Fully responsive (mobile, tablet, desktop)
- Wavy hero background with decorative elements
- Card-style layout with shadows
- Color-coded status tags:
- 🟢 Green: Open tickets
- 🟠 Amber: In Progress tickets
- ⚫ Gray: Closed tickets
- React 18.3.1 - Frontend framework
- React Router DOM 6.28.0 - Navigation and routing
- Vite 7.1.7 - Build tool and dev server
- ESLint - Code linting
- CSS3 - Styling with custom properties
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher)
- npm (v8 or higher)
- Clone the repository:
git clone https://github.com/Danielagboola52/react-ticket-app.git
cd react-ticket-app- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and navigate to:
http://localhost:5173
react-ticket-app/
├── public/
├── src/
│ ├── assets/ # Images and static files
│ ├── components/ # Reusable components
│ │ └── Toast.jsx # Toast notification component
│ ├── pages/ # Page components
│ │ ├── Landing.jsx # Landing/Home page
│ │ ├── Login.jsx # Login page
│ │ ├── Signup.jsx # Signup page
│ │ ├── Dashboard.jsx # Dashboard with stats
│ │ └── Tickets.jsx # Ticket management page
│ ├── utils/ # Utility functions
│ │ └── ProtectedRoute.jsx # Route protection
│ ├── App.jsx # Main app component
│ ├── App.css # Global styles
│ ├── index.css # Base styles
│ └── main.jsx # App entry point
├── .gitignore
├── package.json
├── vite.config.js
└── README.md
- Sign Up: Create a new account from the landing page
- Login: Access your account with credentials
- Session is stored in
localStorageasticketapp_session
- Create: Add new tickets with title, description, and status
- Read: View all tickets in card layout
- Update: Edit existing ticket details
- Delete: Remove tickets with confirmation
- Title: Required field
- Status: Must be one of:
open,in_progress, orclosed - Real-time validation with clear error messages
- Protected routes for authenticated users
- Session-based authentication
- Automatic redirect to login for unauthorized access
- Logout functionality that clears session data
The application is fully responsive and optimized for:
- 📱 Mobile devices (320px - 767px)
- 📱 Tablets (768px - 1023px)
- 💻 Desktop (1024px and above)
- Maximum content width: 1440px
npm run buildThe optimized production files will be in the dist/ directory.
Run ESLint to check code quality:
npm run lintnpm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
- Global styles:
src/index.css - Component styles:
src/App.css - Modify color schemes and themes in CSS files
Update status colors in your CSS:
.status-open { color: #10b981; } /* Green */
.status-in_progress { color: #f59e0b; } /* Amber */
.status-closed { color: #6b7280; } /* Gray */- None at the moment
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Commit changes:
git commit -m 'Add feature' - Push to branch:
git push origin feature-name - Submit a pull request
This project is open source and available under the MIT License.
Daniel Agboola
- GitHub: @Danielagboola52
- Live Application: https://zesty-pudding-d65acf.netlify.app/
- Built with React and Vite
- Inspired by modern ticket management systems
- Part of HNG Task 2 - React Implementation
For support, please open an issue in the GitHub repository or contact the author.
⭐ If you find this project helpful, please consider giving it a star on GitHub!