getLancer is a simple and efficient freelancing platform, specially targeting people who are just entering the freelancing world — including students looking for their first professional experience.
- Direct messages between client / freelancer
- Google Calendar API integration
- Multiple login options (Google, GitHub)
- Enhanced profile and dashboards
- OTP-based email verification
- Cloudflare Turnstile CAPTCHA protection
| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router) |
| Database | MongoDB / Mongoose |
| Auth | NextAuth v4 (Google & GitHub OAuth) |
| Realtime / Messaging | Firebase |
| File Storage | Cloudflare R2 (S3-compatible) |
| Nodemailer (Gmail SMTP) | |
| Cache (optional) | Redis / ioredis |
| Styling | Tailwind CSS |
Make sure you have the following installed before proceeding:
- Node.js v18 or later
- npm v9 or later (bundled with Node.js)
- A MongoDB instance (local or Atlas)
- A Google Cloud project with OAuth 2.0 credentials
- A GitHub OAuth App
- A Firebase project
- A Cloudflare R2 bucket
- A Cloudflare Turnstile site
git clone https://github.com/prathmesh796/getlancer.git
cd getlancernpm installCopy the example env file and fill in your values:
cp .env.example .env.localOpen .env.local and set each variable. The table below describes every variable:
| Variable | Required | Description |
|---|---|---|
NEXTAUTH_SECRET |
✅ | Random secret for JWT signing. Generate with openssl rand -base64 32 |
NEXTAUTH_URL |
✅ | Canonical URL of your app (e.g. http://localhost:3000) |
GOOGLE_CLIENT_ID |
✅ | Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
✅ | Google OAuth client secret |
GITHUB_CLIENT_ID |
✅ | GitHub OAuth client ID |
GITHUB_CLIENT_SECRET |
✅ | GitHub OAuth client secret |
MONGO_URL |
✅ | MongoDB connection URI |
EMAIL_USER |
✅ | Gmail address used for sending OTPs |
EMAIL_PASS |
✅ | Gmail App Password (not your account password) |
R2_ENDPOINT |
✅ | Cloudflare R2 endpoint URL |
R2_ACCESS_KEY_ID |
✅ | Cloudflare R2 access key ID |
R2_SECRET_ACCESS_KEY |
✅ | Cloudflare R2 secret access key |
NEXT_PUBLIC_TURNSTILE_SITE_KEY |
✅ | Cloudflare Turnstile public site key |
TURNSTILE_SECRET_KEY |
✅ | Cloudflare Turnstile secret key |
NEXT_PUBLIC_FIREBASE_API_KEY |
✅ | Firebase public API key |
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN |
✅ | Firebase auth domain |
NEXT_PUBLIC_FIREBASE_PROJECT_ID |
✅ | Firebase project ID |
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET |
✅ | Firebase storage bucket |
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID |
✅ | Firebase messaging sender ID |
NEXT_PUBLIC_FIREBASE_APP_ID |
✅ | Firebase app ID |
REDIS_URL |
❌ | Redis URL (optional, for Redis-based OTP storage) |
- Go to Google Cloud Console.
- Create a new OAuth 2.0 Client ID (Web application).
- Add
http://localhost:3000/api/auth/callback/googleto Authorised redirect URIs. - Copy the Client ID and Client Secret into
.env.local.
- Go to GitHub Developer Settings → New OAuth App.
- Set Authorization callback URL to
http://localhost:3000/api/auth/callback/github. - Copy the Client ID and generate a Client Secret, then add them to
.env.local.
- Enable 2-Step Verification on your Google account.
- Go to App Passwords.
- Generate a password for Mail and paste it into
EMAIL_PASS.
npm run devOpen http://localhost:3000 in your browser.
npm run build
npm startMake sure Docker and Docker Compose are installed, then:
# Copy and fill in env variables
cp .env.example .env.local
# Build and start the container
docker compose up --buildThe app will be available at http://localhost:3000.
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
This project is licensed under the terms of the LICENSE file.



