GSoC 2026 Organizations Directory & GitHub PR Analytics Platform
Live at: gsoc.app
A comprehensive platform featuring a directory of all 185 organizations participating in Google Summer of Code 2026 (including 22 new organizations), plus powerful GitHub repository analytics for tracking pull requests, contributor activity, and code metrics. Built with React and deployed on AWS infrastructure.
| Feature | Description |
|---|---|
| 185 Organizations Directory | Browse all GSoC 2026 participating organizations |
| Search & Filter | Find orgs by name, technology, or topic tags |
| Rich Organization Cards | Logo, tagline, description, tech stack, categories |
| Direct Links | Ideas lists, source code, contributor guides |
| Contact Information | Email, chat platforms, social media links |
| Lazy Loading | ~450KB JSON data loaded on-demand at /orgs route |
| Feature | Description |
|---|---|
| PR Statistics | Total PRs, merge rates, contributor counts |
| Activity Timeline | Daily PR activity visualization with charts |
| Label Distribution | PR labels breakdown and categorization |
| Branch Filtering | Filter PRs by target branch |
| Time Filters | 2 weeks, 1 month, 3 months, 6 months, all time |
| Feature | Description |
|---|---|
| User Profile Analysis | Analyze GitHub user contributions across repos |
| Contribution Heatmap | Calendar visualization of user activity |
| Per-Contributor Stats | Individual statistics with avatars |
| Repository Breakdown | Filter by repository and PR state |
| Feature | Description |
|---|---|
| Code Splitting | react-vendor, chart-vendor, icons bundles |
| Intelligent Caching | 5-30 min TTL per data type with CacheService |
| Lazy Loading | On-demand data fetching for better performance |
| Bookmarks & History | Save repositories and search history |
| PWA Support | Progressive Web App with offline capabilities |
| Theme Support | Light/dark mode with system preference detect |
| Feature | Description |
|---|---|
| Export Options | RFC 4180 compliant CSV and JSON data export |
| Google Analytics 4 | User behavior tracking and insights |
| Vercel Analytics | Performance monitoring |
Browse all 185 organizations participating in Google Summer of Code 2026, including 22 brand new organizations.
- Search & Filter: Find organizations by name, technology, or topic tags
- Rich Cards: Logo, tagline, description, tech stack, categories
- Direct Links: Ideas lists, source code, contributor guides, websites
- Contact Info: Email, chat platforms, social media
- Lazy Loading: ~450KB JSON data loaded on-demand at /orgs route
Each organization includes name, logo, description, tech/topic tags, and comprehensive contact methods (email, chat, social media).
The /orgs page is pre-rendered as static HTML during build for instant search engine indexing, with all 185 organization names embedded for discoverability.
Analyze GitHub user contributions across repositories with detailed insights:
- Total Contributions: PRs opened, merged, closed
- Repository Breakdown: Filter and group by repository
- Activity Heatmap: Contribution calendar visualization
- PR Statistics: Merge rates, review times, activity patterns
- State Filtering: Filter by PR state (open, merged, closed)
Perfect for tracking GSoC contributor activity and understanding contribution patterns over time.
flowchart TB
subgraph Client["π Browser Client"]
UI["React UI<br/>(App.tsx)"]
Services["Services Layer"]
Utils["Utilities"]
UI --> Services
Services --> Utils
end
subgraph Services
GH["GitHubService"]
Export["ExportService"]
Storage["StorageService"]
Theme["ThemeService"]
end
subgraph Utils
DateUtils["DateUtils"]
URLParser["URLParser"]
end
subgraph External["βοΈ External"]
GitHubAPI["GitHub REST API v3"]
LocalStorage["localStorage"]
end
GH <-->|"HTTPS"| GitHubAPI
Storage <--> LocalStorage
Theme <--> LocalStorage
frontend/
βββ src/
β βββ components/ # React UI components
β β βββ common/ # Shared: Loader, Toast, ErrorBoundary
β β βββ contributors/ # ContributorCard, ContributorList, Modal
β β βββ layout/ # Header, Footer, Sidebar
β β βββ repository/ # RepositoryStats display
β β βββ user/ # UserAnalytics, UserContributions
β β βββ orgs/ # GsocOrgs component (lazy-loaded)
β β
β βββ services/ # Business logic layer
β β βββ GitHubService.ts # GitHub API integration
β β βββ ExportService.ts # CSV/JSON file exports
β β βββ StorageService.ts# Bookmarks & history
β β βββ ThemeService.ts # Dark/light mode
β β βββ CacheService.ts # localStorage-based caching with TTL
β β
β βββ utils/ # Utility functions
β β βββ dateUtils.ts # Date manipulation
β β βββ urlParser.ts # GitHub URL parsing (supports multiple formats)
β β
β βββ constants/ # Centralized configuration
β β βββ index.ts
β β
β βββ types/ # TypeScript interfaces
β β βββ index.ts
β β
β βββ styles/ # CSS styles
β β βββ index.css
β β
β βββ App.tsx # Main app with React Router integration
β
βββ public/ # Static assets
β βββ manifest.json # PWA manifest
β βββ sitemap.xml # SEO sitemap
β βββ robots.txt # Search engine directives
β
βββ scripts/ # Build scripts
β βββ prerender-orgs.mjs # Pre-render /orgs for SEO
β
βββ index.html # HTML entry point with SEO meta tags
βββ package.json
βββ vite.config.ts # Code splitting & build config
βββ tsconfig.json
sequenceDiagram
participant User
participant App
participant GitHubService
participant GitHub API
participant ExportService
User->>App: Enter repository URL
App->>GitHubService: fetchRepositoryStats()
GitHubService->>GitHub API: GET /repos/{owner}/{repo}/pulls
GitHub API-->>GitHubService: Pull requests data
GitHubService->>GitHubService: Calculate statistics
GitHubService-->>App: RepositoryStats
App->>App: Render charts & contributors
User->>App: Click "Export CSV"
App->>ExportService: exportRepositoryCsv(stats)
ExportService->>ExportService: Generate CSV blob
ExportService-->>User: Download file
- Node.js 18+
- npm or yarn
# Clone the repository
git clone https://github.com/Ankitsinghsisodya/Gsoc-espionage.git
cd Gsoc-espionage/frontend
# Install dependencies
npm install
# Start development server
npm run dev# Build and run with Docker Compose
docker compose up --build -d
# Access at http://localhost:5173- Live URL: gsoc.app
- Hosting: AWS S3 (static files)
- CDN: AWS CloudFront with custom functions
- CI/CD: GitHub Actions (auto-deploy on push to main)
- Hashed Assets (JS/CSS): 31,536,000 seconds (1 year cache)
- HTML Files: no-cache (always fresh routing)
- API Responses: 5-30 minutes (configurable TTL per data type)
- Push to
maintriggers GitHub Actions - Install dependencies (
npm ci) - Build TypeScript + Vite bundle
- Prerender /orgs page with all 185 org names
- Sync assets to S3 with long-term cache headers
- Upload HTML with no-cache headers
- Deploy CloudFront Function for SPA routing
- Invalidate CloudFront cache
See .github/workflows/deploy.yml for full pipeline configuration.
For higher rate limits (5,000/hour vs 60/hour), add a GitHub Personal Access Token:
- Go to GitHub Settings β Tokens
- Generate a new token (no scopes needed for public repos)
- Enter the token in the app's token input section
π The token is stored in your browser's localStorage, never sent to any server.
The URL parser supports multiple GitHub URL formats:
| Format | Example |
|---|---|
| Simple | facebook/react |
| Domain | github.com/owner/repo |
| Full URL | https://github.com/owner/repo |
| With .git | https://github.com/owner/repo.git |
| SSH | git@github.com:owner/repo.git |
| PR URLs | https://github.com/owner/repo/pull/123 |
import { GitHubUrlParser, extractPRNumber } from "./utils";
// Parse any format
GitHubUrlParser.parse("git@github.com:facebook/react.git");
// β { owner: 'facebook', repo: 'react' }
// Extract PR number from URL
extractPRNumber("https://github.com/owner/repo/pull/456");
// β 456| Auth Status | Rate Limit | Best For |
|---|---|---|
| Without Token | 60/hour | Quick lookups |
| With Token | 5,000/hour | Heavy analysis |
graph TD
App["App"]
App --> Hero["Hero Section"]
App --> Results["Results View"]
App --> Toast["ToastContainer"]
Hero --> SearchForm["Search Form"]
Hero --> TokenInput["Token Input"]
Results --> RepoStats["RepositoryStats"]
Results --> ContribList["ContributorList"]
Results --> Modal["ContributorModal"]
ContribList --> Card1["ContributorCard"]
ContribList --> Card2["ContributorCard"]
ContribList --> CardN["..."]
RepoStats --> StatCards["Stat Cards"]
RepoStats --> Labels["Label Distribution"]
RepoStats --> Timeline["Activity Timeline"]
| Layer | Technology |
|---|---|
| Framework | React 18 with TypeScript |
| Build Tool | Vite 5.0 with code splitting |
| Routing | React Router DOM 6.21.1 |
| Styling | Vanilla CSS + Tailwind CSS 3.4 |
| Charts | Recharts 2.10, React Calendar Heatmap 1.9.0 |
| Icons | Lucide React |
| SEO | React Helmet Async 2.0.5, JSON-LD |
| API | GitHub REST API v3 |
| Storage | Browser localStorage with TTL caching |
| Analytics | Google Analytics 4, Vercel Analytics |
| Deployment | AWS S3 + CloudFront, GitHub Actions CI/CD |
| Performance | Code splitting, lazy loading, long-term caching |
- react-vendor: React, React DOM, React Router (~200KB)
- chart-vendor: Recharts, D3 dependencies (~150KB)
- icons: Lucide React (~50KB)
- Reduces initial bundle size by 82% with lazy-loaded /orgs data
- CacheService: localStorage-based with TTL
- User profiles: 10 minutes
- Repository stats: 5 minutes
- Branch lists: 30 minutes
- CloudFront: Long-term caching for versioned assets (1 year)
- HTML: No-cache strategy for fresh SPA routing
- GSoC Organizations data (~450KB) loads only when viewing /orgs route
- Route-based code splitting for optimal initial load performance
- On-demand component loading for better resource management
- Prerendering: /orgs page pre-rendered with all 185 org names
- Structured Data: JSON-LD schemas (WebApplication, Dataset, FAQPage)
- Meta Tags: Open Graph, Twitter Cards, comprehensive keywords
- Sitemap: XML sitemap at /sitemap.xml
- Robots.txt: Search engine directives
- Canonical URLs: All pages have canonical tags
- Google Analytics 4: User behavior tracking, page views, events
- Vercel Analytics: Performance monitoring, Core Web Vitals
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLint- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
Made with β€οΈ for the open source community