Freelanch is a comprehensive freelance management platform that helps freelancers manage clients, projects, tasks, and invoices all in one place.
- Authentication & Authorization: Secure JWT-based login/signup with role-based access (Freelancer/Admin)
- Client Management: Full CRUD operations with filtering, searching, and sorting
- Project Management: Track projects with budgets, deadlines, and status
- Task Management: Organize tasks with priorities, due dates, and status tracking
- Invoice Management: Generate and download invoices as PDF
- Analytics Dashboard: Visual reports of income and productivity trends
- Modern UI: Sleek black-glass interface with silver and neon blue highlights
- Next.js 14
- React 18
- TailwindCSS
- Chart.js for analytics
- jsPDF for invoice generation
- Node.js
- Express.js
- Prisma ORM
- MySQL Database
- JWT Authentication
.
├── frontend/ # Next.js frontend application
├── backend/ # Express.js backend API
└── README.md
- Node.js (v18 or higher)
- MySQL database
- npm or yarn
- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create a
.envfile in the backend directory:
DATABASE_URL="mysql://user:password@localhost:3306/freelanch_db"
JWT_SECRET="your-secret-key-change-in-production"
PORT=5000- Generate Prisma Client:
npm run prisma:generate- Run database migrations:
npm run prisma:migrate- (Optional) Open Prisma Studio to view your database:
npm run prisma:studio- Start the development server:
npm run devThe backend API will be running on http://localhost:5000
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Create a
.env.localfile in the frontend directory:
NEXT_PUBLIC_API_URL=http://localhost:5000/api- Start the development server:
npm run devThe frontend will be running on http://localhost:3000
POST /api/auth/signup- Register a new userPOST /api/auth/login- Login user
GET /api/clients- Get all clients (with filtering, searching, sorting)GET /api/clients/:id- Get client by IDPOST /api/clients- Create a new clientPUT /api/clients/:id- Update clientDELETE /api/clients/:id- Delete client (Admin only)
GET /api/projects- Get all projects (with filtering, searching, sorting)GET /api/projects/:id- Get project by IDPOST /api/projects- Create a new projectPUT /api/projects/:id- Update projectDELETE /api/projects/:id- Delete project (Admin only)
GET /api/tasks- Get all tasks (with filtering, searching, sorting)GET /api/tasks/:id- Get task by IDPOST /api/tasks- Create a new taskPUT /api/tasks/:id- Update taskDELETE /api/tasks/:id- Delete task
GET /api/invoices- Get all invoices (with filtering, searching, sorting)GET /api/invoices/:id- Get invoice by IDPOST /api/invoices- Create a new invoicePUT /api/invoices/:id- Update invoiceDELETE /api/invoices/:id- Delete invoice
GET /api/analytics/income- Get income and productivity analytics
- Push your code to GitHub
- Import your repository in Vercel
- Set environment variable:
NEXT_PUBLIC_API_URLto your backend URL - Deploy
- Push your code to GitHub
- Create a new Web Service on Render/Railway
- Connect your GitHub repository
- Set environment variables:
DATABASE_URL- Your MySQL database URLJWT_SECRET- Your JWT secret keyPORT- Port number (usually auto-set)
- Set build command:
cd backend && npm install && npm run prisma:generate - Set start command:
cd backend && npm start - Deploy
- Create a MySQL database on PlanetScale or your preferred provider
- Update the
DATABASE_URLin your backend environment variables - Run migrations:
npm run prisma:migrate
ISC