Skip to content
View mvcprogrammer's full-sized avatar

Block or report mvcprogrammer

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
mvcprogrammer/README.md

Neal Thomas

API-first software engineer  ·  C# / .NET  ·  Angular  ·  React  ·  SQL Server  ·  AWS
Tampa Bay, Florida

mvcprogrammer.com  LinkedIn  Email


mvcprogrammer.com, the home page

My professional experience includes more than fifteen years of API and back-end development on C# / .NET and SQL Server, with Angular and React on the front end. I specialize in services that run reliably around the clock and user interfaces that people find easy to use. Most recently, I re-architected a polling Windows service into an event-driven RabbitMQ pipeline that handles more than one million API requests, 24/7. Before that, I built and maintained a proprietary accounting system on Angular and ASP.NET Core, covering the general ledger, receivables, payables, bank reconciliation, and financial reporting. AI-assisted tools such as Claude Code are part of my daily workflow.

How the repositories are organized

All of my professional enterprise work lives in private repositories, so the public ones here stand in for it: they show how I write code and the stack I reach for. Each is mine end to end, design through deployment, and everything that is live runs serverless on AWS.

The layout is deliberate. A repository is one thing that ships, named after the domain it ships to. A site that needs a back end keeps its API in the same repository when the two are small and deploy together (mvcprogrammer.com), and splits into an API repository and a screen repository when they are separate deployables with separate release cadences (sandkey and sandkey-display-web). Every live project has a README that explains how to run it and a documented deploy, and every live site deploys from GitHub Actions through OIDC, so no AWS keys are stored anywhere.

Repository What it is Tech
mvcprogrammer.com
live
My portfolio site and the read-only Experience API behind it. The site follows the KISS principle: plain HTML, CSS, and vanilla JavaScript, no framework, no build step, no third-party scripts, strict Content Security Policy. The same page is also built with Angular, React, and Blazor WebAssembly as a side-by-side comparison; see One site, four editions. The API is spec-first with OpenAPI 3.1 and tested over the in-process host. Since October 2026 a private visitor dashboard (React 19, Chart.js, behind Cognito) reads day files exported from the CloudFront logs by a scheduled workflow, so the site measures itself without a third-party tracker. What has shipped and what comes next is on the public project board. HTML · CSS · JavaScript · Angular 22 · React 19 · Blazor WebAssembly · C# / .NET 10 · Lambda · DynamoDB · OpenAPI 3.1 · S3 · CloudFront · GitHub Actions
sandkey-display-api The API half of a touch-screen MLS kiosk in the window of a Clearwater Beach real estate office, running since 2009 and rebuilt in 2026. Reads live listings from the Stellar MLS feed, with secrets in SSM, rate limiting on the one endpoint that sends email, and OpenTelemetry tracing. Fully tested. Shipped and planned work for both halves is on the kiosk project board. ASP.NET Core on .NET 10 · Lambda · SAM / CloudFormation · SSM · SES · OpenTelemetry · xUnit
sandkey-display-web
try it live
The screen half of the same kiosk. A React app that keeps the layout the office knows by heart, fits any window, and talks only to sandkey-display-api. Tracked on the same kiosk project board. React 18 · TypeScript · Vite · React Router · S3 · CloudFront
lightsplitters.com
live
The site for LightSplitters Media, a fictional photography studio built as a portfolio piece, prerendered to static HTML. A second app in the same workspace is the template for every client's wedding site or family album, each served from its own S3 folder at its own subdomain with no AWS changes per client. Shipped and planned work is on its project board. Angular 22 · TypeScript · S3 · CloudFront Functions · Lambda + SES · Stripe
LegacyCPPFrom1999 Where it started. Code from a real-time day-trading platform I wrote in 1999 for a NASDAQ broker: pipe-delimited market data at hundreds of messages a second, fanned out over TCP to a floor of traders. Kept as history, not as a sample of how I write today. C++ · TCP sockets

One site, four editions

mvcprogrammer.com is built four times from the same content and the same shared stylesheet, once in each front-end stack I work in. The editions mirror each other, so a change to one is made to the other three in the same commit, and they cross-link so each is a click away from the rest. Each edition keeps its own colophon describing its own stack, and since October 2026 each carries its own palette: one small file per edition overrides the shared design tokens with light-dark(), so the colors change and no rule is repeated.

Edition Stack Palette Light Dark
Default
repository root
Vanilla HTML, CSS, and JavaScript. No framework, no build step. Eggshell paper with a terracotta accent and a coral hover; a warm charcoal after dark. #f0ead6 #a64a23 #d4602f #211e18 #e0855c #ffb088
Angular
angular/
Angular 22, standalone components, signals, Vitest. Navy and brass: a cool, faintly blue page with navy buttons and a goldenrod hover; a true navy after dark with muted brass for buttons and links and a paler gold on hover. #f3f5fa #1b365d #b7791f #0f1b33 #e3b04b #f2cd7a
React
react/
React 19, TypeScript, Vite, Vitest. The react.dev documentation palette: cool slate surfaces, React blue for buttons and links, the logo cyan on hover. #f6f7f9 #067394 #149eca #23272f #58c4dc #61dafb
Blazor
blazor/
Blazor WebAssembly on .NET 10, C# components in the browser, xUnit and bUnit. .NET violet: the .NET brand purple on faint lavender, a deep violet-black with lilac buttons after dark, the Blazor gradient's pink on hover. #f4f1fb #512bd4 #c2187a #1a1430 #b49cff #ff7ac8

Swatches are page, accent, and hover, in that order. The default edition is the screenshot at the top of this page; the other three:

Tech stack

Area Tools
Back end C# / .NET 10 and .NET Core, ASP.NET Core Web API and MVC, minimal APIs, EF Core, Dapper, MediatR, SignalR, OpenAPI, RabbitMQ, Hangfire, Polly
Front end Angular, React, TypeScript, vanilla JavaScript, HTML / CSS, Vite
Data SQL Server: complex queries, stored procedures, indexing, execution plans, performance tuning, deadlock diagnosis. DynamoDB single-table design
Cloud and delivery AWS Lambda, S3, CloudFront, Route 53, IAM, SSM, SAM / CloudFormation, GitHub Actions with OIDC, Azure DevOps, Docker
Quality xUnit, NUnit, NSubstitute, Moq, Telerik JustMock, WebApplicationFactory integration tests, analyzers as build errors, OpenTelemetry, Serilog, Datadog
AI Claude AI pair programming in day-to-day .NET work; two years on an enterprise AI Transition Team
Domains Accounting (GL, AR/AP, bank reconciliation, QuickBooks API) · Healthcare (HL7 v2, FHIR, HIPAA) · Real estate (Stellar MLS via the Bridge Data Output API) · Financial trading systems

Résumé and contact: mvcprogrammer.com

License

Copyright (c) 2026 Neal Thomas.

The source code in this repository is licensed under the GNU Affero General Public License, version 3 (AGPL-3.0-only). See LICENSE for the full text.

Pinned Loading

  1. mvcprogrammer.com mvcprogrammer.com Public

    Portfolio site of Neal Thomas: static HTML on S3 and CloudFront, with a .NET 10 Lambda and DynamoDB API behind the experience page

    TypeScript