About Me
I'm a digital archives developer and the Senior Technology Assistant at Marshall District Library, where I designed and run the library's digital archive at archive.yourmdl.org.
I migrated that archive from Omeka Classic to Omeka S, wrote the four custom modules it runs on, and built the pipeline that transcribes handwritten 1800s documents into searchable text. Library staff catalog into it themselves.
What I Do
Digital archive platforms. Omeka S deployed as a headless backend with a custom frontend, so an archive behaves like a modern website instead of a CMS theme.
AI-assisted transcription. Handwritten material that defeats traditional OCR, read by Claude Vision and corrected by an archivist before anything publishes.
Cataloging and staff training. Building the cataloging workflows and training the people who use them, so an institution's own staff can add material without a developer in the loop.
The Digital Archive
The archive runs Omeka S as a headless backend on EC2, with a custom Next.js frontend on Vercel, Typesense for search, and S3 and CloudFront for media delivery. An archivist reviews every transcribed page before it publishes.
The collection spans high school yearbooks back to 1899, early Calhoun County church and cemetery records, township ledgers, diaries, historical photographs, and city and county directories.
The Sports Archive
A second archive at sports.yourmdl.org, covering a sports program's history: athletes, teams, seasons, records, hall of fame, and photo galleries.
Different stack, same shape of problem. A Django REST API on EC2 backed by PostgreSQL, with both the public archive and the staff admin built in Next.js, and Typesense for search. The API runs on its own host and is built to be read by other applications, so the data outlives whatever frontend happens to be displaying it.
Staff enter every record through the custom admin. A flexible statistics engine lets them define a new stat, a race time or a season scoring total, as data entry rather than a schema change and a deploy.
Custom Omeka S Modules
Four custom PHP modules run in production on the MDL archive. Each one exists because Omeka S has no built-in answer for the problem:
TranscriptionManager — The transcription workflow for handwritten material. Page selection, dispatch to Claude Vision through Lambda, a side-by-side review interface where an archivist corrects the AI output against the original scan, name annotation, and publishing to an Omeka S media resource. Nothing publishes without a human approving it.
TypesenseSync — Keeps the Typesense search index in step with Omeka S. Hooks item create, update, and delete events, dispatches changed item IDs to Lambda, and reports sync status and errors in the admin.
CacheInvalidation — Purges the Next.js frontend cache when content changes, batching requests so a bulk edit does not turn into a flood of invalidations.
Custom authentication module — Brings the Omeka S admin sign-in into visual parity with the public frontend, so staff do not cross a jarring boundary between the archive and the tool they catalog in.
WordPress Development
Many libraries, museums, and historical societies run WordPress for their public site, so this sits close to the archive work rather than apart from it. Marshall District Library's main site runs on AWS under my care, and I built the serverless event registration system behind it: a WordPress form feeding API Gateway, SQS, and Lambda.
I also do custom WordPress development as a freelancer. For LKF Marketing I write custom code for their in-house theme and plugins. For Nexus Technologies Group the work is broader full-stack WordPress.
Tech Stack
Digital Archives & Cataloging: Omeka S (headless deployment, custom PHP modules) • Omeka Classic to Omeka S migration • Typesense search • metadata mapping and resource templates • AI-assisted transcription with Claude Vision
Web & Application: Next.js • React • TypeScript • Python • Django • Node.js • PHP • WordPress
Cloud & Infrastructure: AWS (Lambda, API Gateway, S3, CloudFront, EC2, EventBridge, SQS, SES) • CloudFormation via SAM • Docker Compose • Linux
Data & Automation: MySQL • PostgreSQL • GitHub Actions • Git
Certifications
Both certifications are verifiable on Credly.