A modern freelancing platform built with React and Vite that connects freelancers with clients worldwide.
- Features
- Tech Stack
- Project Structure
- Getting Started
- Component Architecture
- Available Pages
- Styling
- Development
- User Dashboard - Track active projects, earnings, messages, and gamification points
- Project Management - Post jobs, browse opportunities, and manage proposals
- Real-time Messaging - Chat with clients and freelancers
- Gamification System - Earn points, badges, and level up
- User Profiles - Showcase portfolio, skills, and achievements
- Responsive Design - Works seamlessly on desktop, tablet, and mobile devices
- Sticky Navigation - Header stays visible while scrolling for easy navigation
- Frontend Framework: React 18
- Build Tool: Vite
- Routing: React Router DOM
- Icons: React Icons (Feather Icons)
- Styling: CSS3 (Custom styling with CSS modules)
- State Management: React Hooks
- Code Quality: ESLint
Hire-Experts-Work-Smarter/
βββ public/ # Static assets
βββ src/
β βββ assets/ # Images, fonts, etc.
β βββ components/ # Reusable components
β β βββ layout/ # Layout components
β β β βββ Header.jsx # Global navigation header
β β β βββ Header.css
β β βββ messaging/ # Messaging components
β β βββ ChatList.jsx
β β βββ ChatRoom.jsx
β βββ pages/ # Page components
β β βββ Home.jsx # Landing page
β β βββ Dashboard.jsx # User dashboard
β β βββ Messaging.jsx # Messages page
β β βββ Gamification.jsx
β β βββ Profile.jsx
β β βββ Settings.jsx
β β βββ JobPost.jsx # Create job posting
β β βββ JobDetails.jsx # View job details
β βββ styles/ # Global styles
β βββ App.jsx # Root component
β βββ App.css
β βββ main.jsx # Entry point
βββ index.html
βββ package.json
βββ vite.config.js
βββ README.md
- Node.js (v16 or higher)
- npm or yarn
- Clone the repository
cd "d:\SCHOOL YEAR 2025-2026\FIRST SEM THIRD YEAR\SYSTEM ANALYSIS AND DESIGN\Hire-Experts-Work-Smarter"- Install dependencies
npm install- Start development server
npm run dev- Open your browser and navigate to
http://localhost:5173
npm run buildnpm run previewThe Header component is a reusable component that is imported and used across all pages.
Location: src/components/layout/Header.jsx
Usage Example:
import Header from '../components/layout/Header'
export default function Dashboard() {
return (
<div className="dashboard-page">
<Header className="dashboard-nav" variant="app" />
{/* Page content */}
</div>
)
}Props:
className(string, optional) - Additional CSS classesvariant(string, optional) - Either 'landing' or 'app' (default: 'landing')
Features:
- β Sticky positioning - stays at top while scrolling
- β Responsive design - adapts to mobile devices
- β Two variants: Landing page and App navigation
- β Icon-based navigation with labels
- β Active state highlighting
| Page | Route | Description |
|---|---|---|
| Home | / |
Landing page with hero section and features |
| Dashboard | /dashboard |
User dashboard with stats and recent activity |
| Projects | /projects |
Browse and post projects |
| Messages | /messaging |
Real-time chat with other users |
| Gamification | /gamification |
View points, badges, and leaderboard |
| Profile | /profile |
User profile with portfolio and skills |
| Settings | /settings |
Account settings |
| Job Post | /job-post |
Create new job posting |
| Job Details | /job/:id |
View specific job details |
- Primary Color: #111 (Black)
- Background: #f8f8f8 (Light Gray)
- Border Radius: 8-14px (Rounded corners)
- Transitions: 0.2s ease (Smooth animations)
- No top padding - Pages start from the very top for sticky header
- Consistent spacing - Uses standardized gap and padding values
- Responsive breakpoints:
- Desktop: 1024px+
- Tablet: 640px - 1024px
- Mobile: < 640px
- Sticky header with
position: sticky - Flexbox and Grid layouts
- Custom hover states
- Mobile-first responsive design
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Lint code
npm run lint- Component Pattern: Functional components with hooks
- Export Pattern: Default exports for components
- Props: Destructured with default values
- CSS: Component-scoped CSS files
- Reusable Components - Create components in
src/components/for reusability - Import Order - External libraries β Local components β Styles
- Consistent Naming - PascalCase for components, kebab-case for CSS files
- One Component Per File - Each component in its own file
The header uses position: sticky and stays at the top of the viewport while scrolling, providing easy access to navigation at all times.
All pages have padding: 0 48px 64px to ensure the header sits flush at the top of the browser window.
The Header component is defined once in src/components/layout/Header.jsx and imported into all pages, following the DRY (Don't Repeat Yourself) principle.
On mobile devices (< 640px), the navigation text labels hide and only icons are shown to save space.
This project is created for educational purposes as part of the System Analysis and Design course.
This is a school project. For questions or suggestions, please contact the development team.
Built with β€οΈ using React + Vite