A full-stack social network where users can post photos and videos, follow each other, like and comment. Built with Nuxt 3 (frontend), NestJS (backend), PostgreSQL + Prisma (database).
| Layer | Tech |
|---|---|
| Frontend | Nuxt 3 (Vue 3), Tailwind CSS |
| Backend | NestJS, Passport JWT, Multer (uploads) |
| Database | PostgreSQL + Prisma ORM |
| Media | Local disk storage (served at /uploads) |
- Email/username + password auth (JWT)
- Upload photos and videos with caption
- Explore feed (all posts) + Following feed
- Like / unlike, comment, delete own posts/comments
- User profiles with grid of posts, follower/following counts
- Follow / unfollow
- Cursor-based pagination
- Responsive design for mobile and desktop
vibe/
├── backend/ # NestJS API + Prisma
├── frontend/ # Nuxt 3 app
├── docker-compose.yml # Postgres for local dev
├── README.md # This file (English)
├── README.fa.md # Persian documentation
├── AGENTS.md # Agent development guide
├── CONTRIBUTING.md # Contribution guidelines
├── DESIGN.md # Design system documentation
└── PASS.md # Password and security notes
docker compose up -dcd backend
cp .env.example .env # adjust if needed
npm install
npx prisma migrate dev # create tables
npm run prisma:seed # optional: demo users + posts
npm run start:dev # http://localhost:3001/apiDemo logins after seeding: alice / bob, password password123.
cd frontend
cp .env.example .env # NUXT_PUBLIC_API_BASE=http://localhost:3001/api
npm install
npm run dev # http://localhost:3000| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register |
— | Create account |
| POST | /api/auth/login |
— | Login |
| GET | /api/auth/me |
✓ | Current user |
| GET | /api/posts |
opt | Explore feed |
| GET | /api/posts/following |
✓ | Following feed |
| POST | /api/posts |
✓ | Create post |
| GET | /api/posts/:id |
opt | Single post |
| DELETE | /api/posts/:id |
✓ | Delete own post |
| POST | /api/posts/:id/like |
✓ | Like |
| DELETE | /api/posts/:id/like |
✓ | Unlike |
| GET | /api/posts/:id/comments |
— | List comments |
| POST | /api/posts/:id/comments |
✓ | Add comment |
| DELETE | /api/comments/:id |
✓ | Delete comment |
| POST | /api/media/upload |
✓ | Upload image/video |
| GET | /api/users/:username |
opt | Profile |
| GET | /api/users/:username/posts |
opt | User's posts |
| POST | /api/users/:username/follow |
✓ | Follow |
| DELETE | /api/users/:username/follow |
✓ | Unfollow |
| GET | /api/users/search?q= |
— | Search users |
- Media files are stored on local disk under
backend/uploads. For production, switch to S3/MinIO and store only the URL. - Set a strong
JWT_SECRETand configureCORS_ORIGINbefore deploying. - See CONTRIBUTING.md for development guidelines.
- See DESIGN.md for design system documentation.
This project is licensed under the MIT License.