CuervoRed is a production-grade, full-stack social network tailored for San Lorenzo fans. It delivers a seamless, real-time experience for sharing posts, following users, tracking match attendance, and engaging with the community. Built with a modern, scalable architecture, it leverages the best of the React/Next.js ecosystem, robust authentication, and a flexible NoSQL backend.
As a San Lorenzo fan, I thought about how to connect all supporters in an app dedicated exclusively to the club β a place to follow other fans, post updates, comment, debate, and even discover who youβve shared the stadium with. When San Lorenzo plays at home, you can βcheck inβ through the app to say youβre going to the match, and you can also see who else has checked in.
Build a interactive social plataform with maintainable code. And the most important thing is learn, learn and learn.
- πͺ Architecture
- Modular Next.js App Router structure
- Prisma ORM with MongoDB Atlas
- Server/Client component separation
- Centralized API route handling
- π¦ Performance
- React Query for caching and background updates
- Dynamic imports and memoized components
- Optimized image uploads and transformations
- π¨ Security
- NextAuth.js with JWT, OAuth, and credentials
- Route-level middleware for access control
- Zod-powered validation everywhere
- π« Real-Time & UX
- Infinite scroll, skeleton loaders, and toasts
- Responsive, accessible UI (Radix, Tailwind)
- Optimistic UI for posts, likes, and comments
- β¬ Observability & Quality
- Error boundaries for posts and async data
- ESLint, strict TypeScript, and modular hooks
| Technology | Version | Purpose | Key Packages |
|---|---|---|---|
| Next.js | 14.x | Full-stack framework | next, next-auth, @next/bundle-analyzer |
| TypeScript | 5.x | Type safety | typescript |
| Technology | Version | Purpose | Key Packages |
|---|---|---|---|
| React Query | 5.x | Data fetching/caching | @tanstack/react-query |
| Axios | 1.x | HTTP client | axios |
| Technology | Version | Purpose | Key Packages |
|---|---|---|---|
| Prisma | 5.x | ORM, migrations | prisma, @prisma/client |
| MongoDB | Atlas | NoSQL database | mongodb (Atlas) |
| Cloudinary | - | Image storage | browser-image-compression |
| Technology | Version | Purpose | Key Packages |
|---|---|---|---|
| NextAuth.js | 5.x | Auth (OAuth, JWT) | next-auth, @auth/prisma-adapter |
| Zod | 3.x | Validation | zod |
| bcryptjs | 2.x | Password hashing | bcryptjs |
| Technology | Version | Purpose | Key Packages |
|---|---|---|---|
| Tailwind CSS | 3.x | Utility-first CSS | tailwindcss, tailwind-merge |
| Shadcn | UI framework | @radix-ui/react-\* , lucide-react |
- β OAuth (GitHub, Google) and credentials login
- β JWT session management
- β Profile editing with avatar upload and bio
- β Follow/unfollow users
- β Infinite scroll feed (For You, Following)
- β Create, edit, and delete posts with image upload
- β Like/unlike posts
- β Comment on posts (with validation)
- β Optimistic UI for likes/comments
- β Track attendance for upcoming matches
- β View who is attending each match
- β Attendance expiration and status
- β User search with instant results
- β Who to follow suggestions
- β Responsive, accessible design
- β Skeleton loaders and toasts
- β Error boundaries for async data
- β Dark/light theme support
Prerequisites
- Node.js >= 18.x
- npm >= 9.x (or yarn/pnpm)
- MongoDB Atlas account
- Cloudinary account (for image uploads)
Installation
- Clone the repository
git clone https://github.com/valentinzoia/cuervored.git cd next-prisma-auth - Install dependencies
npm install # or yarn install - Copy and configure environment variables
cp .env.example .env.local # Fill in MongoDB, Cloudinary, NextAuth, and OAuth credentials - Run Prisma migrations and generate client
npx prisma generate npx prisma migrate deploy
- Start the development server
npm run dev
Optional: Docker Compose
- Add your own
docker-compose.ymlfor local MongoDB/Cloudinary emulation if needed.
cuervored/
βββ prisma/ # Prisma schema and migrations
βββ public/ # Static assets
βββ src/
β βββ app/ # Next.js app directory (routing, layouts, pages)
β βββ components/ # UI and feature components (modular, domain-driven)
β βββ data/ # Data fetching and API logic
β βββ hooks/ # Custom React hooks
β βββ lib/ # Utilities, Prisma client, validation schemas
β βββ routes/ # Route definitions and middleware
β βββ types/ # TypeScript types and Prisma payloads
β βββ utils/ # Utility functions (image, date, etc.)
βββ tailwind.config.ts
βββ package.json
βββ ...
- app/: Next.js App Router, layouts, and route handlers
- components/: Feature and UI components, grouped by domain
- data/: API/data access logic, separated from UI
- lib/: Prisma client, Zod schemas, and shared utilities
- routes/: Route config and middleware for access control
- types/: Centralized TypeScript types for strong typing
- Fork repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add some AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Author: ValentΓn Zoia
- Email: zoiavalentin.dev@gmail.com
- LinkedIn: Profile
- Portfolio: Website
Built with β€οΈ and best practices












