A web application for tracking team member skills and proficiency levels across Azure products, use cases, and soft skills.
- Skills Matrix View: Visual table showing all team members and their skills
- User Profiles: Detailed view of individual skills with easy editing
- Proficiency Levels: Microsoft's L100-L400 scale with color coding
- L100 (Red): Awareness - aware of the technology
- L200 (Orange): Conversant - can discuss potential and use cases
- L300 (Blue): Practitioner - hands-on experience, can speak competently
- L400 (Green): Expert - deep expertise, can lead workshops
- Skill Categories: Organized by Azure Compute, Data, AI, Security, Networking, DevOps, Soft Skills, and Use Cases
- Easy Skill Management: Quick add/edit/delete with autocomplete
- AI Chat Assistant: Natural language queries for finding experts and analyzing team skills
- Frontend: React + Vite
- Backend: Node.js + Express
- Agent: Python + Microsoft Agent Framework
- Database: PostgreSQL
- AI Model: Azure AI Services (GPT-4o)
Prerequisites: Docker Desktop (Get Docker)
# Clone the repository
git clone <your-repo-url>
cd teamskills
# Start everything
docker-compose up --buildDone! Open http://localhost:3000 in your browser.
Docker automatically:
- β Starts PostgreSQL with test data
- β Runs backend API (http://localhost:3001)
- β Runs agent service (http://localhost:8000)
- β Runs frontend dev server (http://localhost:3000)
The AI chat assistant requires Azure AI Services credentials. Create a .env file:
cp .env.example .envEdit .env with your Azure AI Services settings:
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o
Without these credentials, the chat will show "Agent not available" but all other features work normally.
See DOCKER.md for detailed Docker commands and troubleshooting.
Prerequisites:
- Node.js 18+
- PostgreSQL 14+
- npm or yarn
Create a PostgreSQL database:
psql -U postgres
CREATE DATABASE teamskills;
\qInitialize the schema and seed data:
psql -U postgres -d teamskills -f database/schema.sql
psql -U postgres -d teamskills -f database/seed.sqlCreate a .env file in the root directory:
cp .env.example .envEdit .env with your database credentials:
DB_USER=postgres
DB_HOST=localhost
DB_NAME=teamskills
DB_PASSWORD=your_password
DB_PORT=5432
PORT=3001
Install dependencies and start the backend:
npm install
npm startThe API will run on http://localhost:3001
Install frontend dependencies:
cd frontend
npm installStart the development server:
npm run devThe frontend will run on http://localhost:3000
The repository includes demo data with fictional team members. To load your real team:
-
Create your team seed file by copying and modifying the demo:
cp database/seed.sql database/seed-team.sql
-
Edit
database/seed-team.sqlwith your real team members' names, emails, and skills -
Load your team data (replaces demo data):
# With Docker: docker-compose exec db psql -U postgres -d teamskills -c "TRUNCATE users, user_skills, skill_relationships RESTART IDENTITY CASCADE;" docker-compose exec -T db psql -U postgres -d teamskills < database/seed-team.sql # Without Docker: psql -U postgres -d teamskills -c "TRUNCATE users, user_skills, skill_relationships RESTART IDENTITY CASCADE;" psql -U postgres -d teamskills -f database/seed-team.sql
Note:
seed-team.sqlis gitignored to protect your team's personal information.
- Open http://localhost:3000 in your browser
- Matrix View: See all team members and their skills at a glance
- Click a user name to view their detailed profile
- Add Skills: Click "+ Add Skill" button, search for skills, and select proficiency level
- Update Proficiency: Use dropdown in profile view to change skill levels
- Filter Skills: Use category filter in matrix view to focus on specific skill areas
- Chat Assistant: Click the π¬ button to ask questions like:
- "Who knows Kubernetes?"
- "What skill gaps do we have?"
- "Give me a team skills summary"
GET /api/users- Get all usersGET /api/users/:id- Get single userPOST /api/users- Create userPUT /api/users/:id- Update userDELETE /api/users/:id- Delete user
GET /api/skills- Get all skillsGET /api/skills/:id- Get single skillGET /api/skills/:id/related- Get related skillsPOST /api/skills- Create skillPUT /api/skills/:id- Update skillDELETE /api/skills/:id- Delete skill
GET /api/categories- Get all categoriesPOST /api/categories- Create category
GET /api/user-skills/:userId- Get all skills for a userPUT /api/user-skills- Update or create user skillDELETE /api/user-skills- Remove user skill
GET /api/matrix- Get complete matrix data (users Γ skills)
GET /agent/status- Check agent availability and capabilitiesPOST /chat- Send message and get complete responsePOST /chat/stream- Send message and get streaming SSE response
The application includes 8 test users with diverse skill profiles across different Azure specializations. Use these to explore the functionality or add your own team members.
- Export/reporting features (Excel, PDF)
- Authentication and authorization
- Skill endorsements/verification
- Learning resource links
- MCP PostgreSQL integration for advanced queries
This project can be deployed to Azure using the Azure Developer CLI (azd).
- Azure CLI installed and logged in
- Azure Developer CLI (azd) installed
# Login to Azure
az login
azd auth login
# Deploy everything (infrastructure + code)
azd upThis will:
- Create a resource group with PostgreSQL, Container Registry, Container Apps, and Azure AI Services
- Build and push Docker images to the registry
- Deploy all three services (backend, frontend, agent)
- Configure RBAC for the agent to call Azure AI Services
To delete all Azure resources created by this project:
# Delete all resources (with purge for soft-deleted resources)
azd down --force --purge -e <environment-name>The --force flag skips confirmation prompts, and --purge permanently deletes soft-deletable resources like Key Vaults and Cognitive Services accounts.
Note: If azd down fails, you can manually delete the resource group:
az group delete --name rg-<environment-name> --yes --no-wait# List deployed environments
azd env list
# Show environment details (URLs, settings)
azd env get-values -e <environment-name>
# Deploy only code changes (no infrastructure changes)
azd deploy
# Deploy only infrastructure changes
azd provision
# View deployment logs
az containerapp logs show --name <app-name> --resource-group <rg-name> --tail 50ISC