Back to portfolio Professional experience

Full-Stack Engineer

Columbia Southern University June 2025 to July 2026

Worked on the modernization of a legacy ASP.NET MVC and WebForms student portal, helping replace a long-running front-end architecture with Next.js, React, TypeScript, and ASP.NET Core while maintaining production behavior across four role-based experiences.

  • Next.js
  • React
  • TypeScript
  • ASP.NET Core
  • C#
  • SQL Server
  • REST APIs
  • Azure

Development was AI-assisted, with generated work reviewed, tested, and validated before merge.

1,052 Personal commits across 2 repositories
66% Of front-end commits 908 of 1,368
1,678 Unit tests shipped across 57 test files
123K+ Legacy lines retired and 91 files removed
23/28 Forms verified end to end UI, API, and database

The project

Replacing a portal
that could not go down.

The student portal had been running on ASP.NET WebForms and MVC for more than fifteen years, with Kendo UI on the front end and SOAP services behind it. It serves four distinct audiences, Student, Prospect, Professor, and Admin, each with its own workflows, and all of them had to keep working exactly as before while the rebuild went out.

The replacement is a Next.js, React, and TypeScript front end talking to an ASP.NET Core Web API. Rather than rewrite the data layer, the API was built as a thin REST surface over the existing SQL Server stored procedures, which kept data behavior identical and removed a large class of migration risk. Features were ported one to one, preserving production URLs.


The work

Five areas of delivery.

Modernizing the legacy portal

Ported the four role-based experiences from WebForms and Kendo UI onto Next.js, React, TypeScript, Material UI, and Redux Toolkit, backed by an ASP.NET Core Web API. Each feature was traced through the old application first, then rebuilt against the same stored procedures, so the new screens returned the same data as the ones they replaced. I worked to a repeatable sequence: discover the existing behavior, trace it through the stack, validate it against the database, map it to the new architecture, then implement.

Removing legacy technical debt

The codebase carried parallel SOAP and REST stacks, LINQ-to-SQL data contexts, dead code paths, and undocumented mismatches between stored procedures and the code calling them. I audited repositories against sys.parameters and the actual result set columns before merging. One example: the original EnrollmentFormRepository had every stored procedure parameter name wrong, including @ProspectEvalID against an actual @ProspectEvaluationID and missing output parameters. That was caught and fixed before it reached production.

Testing and quality

The greenfield backend started with no test scaffolding and the legacy code had effectively no coverage. I built out a test layer of 1,678 unit tests across 57 files covering the repository, service, and controller layers. Tests were drafted with AI assistance and then audited by hand for assertion validity, mock fidelity, and security-relevant edge cases. Twenty-three of the twenty-eight submittable forms were verified end to end through the interface, the API, and the database.

Security

A 2022 penetration test and the production logs had documented real attack vectors against the legacy portal, mostly file-upload abuse and injection patterns. The rebuild routes every upload endpoint through a shared validation step: filename sanitization, a 10 MB size cap, and an extension allowlist limited to PDF, DOC, DOCX, JPG, PNG, and TXT. Stored procedure calls use parameter binding rather than string concatenation. None of the vulnerabilities in the earlier pentest scope were reintroduced.

Engineering workflow

Delivering across four portals and a shared backend creates constant context switching. I built reusable development workflows for codebase analysis, stored procedure auditing, feature implementation, and test generation, implemented with Claude Code, and ran paired front-end and back-end checkouts so separate pieces of work could progress without colliding. A two-week sprint plan tracked delivery state. Output that came out of those workflows was reviewed and tested like any other change before merge.


Verified metrics

The numbers, with their
attribution attached.

Project-wide figures describe the whole team's activity. Figures marked personal are my own authorship. The two are not interchangeable.

Contribution Personal

Commits authored
1,052
Front-end commits
908 66%
Back-end commits
144 31%
Forms delivered end to endof 28 total, 23 of which shipped
16
Monthly commit rateOctober 2025 to March 2026
50 to 331

Codebase change Project-wide

Total commits, all authors
1,825
Unique files toucheddeduplicated across add, modify, delete
2,303
Files added
2,286
Legacy files retired
91
Legacy lines decommissionedWebForms, SOAP, LINQ-to-SQL
123,270
Lines touched across historygross commit churn, see note below
467,552

Quality Project-wide

Unit tests shipped
1,678
Test files
57
Forms verified end to endinterface, API, and database
23 / 28 82%
Vulnerabilities reintroducedfrom the 2022 pentest scope
0

On lines of code. The authored and decommissioned totals are gross commit churn: a line edited five times across the project's history counts five times. That is the standard way version control reports migration scope, and it is not the same as the current size of the codebase. It also does not mean one person wrote every line.

Where these come from. Figures were read from the Subversion history on 27 April 2026, covering commits from 1 January 2025 onward, roughly ten months of delivery, at revision r1551 on the front end and r581 on the back end. Each one traces to a log query or a direct file read rather than an estimate.


Skills applied

What this role used.

Frontend

React 19Next.js 16TypeScript Material UI 7Redux Toolkit

Backend

C#ASP.NET Core Web APIREST APIs Repository and service architecture

Data

SQL ServerStored proceduresT-SQL Stored procedure auditing

Cloud & authentication

Azure AD / MSALAPI key authAPI integrations

Engineering practices

Legacy modernizationUnit testingSecure development Code reviewPentest remediationSVN and Git workflows

AI-assisted development

Claude CodeGitHub CopilotCustom workflows Human review of generated code

Tooling

AI-assisted development.

I use Claude Code and GitHub Copilot as development tools, for code exploration, implementation, test generation, debugging, and repetitive engineering tasks. On this project I also built project-specific workflows for legacy code analysis, stored procedure auditing, feature development, and test generation.

Generated output was treated as a draft. It was reviewed, tested, and validated as part of the normal development process, and controllers coming out of it were treated as untrusted until read line by line. The stored procedure parameter bug described above is the reason that matters.


Previously

Before this role.

  • MDM Commercial (JourneyPX)C# and Azure API for a HIPAA-compliant hospital app, featured on CBS News 2022 to 2024
  • UCS-IncU.S. Navy readiness systems, unified three medical T-SQL databases 2022
  • InsuresoftP&C insurance rating engines in VB.NET and SQL Server 2021 to 2022

Available for the next
engagement.

Open to remote engineering roles, contract work, and custom software projects. The same approach applies: understand the existing system first, then change it carefully.

See the products I have shipped