A role-based IT Ticketing Web Application inspired by Freshservice, designed to manage internal service requests efficiently across departments.
The system supports Employees, Support Staff, and Admins, each with clearly defined responsibilities and access levels.
- Firebase Authentication (Email & Password)
- Persistent login sessions
- Role-based access control (RBAC)
-
Employee
- Raise new tickets
- View and track own tickets
-
Support Staff
- Department-level dashboard
- View and manage assigned tickets
- Update ticket status, priority, and activity
-
Admin
- Global dashboard
- User management (Add / Edit / Delete users)
- View all tickets across departments
- Create, view, and update tickets
- Priority, urgency, impact handling
- Department-based ticket routing
- Activity logs and attachments
- Full-page ticket details view (
/tickets/:ticketId)
- Ticket statistics
- Status-based and priority-based insights
- Department-level visibility
- Role-based dynamic sidebar
- Protected routes
- Clean URL structure
- React (Vite)
- Redux Toolkit
- React Router v6
- Tailwind CSS
- shadcn/ui
- React Hook Form
- Firebase Authentication
- Firebase Firestore
- Supabase Storage (for file uploads)
src/
│
├── app/ # Redux store
├── components/ # Reusable UI components
├── data/ # app data and mock data
├── context/ # AuthProvider
├── features/ # Redux slices
├── firebase/ # Firebase config
├── hooks/ # Custom hooks (useAuthUser, useUser, useTicket)
├── pages/ # Route-level pages
├── router/ # AppRouter & ProtectedRoute
├── services/ # Firebase service functions
├── utils/ # Helpers & utilities
└── main.jsx
| Route | Description |
|---|---|
/login |
Authentication |
/dashboard |
Role-based dashboard |
/tickets |
Tickets list |
/tickets/:ticketId |
Full ticket details page |
/users |
User management (Admin only) |
| Role | Access |
|---|---|
| Employee | My Tickets, Raise Ticket |
| Support | Dashboard, Department Tickets, My Tickets |
| Admin | Dashboard, All Tickets, User Management |
git clone <repo-url>
cd it-ticketing-systemnpm installCreate a .env file and add Firebase credentials:
VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...npm run dev- Ticket Details are implemented as a full-page route, not a nested view
- Sidebar navigation is role-based, not permission-based per component
- Services are decoupled from Redux for scalability
- Hooks act as the bridge between services and state
- Firestore is the source of truth for ticket and user data
- SLA tracking
- Ticket escalation rules
- Search & advanced filters
- Notifications
- Audit logs
- Analytics & reports
Abdullah Surve Frontend / MERN Stack Developer Role-based systems • Scalable UI • Clean architecture