Version 5.1 – Because love, too, can be industrialized.
Web Matcha is a full-stack dating web application built with Next.js, Express.js, PostgreSQL, and Nginx. It provides registration, profile matching, chat, and notification features within a secure, real-time, and scalable architecture.
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Next.js | Modern SSR/CSR frontend with React |
| Backend | Express.js | REST API and Socket.IO handling |
| Database | PostgreSQL | User, chat, and matching data |
| Proxy / Deployment | Nginx | Reverse proxy, SSL, static delivery |
main→ Production-ready branchdev→ Integration branch for active work- Feature branches:
feature/<short-description> - Fix branches:
fix/<short-description>
-
Create a Linear issue (with title and description).
-
Branch from
devusing the issue ID and title:git checkout -b feature/LIN-123-chat-system -
Develop your feature following code and design standards.
-
Push your branch and open a Pull Request (PR) into
dev.-
PR title should include Linear issue ID:
LIN-123: Implement chat system backend
-
-
In the PR description, include:
Closes LIN-123→ This automatically links and closes the Linear issue when merged.
-
Once reviewed and tested, merge
dev→mainduring release.
Follow Conventional Commits:
feat: add new chat endpoint
fix: resolve message duplication bug
refactor: optimize profile query
docs: update setup instructions
-
Use clear, concise messages.
-
Each commit should address only one logical change.
-
Always check code formatting and lint before committing:
pnpm lint && pnpm format
-
Use MVC structure:
server/ ├── models/ ├── controllers/ ├── routes/ └── middlewares/ -
Keep controllers small and logic-driven.
-
Use parameterized queries or an ORM (e.g., Sequelize/Prisma).
-
Always validate inputs with middleware (e.g.,
express-validator). -
Handle all errors with a global error handler.
- Keep components modular:
components/,pages/,hooks/,lib/. - Use server components for data fetching when possible.
- Centralize API calls under
/lib/api/. - Keep styles consistent with Tailwind CSS design tokens.
- Ensure mobile responsiveness by default.
- Backlog → Not started
- Todo → Approved to begin
- In Progress → Actively developed
- Review → Awaiting PR review
- Done → Merged and verified
| Level | Meaning |
|---|---|
| 🔥 High | Core or blocking features |
| ⚙️ Medium | Enhancements and UI updates |
| 🧹 Low | Minor fixes and maintenance |
-
Create a Linear issue for every feature or bug.
-
Include a clear description and acceptance criteria.
-
Use the issue ID (e.g.,
LIN-123) in:- Branch name
- PR title
- Commit messages
-
When opening a PR, reference the issue:
Closes LIN-123→ This ensures automatic linking and closure on merge.
- Hash all passwords using bcrypt.
- Use JWT for authentication and protect all private routes.
- Validate all incoming API requests.
- Never store credentials or secrets in the repo — use
.env. - Enable HTTPS in production (handled by Nginx).
- Sanitize all user input to prevent SQL injection and XSS.
pnpm installCreate .env files for both backend and frontend:
DATABASE_URL=postgres://user:password@localhost:5432/matcha
JWT_SECRET=your_secret
pnpm -C backend dev
pnpm -C frontend devFollow Conventional Commits and always use pnpm for dependency management:
- Use pnpm for all dependency operations:
pnpm install,pnpm add,pnpm remove - Only commit
pnpm-lock.yamlfiles, neverpackage-lock.json - Delete old npm lockfiles when encountered
- Use clear, concise commit messages
- Each commit should address only one logical change
-
Configure Nginx to reverse proxy:
/api→ Express backend/→ Next.js build
-
Ensure SSL certificates are configured in
/etc/nginx/sites-enabled/.
Before submitting a PR:
- Code builds without errors
- Follows naming and commit conventions
- All comments and console logs removed
- Security checks passed
- Linked to a Linear issue
- Tested on local environment
- Assign yourself to a Linear issue.
- Create a feature branch based on that issue.
- Follow all naming and commit conventions.
- Submit a PR referencing the Linear ID.
- Wait for review, fix comments, then merge.
This project is private and intended for internal educational use.
Web Matcha Core Development Team Built with ❤️ using Next.js, Express.js, PostgreSQL, and Nginx.