An API for a mini projects platform where clients post projects and freelancers apply. It supports registration, login, project CRUD, application submission, and more.
- Node.js (v16 or above)
- PostgreSQL
- Docker (optional for containerization)
├── .env.example
├── .eslintrc.cjs
├── .gitignore
├── .prettierrc
├── Dockerfile
├── README.md
├── docker-compose.yml
├── package-lock.json
├── package.json
├── postman_collection.json
├── prisma
│ ├── schema.prisma
│ └── seed.js
└── src
├── app.js
├── env.js
├── logger.js
├── middlewares
│ ├── auth.js
│ ├── error.js
│ ├── rateLimit.js
│ ├── rbac.js
│ └── validate.js
├── modules
│ ├── applications
│ │ ├── routes.js
│ │ ├── schemas.js
│ │ └── service.js
│ ├── auth
│ │ ├── controller.js
│ │ ├── routes.js
│ │ └── schemas.js
│ └── projects
│ ├── controller.js
│ ├── routes.js
│ ├── schemas.js
│ └── service.js
├── prisma.js
└── server.js
-
Clone the repository:
git clone https://github.com/your-username/mini-projects-platform.git cd mini-projects-platform -
Install dependencies:
npm install
-
Set up environment variables:
Create a
.envfile based on.env.exampleand add your environment-specific values (e.g.,JWT_SECRET). -
Run the application:
npm run dev
-
Docker Setup (optional):
docker-compose up --build # Builds the image and runs containers docker-compose up -d # Run containers in detached mode
-
Database
- Start Postgres (Docker recommended):
docker compose up -d db
- Copy env and set secrets:
cp .env.example .env
- Generate client & run migrations:
npx prisma generate npm run prisma:migrate # or `npx prisma migrate dev` for dev environments - Seed dev data:
npm run seed
-
Run API
npm run dev # or production: npm run build && npm start
POST api/auth/register: Register a new user with{ name, email, password, role }POST api/auth/login: Log in and get a JWT token with{ email, password }→{ token }- Use header:
Authorization: Bearer <token>
- Use header:
GET api/projects: List all projects with filters filtersstatus, budgetMin, budgetMax, q, page, pageSizeGET api/projects/:id: Get a specific project by IDPOST api/projects: Create a project (CLIENT only) DRAFTPATCH api/projects/:id: Update a project (CLIENT only)DELETE api/projects/:id: Delete a project (CLIENT only)POST api/projects/:id/open: Transition project from DRAFT→OPEN (CLIENT only)POST api/projects/:id/close: Transition project from OPEN→CLOSED (CLIENT or ADMIN)
POST /projects/:id/applications: Apply to a project (FREELANCER only)GET /projects/:id/applications: List applications for a project (CLIENT or ADMIN)GET /projects/me/applications: List applications by the authenticated freelancer
- Logging: pino
- Security: helmet, rate limiting (auth routes)
- Validation: Zod
- Lint/Format: ESLint + Prettier
docker compose up --buildThe API waits for migrations then starts on :PORT.
- CORS: Adjust CORS settings in src/app.js if exposing publicly.
- JWT Expiry/Refresh: Consider updating JWT expiry times or implementing a refresh token strategy for better session management in production.
- OpenAPI Generation: Consider using zod-to-openapi or other OpenAPI tools for automatic documentation if needed.