← Swipe·Swipe →

2026 · INTERNAL TOOLS | IDENTITY

ID Card Management Tool

Replaced a manual Power Automate + Excel-script pipeline for producing staff and student ID cards with a directory search, native photo resize, and direct filing into the card-production queue.

Built at Immaculata-La Salle High School

Private Deployment: Built for Immaculata-La Salle High School
ID Card Management Tool dashboard

Tech Stack

ViteReactTypeScriptAzure FunctionsSharpMSALSharePointMicrosoft Graph

Overview

Producing an ID card meant finding the person in a spreadsheet, resizing their photo by hand with an Excel macro, and filing the record for the card printer, one extra manual hop for every single card. I replaced it with a search-driven form: look someone up (or enter them manually if they're not in any roster yet), upload a photo, and the app resizes it natively and files the record directly into the shared production queue. The directory search itself went through a few iterations. It started against live Microsoft Graph, then moved to synced roster data for speed, with a live-directory fallback for anyone not yet in a synced list.

Impact

Who it serves: Front-office staff producing ID cards for students and staff

Before

Producing a card meant finding the person in a spreadsheet, resizing their photo by hand with an Excel macro, and filing the record for the card printer, one extra manual hop for every single card.

After

A search-driven form looks someone up, resizes their photo natively, and files the record straight into the shared production queue. No macro, no manual filing step.

Est. Annual Cost Saved

$230/yr

vs. CardExchange Professional (CardExchange Solutions): est. $230/yr. $695 one-time perpetual license, amortized over 3 years.ID badge software is typically sold as a perpetual license, not a subscription, so this is a rough annualized stand-in, not an apples-to-apples SaaS comparison. The bigger win here was eliminating a manual Excel-macro photo-resize step per card, which has no clean dollar comparable.

Estimate, not an audited figure. Methodology and sources are disclosed above for each comparable product.

What I Built

  • Directory search across synced roster sources with a live-directory fallback, or manual entry for anyone not listed
  • Photo upload with native server-side resize, no more Excel macro step
  • Extended a live, shared production-queue list with new fields (manual-entry flag, role/group, photo URL) without disrupting existing records
  • Mobile-hardened form inputs for a front-office iPhone workflow
  • A scheduled sync job that refreshes the roster sources nightly and archives the raw export files

Screenshots

ID Card Management Tool: screenshot 1

What I Learned

A legacy SharePoint list column can silently reject every write from the Graph API regardless of payload shape. Confirmed by direct testing, then worked around by adding a parallel column instead of fighting the old one.

The photo output needed a non-uniform stretch rather than a center-crop, since losing part of the photo was worse than mild distortion for this printer's actual card template: an explicit product call, not the 'obviously correct' resize approach.

Merging three separate roster export sources into one directory search, with a live-directory fallback, covers people the syncs miss without making every search pay for a live API call.