A modern ticket management web application built with Vue.js, featuring authentication, dashboard analytics, and full CRUD operations for tickets.
- Vue.js (v3+)
- Vue Router - Client-side routing
- Tailwindcss - Styling with responsive design
- LocalStorage - Session management and data persistence
- Landing Page with wavy hero section and decorative elements
- Authentication (Login/Signup) with form validation
- Dashboard with ticket statistics (Total, Open, Resolved)
- Ticket Management (Create, Read, Update, Delete)
- Protected Routes with session-based authorization
- Responsive Design (Mobile, Tablet, Desktop)
- Toast Notifications for user feedback
- Node.js (v14 or higher)
- npm or yarn
- Clone the repository
git clone <your-repo-url>
cd ticket-app-vue- Install dependencies
npm install- Start the development server
npm run dev- Open your browser and navigate to
http://localhost:5173
Use these credentials to log in:
- Email:
demo@feMentor.com - Password:
!abdul.tsx
src/
├── components/ # Reusable Vue components
├── views/ # Page views (Landing, Auth, Dashboard, Tickets)
├── router/ # Vue Router configuration
├── utils/ # Helper functions and validation
├── assets/ # Static assets and styles
└── App.vue # Main application component
- Hero Section - Wavy SVG background with decorative circles
- Navigation - Responsive header with authentication state
- Footer - Consistent across all pages
- Cards - Box-styled components with shadows and rounded corners
- Authentication state managed via localStorage (
ticketapp_session) - Tickets stored in localStorage for persistence
- Vue Composition API for reactive state management
- Title: Required field
- Status: Must be one of:
open,in_progress,closed - Description: Optional, max 500 characters
- All forms include real-time validation with inline error messages
- Open - Green (#10B981)
- In Progress - Amber (#F59E0B)
- Closed - Gray (#6B7280)
- Semantic HTML elements
- ARIA labels for interactive elements
- Keyboard navigation support
- Sufficient color contrast ratios
- Focus states on all interactive elements
- Protected routes require valid session token
- Automatic redirect to login for unauthorized access
- Session cleared on logout
- Form validation to prevent XSS attacks
- Mobile: < 768px (Stacked layout)
- Tablet: 768px - 1024px (2-column grid)
- Desktop: > 1024px (Multi-column grid, max-width 1440px)
- Session persists only in the current browser
- No backend integration (uses localStorage)
To create a production build:
npm run buildThe built files will be in the dist/ directory.
This project is for educational purposes.
Built with ❤️ using Vue.js by AbdulrazaqYM