TeamSkill Demo
August 27, 2025 ยท View on GitHub
A secure web application for storing, managing, and visualizing team members' skillsets and strengths. This application allows team members to complete self-assessment forms and enables team leaders to view aggregated skill data.
Features (Planned)
- ๐ Microsoft Entra ID Authentication - Secure single sign-on
- ๐ Dynamic Assessment Forms - Admin-uploaded skill assessments
- ๐ Skill Data Visualization - Individual and team skill dashboards
- ๐ฅ Team Management - Role-based access control
- โ๏ธ Azure Integration - Cloud-hosted with Azure services
- ๐ฑ Responsive Design - Works on desktop, tablet, and mobile devices
Quick Start
Prerequisites
- Python 3.12+
- uv (Python package manager)
Backend Setup
-
Clone the repository
git clone https://github.com/robpitcher/teamskill-demo.git cd teamskill-demo -
Create Python virtual environment
uv venv -
Automated Setup (Linux/macOS)
# Make the setup script executable chmod +x setup.sh # Run the setup script ./setup.sh -
Manual Setup
# Install Python dependencies uv sync -
Start the development server
cd backend uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload -
Access the application
- Open your browser to: http://localhost:8000
- Health check endpoint: http://localhost:8000/health
Project Structure
teamskill-demo/
โโโ backend/ # Python FastAPI application
โ โโโ app/ # Application code
โ โ โโโ __init__.py
โ โ โโโ main.py # FastAPI app with routes
โ โโโ static/ # CSS, JS, images
โ โ โโโ style.css # Application styling
โ โโโ templates/ # Jinja2 HTML templates
โ โ โโโ index.html # Home page template
โ โโโ tests/ # Test suite
โโโ docs/ # Documentation
โ โโโ prd.md # Product Requirements Document
โโโ frontend/ # React frontend (placeholder)
โ โโโ README.md # Frontend documentation
โโโ pyproject.toml # Python project configuration and dependencies
โโโ uv.lock # Dependency lock file for reproducible builds
โโโ setup.sh # Setup automation script
โโโ README.md # This file
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/ | GET | Home page with welcome message |
/health | GET | Health check for monitoring |
Development
Backend Development
The backend uses FastAPI with the following key components:
- FastAPI: Modern ASGI web framework for building APIs
- Uvicorn: ASGI server for development and production
- Jinja2: Template engine for HTML rendering (temporary until React frontend)
- Static files: CSS styling for the basic UI
Template Development
Templates are located in backend/templates/ and use Jinja2 syntax:
<h1>{{ title }}</h1>
<p>{{ description }}</p>
Adding New Routes
@app.get("/new-endpoint")
async def new_endpoint():
return {"message": "Hello from new endpoint"}
Dependencies
Current backend dependencies:
- fastapi==0.104.1
- uvicorn==0.24.0
- jinja2==3.1.2
- python-multipart==0.0.6
Testing
The project includes comprehensive unit tests for all existing functionality.
Running Tests
cd backend
uv run python -m pytest tests/ -v
Test Coverage
Current tests cover:
- โ
Route endpoints: Home page (
/) and health check (/health) - โ Static file serving: CSS files and error handling
- โ Template rendering: Context variables and HTML structure
- โ HTTP methods: Proper method validation and error responses
For detailed testing documentation, see backend/tests/README.md.
Continuous Integration
GitHub Actions automatically runs all tests on pull requests to the main branch. The CI workflow:
- Sets up Python 3.12 environment
- Installs dependencies
- Runs pytest with verbose output
- Fails if any tests fail
Code Quality & Linting
The project uses MegaLinter to ensure code quality and consistency across Python, HTML, and CSS files.
Linting Standards
MegaLinter automatically runs on all pull requests to the main branch.
Running Linter Locally
To run MegaLinter locally using Docker:
# Run MegaLinter on all files
docker run --rm -v $(pwd):/tmp/lint oxsecurity/megalinter:v7
# Run MegaLinter on changed files only (faster)
docker run --rm -v $(pwd):/tmp/lint oxsecurity/megalinter:v7 --env VALIDATE_ALL_CODEBASE=false
Linter Configuration
The linting configuration is defined in .mega-linter.yml in the repository root. The configuration:
- Runs all linters
- Applys some fixes automatically
For more information about MegaLinter, visit the official documentation.
Future Plans
Frontend Development
The frontend is planned to be built with:
- React.js: Modern UI library
- TypeScript: Type-safe JavaScript
- Vite: Fast build tool
- Azure Static Web Apps: Hosting platform
Refer to frontend/README.md for more details on the planned frontend implementation.
Deployment
Local Development
- Backend: http://localhost:8000
Future Azure Deployment
This application is designed for Azure hosting:
- Azure App Service: For backend hosting
- Azure Static Web Apps: For React frontend hosting
- Azure SQL/Cosmos DB: For data storage
- Azure Blob Storage: For assessment file uploads
- Microsoft Entra ID: For secure authentication
- Azure Monitor/App Insights: For logging and diagnostics
Environment Variables
The following environment variables will be used in future versions:
| Variable | Description | Default |
|---|---|---|
TEAMSKILL_BASE_URL | Base URL for the application | http://localhost:8000 |
AZURE_STORAGE_CONNECTION_STRING | Azure Blob Storage connection | Not set |
AZURE_DB_CONNECTION_STRING | Database connection string | Not set |
Contributing
- Ensure Python virtual environment is activated
- Install dependencies:
uv sync - Run the development server:
uv run uvicorn app.main:app --reload - Make your changes
- Update documentation as needed
Security Notes
- Authentication not implemented yet (planned: Microsoft Entra ID)
- No sensitive data storage in current version
- Future versions will include proper RBAC and data encryption
License
This project is for demonstration purposes.
Current Status: ๐ง Early Development - Basic scaffold implemented
Last Updated: August 23, 2025
For detailed requirements and planned features, see Product Requirements Document.