A comprehensive university equipment borrowing and management system with a React Native mobile app, Spring Boot backend, and Next.js web frontend. Designed for universities to manage equipment requests, approvals, inspections, and penalties across departments.
- ποΈ Architecture
- π± Mobile App
- βοΈ Backend API
- π Web Frontend
- π Quick Start
- π₯ User Roles
- π οΈ Tech Stack
- π Project Structure
- π¨ Design System
- π API Documentation
- π Troubleshooting
- π¦ Building for Production
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EQuipHub System β
βββββββββββββββββββ¬ββββββββββββββββββββββ¬ββββββββββββββββββββββββββ€
β Mobile App β Web Frontend β Backend API β
β (React Native)β (Next.js) β (Spring Boot) β
βββββββββββββββββββΌββββββββββββββββββββββΌββββββββββββββββββββββββββ€
β β’ Expo SDK 54 β β’ Next.js 14 β β’ Java 17 β
β β’ React 19 β β’ React 18 β β’ Spring Boot 3.2 β
β β’ Navigation 6 β β’ Tailwind CSS β β’ Spring Security β
β β β β’ Spring Data JPA β
ββββββββββ¬βββββββββ΄βββββββββββ¬βββββββββββ΄ββββββββββββ¬ββββββββββββββ
β β β
βββββββββββββββββββββ΄βββββββββββββββββββββββ
β
βββββββββββΌββββββββββ
β Neon (PostgreSQL) β
β Upstash (Redis) β
βββββββββββββββββββββ
- Students browse equipment, create requests, and track status
- Lecturers approve/reject requests from their students
- Technical Officers issue equipment, process returns, conduct inspections
- Department Admins manage department staff, equipment, and configurations
- System Admins oversee the entire system and create departments
A fully-featured React Native mobile application built with Expo SDK 54.
| Feature | Description |
|---|---|
| Authentication | JWT-based login, registration, email verification with OTP |
| Student Portal | Equipment browsing, request creation, penalty tracking |
| Dept Admin Portal | Department management, staff oversight, request approval |
| Technical Officer Portal | Equipment issuing, return processing, inspections |
| Lecturer Portal | Request approval queue with approve/reject actions |
| System Admin Portal | System-wide analytics and user management |
- Login with email/password
- Student self-registration
- 6-digit OTP email verification
- Dashboard with stats and quick actions
- Equipment catalog with search
- Request management (create, view, cancel)
- Penalty tracking and appeals
- Department dashboard and statistics
- Equipment management
- Request approval workflow
- Staff and student oversight
- Issue equipment to approved requests
- Process returns with condition assessment
- Conduct inspections
- Approval queue for student requests
- Approve/reject with comments
A robust Spring Boot 3.2 REST API with JWT authentication.
- Java 17 with Spring Boot 3.2
- Spring Security with JWT authentication
- Spring Data JPA with Neon PostgreSQL (Cloud)
- Upstash Redis (Cloud) for caching and session management
- Email Service for notifications
| Module | Purpose |
|---|---|
AuthController |
Login, registration, email verification |
UserManagementController |
User CRUD operations |
DepartmentController |
Department management |
EquipmentController |
Equipment CRUD and status updates |
RequestController |
Equipment request workflow |
ApprovalController |
Request approval process |
InspectionController |
Equipment issue/return/inspection |
PenaltyController |
Penalty management and appeals |
AdminController |
System administration |
Key entities:
- User β Students, lecturers, admins with roles
- Department β Academic departments
- Equipment β Borrowable items with categories
- Request β Equipment borrowing requests
- RequestItem β Individual items in a request
- RequestApproval β Approval workflow tracking
- Inspection β Issue/return condition records
- Penalty β Violation penalties and appeals
- AuditLog β System activity tracking
A modern Next.js 14 web application with glassmorphism design.
- Responsive glassmorphism UI
- Role-based dashboards
- Equipment management
- Request approval workflows
- Analytics and reporting
- Department configuration
| Role | Pages |
|---|---|
| Student | Dashboard, Equipment, Requests, Penalties, History |
| Lecturer | Dashboard, Approvals |
| Technical Officer | Dashboard, Inspections, Issue, Returns |
| Department Admin | Dashboard, Equipment, Requests, Staff, Students, Penalties |
| System Admin | Dashboard, Users, Departments, Configuration |
| Tool | Version |
|---|---|
| Node.js | β₯ 18 |
| Java | 17 (JDK) |
| PostgreSQL | β₯ 14 |
| Redis | β₯ 6 |
git clone <repository-url>
cd EQuipHubThis project is configured to use cloud-managed databases:
- PostgreSQL via Neon: Set up your database on Neon and grab the connection URL, username, and password.
- Redis via Upstash: Set up your Redis instance on Upstash and get the host URL and token.
Update your .env file with these credentials to connect directly to your managed cloud databases.
cd backend/api
# Configure database connection in src/main/resources/application.yml
# Default: jdbc:postgresql://localhost:5432/equiphub
# Run the application
./mvnw spring-boot:runThe API will be available at http://localhost:8080
cd frontend
npm install
npm run devThe web app will be available at http://localhost:3000
cd app
npm install
# Configure API URL in .env
EXPO_PUBLIC_API_URL=http://localhost:8080/api/v1
# Start Expo
npx expo startScan the QR code with Expo Go on your phone, or press i/a to open in simulator.
| Role | Permissions |
|---|---|
| STUDENT | Browse equipment, create requests, view penalties |
| LECTURER | Approve/reject student requests |
| APPOINTEDLECTURER | Same as Lecturer |
| INSTRUCTOR | Same as Lecturer |
| TECHNICALOFFICER | Issue equipment, process returns, inspections |
| DEPARTMENTADMIN | Department management, staff oversight |
| HEADOFDEPARTMENT | Same as Dept Admin + department config |
| SYSTEMADMIN | System-wide admin, create departments |
| Technology | Version |
|---|---|
| React Native | 0.81.5 |
| Expo SDK | 54 |
| React | 19.1.0 |
| React Navigation | 6.9.26 |
| Axios | 1.7.2 |
| Expo SecureStore | 15.0.8 |
| Technology | Version |
|---|---|
| Java | 17 |
| Spring Boot | 3.2.x |
| Spring Security | 6.2.x |
| PostgreSQL | 14+ |
| Redis | 6+ |
| Maven | 3.9+ |
| Technology | Version |
|---|---|
| Next.js | 14.x |
| React | 18.x |
| Tailwind CSS | 3.x |
| TypeScript | 5.x |
EQuipHub/
βββ app/ # React Native Mobile App (Expo)
β βββ src/
β β βββ lib/
β β β βββ api.js # Axios client & API modules
β β β βββ theme.js # Design tokens & glassmorphism
β β βββ context/
β β β βββ AuthContext.js # Authentication state
β β βββ components/
β β β βββ UI.js # Reusable UI components
β β βββ screens/
β β βββ auth/ # Login, Register, Verify
β β βββ student/ # Student screens
β β βββ admin/ # Admin screens
β β βββ deptAdmin/ # Department admin screens
β β βββ technicalOfficer/ # TO screens
β β βββ lecturer/ # Lecturer screens
β βββ App.js # Navigation setup
β βββ package.json
β
βββ backend/ # Spring Boot API
β βββ api/
β βββ src/main/java/com/equiphub/api/
β βββ config/ # Security, CORS, JWT config
β βββ controller/ # REST endpoints
β βββ model/ # JPA entities
β βββ repository/ # Data access
β βββ service/ # Business logic
β βββ security/ # Custom auth
β
βββ frontend/ # Next.js Web App
β βββ src/app/
β βββ (auth)/ # Auth pages
β βββ student/ # Student pages
β βββ lecturer/ # Lecturer pages
β βββ admin/ # Admin pages
β βββ components/ # Reusable components
β
βββ docs/ # Documentation
βββ Architecture.md
βββ EqipHub_v3.3.md
| Color | Hex | Usage |
|---|---|---|
| Primary | #3D52A0 |
Buttons, active states, links |
| Primary Light | #7091E6 |
Highlights, gradients |
| Secondary | #8697C4 |
Secondary text, icons |
| Muted | #ADBBDA |
Borders, placeholders |
| Background | #EDE8F5 |
Screen backgrounds |
| White | #FFFFFF |
Cards, inputs |
| Black | #000000 |
Primary text |
The mobile app uses glassmorphism styling:
- Translucent cards with
rgba(255,255,255,0.6)background - Subtle borders with
rgba(255,255,255,0.5) - Soft shadows with primary color tint
- Gradient backgrounds on headers
http://localhost:8080/api/v1
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/login |
User login |
| POST | /auth/register |
Student registration |
| POST | /auth/verify |
Email verification |
| POST | /auth/refresh |
Token refresh |
| GET | /auth/me |
Current user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /equipment |
List all equipment |
| GET | /equipment/{id} |
Get equipment details |
| POST | /equipment |
Create equipment (Admin) |
| PUT | /equipment/{id} |
Update equipment |
| DELETE | /equipment/{id} |
Delete equipment |
| Method | Endpoint | Description |
|---|---|---|
| GET | /requests/my |
My requests |
| POST | /requests |
Create request |
| PUT | /requests/{id}/submit |
Submit request |
| PUT | /requests/{id}/cancel |
Cancel request |
| Method | Endpoint | Description |
|---|---|---|
| GET | /approvals/queue |
Pending approvals |
| POST | /approvals/{id}/approve |
Approve request |
| POST | /approvals/{id}/reject |
Reject request |
Database connection failed
- Check your Neon Dashboard for connectivity issues.
- Verify that
DATABASE_URLin your.envstarts withjdbc:postgresql://and includessslmode=require.
Redis connection refused
- Check your Upstash Dashboard to ensure the instance is active.
- Verify
REDIS_HOST,REDIS_PASSWORD(which maps to your Upstash REST Token), andREDIS_SSL=trueare set correctly in.env.
Network Error on physical device
- Ensure phone and computer on same WiFi
- Set
EXPO_PUBLIC_API_URL=http://<YOUR_IP>:8080/api/v1in.env
Metro bundler issues
npx expo start --clearBuild errors
npm run build
npm run dev -- --turboUsing EAS Build:
cd app
npm install -g eas-cli
eas login
eas build --platform android --profile previewcd backend/api
./mvnw clean package -DskipTests
java -jar target/equiphub-api-1.0.0.jarcd frontend
vercel deploy --prodThis project is part of the EQuipHub University Equipment Management System.
| Role | Password | |
|---|---|---|
| System Admin | admin@equiphub.test | Admin@1234 |
| Department Admin | deptadmin@equiphub.test | DeptAdmin@1234 |
| Lecturer | lecturer@equiphub.test | Lecturer@1234 |
| Technical Officer | tech@equiphub.test | TechOfficer@1234 |
| Student | student@equiphub.test | Student@1234 |
Built with β€οΈ for university equipment management