Tampa Bay, Florida, USA

Neal Thomas

Senior full-stack engineer building enterprise API applications on C# / .NET, Angular, React, and SQL Server.

  • C# / .NET15+ Years Backend
  • Angular / ReactTypeScript front ends
  • SQL Server + NoSQLT-SQL & performance tuning

01 / About

About Me

I've spent 15+ years building enterprise API applications on C# / .NET and SQL Server, with Angular front ends over ASP.NET Core Web APIs. My SQL Server work runs deep: complex queries, stored procedures, indexing, execution plan analysis, and performance tuning under concurrent load.

Most recently I re-architected a legacy interval-polling Windows service into an event-driven RabbitMQ pipeline that handles 1M+ API requests around the clock. Before that I developed and maintained TOPS Software's proprietary accounting system, covering general ledger, receivables, payables, bank reconciliation, and financial reporting.

I follow SOLID principles and modern patterns like CQRS and dependency injection, and I own work from Sprint 0 and architecture review through delivery, including code review, mentoring, and production root-cause analysis. AI-assisted tools like Claude Code are part of my daily workflow.

See my code on GitHub

Core skills

  • API First Design
  • C# / .NET
  • Claude AI Pair Programming
  • Angular
  • React
  • SQL Server
  • AWS
  • Blazor
  • Azure DevOps
  • xUnit
  • Docker

Domains

  • Accounting
  • Healthcare (HL7, FHIR, HIPAA)
  • Real estate (Stellar MLS, Bridge API)
  • Financial trading systems

Sometimes it is the people no one can imagine anything of who do the things no one can imagine.

Alan Turing

02 / For Employers

What I Offer to Employers

For companies hiring a senior full-stack engineer. These are the six areas I own on a product team, from the first design review through production support, and the standard I hold each one to. If you need a shorter, scoped engagement instead, see Freelance below.

Design

Turning requirements from Product into scalable design blueprints. I research the problem space and the systems already in play, then break the work into epics, stories, and tasks with clear acceptance criteria.

From there I plan Sprint 0, lead the architecture review, and guide the development effort through delivery, documenting progress, decisions, and challenges so the whole team can see where things stand.

An engineered design is the keystone.

Data

Schema design and T-SQL on SQL Server: stored procedures, indexing strategy, and execution plan analysis for queries that stay fast under load. On AWS, single-table DynamoDB models with keys and access patterns designed up front.

Data stays tight from the database to the browser: typed models in the API, versioned request and response contracts, and TypeScript interfaces that mirror them, so a change in one layer is caught at compile time rather than in production.

Code

Maintainable, efficient code written to industry-standard conventions refined over 15 years, built on SOLID principles and modern patterns like CQRS and dependency injection.

Clean, consistent C# and TypeScript the next engineer can read without a tour, kept that way through analyzers, code review, and small, focused pull requests.

No over-engineering or anti-patterns.

Test

Every feature ships with fully functional unit and integration tests in xUnit or NUnit, with Moq for mocking, covering the happy path, edge cases, and failure modes.

Tests run in the pipeline on every push, so refactoring stays safe and regressions surface before review rather than in production.

Tests are the guardrails.

Deploy

CI/CD pipelines in Azure DevOps or GitHub Actions that build, test, and ship Docker images, from GitOps deployments with ArgoCD on Kubernetes down to lean deploy scripts for small serverless projects on AWS.

Environments are reproducible, rollbacks are a single step, and every release leaves a trail from commit to running service.

Monitor & Support

Production is instrumented with structured logging through Serilog, shipped to Seq, Datadog, or CloudWatch, with dashboards and alarms tuned so problems surface before customers notice.

When something does slip through, I switch on debug-level logging for the affected component, trace the request through the logs, run the root-cause analysis, and ship the fix with a test that keeps it from coming back.

03 / Freelance Work

Collaborate with Me

Not every problem needs a full-time hire. I take on short, well-defined engagements for teams that want senior .NET, Angular, React, or SQL Server help without the ramp-up, and I keep the first step small so there is nothing to lose by trying it.

Low-risk preview

Start with one small, fixed-scope piece of work, a day or two at most, so you can see how I communicate, estimate, and deliver before committing to anything bigger.

If it is not a fit, you still walk away with finished, tested work and a clear write-up of what I found.

Small changes

Bug fixes, small features, framework and dependency upgrades, and the tickets that never reach the top of the backlog.

Scoped up front and delivered as clean pull requests against your repository, with tests, so your team can review and merge on its own schedule.

Audits for developers

A second set of senior eyes on your codebase: architecture and code review, a SQL Server performance pass over execution plans, indexes, and slow stored procedures, or a pre-release security check.

You get a written report with findings ranked by impact and concrete next steps, not a list of lint warnings.

04 / Portfolio

Selected Work

Most of my career has gone into enterprise systems that belong to the companies I built them for, so that code stays behind their walls. The projects below are my own. They are here to show how I design, write, test, and ship software when every decision is mine.

Interactive property search kiosk screen listing Clearwater Beach condos with touch controls

Interactive Property Search Window Display

Touch screen kiosk, React + .NET on AWS

A touch-screen kiosk behind the window of a Clearwater Beach real estate office, running since 2010. Visitors pick sales or rentals over an aerial photo of Sand Key, browse live Stellar MLS listings and photos pulled through the Bridge Data Output API, and ask to be emailed details or called back from an on-screen keyboard. The 2026 rebuild is a React and TypeScript screen built with Vite, pixel-matched to the original against captures of the live kiosk, in front of a .NET 10 API on AWS Lambda served through CloudFront.

Built for 1920×1080. The screen is pixel-matched to the kiosk's fixed full-HD display and runs full screen at that resolution. In any other window it scales itself to fit, letterboxed, so the live demo below looks like the kiosk on a laptop or a phone.

  • React
  • TypeScript
  • Vite
  • .NET 10
  • AWS Lambda
  • CloudFront
  • Stellar MLS
  • Bridge Data Output API
  • 1920×1080
Kiosk screen on GitHub API on GitHub
Home page of lightsplitters.com showing the LightSplitters Media wedding, portrait, and pet photography galleries

lightsplitters.com

Photography studio, Angular on AWS

The website for LightSplitters Media, a Tampa Bay photography studio I have a vested interest in: weddings, portraits, family albums, and archival prints. An Angular 22 workspace with standalone components and signals, prerendered to static HTML with no server. A second app in the same workspace is a template for client sites, so each couple's wedding site or family album lives at its own subdomain from one shared build plus a JSON file and a folder of photos. Masonry galleries with a native dialog lightbox, responsive WebP and JPEG images, a contact form that posts to a Lambda function sending through SES, and print orders through Stripe Payment Links. All of it served from a private S3 bucket through CloudFront, with a CloudFront Function routing each subdomain to its folder.

  • Angular 22
  • TypeScript
  • Signals
  • Prerendered SSG
  • SCSS
  • Amazon S3
  • CloudFront Functions
  • Lambda + SES
  • Route 53
  • Stripe
Visit lightsplitters.com Source on GitHub

05 / Resume

Experience

Download resume (PDF)
  1. – · Remote

    Senior Software Engineer

    AdvancedMD

    • Re-architected a legacy interval-polling Windows service into an on-demand RabbitMQ pipeline, turning scheduled batch processing into event-driven real-time throughput handling 1M+ API requests 24/7.
    • Designed the publish/subscribe topology: durable queues, routing keys, consumer acknowledgment, dead-letter handling, and Polly retries with exponential backoff.
    • Scaled parallel consumers with bounded concurrency, thread-safe shared state, and cooperative cancellation for long-running operations.
    • Built and maintained HL7 v2 and FHIR integrations with external healthcare systems in a HIPAA-regulated environment.
    • Tuned SQL Server at enterprise scale on high-write integration tables: execution plans, indexing strategy, and query rewrites.
    • Owned production incident response and root-cause analysis; instrumented services with Serilog, Seq, Datadog, and CloudWatch.
    • Served two years on the AI Transition Team, bringing Claude AI pair programming into day-to-day development.
  2. – · Hybrid

    Software Engineer II (Full Stack)

    Arise Virtual Solutions

    • Developed full-stack features and REST API endpoints with ASP.NET Core on AWS-backed infrastructure.
    • Built asynchronous, queue-driven processing with AWS SQS and SNS to move long-running work off the request path.
    • Worked across EC2, Lambda, RDS, and S3, with CloudWatch for logging and operational monitoring.
  3. – · Florida

    Software Engineer (Full Stack)

    TOPS Software

    • Built full-stack features with Angular 2+ front ends over ASP.NET Core and ASP.NET Web API back ends.
    • Developed and maintained the company's proprietary accounting system: general ledger, receivables and assessments, vendor payables, bank reconciliation, and financial reporting.
    • Implemented CQRS with MediatR and real-time client updates with SignalR and WebSockets.
    • Took features from requirements intake through architecture review, Sprint 0, and backlog grooming; ran code reviews and mentored engineers.
  4. – · Florida

    C# Developer (Full Stack)

    LIG Marine Managers Insurance

    • Led the migration of the company platform from .NET Framework 3.x to .NET Core MVC.
    • Developed Web API services documented with Swagger, plus a WPF client built on Caliburn.Micro.
    • Maintained legacy software, expanded unit test coverage, and improved overall codebase health.
  5. – · Florida

    C# Developer (Full Stack)

    CENTURY 21

    • Now freelance: rebuilt the office’s property search kiosk in 2026 as a .NET 10 Web API on AWS Lambda behind CloudFront with a React / TypeScript touch-screen front end, serving live Stellar MLS listings and photos.
    • Developed SaaS real estate software using C# and C++.
    • Integrated Stellar MLS listing data through the Bridge Data Output API: listing search and detail endpoints, field selection, paging, photo delivery from the Bridge media CDN, and access-token handling, feeding both the SaaS product and the kiosk.
    • Managed API integrations with major external platforms including Google and Facebook.
    • Built an interactive kiosk window display application (full-screen HD, non-web target) showing live MLS listings.

Education

  1. Massachusetts Institute of Technology (MIT)

    Physics - OpenCourseWare

  2. High School Diploma

    Graduated at age 16

06 / Contact

Let's Talk

Hiring, contract work, or a question about one of the projects above. Send a note, pick how you would like to hear back, and I will reply, usually within a day.

07 / Colophon

How This Site Is Built

A footnote for the curious. The whole site follows the KISS principle, keep it simple: there is no server behind this page, only static files on a CDN, three Lambdas, and a CloudFront Function.

Front end
I kept the front end simple: plain HTML, CSS, and vanilla JavaScript. No framework, no build step, no bundler, and no dependencies: one stylesheet and one deferred script of under 500 lines, shipped exactly as written. The Experience timeline is in the HTML, so it reads without JavaScript; when the Experience API answers, the script re-renders it from the JSON and reveals a skill filter.
Styling
Mobile-first CSS built on custom properties. Light and dark themes follow the operating system through prefers-color-scheme, with a palette borrowed from JetBrains Rider, and prefers-reduced-motion switches off the transitions. Inter and JetBrains Mono are self-hosted as variable WOFF2 subsets and preloaded. Icons are a single inline SVG sprite.
Markup
Semantic landmarks, a skip link, ARIA labels, and visible focus rings for keyboard and screen-reader users. Search engines get JSON-LD structured data, Open Graph tags, a canonical URL, and a sitemap.
Hosting
The files sit in a private Amazon S3 bucket that only CloudFront can read, through Origin Access Control. CloudFront serves them over HTTP/2 and HTTP/3 with an ACM certificate, Route 53 aliases the domain to the distribution, and a CloudFront Function redirects www to the apex.
Security
A CloudFront response headers policy sets a strict Content Security Policy (same-origin only, no inline script or style, nothing third-party), two-year HSTS, X-Frame-Options: DENY, nosniff, and a locked-down Permissions-Policy. The site sets no cookies and runs no analytics.
Contact form
Posts JSON to an AWS Lambda function URL (Node.js 22 on arm64) that emails the message through Amazon SES. Spam is filtered before anything is sent: an origin check, a honeypot field, a minimum fill time, a per-IP hourly budget, and length caps on every field.
Resume link
The PDF is kept out of the public repository. The download button goes to a second Lambda that publishes a notification to an SNS topic, then answers with a 302 to the file in S3. If the notification fails, the visitor still gets the resume.
API integration
The work history above is served by an API at /api/experience, with a skill filter and an aggregated /api/skills view. It is C# on .NET 10, run on AWS Lambda (arm64) behind this same CloudFront distribution and reading a single DynamoDB table. The OpenAPI contract was written and committed before any code. Responses carry ETags and cache headers so CloudFront answers most requests itself, errors follow RFC 9457 problem details, and the function URL accepts only requests signed by CloudFront. Write endpoints are specified and stubbed for an admin API to come. The contract is public: OpenAPI spec.
Deploys
A GitHub Actions workflow runs on every push to main. It assumes a least-privilege IAM role through OIDC, so no AWS keys are stored in GitHub, runs aws s3 sync --delete in two passes (a week of browser caching for fonts and images, five minutes for pages), and invalidates the CloudFront cache. The third-party actions are pinned to commit hashes.
Tooling
Written in JetBrains Rider with Claude Code as a pair programmer, and previewed locally with python3 -m http.server before each commit.
Read the source on GitHub

Live demo

Interactive Property Search Window Display

The real kiosk at display.lightsplitters.com, scaled to fit this window. Touch or click around; it returns to its lock screen after three minutes idle, like the one behind the glass.

Open full size in a new tab