Skip to content

Ali-Haggag7/CS-Arena

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

89 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CS Arena Logo

CS Arena

Showcase Your Code. Dominate The Arena.

The platform built for CS developers to submit graduation projects, find open-source contributors, and get discovered by top tech recruiters.

Live Demo Next.js TypeScript Sanity Vercel


✨ Features

πŸš€ Project Showcase

  • Submit graduation projects, Hackathon entries, and personal builds
  • Rich Markdown editor for detailed project descriptions
  • 3-level cascading classification by Domain β†’ Specialization β†’ Tech Stack
  • Full Light / Dark Mode support
  • View tracking with cookie-based spam prevention
  • Share your profile with a single click via ShareProfileButton

πŸ” Project Discovery

  • Advanced search with Cascading Filters (University β†’ Domain β†’ Tech)
  • Sort by latest, most upvoted, or most viewed
  • Dedicated /projects listing page with full filter support

🀝 Collaboration System

  • Apply to join any open-source project directly from the platform
  • Full Join Request system with automatic email notifications via Resend
  • Accept / Reject requests with optional rejection reason sent to the applicant
  • Contributors list displayed on project detail pages

πŸ† Leaderboard

  • Global ranking with a stunning 3D Podium UI
  • Filter by global or by university
  • Ranked by total Upvotes

πŸ‘₯ Developers Page

  • Browse developer profiles with real-time GitHub stats
  • Dynamic filters to find the right collaborator
  • Recruitment cards with a Radar UI design

πŸ–₯️ User Dashboard

  • Overview stats for your projects (views, upvotes, requests)
  • Manage your projects with optimistic deletion
  • Handle incoming join requests with accept / reject actions
  • Full profile settings with instant session sync

🌐 Internationalization (i18n)

  • Full support for Arabic and English
  • Automatic RTL layout switching for Arabic
  • Complete translation coverage across all pages and components

πŸ” Security & Authentication

  • Sign in with GitHub OAuth or Google OAuth
  • Secure Onboarding flow with middleware protection
  • Rate Limiting on all API routes
  • Comprehensive HTTP Security Headers
  • Route protection via Middleware

πŸ“Š Monitoring & Performance

  • Full Sentry integration for Error Tracking and Session Replay
  • Built-in Feedback Widget for user bug reports
  • PWA Support β€” installable on mobile devices
  • Auto-generated Sitemap for Google Search Console
  • Suspense Streaming for instant page loads
  • Prefetching on all static and dynamic navigation links

πŸ“š Documentation System

  • Full MDX-powered Docs with search
  • Bilingual docs (Arabic & English) with automatic locale detection
  • Interactive sidebar with GitHub edit links
  • Last updated timestamps and frontmatter support

πŸ›οΈ Open Source Hall of Fame

  • Dedicated page showcasing open-source projects
  • Real-time GitHub stats per project
  • Contributors section per project

πŸ“‹ Changelog

  • Cosmic timeline UI for platform update history
  • Full multilingual support

πŸ› οΈ Tech Stack

Technology Version Usage
Next.js 16.x App Router, Server Components, Streaming
React 19.x UI Framework
TypeScript 5.x Type Safety
Tailwind CSS 3.x Styling
Sanity CMS 3.x Database & Content Management
NextAuth.js 5.x Beta Authentication
Framer Motion 12.x Animations
next-intl 4.x Internationalization (i18n)
Sentry 10.x Error Tracking & Session Replay
Resend 6.x Transactional Emails
Zod β€” Schema Validation
shadcn/ui β€” UI Components
Vercel β€” Deployment

πŸ“ Project Structure

CS-Arena/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ (root)/
β”‚   β”‚   β”œβ”€β”€ about/
β”‚   β”‚   β”œβ”€β”€ blog/
β”‚   β”‚   β”œβ”€β”€ coming-soon/
β”‚   β”‚   β”œβ”€β”€ cookies/
β”‚   β”‚   β”œβ”€β”€ dashboard/
β”‚   β”‚   β”œβ”€β”€ developers/
β”‚   β”‚   β”œβ”€β”€ docs/
β”‚   β”‚   β”‚   └── [...slug]/
β”‚   β”‚   β”œβ”€β”€ leaderboard/
β”‚   β”‚   β”œβ”€β”€ onboarding/
β”‚   β”‚   β”œβ”€β”€ open-source/
β”‚   β”‚   β”œβ”€β”€ privacy/
β”‚   β”‚   β”œβ”€β”€ project/
β”‚   β”‚   β”‚   β”œβ”€β”€ [id]/
β”‚   β”‚   β”‚   β”‚   └── edit/
β”‚   β”‚   β”‚   └── create/
β”‚   β”‚   β”œβ”€β”€ projects/
β”‚   β”‚   β”œβ”€β”€ terms/
β”‚   β”‚   β”œβ”€β”€ user/[id]/
β”‚   β”‚   β”œβ”€β”€ layout.tsx
β”‚   β”‚   └── page.tsx
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   └── docs-search/
β”‚   β”œβ”€β”€ studio/[[...tool]]/
β”‚   β”œβ”€β”€ global-error.tsx
β”‚   β”œβ”€β”€ layout.tsx
β”‚   β”œβ”€β”€ not-found.tsx
β”‚   └── sitemap.ts
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ dashboard/
β”‚   β”‚   β”œβ”€β”€ ManageProjects.tsx
β”‚   β”‚   β”œβ”€β”€ ProfileSettings.tsx
β”‚   β”‚   └── ProjectRequests.tsx
β”‚   β”œβ”€β”€ docs/
β”‚   β”‚   β”œβ”€β”€ DocsFeedback.tsx
β”‚   β”‚   └── DocsSidebar.tsx
β”‚   β”œβ”€β”€ layout/
β”‚   β”‚   β”œβ”€β”€ Footer.tsx
β”‚   β”‚   └── Navbar.tsx
β”‚   β”œβ”€β”€ project/
β”‚   β”‚   β”œβ”€β”€ ContributorsSection.tsx
β”‚   β”‚   β”œβ”€β”€ EditProjectForm.tsx
β”‚   β”‚   β”œβ”€β”€ ProjectCard.tsx
β”‚   β”‚   β”œβ”€β”€ ProjectFilters.tsx
β”‚   β”‚   β”œβ”€β”€ ProjectForm.tsx
β”‚   β”‚   β”œβ”€β”€ TeamFilters.tsx
β”‚   β”‚   β”œβ”€β”€ UpvoteButton.tsx
β”‚   β”‚   └── UserProjects.tsx
β”‚   β”œβ”€β”€ shadcn/
β”‚   β”‚   β”œβ”€β”€ avatar.tsx
β”‚   β”‚   β”œβ”€β”€ button.tsx
β”‚   β”‚   β”œβ”€β”€ input.tsx
β”‚   β”‚   β”œβ”€β”€ skeleton.tsx
β”‚   β”‚   β”œβ”€β”€ textarea.tsx
β”‚   β”‚   β”œβ”€β”€ toast.tsx
β”‚   β”‚   └── toaster.tsx
β”‚   └── shared/
β”‚       β”œβ”€β”€ CustomFilterSelect.tsx
β”‚       β”œβ”€β”€ FeedbackButton.tsx
β”‚       β”œβ”€β”€ GithubStats.tsx
β”‚       β”œβ”€β”€ HeroSection.tsx
β”‚       β”œβ”€β”€ JoinTeamButton.tsx
β”‚       β”œβ”€β”€ LanguageToggle.tsx
β”‚       β”œβ”€β”€ MobileMenu.tsx
β”‚       β”œβ”€β”€ OnboardingForm.tsx
β”‚       β”œβ”€β”€ Ping.tsx
β”‚       β”œβ”€β”€ PolicySections.tsx
β”‚       β”œβ”€β”€ ProjectsGrid.tsx
β”‚       β”œβ”€β”€ Providers.tsx
β”‚       β”œβ”€β”€ SearchForm.tsx
β”‚       β”œβ”€β”€ SearchFormReset.tsx
β”‚       β”œβ”€β”€ ShareProfileButton.tsx
β”‚       β”œβ”€β”€ TechFilters.tsx
β”‚       β”œβ”€β”€ ThemeToggle.tsx
β”‚       β”œβ”€β”€ View.tsx
β”‚       └── ViewTracker.tsx
β”œβ”€β”€ config/
β”‚   └── docs.ts
β”œβ”€β”€ constants/
β”‚   └── ecosystem.ts
β”œβ”€β”€ content/
β”‚   └── docs/
β”‚       β”œβ”€β”€ contributing/
β”‚       β”‚   β”œβ”€β”€ guidelines.ar.mdx
β”‚       β”‚   β”œβ”€β”€ guidelines.en.mdx
β”‚       β”‚   β”œβ”€β”€ setup.ar.mdx
β”‚       β”‚   └── setup.en.mdx
β”‚       β”œβ”€β”€ getting-started/
β”‚       β”‚   β”œβ”€β”€ introduction.ar.mdx
β”‚       β”‚   β”œβ”€β”€ introduction.en.mdx
β”‚       β”‚   β”œβ”€β”€ quick-start.ar.mdx
β”‚       β”‚   └── quick-start.en.mdx
β”‚       └── user-guide/
β”‚           β”œβ”€β”€ find-developers.ar.mdx
β”‚           β”œβ”€β”€ find-developers.en.mdx
β”‚           β”œβ”€β”€ projects.ar.mdx
β”‚           └── projects.en.mdx
β”œβ”€β”€ hooks/
β”‚   └── use-toast.ts
β”œβ”€β”€ i18n/
β”‚   └── request.ts
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ actions.ts
β”‚   β”œβ”€β”€ docs.ts
β”‚   └── utils.ts
β”œβ”€β”€ messages/
β”‚   β”œβ”€β”€ ar.json
β”‚   └── en.json
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ cs-arena-logo.png
β”‚   β”œβ”€β”€ cs-arena-logo-192.png
β”‚   β”œβ”€β”€ cs-arena-logo-512.png
β”‚   └── manifest.json
β”œβ”€β”€ sanity/
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ client.ts
β”‚   β”‚   β”œβ”€β”€ live.ts
β”‚   β”‚   β”œβ”€β”€ queries.ts
β”‚   β”‚   └── write-client.ts
β”‚   └── schemaTypes/
β”‚       β”œβ”€β”€ author.ts
β”‚       β”œβ”€β”€ changelog.ts
β”‚       β”œβ”€β”€ domain.ts
β”‚       β”œβ”€β”€ index.ts
β”‚       β”œβ”€β”€ joinRequest.ts
β”‚       β”œβ”€β”€ project.ts
β”‚       └── university.ts
β”œβ”€β”€ auth.ts
β”œβ”€β”€ middleware.ts
β”œβ”€β”€ instrumentation.ts
β”œβ”€β”€ sentry.client.config.ts
β”œβ”€β”€ sentry.edge.config.ts
β”œβ”€β”€ sentry.server.config.ts
β”œβ”€β”€ next.config.ts
β”œβ”€β”€ tailwind.config.ts
└── tsconfig.json

πŸ—ΊοΈ Pages

Route Description
/ Home β€” search and discover projects
/project/create Submit a new project
/project/[id] Project details
/project/[id]/edit Edit your project
/projects All projects listing
/leaderboard Top projects with 3D Podium UI
/open-source Hall of Fame for open-source projects
/developers Browse developer profiles
/user/[id] Developer public profile
/dashboard User dashboard & settings
/onboarding New user setup flow
/docs Full documentation system (MDX)
/docs/[...slug] Individual documentation pages
/changelog Platform update history
/about About CS Arena
/privacy Privacy policy
/terms Terms of service
/cookies Cookie policy
/blog Blog (coming soon)
/studio Sanity CMS dashboard

πŸš€ Getting Started

Prerequisites

  • Node.js 18+
  • npm 10+
  • Sanity account
  • GitHub OAuth App
  • Google OAuth App

Installation

# 1. Clone the repository
git clone https://github.com/Ali-Haggag7/CS-Arena.git
cd CS-Arena

# 2. Install dependencies
npm install

# 3. Set up environment variables
cp .env.example .env.local

Environment Variables

# Auth
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your_secret

# GitHub OAuth
AUTH_GITHUB_ID=your_github_client_id
AUTH_GITHUB_SECRET=your_github_client_secret

# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret

# Sanity CMS
NEXT_PUBLIC_SANITY_PROJECT_ID=your_project_id
NEXT_PUBLIC_SANITY_DATASET=production
SANITY_WRITE_TOKEN=your_write_token

# Sentry
SENTRY_AUTH_TOKEN=your_sentry_token

# Resend (Email)
RESEND_API_KEY=your_resend_key

# App
NEXT_PUBLIC_BASE_URL=http://localhost:3000
# 4. Start the development server
npm run dev

Open http://localhost:3000 in your browser.

Sanity Studio

Access the CMS dashboard locally at:

http://localhost:3000/studio

🀝 Contributing

Contributions are welcome! Please read the Contributing Guidelines before getting started.

# Create a new branch
git checkout -b feat/your-feature-name

# After making your changes
git commit -m "feat: add your feature"
git push origin feat/your-feature-name

Look for issues tagged good first issue β€” that's the best place to start!


πŸ“„ License

MIT License β€” feel free to use and modify.


Built with ❀️ by Ali Haggag

GitHub Website

⭐ If you find this project useful, please consider giving it a star!

About

A platform for CS developers to showcase training projects, graduation projects, find open-source contributors, and compete on the global leaderboard.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors