Your all-in-one platform for connecting with verified travellers heading to the same destination. Built with Next.js, TypeScript, and modern web technologies for a seamless, secure experience.
Getting Started β’ Documentation β’ Contributing β’ Tech Stack
travellersmeet helps solo travellers find and connect with others heading to the same destination around the same dates. Upload proof-of-travel, get verified, and discover other verified travellers in your trip window.
- β Verified Travellers Only β Upload travel tickets to get verified. Only verified users can view other profiles.
- π Privacy-First β Your data stays secure. Visibility limited to matching destination/date windows.
- π― Smart Matching β Find travellers with similar dates and destinations automatically.
- π Modern Tech Stack β Built with Next.js 14, TypeScript, Prisma, and PostgreSQL.
- π± Progressive Web App β Install on any device with offline support.
- π Open Source β Community-driven development. Contributions welcome!
Before you begin, ensure you have:
- Node.js 18.18+ and npm 9+
- PostgreSQL database (local or cloud)
- Git for version control
git clone https://github.com/singh-odyssey/travellers.git
cd travellersnpm installCreate a .env file in the project root:
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DBNAME?schema=public"
NEXTAUTH_SECRET="generate-a-strong-secret"
NEXTAUTH_URL="http://localhost:3000"
# Optional: Google Maps API (for route visualization)
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY="your-google-maps-key"π‘ Tip: Generate a secure secret with
npm run generate:secretor useopenssl rand -base64 32
npm run db:pushnpm run devVisit http://localhost:3000 π
- Sign Up β Create an account with email and password
- Upload Ticket β Submit your travel proof (ticket, booking confirmation)
- Get Verified β Admin verification process (manual for now, automated later)
- Match & Connect β Discover travellers with matching destinations and dates
- Chat & Plan β Connect with verified travellers (messaging coming soon!)
| Technology | Purpose |
|---|---|
| Next.js 14 (App Router) | React framework with SSR & file-based routing |
| TypeScript | Type-safe development |
| React 18 | UI library with modern features |
| Tailwind CSS | Utility-first CSS framework |
| Technology | Purpose |
|---|---|
| NextAuth v5 | Authentication with credentials provider |
| Prisma ORM | Type-safe database queries & migrations |
| PostgreSQL | Relational database |
| bcryptjs | Secure password hashing |
| Technology | Purpose |
|---|---|
| Vitest | Unit testing framework |
| ESLint | Code linting |
| Prettier | Code formatting (via ESLint) |
| Docker | Containerized development |
| Technology | Purpose |
|---|---|
| Vercel | Production hosting |
| Neon/Supabase | PostgreSQL hosting |
travellers/
βββ π src/
β βββ app/ # Next.js app router pages & API routes
β β βββ (auth)/ # Authentication pages (signin, signup)
β β βββ api/ # Backend API endpoints
β β βββ contact/ # contact page
β β βββ dashboard/ # User dashboard
β β βββ routes/ # Route management & visualization
β β βββ upload/ # Ticket upload flow
β βββ components/ # React components
β βββ lib/ # Utility libraries (auth, prisma, etc.)
β βββ state/ # State management
β βββ styles/ # Global styles
βββ π prisma/ # Database schema & migrations
βββ π public/ # Static assets
βββ π docs/ # Documentation
βββ π scripts/ # Utility scripts
The current backend is organized around the route handlers in the src/app/api directory. The following table reflects the endpoints that are implemented in the codebase today.
| Method | Endpoint | Description |
|---|---|---|
| GET / POST | /api/auth/[...nextauth] |
NextAuth catch-all handler used for credential sign-in and session callbacks. |
| POST | /api/auth/signup |
Register a new user, hash the password, create an OTP, and send a verification email. |
| POST | /api/auth/verify-otp |
Verify a user's email using the 6-digit OTP they received. |
| POST | /api/auth/resend-otp |
Generate and send a fresh OTP for an unverified account. |
| POST | /api/auth/forgot-password |
Send a password reset email with a one-time token. |
| POST | /api/auth/reset-password |
Reset the user's password using a valid reset token. |
| PUT | /api/auth/change-password |
Update the currently authenticated user's password. |
| GET / POST | /api/auth/signin |
Re-export of the NextAuth route for the sign-in flow. |
| Method | Endpoint | Description |
|---|---|---|
| PATCH | /api/user/profile |
Update profile fields such as name, bio, and location for the current authenticated user. |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/tickets |
Create a ticket submission for the authenticated user. Expects destination, departureDate, and a file input. |
| GET | /api/tickets |
List the authenticated user's tickets in reverse chronological order. |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/admin/tickets |
List tickets for admin review. Supports an optional status query parameter and requires an ADMIN role. |
| GET | /api/admin/tickets/[id] |
Fetch one ticket record for admin inspection. |
| PATCH | /api/admin/tickets/[id] |
Update a ticket's verification status to VERIFIED or REJECTED. |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/routes |
Retrieve all saved routes for the authenticated user, ordered by most recent update. |
| POST | /api/routes |
Create a new route or update an existing route when an id is supplied. |
| DELETE | /api/routes?id=<routeId> |
Delete a saved route owned by the current user. |
| GET | /api/routes/[id] |
Retrieve a single route by ID, restricted to the authenticated owner. |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/matches?destination=<name>&date=<YYYY-MM-DD> |
Find verified travellers headed to the same destination within a Β±3 day window, excluding the current user. |
| POST | /api/chat |
Send a user message to the Gemini-powered TravelBox AI assistant. Expects a JSON body with message. |
Note: The
/api/chatroute requiresGEMINI_API_KEYto be configured in the environment.
We welcome contributions from developers of all skill levels!
- Fork the repository
- Clone your fork:
git clone https://github.com/your-username/travellers.git - Create a branch:
git checkout -b feat/amazing-feature - Make your changes and commit:
git commit -m "feat: add amazing feature" - Push to branch:
git push origin feat/amazing-feature - Submit a Pull Request with a detailed description
- π Write clear commit messages (Conventional Commits)
- β Add tests for new features
- π Update documentation as needed
- π§Ή Run
npm run lintbefore committing - π Keep PRs focused and small
π Read the full guide: CONTRIBUTING.md
- Tech Stack β Detailed technology overview
- Architecture β Application architecture and service flow
- API Reference β Backend endpoint overview and request examples
- Contributing Guide β How to contribute
- Code of Conduct β Community guidelines
- Backend Setup β Backend configuration
- PWA Setup β Progressive Web App features
- Production Database β Production deployment
We appreciate all contributions from our amazing community! π
Made with contrib.rocks
Want to be featured here? Check out our Contributing Guide!
Join our community and stay connected!
- π¬ Discussions: GitHub Discussions
- π Issues: Report bugs or request features
- π§ Email: singh-odyssey@github.com
If you find this project helpful, please give it a βοΈ on GitHub! It helps others discover the project.
This project is licensed under the MIT License β see the LICENSE file for details.
MIT License
Copyright (c) 2025 travellersmeet contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files...
Built with β€οΈ by the community using:
- Next.js β The React Framework
- Prisma β Next-generation ORM
- NextAuth.js β Authentication for Next.js
- Tailwind CSS β A utility-first CSS framework
- Vercel β Deployment and hosting
Get Started β’ View Demo β’ Report Bug
Made with π by singh-odyssey and contributors
βοΈ Star us on GitHub β it helps! βοΈ