Skip to content

jackulau/ISU_Innovation_Prize_2025

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SkillBridge Logo

πŸŒ‰ SkillBridge

Bridging the Gap Between Learning and Doing

License: MIT Node Version NPM Version PRs Welcome Code Quality Build Status Coverage

Demo β€’ Documentation β€’ Report Bug β€’ Request Feature


πŸ“‹ Table of Contents


🎯 About The Project

SkillBridge Dashboard

SkillBridge is a revolutionary platform that connects ambitious learners with real-world projects from industry partners. We believe that the best way to learn is by doing, and we're here to make that happen.

πŸŽ“ The Problem We Solve

Traditional education often leaves a gap between theoretical knowledge and practical skills. Students graduate with degrees but lack the real-world experience that employers seek. Meanwhile, businesses need fresh perspectives and help with projects but don't always have the resources for full-time hires.

πŸ’‘ Our Solution

SkillBridge creates a win-win ecosystem:

  • For Learners: Gain hands-on experience working on real projects that matter
  • For Businesses: Access talented, motivated individuals eager to prove themselves
  • For Education: Bridge the gap between academia and industry

✨ Key Features


Smart Project Matching
AI-powered algorithm matches learners with projects based on skills and interests

Industry Mentorship
Direct guidance from experienced professionals in your field

Portfolio Building
Build a portfolio of real-world projects to showcase to employers

Skill Verification
Blockchain-verified credentials for completed projects

Professional Network
Connect with peers and professionals in your industry

Progress Analytics
Track your learning journey with detailed analytics

πŸ—οΈ Built With

Frontend Technologies

React TypeScript Tailwind CSS Vite

Backend Technologies

Node.js Express.js PostgreSQL Redis

DevOps & Tools

Docker GitHub Actions AWS Jest


πŸš€ Getting Started

Follow these steps to get SkillBridge up and running on your local machine for development and testing purposes.

πŸ“¦ Prerequisites

Before you begin, ensure you have the following installed:

# Check Node.js version (should be >= 18.0.0)
node --version

# Check npm version (should be >= 9.0.0)
npm --version

# Check Git installation
git --version
πŸ“‹ Additional Requirements
  • PostgreSQL (v14+) - For production database
  • Redis (v6+) - For caching and session management
  • Docker (optional) - For containerized development
  • Git - For version control

βš™οΈ Installation

Option 1: Standard Installation

# 1. Clone the repository
git clone https://github.com/yourusername/skillbridge.git
cd skillbridge

# 2. Navigate to the MVP directory
cd skillbridge-mvp

# 3. Install server dependencies
npm install

# 4. Install client dependencies
cd client
npm install
cd ..

# 5. Set up environment variables
cp .env.example .env
# Edit .env with your configuration

# 6. Seed mock data (optional)
npm run seed:mock

# 7. Start development servers
npm run dev

Option 2: Docker Installation

# 1. Clone the repository
git clone https://github.com/yourusername/skillbridge.git
cd skillbridge

# 2. Build Docker containers
docker-compose build

# 3. Start the application
docker-compose up

# 4. Access the application
# Frontend: http://localhost:3000
# Backend: http://localhost:3001
# Database: localhost:5432

πŸ”§ Configuration

Create a .env file in the root directory with the following variables:

# Server Configuration
NODE_ENV=development
PORT=3001
CLIENT_URL=http://localhost:3000

# Database Configuration
DATABASE_TYPE=postgresql
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=skillbridge_dev
DATABASE_USER=your_db_user
DATABASE_PASSWORD=your_db_password

# Authentication
JWT_SECRET=your_super_secret_jwt_key_change_this_in_production
JWT_EXPIRES_IN=7d
REFRESH_TOKEN_SECRET=your_refresh_token_secret
REFRESH_TOKEN_EXPIRES_IN=30d

# Redis Configuration
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password

# Email Configuration (Optional)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASSWORD=your_app_password
EMAIL_FROM=noreply@skillbridge.com

# AWS S3 Configuration (Optional)
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_REGION=us-east-1
AWS_S3_BUCKET=skillbridge-uploads

# External APIs (Optional)
OPENAI_API_KEY=your_openai_api_key
STRIPE_SECRET_KEY=your_stripe_secret_key
STRIPE_WEBHOOK_SECRET=your_stripe_webhook_secret

# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100

# Security
CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3001
SESSION_SECRET=your_session_secret_key

πŸ’» Usage

πŸƒ Running the Application

Terminal Commands Demo

Development Mode

# Start both frontend and backend in development mode
npm run dev

# Start only the backend server
npm run server:dev

# Start only the frontend client
npm run client:dev

Production Mode

# Build the frontend
npm run build

# Start the production server
npm start

πŸ§ͺ Testing

Unit Tests

# Run all tests (server + client)
npm test

# Run server tests only
npm run test:server

# Run client tests only
npm run test:client

# Watch mode
npm run test:watch

# With coverage
npm run test:coverage

# Client test UI (Vitest UI)
cd client && npm run test:ui

E2E Tests

# Run Playwright tests
npm run test:e2e

# With UI
npx playwright test --ui

# Debug mode
npx playwright test --debug

Linting & Formatting

# Run ESLint
npm run lint

# Format with Prettier
npm run format

# Type checking
npm run typecheck

πŸ›οΈ Architecture

πŸ“Š System Design

System Architecture

High-Level Architecture

graph TB
    subgraph "Client Layer"
        A[React SPA] --> B[Redux State]
        B --> C[API Client]
    end

    subgraph "API Gateway"
        D[Nginx/Load Balancer]
        D --> E[Rate Limiter]
        E --> F[Auth Middleware]
    end

    subgraph "Application Layer"
        G[Express Server]
        G --> H[Business Logic]
        H --> I[Data Access Layer]
    end

    subgraph "Data Layer"
        J[(PostgreSQL)]
        K[(Redis Cache)]
        L[S3 Storage]
    end

    subgraph "External Services"
        M[Email Service]
        N[Payment Gateway]
        O[AI/ML Services]
    end

    C --> D
    F --> G
    I --> J
    I --> K
    H --> L
    H --> M
    H --> N
    H --> O

    style A fill:#61dafb
    style G fill:#68a063
    style J fill:#336791
    style K fill:#dc382d
Loading

πŸ—‚οΈ Project Structure

skillbridge-mvp/
β”‚
β”œβ”€β”€ πŸ“ client/                    # Frontend React application
β”‚   β”œβ”€β”€ πŸ“ src/
β”‚   β”‚   β”œβ”€β”€ πŸ“ components/       # Reusable UI components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ common/       # Shared components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ layout/       # Layout components
β”‚   β”‚   β”‚   └── πŸ“ features/     # Feature-specific components
β”‚   β”‚   β”œβ”€β”€ πŸ“ pages/            # Page components
β”‚   β”‚   β”œβ”€β”€ πŸ“ hooks/            # Custom React hooks
β”‚   β”‚   β”œβ”€β”€ πŸ“ services/         # API service layer
β”‚   β”‚   β”œβ”€β”€ πŸ“ store/            # Redux store configuration
β”‚   β”‚   β”œβ”€β”€ πŸ“ utils/            # Utility functions
β”‚   β”‚   β”œβ”€β”€ πŸ“ styles/           # Global styles and themes
β”‚   β”‚   β”œβ”€β”€ πŸ“ assets/           # Images, fonts, etc.
β”‚   β”‚   β”œβ”€β”€ πŸ“„ App.tsx           # Main App component
β”‚   β”‚   └── πŸ“„ main.tsx          # Application entry point
β”‚   β”œβ”€β”€ πŸ“ public/               # Static assets
β”‚   β”œβ”€β”€ πŸ“„ package.json          # Frontend dependencies
β”‚   β”œβ”€β”€ πŸ“„ tsconfig.json         # TypeScript configuration
β”‚   └── πŸ“„ vite.config.ts        # Vite configuration
β”‚
β”œβ”€β”€ πŸ“ server/                    # Backend Node.js application
β”‚   β”œβ”€β”€ πŸ“ routes/               # API route definitions
β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth.js           # Authentication routes
β”‚   β”‚   β”œβ”€β”€ πŸ“„ projects.js       # Project management routes
β”‚   β”‚   β”œβ”€β”€ πŸ“„ users.js          # User management routes
β”‚   β”‚   └── πŸ“„ applications.js   # Application routes
β”‚   β”œβ”€β”€ πŸ“ controllers/          # Route controllers
β”‚   β”œβ”€β”€ πŸ“ models/               # Database models
β”‚   β”œβ”€β”€ πŸ“ middleware/           # Custom middleware
β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth.js           # Authentication middleware
β”‚   β”‚   β”œβ”€β”€ πŸ“„ errorHandler.js   # Error handling
β”‚   β”‚   └── πŸ“„ rateLimiter.js    # Rate limiting
β”‚   β”œβ”€β”€ πŸ“ services/             # Business logic services
β”‚   β”œβ”€β”€ πŸ“ database/             # Database configuration
β”‚   β”‚   β”œβ”€β”€ πŸ“„ DatabaseService.js # Database service
β”‚   β”‚   └── πŸ“ migrations/       # Database migrations
β”‚   β”œβ”€β”€ πŸ“ utils/                # Utility functions
β”‚   β”œβ”€β”€ πŸ“ validators/           # Input validators
β”‚   └── πŸ“„ index.js              # Server entry point
β”‚
β”œβ”€β”€ πŸ“ docs/                      # Documentation
β”‚   β”œβ”€β”€ πŸ“ api/                  # API documentation
β”‚   β”œβ”€β”€ πŸ“ assets/               # Documentation assets
β”‚   β”œβ”€β”€ πŸ“„ ARCHITECTURE.md       # Architecture details
β”‚   β”œβ”€β”€ πŸ“„ API.md                # API reference
β”‚   └── πŸ“„ DEPLOYMENT.md         # Deployment guide
β”‚
β”œβ”€β”€ πŸ“ scripts/                   # Utility scripts
β”‚   β”œβ”€β”€ πŸ“„ seedMockData.js       # Database seeding
β”‚   β”œβ”€β”€ πŸ“„ migrate.js            # Migration runner
β”‚   └── πŸ“„ backup.sh             # Backup script
β”‚
β”œβ”€β”€ πŸ“ tests/                     # Test suites
β”‚   β”œβ”€β”€ πŸ“ unit/                 # Unit tests
β”‚   β”œβ”€β”€ πŸ“ integration/          # Integration tests
β”‚   └── πŸ“ e2e/                  # End-to-end tests
β”‚
β”œβ”€β”€ πŸ“„ .env.example              # Environment variables template
β”œβ”€β”€ πŸ“„ .gitignore                # Git ignore rules
β”œβ”€β”€ πŸ“„ package.json              # Project dependencies
β”œβ”€β”€ πŸ“„ docker-compose.yml        # Docker configuration
β”œβ”€β”€ πŸ“„ Dockerfile                # Container definition
β”œβ”€β”€ πŸ“„ jest.config.js            # Jest configuration
β”œβ”€β”€ πŸ“„ playwright.config.ts      # Playwright configuration
└── πŸ“„ README.md                 # This file

πŸ“‘ API Documentation

Base URL

Development: http://localhost:3001/api
Production: https://api.skillbridge.com

Authentication

All authenticated endpoints require a JWT token in the Authorization header:

Authorization: Bearer <your_jwt_token>

Endpoints Overview

πŸ” Authentication Endpoints
POST /api/auth/register

Register a new user account.

Request Body:

{
  "email": "user@example.com",
  "password": "SecurePassword123!",
  "firstName": "John",
  "lastName": "Doe",
  "userType": "learner" // or "business"
}

Response: 201 Created

{
  "success": true,
  "data": {
    "user": {
      "id": "uuid",
      "email": "user@example.com",
      "firstName": "John",
      "lastName": "Doe"
    },
    "token": "jwt_token",
    "refreshToken": "refresh_token"
  }
}
POST /api/auth/login

Authenticate a user and receive tokens.

Request Body:

{
  "email": "user@example.com",
  "password": "SecurePassword123!"
}

Response: 200 OK

{
  "success": true,
  "data": {
    "user": { /* user object */ },
    "token": "jwt_token",
    "refreshToken": "refresh_token"
  }
}
POST /api/auth/refresh

Refresh the access token using a refresh token.

POST /api/auth/logout

Logout the current user and invalidate tokens.

POST /api/auth/forgot-password

Request a password reset email.

POST /api/auth/reset-password

Reset password using the reset token.

πŸ“‹ Project Endpoints
GET /api/projects

Get a list of all available projects.

Query Parameters:

  • page (number): Page number for pagination (default: 1)
  • limit (number): Items per page (default: 20)
  • category (string): Filter by category
  • difficulty (string): Filter by difficulty level
  • skills (array): Filter by required skills
  • search (string): Search in title and description

Response: 200 OK

{
  "success": true,
  "data": {
    "projects": [
      {
        "id": "uuid",
        "title": "E-commerce Website Redesign",
        "description": "Help redesign our online store",
        "company": "TechCorp Inc.",
        "category": "Web Development",
        "difficulty": "intermediate",
        "skills": ["React", "Node.js", "UI/UX"],
        "duration": "3 months",
        "compensation": "$2000",
        "applicants": 15,
        "status": "open",
        "createdAt": "2024-01-15T10:00:00Z"
      }
    ],
    "pagination": {
      "currentPage": 1,
      "totalPages": 5,
      "totalItems": 100,
      "itemsPerPage": 20
    }
  }
}
GET /api/projects/:id

Get detailed information about a specific project.

POST /api/projects πŸ”’

Create a new project (Business users only).

PUT /api/projects/:id πŸ”’

Update project details (Project owner only).

DELETE /api/projects/:id πŸ”’

Delete a project (Project owner only).

POST /api/projects/:id/apply πŸ”’

Apply to a project (Learner users only).

πŸ‘€ User Endpoints
GET /api/users/profile πŸ”’

Get the current user's profile.

PUT /api/users/profile πŸ”’

Update the current user's profile.

GET /api/users/:id

Get public profile of a user.

POST /api/users/skills πŸ”’

Add skills to user profile.

DELETE /api/users/skills/:skillId πŸ”’

Remove a skill from user profile.

GET /api/users/dashboard πŸ”’

Get user dashboard data.

πŸ“ Application Endpoints
GET /api/applications πŸ”’

Get user's applications (Learner) or received applications (Business).

GET /api/applications/:id πŸ”’

Get application details.

PUT /api/applications/:id/status πŸ”’

Update application status (Business only).

POST /api/applications/:id/message πŸ”’

Send a message regarding an application.

Error Responses

All error responses follow this format:

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": {} // Optional additional details
  }
}

Common HTTP status codes:

  • 400 Bad Request - Invalid request data
  • 401 Unauthorized - Authentication required
  • 403 Forbidden - Insufficient permissions
  • 404 Not Found - Resource not found
  • 409 Conflict - Resource conflict
  • 429 Too Many Requests - Rate limit exceeded
  • 500 Internal Server Error - Server error

πŸ—ΊοΈ Roadmap

Phase 1: MVP (Current) βœ…

  • User authentication and authorization
  • Basic project listing and search
  • Application system
  • User profiles
  • Mock data layer

Phase 2: Enhanced Features 🚧

  • Real PostgreSQL database integration
  • Advanced matching algorithm
  • In-app messaging system
  • File upload and management
  • Email notifications
  • Payment integration

Phase 3: Scale & Polish πŸ“…

  • Mobile applications (iOS/Android)
  • AI-powered recommendations
  • Video interviews
  • Blockchain credentials
  • Analytics dashboard
  • Multi-language support

Phase 4: Enterprise Features 🎯

  • Team accounts
  • Custom branding
  • API access
  • Advanced analytics
  • White-label solutions
  • SLA support

See the open issues for a full list of proposed features and known issues.


🀝 Contributing

We love contributions! SkillBridge is built by the community, for the community. Whether you're fixing bugs, adding features, or improving documentation, your help is welcome.

How to Contribute

  1. Fork the Project

    git clone https://github.com/yourusername/skillbridge.git
    cd skillbridge
    git remote add upstream https://github.com/original/skillbridge.git
  2. Create your Feature Branch

    git checkout -b feature/AmazingFeature
  3. Make your Changes

    • Write clean, maintainable code
    • Follow existing code style
    • Add tests for new features
    • Update documentation
  4. Commit your Changes

    git add .
    git commit -m 'Add some AmazingFeature'

    We follow Conventional Commits:

    • feat: New feature
    • fix: Bug fix
    • docs: Documentation
    • style: Formatting
    • refactor: Code restructuring
    • test: Tests
    • chore: Maintenance
  5. Push to the Branch

    git push origin feature/AmazingFeature
  6. Open a Pull Request

    • Provide a clear description
    • Reference any related issues
    • Include screenshots if applicable

Code of Conduct

Please read our Code of Conduct before contributing.

Development Guidelines

πŸ“ Code Style
  • Use ESLint and Prettier configurations
  • Follow TypeScript best practices
  • Write meaningful variable names
  • Keep functions small and focused
  • Comment complex logic
πŸ§ͺ Testing Requirements
  • Write unit tests for new functions
  • Ensure all tests pass before PR
  • Maintain >80% code coverage
  • Include integration tests for APIs
πŸ“š Documentation
  • Update README for new features
  • Document API endpoints
  • Add JSDoc comments
  • Include usage examples

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

MIT License

Copyright (c) 2024 SkillBridge

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

πŸ‘₯ Team


John Doe
Project Lead
GitHub | LinkedIn

Jane Smith
Tech Lead
GitHub | LinkedIn

Mike Johnson
Full Stack Developer
GitHub | LinkedIn

Sarah Wilson
UI/UX Designer
GitHub | LinkedIn

πŸ™ Acknowledgments

We would like to thank:

  • πŸŽ“ Iowa State University - For supporting student innovation
  • πŸ† ISU Innovation Prize Committee - For the opportunity to showcase our vision
  • πŸ‘©β€πŸ« Our Mentors - For their invaluable guidance and feedback
  • 🌟 Open Source Community - For the amazing tools and libraries
  • πŸ’‘ Early Adopters - For believing in our mission

Special Thanks To

  • React - For the amazing frontend framework
  • Node.js - For the powerful backend runtime
  • PostgreSQL - For the robust database
  • Docker - For containerization
  • GitHub - For hosting our code
  • Vercel - For deployment platform

πŸ“ž Contact

Get in Touch

πŸ“§ Email: contact@skillbridge.com 🐦 Twitter: @SkillBridgeApp πŸ’Ό LinkedIn: SkillBridge 🌐 Website: www.skillbridge.com πŸ’¬ Discord: Join our community

Project Links

πŸ“‚ Repository: github.com/yourusername/skillbridge πŸ“‹ Issues: Report bugs or request features πŸ“– Documentation: docs.skillbridge.com 🎯 Project Board: View our roadmap


SkillBridge Footer

Made with ❀️ by the SkillBridge Team

Β© 2024 SkillBridge. All rights reserved.

Building bridges to brighter futures, one project at a time.

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published