A full-stack project management and timesheet tracking application built with Laravel (Backend) and React (Frontend).
π View Original Task Requirements
- Features
- Tech Stack
- Project Structure
- Backend Setup
- Frontend Setup
- API Documentation
- Database Schema
- Live Demo
- Author
- π Authentication System - JWT-based auth using Laravel Sanctum
- π₯ User Management - CRUD operations for users
- π Project Management - Create, update, and track projects
- β±οΈ Timesheet Tracking - Log hours worked on projects
- π Advanced Filtering - Filter by date, status, department, etc.
- π Pagination - Efficient data loading
- β Form Validation - Comprehensive request validation
- π¨ API Resources - Clean, structured JSON responses
- π― Modern UI - Built with Bootstrap 5
- π± Responsive Design - Mobile-friendly interface
- π Real-time Search - Debounced search functionality
- ποΈ Dynamic Filters - Filter by multiple criteria
- π Smart Pagination - Navigate large datasets easily
- β‘ Performance Optimized - Fast loading with React Query
- π¨ Custom Components - Reusable UI components
- π‘οΈ Error Boundary - Graceful error handling
- Framework: Laravel 11.x
- Authentication: Laravel Sanctum
- Database: MySQL
- PHP Version: 8.2+
- Framework: React 18
- Build Tool: Vite
- Styling: Bootstrap 5
- State Management: React Context API
- HTTP Client: Axios
- Routing: React Router v6
astudio-assessment/
βββ Backend/ # Laravel API
β βββ app/
β β βββ Http/
β β β βββ Controllers/
β β β β βββ API/
β β β βββ Requests/
β β β βββ Resources/
β β βββ Models/
β βββ database/
β β βββ migrations/
β βββ routes/
β βββ api.php
β
βββ FrontEnd/ # React Application
β βββ src/
β β βββ Components/
β β β βββ DataTable/
β β β βββ Filters/
β β β βββ Pagination/
β β β βββ TopNav/
β β βββ Context/
β β βββ Pages/
β β βββ styles/
β βββ vite.config.js
β
βββ Docs/ # Documentation
βββ astudio.sql
βββ Erd.png
- PHP 8.2 or higher
- Composer
- MySQL 5.7+
- Navigate to Backend directory
cd Backend- Install Dependencies
composer install- Environment Configuration
cp .env.example .env- Configure Database
Edit
.envfile:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=astudio
DB_USERNAME=your_username
DB_PASSWORD=your_password- Generate Application Key
php artisan key:generate- Run Migrations
php artisan migrate- Seed Database (Optional)
php artisan db:seed- Start Development Server
php artisan serveThe API will be available at http://localhost:8000
# Clear all caches
php artisan optimize:clear
# List all routes
php artisan route:list
# Generate API documentation
php artisan route:list --json- Node.js 18+
- npm or yarn
- Navigate to Frontend directory
cd FrontEnd- Install Dependencies
npm install- Environment Configuration
cp .env.example .envEdit .env:
VITE_API_BASE=http://localhost:8000/api- Start Development Server
npm run devThe app will be available at http://localhost:5173
npm run build- Local:
http://localhost:8000/api - Production:
https://astudio-task-assessment-production.up.railway.app/api
POST /api/register
Content-Type: application/json
{
"name": "johndoe",
"first_name": "John",
"last_name": "Doe",
"dob": "1990-01-01",
"gender": "male",
"email": "[email protected]",
"password": "password123",
"password_confirmation": "password123"
}POST /api/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "password123"
}POST /api/logout
Authorization: Bearer {token}All endpoints below require authentication (Authorization: Bearer {token})
GET /api/users- List all usersGET /api/users/{id}- Get user detailsPOST /api/users- Create new userPOST /api/users/update- Update userPOST /api/users/delete- Delete user
GET /api/projects- List all projectsGET /api/projects/{id}- Get project detailsPOST /api/projects- Create new projectPOST /api/projects/update- Update projectPOST /api/projects/delete- Delete project
GET /api/timesheets- List all timesheetsGET /api/timesheets/{id}- Get timesheet detailsPOST /api/timesheets- Create new timesheetPOST /api/timesheets/update- Update timesheetPOST /api/timesheets/delete- Delete timesheet
Create Project:
POST /api/projects
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "Mobile App Redesign",
"department": "IT",
"start_date": "2025-01-01",
"end_date": "2025-06-30",
"status": "active"
}Create Timesheet:
POST /api/timesheets
Authorization: Bearer {token}
Content-Type: application/json
{
"user_id": 1,
"project_id": 1,
"task_name": "Frontend Development",
"date": "2025-10-11",
"hours": 8.5
}π View Complete Postman Documentation
users
- id, name, first_name, last_name, dob, gender, email, password
- Relationships: hasMany timesheets, belongsToMany projects
projects
- id, name, department, start_date, end_date, status
- Relationships: hasMany timesheets, belongsToMany users
time_sheets
- id, user_id, project_id, task_name, date, hours
- Relationships: belongsTo user, belongsTo project
project_user (Pivot Table)
- id, user_id, project_id
- π Railway: https://astudio-task-assessment-production.up.railway.app
- π API Docs: Postman Documentation
- π Vercel: https://astudio-two.vercel.app
Email: [email protected]
Password: password123
cd Backend
php artisan testcd FrontEnd
npm run test- β Password hashing with bcrypt
- β CSRF protection
- β SQL injection prevention via Eloquent ORM
- β XSS protection
- β Rate limiting on API endpoints
- β Token-based authentication
- β Input validation and sanitization
- Set environment variables
- Configure database connection
- Run migrations:
php artisan migrate --force - Deploy via Git hook
- Connect GitHub repository
- Set build command:
npm run build - Set output directory:
dist - Configure environment variables
- Deploy automatically on push
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is part of a technical assessment and is for demonstration purposes.
Ahmed Saeed
- π Website: coder79.me
- πΌ LinkedIn: @devahmedsaeed
- π₯ YouTube: AhmedSaeedcoder79
- π§ Email: [email protected]
- Laravel Community
- React Community
- AStudio for the opportunity
- All contributors and supporters
β If you find this project useful, please consider giving it a star!
Made with β€οΈ by Ahmed Saeed

