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