A web application for college students to connect for friendships, relationships, and group hangouts. Features include social matching, campus events, location guides, and group scheduling.
- Profile creation with photos, interests, and personal info
- Individual and group matching system
- Campus event integration
- Location guide with reviews
- Group scheduling tools
- AI-powered match insights and event search
Frontend:
- React (TypeScript)
- Tailwind CSS, HeadlessUI
- React Router v6
- Zustand (state), React Query (API)
- Vite build tool
- React Hook Form + Zod
Backend:
- Python (FastAPI)
- SQLite (local) or PostgreSQL
- Pydantic, SQLAlchemy ORM
- JWT authentication
- Local file storage for images (
backend/app/uploads) - Gemini 2.5 Flash AI integration (optional)
software-engineering-project-4/
├── backend/
│ ├── app/
│ │ ├── main.py
│ │ ├── config.py
│ │ ├── database.py
│ │ ├── models/
│ │ ├── routers/
│ │ ├── services/
│ │ ├── schemas/
│ │ ├── uploads/
│ │ └── tests/
│ ├── requirements.txt
│ └── app.db
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── ui/
│ │ ├── pages/
│ │ ├── hooks/
│ │ ├── store/
│ │ ├── lib/
│ │ └── index.css
│ ├── public/
│ ├── package.json
│ └── vite.config.ts
├── userimages/
├── README.md
└── app.db
Backend (backend/.env):
DATABASE_URL=sqlite:///./app.db
JWT_SECRET=dev_local_change_me
GEMINI_API_KEY=<optional>
GEMINI_MODEL=gemini-2.5-flash
AI_REQUIRE_MODERATION=true
CORS_ALLOW_ORIGINS=http://localhost:5173,http://127.0.0.1:5173
Frontend (frontend/.env):
VITE_API_BASE_URL=/api
VITE_BYPASS_AUTH=1
- Install backend dependencies
cd backend python -m venv ../venv source ../venv/bin/activate pip install -r requirements.txt
- Install frontend dependencies
cd ../frontend npm install - Run the stack
- Backend:
cd backend && source ../venv/bin/activate && uvicorn app.main:app --reload - Frontend:
cd frontend && npm run dev
- Backend:
- Open http://localhost:5173.
On startup, the backend seeds a dev profile (
dev@example.edu). WithVITE_BYPASS_AUTH=1, the frontend auto-signs in as that user for instant access to all features.
- Local image uploads are stored in
backend/app/uploads/. - AI features (match insights, ideas, event search) use Gemini 2.5 Flash via backend wrappers (mocked if no key is set).
- SQLite is recommended for local testing; PostgreSQL is supported for production.
- Only real user profiles seeded in the database appear in matches and swipes. No demo personas are shown.