/
├── frontend/ # React + TypeScript + Vite + TailwindCSS
├── backend/ # NestJS + TypeScript + PostgreSQL + Prisma
└── README.md
- React 18 + TypeScript
- Vite
- TailwindCSS
- React Router v6
- Axios
- Zustand (state management)
- NestJS + TypeScript
- PostgreSQL
- Prisma ORM
- JWT Authentication
- Passport + Google OAuth 2.0
- Node.js >= 18.x
- PostgreSQL >= 14
- Google Cloud Console project with OAuth 2.0 credentials
# Instalar dependencias Frontend
cd frontend && npm install
# Instalar dependencias backend
cd ../backend && npm installBackend:
cp backend/.env.example backend/.env
# Fill in your valuesFrontend:
cp frontend/.env.example frontend/.env
# Fill in your valuescd backend
npx prisma migrate dev --name init
npx prisma generate# Terminal 1 — Backend
cd backend && npm run start:dev
# Terminal 2 — Frontend
cd frontend && npm run dev- Frontend: http://localhost:5173
- Backend API: http://localhost:3000
- Swagger docs: http://localhost:3000/api
- Go to Google Cloud Console
- Create a new project or use an existing one
- Enable the Google+ API and Google OAuth 2.0
- Create OAuth 2.0 Client ID credentials
- Set authorized redirect URI to:
http://localhost:3000/auth/google/callback - Copy
Client IDandClient Secrettobackend/.env
| Method | Path | Description | Auth |
|---|---|---|---|
| GET | /auth/google | Initiate Google OAuth | Public |
| GET | /auth/google/callback | OAuth callback | Public |
| GET | /auth/profile | Get current user profile | JWT |
| GET | /users/me | Get authenticated user | JWT |
DATABASE_URL=postgresql://user:password@localhost:5432/ta_platform
JWT_SECRET=your-super-secret-jwt-key
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/callback
FRONTEND_URL=http://localhost:5173
PORT=3000VITE_API_URL=http://localhost:3000
VITE_APP_NAME=TA Platform