TULIA — A modern intentional dating platform with verified profiles, real-time chat, and safety-first design. Built with Next.js, NestJS, Prisma, and Socket.IO.
nextjs nestjs typescript prisma postgresql socketio dating-app fullstack webapp real-time chat authentication
Built with a scalable architecture and real-time capabilities, TULIA demonstrates production-ready patterns including authentication, role-based access, real-time messaging, and moderation systems.
- User registration & login
- JWT-based authentication
- Secure session handling
- Create & update profiles
- Profile photos upload
- Profile completeness tracking
- Step-by-step user onboarding
- Profile completion gating
- Verification requirement before discovery
- Admin-only verification queue
- Approve/reject profiles
- Role-based access control
- Tinder-style profile cards
- Only verified users can access discovery
- Clean UI with profile photos
- Like system
- Mutual matches
- Match filtering based on safety rules
- Socket.IO powered messaging
- Instant message delivery
- Typing indicators
- Auto-scroll chat experience
- Block users
- Report users
- Unblock functionality
- System-wide enforcement (Discover, Matches, Chat)
- Next.js (App Router)
- TypeScript
- Tailwind CSS
- NestJS
- Prisma ORM
- PostgreSQL
- Socket.IO
tulia/
├── apps/
│ ├── api/ # NestJS backend
│ └── web/ # Next.js frontend
├── prisma/ # Database schema
└── README.md
---
### 3. Add architecture diagram
```md
## Architecture
Client app → NestJS API → Prisma ORM → PostgreSQL
Socket.IO handles real-time chat between matched users.
## ⚙️ Environment Setup
### Backend (`apps/api/.env`)
DATABASE_URL=postgresql://...
JWT_SECRET=your_secret
PORT=3000
### Frontend (`apps/web/.env.local`)
NEXT_PUBLIC_API_URL=http://localhost:3000
---
## 🛠️ Installation
### 1. Clone repository
git clone https://github.com/Paulwamaria/tulia.git
cd tulia
---
### 2. Install dependencies
Backend
cd apps/api
npm install
Frontend
cd ../web
npm install
---
### 3. Setup database
cd apps/api
npx prisma migrate dev
npx prisma generate
---
### 4. Run development servers
Backend
cd apps/api
npm run start:dev
Frontend
cd apps/web
npm run dev -- -p 3001
---
## 🔑 Admin Setup
To access admin features:
1. Open Prisma Studio:
npx prisma studio
2. Set your user role:
role = "admin"
3. Re-login to refresh JWT
---
## 🧪 Testing Flow
1. Register a user
2. Create profile
3. Upload photo
4. Admin approves profile
5. Access Discover
6. Match with another user
7. Start real-time chat
---
## Quality & Testing
- Manual end-to-end testing flow documented
- Auth-protected routes tested
- Matching and chat flow tested with multiple users
- Admin verification flow tested
## 🔒 Security Features
- Role-based access (admin/user)
- Protected routes (backend + frontend)
- Block/report enforcement across system
- JWT authentication
---
## 📦 Deployment (Next Step)
Recommended stack:
- Backend → Render / Railway
- Database → Managed PostgreSQL
- Frontend → Vercel
---
## 💡 Future Improvements
- Multiple profile photos & selection
- Read receipts (✓✓)
- Online / last seen status
- Push notifications
- Mobile app version
---
## 👨💻 Author
**Paul Wamaria**
- Full-stack developer
- Focus: scalable systems, product thinking, and real-world apps
---
## 🌟 Why This Project Matters
TULIA is not just a dating app clone — it demonstrates:
- Real-world product design decisions
- Safety-first architecture
- Scalable backend patterns
- Clean frontend UX
- End-to-end system thinking 



