Skip to content
jesusprodriguez.com
Live Production 2026 · UNIR · internal team use · Author · Technical Lead

Team work manager on Azure DevOps

Internal tool the team uses to manage capacity, sprints and tasks, and to create tickets in Jira and Azure DevOps. FastAPI, Astro and Docker.

Screenshot of Team work manager on Azure DevOps
Python FastAPI Astro React Azure DevOps Jira Docker

Problem

Azure DevOps does not cover the team's day-to-day: real capacity after days off, batch task creation, the sprint in one view, and the bridge to Jira. Work leaked into extra tabs, spreadsheets and copy-pasted tickets.

Solution

A web app —FastAPI and Astro/React, brought up with Docker— that talks to the Azure DevOps and Jira APIs: team capacity, sprint grid, kanban, bulk import, Jira→Azure sync and process automation.

Results

Azure DevOps and Jira

Integrations

Team day-to-day

Use

Docker Compose

Delivery

Tech stack

  • Python
  • Astro
  • React
  • Azure DevOps
  • Jira
  • Docker
  • SQLite
  • FastAPI

An internal tool I built for the team: the Azure DevOps board was not enough for day-to-day work. Here you see real capacity, you manage sprints and tasks, you create tickets in Jira and Azure, and you automate processes that used to be copy-paste.

The repository is private. This case covers what the product does, not Proeduca’s backlog.

What it covers

  • Team capacity. Hours per member from Azure DevOps, after days off — not a flat hours-per-day figure.
  • Sprint. Task grid, kanban, backlog and a daily standup panel. Filters for assignee, state, Area Path and parent PBI.
  • Creating work. Individual or batch tasks, PBIs from scratch, bulk import from Excel/CSV and bulk update.
  • Jira ↔ Azure. Sync from a project, a dashboard or an issue: preview, conflict detection and execute. Tickets can be created on both sides.
  • Processes. Closure evidence, deployments tied to tags, global work-item search and a secrets vault.

The backend is FastAPI; the frontend, Astro with React islands. Docker Compose brings it up locally without installing Python or Node on the machine.

Why it sits next to the records case

Academic records and degrees are the product. This tool is how the team delivers it: without it, capacity, sprint and Jira live in three different places. The two cases are meant to be read together.

Gallery

Team capacity management: availability, days off and utilisation
Real capacity per member, after days off
Synchronisation between Jira Cloud and Azure DevOps
Jira → Azure DevOps sync: preview, conflicts and execute
Tool modules: kanban, sprint, capacity, import and sync
Kanban, sprint, capacity, Excel import and synchronisation
Daily standup panel: tasks per person, yesterday, today and blockers
Daily panel: sprint progress, tasks per person and blockers
Bulk import from Excel/CSV into Azure DevOps with validation
Bulk import: column mapping, validation and conflicts detected
Process atlas: 10 stations connected to the FastAPI + Astro/React hub
Process atlas: auth, sprint, capacity, tasks, PBIs, evidence, kanban, sync

What I learned

  • → The capacity that matters is the one that subtracts days off. Hours-per-day with no calendar is a lie.
  • → Jira Cloud does not expose a dashboard filter stably: it has to be resolved from gadget properties.
  • → Azure DevOps remains the source of truth for the team's work. Local state (evidence, personal kanban) lives in SQLite on purpose, not the other way round.
  • → An internal tool holds up if the team opens it every sprint. Everything else is inventory.

Architecture · technical leadership · .NET

Hiring a .NET Software Architect or Tech Lead?

Open to full-time employment in software architecture or technical leadership on .NET products. Tell me about the role and the team: I reply within 24–48 h.