An open API service indexing awesome lists of open source software.

https://github.com/karan-develops/campus-connect

This is my first open source project, integrating stuff & techs. Contributions are welcomed πŸ˜ŠπŸŽ—οΈ. Give Repo a Star ⭐.
https://github.com/karan-develops/campus-connect

campus-network college-students contribute fullstack nextjs open-source

Last synced: 2 months ago
JSON representation

This is my first open source project, integrating stuff & techs. Contributions are welcomed πŸ˜ŠπŸŽ—οΈ. Give Repo a Star ⭐.

Awesome Lists containing this project

README

          

# Campus Connect

## Table of Contents

- [Introduction](#introduction)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Installation](#installation)
- [Usage](#usage)
- [Contributing](#contributing)
- [License](#license)

## Introduction

Campus Connect is a dynamic platform designed to streamline and enhance campus life for students. Built with Next.js, TypeScript, Prisma, and Neon Postgres, it provides a seamless experience for connecting with peers, exploring campus resources, and staying updated with important events.

The platform features a 'Peers' page, where students can easily discover and connect with fellow users. To ensure efficiency, the system optimally checks existing connections, displaying relevant statuses like 'Connect' or 'Already Connected' in real time.

With a structured backend architecture and efficient state management using Zustand, Campus Connect aims to offer a smooth, scalable, and user-friendly experience for students navigating their campus ecosystem.

![banner](https://raw.githubusercontent.com/Karan-develops/Campus-Connect/refs/heads/main/App.png)

## Features

- User authentication and authorization
- Profile management for Users
- Connect with Peers & Grow your Network
- Send Message & Chat with Peers
- Event scheduling and notifications
- Discussion forums and messaging
- Course Details and Forms
- Brilliant UI & UX
- Send Real Application by Filling Form (Secured By ZOD)
- Create & Organize Clubs, Sports, Events
- See Your Creations
- ShowCase your Projects
- Skill Exchange Page (Offer & Teach Skills)

## πŸ“š Tech Stack

- **Frontend (Next Full Stack):**
- React.js
- Next.js
- Shadcn-ui
- TailwindCSS
- TypeScript
- Zod - Form Validation
- Framer-motion
- Clerk
- **State Management:**
- Zustand
- **Backend:**
- Node.js
- Prisma
- Express-JS
- Mongoose
- TypeScript
- **Database:**
- Neon
- PostgreSQL
- MongoDB
- **Version Control:**
- Git

```
## πŸ“ File Structure :
Directory structure:
└── karan-develops-campus-connect/
β”œβ”€β”€ Readme.md
β”œβ”€β”€ CONTRIBUTING.md
β”œβ”€β”€ LICENCE
β”œβ”€β”€ backend/
β”‚ β”œβ”€β”€ index.ts
β”‚ β”œβ”€β”€ package-lock.json
β”‚ β”œβ”€β”€ package.json
β”‚ β”œβ”€β”€ tsconfig.json
β”‚ β”œβ”€β”€ .gitignore
β”‚ β”œβ”€β”€ controllers/
β”‚ β”‚ β”œβ”€β”€ academicInfo.controller.ts
β”‚ β”‚ β”œβ”€β”€ applyForm.controller.ts
β”‚ β”‚ β”œβ”€β”€ contactInfo.controller.ts
β”‚ β”‚ β”œβ”€β”€ demoSportsData.controller.ts
β”‚ β”‚ └── placement.controller.ts
β”‚ β”œβ”€β”€ db/
β”‚ β”‚ └── connectDb.ts
β”‚ β”œβ”€β”€ models/
β”‚ β”‚ β”œβ”€β”€ academicData.models.ts
β”‚ β”‚ β”œβ”€β”€ applyForm.models.ts
β”‚ β”‚ β”œβ”€β”€ contactInfo.models.ts
β”‚ β”‚ β”œβ”€β”€ demoPlacements.models.ts
β”‚ β”‚ └── demoSportsProgramData.models.ts
β”‚ β”œβ”€β”€ routes/
β”‚ β”‚ β”œβ”€β”€ academicInfo.route.ts
β”‚ β”‚ β”œβ”€β”€ applyForm.route.ts
β”‚ β”‚ β”œβ”€β”€ contactInfo.route.ts
β”‚ β”‚ β”œβ”€β”€ demoSportsData.route.ts
β”‚ β”‚ └── placement.route.ts
β”‚ └── scripts/
β”‚ β”œβ”€β”€ demoAcademicData.seed.ts
β”‚ β”œβ”€β”€ demoPlacements.seed.ts
β”‚ β”œβ”€β”€ demoSportsProgramData.seed.ts
β”‚ └── data/
β”‚ β”œβ”€β”€ demoAcaData.ts
β”‚ └── sportsProgramData.ts
└── frontend/
β”œβ”€β”€ README.md
β”œβ”€β”€ components.json
β”œβ”€β”€ eslint.config.mjs
β”œβ”€β”€ middleware.ts
β”œβ”€β”€ next.config.ts
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
β”œβ”€β”€ postcss.config.mjs
β”œβ”€β”€ tailwind.config.ts
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ .gitignore
β”œβ”€β”€ actions/
β”‚ β”œβ”€β”€ extraUser.actions.ts
β”‚ β”œβ”€β”€ message.actions.ts
β”‚ β”œβ”€β”€ peers.actions.ts
β”‚ β”œβ”€β”€ search.actions.ts
β”‚ β”œβ”€β”€ skills.actions.ts
β”‚ └── user.actions.ts
β”œβ”€β”€ app/
β”‚ β”œβ”€β”€ error.tsx
β”‚ β”œβ”€β”€ globals.css
β”‚ β”œβ”€β”€ layout.tsx
β”‚ β”œβ”€β”€ not-found.tsx
β”‚ β”œβ”€β”€ (auth)/
β”‚ β”‚ β”œβ”€β”€ layout.tsx
β”‚ β”‚ β”œβ”€β”€ forgot-password/
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ sign-in/
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ └── sign-up/
β”‚ β”‚ └── page.tsx
β”‚ β”œβ”€β”€ (root)/
β”‚ β”‚ β”œβ”€β”€ layout.tsx
β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”œβ”€β”€ academics/
β”‚ β”‚ β”‚ β”œβ”€β”€ academics-content.tsx
β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”‚ └── [program]/
β”‚ β”‚ β”‚ β”œβ”€β”€ learn-more-content.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ admissions/
β”‚ β”‚ β”‚ β”œβ”€β”€ admissions-content.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ apply/
β”‚ β”‚ β”‚ β”œβ”€β”€ application-form.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ apply-success/
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ campus-life/
β”‚ β”‚ β”‚ β”œβ”€β”€ clubs/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ club-content.tsx
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”‚ β”‚ └── [id]/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ club-details.tsx
β”‚ β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”‚ β”œβ”€β”€ create/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ create-content.tsx
β”‚ β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”‚ β”œβ”€β”€ events/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ events-content.tsx
β”‚ β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”‚ └── sports/
β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”‚ └── sports-content.tsx
β”‚ β”‚ β”œβ”€β”€ contact/
β”‚ β”‚ β”‚ β”œβ”€β”€ contact-content.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ legal/
β”‚ β”‚ β”‚ β”œβ”€β”€ privacy-policy/
β”‚ β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”‚ └── terms-of-service/
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ messages/
β”‚ β”‚ β”‚ └── [identifier]/
β”‚ β”‚ β”‚ β”œβ”€β”€ messages-content.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ my-creations/
β”‚ β”‚ β”‚ β”œβ”€β”€ my-creations-content.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ peers/
β”‚ β”‚ β”‚ β”œβ”€β”€ login-page.tsx
β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”‚ β”œβ”€β”€ peers-content.tsx
β”‚ β”‚ β”‚ └── skill-exchange/
β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”‚ β”œβ”€β”€ skill-exchange-content.tsx
β”‚ β”‚ β”‚ └── listing/
β”‚ β”‚ β”‚ └── [id]/
β”‚ β”‚ β”‚ β”œβ”€β”€ ListingContent.tsx
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ β”œβ”€β”€ placements/
β”‚ β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”‚ └── placements-content.tsx
β”‚ β”‚ β”œβ”€β”€ profile/
β”‚ β”‚ β”‚ β”œβ”€β”€ profile-content.tsx
β”‚ β”‚ β”‚ └── [identifier]/
β”‚ β”‚ β”‚ └── page.tsx
β”‚ β”‚ └── search/
β”‚ β”‚ β”œβ”€β”€ page.tsx
β”‚ β”‚ β”œβ”€β”€ search-input.tsx
β”‚ β”‚ └── search-results.tsx
β”‚ β”œβ”€β”€ api/
β”‚ β”‚ β”œβ”€β”€ academic-info/
β”‚ β”‚ β”‚ └── [name]/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ apply/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ clubs/
β”‚ β”‚ β”‚ β”œβ”€β”€ route.ts
β”‚ β”‚ β”‚ └── [id]/
β”‚ β”‚ β”‚ β”œβ”€β”€ route.ts
β”‚ β”‚ β”‚ β”œβ”€β”€ join/
β”‚ β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”‚ └── leave/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ contact-info/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ create/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ messages/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ placements/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ profile/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”œβ”€β”€ skill-exchange/
β”‚ β”‚ β”‚ β”œβ”€β”€ route.ts
β”‚ β”‚ β”‚ └── [id]/
β”‚ β”‚ β”‚ β”œβ”€β”€ route.ts
β”‚ β”‚ β”‚ β”œβ”€β”€ comment/
β”‚ β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ β”‚ └── like/
β”‚ β”‚ β”‚ └── route.ts
β”‚ β”‚ └── sports-info/
β”‚ β”‚ └── route.ts
β”‚ └── constants/
β”‚ β”œβ”€β”€ academicStreams.constants.ts
β”‚ β”œβ”€β”€ admissions.constants.ts
β”‚ β”œβ”€β”€ club-data.constants.ts
β”‚ β”œβ”€β”€ contact.constants.ts
β”‚ β”œβ”€β”€ events-data.constants.ts
β”‚ β”œβ”€β”€ peersData.constants.ts
β”‚ └── skill.constants.ts
β”œβ”€β”€ components/
β”‚ β”œβ”€β”€ AuthProvider.tsx
β”‚ β”œβ”€β”€ CampusMap.tsx
β”‚ β”œβ”€β”€ ConnectWUs.tsx
β”‚ β”œβ”€β”€ CreateForm.tsx
β”‚ β”œβ”€β”€ FAQS.tsx
β”‚ β”œβ”€β”€ Footer.tsx
β”‚ β”œβ”€β”€ Hero2.tsx
β”‚ β”œβ”€β”€ HomeNewFeatures.tsx
β”‚ β”œβ”€β”€ HomePage.tsx
β”‚ β”œβ”€β”€ Loader1.tsx
β”‚ β”œβ”€β”€ Marquee.tsx
β”‚ β”œβ”€β”€ Navbar.tsx
β”‚ β”œβ”€β”€ NavbarWrapper.tsx
β”‚ β”œβ”€β”€ NewHero.tsx
β”‚ β”œβ”€β”€ ThemeProvider.tsx
β”‚ β”œβ”€β”€ ToggleTheme.tsx
β”‚ └── ui/
β”‚ β”œβ”€β”€ accordion.tsx
β”‚ β”œβ”€β”€ alert.tsx
β”‚ β”œβ”€β”€ avatar.tsx
β”‚ β”œβ”€β”€ badge.tsx
β”‚ β”œβ”€β”€ button.tsx
β”‚ β”œβ”€β”€ calendar.tsx
β”‚ β”œβ”€β”€ card.tsx
β”‚ β”œβ”€β”€ dialog.tsx
β”‚ β”œβ”€β”€ form.tsx
β”‚ β”œβ”€β”€ input.tsx
β”‚ β”œβ”€β”€ label.tsx
β”‚ β”œβ”€β”€ menubar.tsx
β”‚ β”œβ”€β”€ popover.tsx
β”‚ β”œβ”€β”€ progress.tsx
β”‚ β”œβ”€β”€ select.tsx
β”‚ β”œβ”€β”€ separator.tsx
β”‚ β”œβ”€β”€ switch.tsx
β”‚ β”œβ”€β”€ tabs.tsx
β”‚ β”œβ”€β”€ textarea.tsx
β”‚ β”œβ”€β”€ toast.tsx
β”‚ └── toaster.tsx
β”œβ”€β”€ hooks/
β”‚ └── use-toast.ts
β”œβ”€β”€ lib/
β”‚ β”œβ”€β”€ prisma.ts
β”‚ β”œβ”€β”€ utils.ts
β”‚ β”œβ”€β”€ validations.ts
β”‚ └── store/
β”‚ └── authStore.ts
β”œβ”€β”€ prisma/
β”‚ β”œβ”€β”€ schema.prisma
β”‚ └── migrations/
β”‚ β”œβ”€β”€ migration_lock.toml
β”‚ β”œβ”€β”€ 20250126121634_mg1/
β”‚ β”‚ └── migration.sql
β”‚ β”œβ”€β”€ 20250209091130_campus_life/
β”‚ β”‚ └── migration.sql
β”‚ β”œβ”€β”€ 20250211113840_connections/
β”‚ β”‚ └── migration.sql
β”‚ β”œβ”€β”€ 20250222120441_skills/
β”‚ β”‚ └── migration.sql
β”‚ β”œβ”€β”€ 20250223102327_skill_ex_likes_comments/
β”‚ β”‚ └── migration.sql
β”‚ β”œβ”€β”€ 20250223115641_likes_bug_fix/
β”‚ β”‚ └── migration.sql
β”‚ β”œβ”€β”€ 20250225141612_clubs/
β”‚ β”‚ └── migration.sql
β”‚ └── 20250225162823_clubs_fix/
β”‚ └── migration.sql
β”œβ”€β”€ public/
β”‚ └── images/
β”‚ └── og-image.png
└── types/
└── skill-exchange.ts
```

### Backend

| Variable | Description |
| :------------ | :------------------------------------- |
| `MONGODB_URI` | Database URI |
| `PORT` | Port number for backend (8080 OR 5000) |

### Next JS

| Varibale | Description |
| :---------------------------------- | :----------------------------------------------- |
| `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` | Make a free clerk account (Project) |
| `CLERK_SECRET_KEY` | Clerk Secret Key |
| `DATABASE_URL` | Database URL from neon again make a free account |
| `BACKEND_URL` | http://localhost:8080 |

---

---

# πŸ’»Installation

## πŸ”₯ 1. Main NextJS

To run this project locally, follow these steps:

1. Clone the repository:
`git clone https://github.com/Karan-develops/Campus-Connect`
2. Navigate to the project directory:
`cd frontend`
3. Install the dependencies:
`npm install`
4. Set up environment variables: - Create a `.env` file in the `frontend` directory, - Add the Variables given in above `frontend` Table.
5. Start the development server:
`npm run dev`

## πŸ”₯ 2. Backend For Static Data Fetch

To run this project locally, follow these steps:

1. Navigate to the project directory:
`cd backend`
2. Install the dependencies:
`npm install`
3. Set up environment variables: - Create a `.env` file in the `backend` directory, - Add the Variables given in above `backend` Table.
4. Initialize TypeScript:
`npx tsc --init`
5. Configure the `outdir` and `src` in `tsconfig` file.
6. Seed the MongoDB database:
`Run the seed files that have been provided.`
7. Start the development server:
`npm run dev`

## Usage

- Open your browser and navigate to `http://localhost:3000` for frontend.
- Open your browser and navigate to `http://localhost:8080` OR `http://localhost:8080` for backend.
- Register a new account or log in with existing credentials.
- Explore the features and functionalities of the Campus Project.

## Contributing

Contributions are welcome! Please follow these steps to contribute:

1. Fork the repository.
2. Create a new branch:
`git checkout -b feature/your-feature-name`
3. Make your changes and commit them:
`git commit -m "Add your message"`
4. Push to the branch:
`git push origin feature/your-feature-name`
5. Open a pull request.

## πŸ”’ License

This repository is open source and under [MIT](https://choosealicense.com/licenses/mit/) License.

--- **_Lets Build & Grow Together_** **😊** ---