Projects

A selection of recent work

Assessment Portal, Phase 1

The Marine Conservation Institute

The Marine Conservation Institute tracks the protection status of marine protected areas (MPAs) worldwide through detailed conservation assessments. When I joined the project, staff managed this work in an internal tool they hoped to eventually open to external collaborators. Phase 1 was a full rebuild designed to create a production-grade application that was the stable building block that the next phases could build on. Work spanned many areas: database and API design, a public read-only API for external data consumers, a geospatial geometry upload and validation pipeline, an interactive map visualization, and a data provenance system that records each field's source.

Tech: Python, FastAPI, SQLAlchemy, PostgreSQL, PostGIS, GeoAlchemy2, SvelteKit, TypeScript, Tailwind CSS, Mapbox GL, PMTiles, Redis, ARQ

Assessment Portal, Phase 2

The Marine Conservation Institute

Phase 2 opened The Marine Conservation Institute Assessment Portal to external contributors, which meant balancing collaborators' freedom to do their work with ensuring no assessment publishes without thorough review. I designed and implemented a task-based role system, an ownership model, and a structured review-and-publish workflow that moves assessments from draft through review to public visibility. Permission rules are enforced server-side, and the UI adapts dynamically to each user's role and ownership. To support new users, I added inline contextual help throughout the interface alongside full help documentation. A new dashboard gives every contributor a personal view of their queue (what's in progress, what's waiting on review, what needs attention) so work is easy to find without digging. And admins got dedicated management pages for backend content and user management.

Tech: Python, FastAPI, SQLAlchemy, PostgreSQL, PostGIS, GeoAlchemy2, SvelteKit, TypeScript, Tailwind CSS

Training Platform Content Migration

National Aquatic Connectivity Collaborative

The National Aquatic Connectivity Collaborative (NACC) trains field biologists, conservation coordinators, and volunteers to assess aquatic barriers (culverts, bridges, and other structures that affect fish passage and wildlife movement across watersheds). Their training content lived in a proprietary online learning platform, stored as XML and XLSX files with a custom tag-replacement system spread across multiple sheets and configs. I built a Python pipeline to parse both formats, resolve the custom tags, convert the HTML content to Markdown, and generate metadata JSON files that preserve course structure and page ordering. The pipeline migrated 4 full training courses — 80 content pages and 36 quizzes — into a format ready for integration with www.aquaticbarriers.org. Along the way, the pipeline handles edge cases like malformed HTML, encoding issues, and image path rewriting, while flagging the few pages that still needed a human touch for final polish.

Tech: Python, openpyxl, lxml, html.parser, markdownify, pathlib