Role
Designed the architecture and built the full stack solo
Stack
Microsoft Entra ID (Graph API), Python/FastAPI backend, vanilla JS frontend, real-time streaming (Server-Sent Events)
Build method
AI-assisted development (architecture, security decisions, and testing driven by me; implementation accelerated with AI coding tools)

Problem

Locking out a compromised account, or reversing a lockout, means several separate directory actions: disable the account, force a password reset, revoke active sessions, log why it happened. Each one is easy to skip or do out of order under time pressure, and there's no single record of what was actually done.

Approach

Built a guided two-action tool (Lockout and Enable) against a live Entra ID tenant via Microsoft Graph:

Find → confirm → execute → result. Search by name or UPN, confirm identity in a results table, explicit confirmation gate before anything destructive runs, then execute.

Lockout disables the account, resets the password, revokes all active sign-in sessions, and writes an audit note, in that order. It stops immediately if any step fails rather than continuing on a partial success.

Enable reverses it: re-enables the account, issues a new temporary password, and updates the audit note.

Each step streams its result to the UI in real time as it completes (Server-Sent Events), rather than a simulated progress bar. What you see on screen is the actual Graph API response landing live.

Outcome

A single guided workflow replacing several manual directory actions, with every action independently verifiable in Entra's own audit log, not just trusted on the tool's word.

What's next

Onboarding, full offboarding (with email/ticketing integration), and password-change workflows are planned on the same architecture. Lockout/Enable was built first since incident response has the tightest time pressure and the smallest safe blast radius to prototype against.