Skip to content

A secure web interface for managing developer credentials and accessing unified contribution data

License

PROxZIMA/ContributionManager

Contribution Hub Manager Logo

Contribution Hub Manager

A secure web interface for managing developer credentials and accessing unified contribution data

Contribution Hub Manager License

Table of Contents

(back to top)

About The Project

Contribution Hub Manager is a secure web application that serves as the frontend interface for the Contribution Hub API. It enables developers to manage their authentication credentials for multiple platforms (GitHub, Azure DevOps) in a secure, encrypted manner and visualize their aggregated contributions across all platforms.

Contribution Activity

Key Features

  • Secure Authentication: Sign-in/sign-up using Google or GitHub via Firebase Authentication
  • Credential Management: Securely store, update, and delete PATs for GitHub and Azure DevOps
  • Encrypted Storage: All sensitive data is encrypted using Google Secret Manager
  • Contribution Visualization: View aggregated contribution data across multiple platforms
  • User-Friendly Interface: Modern, responsive design with real-time feedback

Built With

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Firebase Firestore
  • Google Secret Manager
  • Oracle OCI
  • Docker

(back to top)

Architecture

ContributionManager follows a microservices architecture pattern, working in conjunction with the Contribution Hub API.

System Overview

---
title: Contribution Hub - CI/CD & VPS Deployment Architecture
---

graph TB
    %% CI/CD Pipeline
    subgraph "CI/CD Pipeline - GitHub Actions"
        GA[GitHub Actions] --> GB[Build Docker Images]
        GB --> GC[Push to GHCR]
        GC --> GD[SSH Deploy to VPS]
    end
    
    %% CI/CD Flow
    GD -.-> |Deploy via SSH| VPS
    GC -.-> |Push Images| GHCR
    GHCR -.-> |Pull Images| VPS
    
    %% Users & Domain
    U[Users] --> CD[chm.proxzima.dev]
    CD --> CR[Caddy Server]

    %% VPS Deployment Infrastructure
    subgraph "VPS Deployment / Caddy Reverse Proxy + TLS"
        subgraph "Docker Compose Services"
            subgraph "Frontend Container"
                FR[Frontend App<br/>contribution-manager-app]
                FR -.-> |Token Management| J2[Token Management UI]
                FR -.-> |User Management| J1[User Registration/Login]
            end
            subgraph "Backend Containers"
                C[Contribution.Hub API<br/>backend-hub]
                D[Provider Factory]
                E[Contribution.AzureDevOps API<br/>backend-azuredevops]
                F[Contribution.GitHub API<br/>backend-github]
                G[Contribution.Provider API<br/>backend-provider]
                DB[Valkey Cache]
            end
        end
    end
    
    %% External APIs
    E ---> K1
    F ---> K2
    G ---> K3

    C --> D
    D --> E
    D --> F
    D --> G
    CR --> |"/_api/az/* → backend-azuredevops:5000"| E
    CR --> |"/_api/gh/* → backend-github:5000"| F
    CR --> |"/_api/provider/* → backend-provider:5000"| G
    CR --> |"/_api/* → backend-hub:5000"| C
    CR --> |"/ → frontend:3000"| FR
    E --> DB
    F --> DB
    G --> DB
    
    %% Data Access
    C --> I
    C --> H
    
    %% Application Logic Flow
    J2 -.-> I[Google Secret Manager]
    J2 -.-> H
    J1 -.-> H[Firebase Firestore]
    
    %% External Services
    subgraph "External Services"
        K1[Azure DevOps API SDK]
        K2[GitHub GraphQL API]
        K3[Future APIs]
        subgraph "Data & Security Layer"
            H
            I
        end
        subgraph "Container Registry"
            GHCR[GitHub Container Registry<br/>ghcr.io/proxzima/*]
        end
    end
    
    %% Styling
    classDef frontend fill:#e3f2fd,stroke:#1976d2,color:#000
    classDef api fill:#ede7f6,stroke:#7b1fa2,color:#000
    classDef infrastructure fill:#e8f5e9,stroke:#388e3c,color:#000
    classDef data fill:#fff8e1,stroke:#f57c00,color:#000
    classDef external fill:#fce4ec,stroke:#c2185b,color:#000
    classDef cicd fill:#f3e5f5,stroke:#8e24aa,color:#000
    
    class FR,J1,J2 frontend
    class C,D,F,E,G,DB api
    class CD,CR,VPS,GHCR infrastructure
    class H,I data
    class K1,K2,K3 external
    class GA,GB,GC,GD cicd
Loading

(back to top)

Getting Started

Prerequisites

  • Node.js (v18 or higher)
  • npm or pnpm or yarn
  • Firebase project with Authentication and Firestore enabled
  • Google Cloud project with Secret Manager API enabled

Installation

  1. Clone the repository

    git clone https://github.com/PROxZIMA/ContributionManager.git
    cd ContributionManager
  2. Install dependencies

    npm install
  3. Configure environment variables

    Create a .env.local file in the root directory:

    # Firebase Configuration
    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
    # Google Secret Manager
    GOOGLE_CLOUD_PROJECT_ID=your_gcp_project_id
    GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account-key.json
    
    # Contribution Hub API
    NEXT_PUBLIC_API_BASE_URL=http://localhost:5298
  4. Run the development server

    npm run dev
  5. Open your browser

    Navigate to http://localhost:9002

(back to top)

Usage

Authentication

  1. Sign in with Google or GitHub
  2. Complete OAuth flow
  3. Access the dashboard

Managing Credentials

  • GitHub: Add username and Personal Access Token with read:user scope
  • Azure DevOps: Add email, organization, and PAT with Code/Identity/Work Items read permissions

Viewing Contributions

  • View aggregated statistics across platforms
  • Interactive contribution calendar
  • Filter by platform or date range

(back to top)

API Documentation

For detailed API documentation and interactive examples, visit: https://chm.proxzima.dev/home#endpoint

(back to top)

Contributing

We welcome contributions from the community! ContributionAPI is an open-source project, and we appreciate any help to make it better.

Please read CONTRIBUTING.md for detailed guidelines.

Code of Conduct

This project follows our Code of Conduct. By participating, you agree to uphold this code.

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Project Maintainer

PROxZIMA - @PROxZIMA

Project Links

Support

  • Discussions: Use GitHub Discussions for community support
  • Bug Reports: Use our issue templates for bug reports
  • Feature Requests: Submit feature requests through GitHub Issues

(back to top)

Built with ❤️ by PROxZIMA

⭐ Star this repo if you find it helpful!