https://github.com/yeasin2002/express-ts-starter
Perfect boilerplate templates for TypeScript and Express with Docker, build tool configured and scaffolded with all necessary packages.
https://github.com/yeasin2002/express-ts-starter
boilterplate express express-boilerplate express-starter express-template nodejs rest-api template typescript
Last synced: 1 day ago
JSON representation
Perfect boilerplate templates for TypeScript and Express with Docker, build tool configured and scaffolded with all necessary packages.
- Host: GitHub
- URL: https://github.com/yeasin2002/express-ts-starter
- Owner: yeasin2002
- License: mit
- Created: 2024-02-15T10:42:22.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-11-10T01:13:14.000Z (5 months ago)
- Last Synced: 2025-11-11T13:31:48.117Z (5 months ago)
- Topics: boilterplate, express, express-boilerplate, express-starter, express-template, nodejs, rest-api, template, typescript
- Language: TypeScript
- Homepage:
- Size: 560 KB
- Stars: 59
- Watchers: 0
- Forks: 12
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# JobSphere Backend
Backend API for JobSphere - a mobile marketplace connecting customers with local freelance contractors (electricians, plumbers, cleaners, carpenters, etc.).
## Tech Stack
- **Runtime**: Node.js with TypeScript
- **Framework**: Express.js v5.1.0
- **Database**: MongoDB with Mongoose ODM
- **Package Manager**: Bun
- **Authentication**: JWT with refresh token rotation
- **Real-Time**: Socket.IO for WebSocket chat
- **Payments**: Stripe with escrow system
- **Notifications**: Firebase Cloud Messaging (FCM)
- **File Upload**: Local storage (future AWS S3 migration)
## Key Features
- JWT authentication with access/refresh tokens
- Role-based access (Customer, Contractor, Admin)
- Real-time chat between users
- Push notifications for mobile app with Firebase
- Stripe payment processing with escrow
- File upload system
- OTP-based password recovery
## Getting Started
### Prerequisites
- Node.js 18+
- Bun package manager
- MongoDB instance
- Stripe account (for payments)
- Firebase project (for notifications)
### Installation
```bash
bun install
```
### Environment Setup
Create a `.env` file in the root directory:
```env
# Server
PORT=4000
NODE_ENV=development
# Database
MONGODB_URI=mongodb://localhost:27017/jobsphere
# JWT
JWT_ACCESS_SECRET=your_access_secret
JWT_REFRESH_SECRET=your_refresh_secret
JWT_ACCESS_EXPIRY=15m
JWT_REFRESH_EXPIRY=7d
# Email (for OTP)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASS=your_app_password
# WebSocket
SOCKET_PORT=3001
# File Upload
UPLOAD_DIR=./upload
MAX_FILE_SIZE=10485760
# Stripe
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_COMMISSION_PERCENT=10
# Firebase (FCM)
FCM_SERVER_KEY=...
FCM_PROJECT_ID=...
```
### Development
```bash
bun dev # Start with hot reload
bun dev:b # Start with Bun hot reload
```
### Production
```bash
bun build # Build the project
bun start # Start production server
```
### Code Quality
```bash
bun check # Run oxlint
bun check-types # TypeScript type checking
```
### Module Generator
Quickly scaffold new API modules with boilerplate code:
```bash
bun run generate:module
```
This will prompt for a module name and create:
- `[module].route.ts` - Express router with CRUD endpoints
- `[module].service.ts` - Business logic handlers
- `[module].schema.ts` - Zod validation schemas with OpenAPI docs
See `script/README.md` for detailed usage.
## Project Structure
```
jobsphere-backend/
├── src/
│ ├── db/ # Database connection and models
│ ├── routers/ # API route handlers
│ │ ├── auth.ts # Authentication routes
│ │ ├── user.ts # User management
│ │ ├── job.ts # Job postings
│ │ ├── payment.ts # Payment processing
│ │ └── chat.ts # Chat endpoints
│ ├── middleware/ # Auth, validation, error handling
│ ├── services/ # Business logic
│ ├── utils/ # Helper functions
│ └── index.ts # Application entry point
├── upload/ # File upload directory
└── .kiro/steering/ # Project documentation
```
## User Roles
- **Customer**: Posts jobs, hires contractors, makes payments
- **Contractor**: Offers services, accepts jobs, receives payments
- **Admin**: Monitors platform, manages disputes, oversees transactions
## API Endpoints
### Authentication
- `POST /api/auth/register` - User registration
- `POST /api/auth/login` - User login
- `POST /api/auth/forgot-password` - Request OTP
- `POST /api/auth/reset-password` - Reset with OTP
- `POST /api/auth/refresh` - Refresh access token
- `POST /api/auth/logout` - Logout user
### Payments
- `POST /api/payments/create-intent` - Create payment
- `POST /api/payments/confirm` - Confirm payment
- `POST /api/payouts/withdraw` - Contractor withdrawal
- `POST /api/webhooks/stripe` - Stripe webhooks
### File Upload
- `POST /api/upload` - Upload file
- `GET /api/files/:filename` - Get file
## Payment Flow
1. Customer posts job with budget
2. Contractor accepts job
3. Customer pays via Stripe (held in escrow)
4. Job completed → Payment auto-released to contractor
5. Contractor withdraws to bank account
## Contributing
This project uses Husky for pre-commit hooks to ensure code quality. All commits are automatically linted and type-checked.
## License
Private - All rights reserved