A comprehensive, full-stack parcel delivery and tracking platform designed for modern logistics operations across Bangladesh. Built with React, TypeScript, and a robust backend architecture to handle everything from parcel booking to real-time delivery tracking.
- Role-based access control (Sender, Receiver, Delivery Partner, Super Admin)
- Secure JWT authentication
- Password visibility toggle
- Form validation with Zod
- Create Parcel: Comprehensive form with sender/receiver details
- Track Parcel: Public tracking with real-time - status updates
- Status Updates: Delivery partner interface for status management
- Payment Integration: Multiple payment methods (Prepaid, Postpaid, COD)
- JWT Authentication with secure token storage
- Role-based Access Control (RBAC)
- Input Validation on client and server
The application is fully responsive and optimized for:
- π± Mobile devices (320px+)
- π± Tablets (768px+)
- π» Desktop (1024px+)
- π₯οΈ Large screens (1440px+)
- Delivery partner assignment
- Real-time status tracking
- Complete delivery timeline
- Mobile-responsive design for field operations
- Beautiful gradient designs with glassmorphism effects
- Responsive design for all devices
- Dark mode support
- Smooth animations and transitions
- Professional color-coded interfaces
Full dark mode implementation with:
- System preference detection
- Manual toggle option
- Persistent user preference
- Smooth transitions
- Bangladesh phone number validation (01[3-9]XXXXXXXX)
- Division, city, and area management
- Currency display in BDT (ΰ§³)
- Local date/time formatting
git clone https://github.com/your-username/parcel-delivery-system.git
cd parcel-delivery-systemnpm install
# or
yarn installcp .env.example .env.local
VITE_API_BASE_URL=http://localhost:5000/api
VITE_APP_NAME=Parcel Delivery Systemnpm run dev
# or
yarn devhttp://localhost:5173ββ src/
β ββ assets/
β β ββ icons/
β β ββ images/
β β ββ react.svg
β ββ components/
β β ββ layout/
β β β ββ CommonLayout.tsx
β β β ββ DashboardLayout.tsx
β β β ββ Footer.tsx
β β β ββ Navbar.tsx
β β ββ modules/
β β β ββ admin/
β β ββ ui/
β ββ config/
β β ββ index.env.ts
β ββ constants/
β β ββ role.ts
β ββ context/
β ββ formValidationSchema/
β β ββ parcel.schema.ts
β ββ hooks/
β ββ lib/
β ββ pages/
β β ββ admin/
β β ββ receiver/
β β ββ sender/
β β ββ VerifyUser.tsx
β ββ redux/
β β ββ feature/
β β β ββ auth/
β β β β ββ auth.api.ts
β β ββ axiosBaseQuery.ts
β β ββ baseApi.ts
β β ββ hook.ts
β β ββ store.ts
β ββ routes/
β ββ types/
β ββ utils/
β ββ App.tsx
β ββ index.css
β ββ main.tsx
- React 18 : Modern React with hooks
- TypeScript - Type safety and better DX
- Vite - Fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - High-quality component library
- Redux Toolkit - Modern Redux with less boilerplate
- RTK Query - Data fetching and caching
- React Hook Form - Performant forms with easy validation
- Zod - TypeScript-first schema validation
- Lucide React - Beautiful icon library
- Sonner - Modern toast notifications
- Framer Motion - Smooth animations (optional)
- ESLint - Code linting
- Prettier - Code formatting
- Husky - Git hooks
- Lint-staged - Run linters on staged files
To run tests, run the following command
# Development
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
# Code Quality
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint errors
npm run format # Format code with Prettier
npm run type-check # Run TypeScript compiler
# Testing
npm run test # Run tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Generate test coverageimport { CreateTour } from '@/components/forms/CreateTour'
// Usage
<CreateTour
onSuccess={(parcel) => console.log('Parcel created:', parcel)}
className="max-w-4xl mx-auto"
/>import { TrackParcel } from '@/components/tracking/TrackParcel'
// Usage - Public route, no auth required
<TrackParcel />import { UpdateStatus } from '@/components/delivery/UpdateStatus'
// Usage - For delivery partners
<UpdateStatus
parcels={assignedParcels}
onStatusUpdate={handleStatusUpdate}
/>