Grade My Investments (GMI)
AI-Powered Stock Analysis & Rating Platform — designed, built, and deployed solo in six months using AI-first development. 270,000+ lines of code, 695 unit and integration tests, 11 background services, one architect.
What GMI Is
Grade My Investments is a full-stack SaaS analytics platform for retail investors. Users select a stock symbol — drawn from a catalog of 8,000+ US equities, 2,500+ ETFs, and 15,000+ mutual funds — and GMI generates a comprehensive analytical report graded on a familiar A+ to F scale, backed by 50+ financial metrics, ML.NET projections (revenue, debt, cash flow, sentiment), and conversational Claude-powered analysis on top.
The platform spans four client applications: a Blazor public web app, a .NET MAUI cross-platform mobile app (iOS / Android / Windows), a Blazor admin console, and a separate Blazor technology / documentation site. They all sit on a shared .NET 10 backend with Azure Functions APIs, MySQL persistence, and 11 specialized background services running on Azure App Service. Stripe handles pay-as-you-go billing with token-aware cost estimation; Google OAuth handles sign-in; Twilio handles SMS notifications.
Why I Built It as a Portfolio Piece
GMI is the project I built to prove out — to myself, and to clients — my own AI-first development thesis: a single senior architect using modern AI tools can now ship a production SaaS platform that would have required a 5–10 person team and two years of effort five years ago.
The numbers back the claim: 270,000+ lines of code, 695 unit and integration tests, 45+ design patterns, 4 client applications, 11 background services, and 50+ Azure resources — all delivered in six months by one person with Claude as a development partner. That's a 4× acceleration over what I'd have done with Stack Overflow and Visual Studio alone.
Everything an enterprise client asks me to evaluate is in this codebase: multi-surface frontend (web + mobile + admin), real authentication with PKCE, real money handling with idempotent webhooks, cloud-native infrastructure managed as code with Pulumi, AI integration with structured tool use and prompt caching, and machine learning that produces deterministic outputs from probabilistic inputs. Instead of pitching a slide deck about how I'd architect a system, I can point at GMI and say: this is what that decision looks like in production.
GMI is also a personal stress-test. AI-first development isn't "let Claude write the code" — it's knowing where AI accelerates you, where it slows you down, and where the architect has to step in. GMI is the receipt.
From PyEasy to Cloud SaaS — The Origin Story
- 2020 — PyEasy. Started as a personal Python desktop tool that pulled financial data from IEX Cloud and printed analytical reports I'd hand-tune over several years.
- 2023 — Forced migration. IEX Cloud shut down. The same year, Anthropic released Claude. Two events that would eventually converge.
- 2024 — Re-platform. Migrated PyEasy to Financial Modeling Prep (FMP) as the data provider and committed to rewriting the whole thing as a web platform.
- 2025 Q1 — Solo + Claude. Began GMI development in earnest, pairing with Claude through Claude Code, Visual Studio, Rider, and VS Code. AI-first workflow accelerated delivery roughly 4×.
- 2025 Q3 — First cloud release. GMI dev environment shipped to Azure with full DevOps pipeline.
- 2025 Q4 — Mobile. .NET MAUI cross-platform mobile app released — iOS, Android, Windows from one codebase.
Architecture & Engineering Highlights
- AI orchestration across three Claude models. Routes between Claude Haiku (fast classification), Sonnet (report interpretation, conversational), and Opus (deep longitudinal comparison) per task — balancing cost, latency, and reasoning depth on every request.
- ML.NET-powered projections. AI-powered financial forecasting producing revenue, debt, cash flow, and sentiment predictions with confidence intervals — alongside the deterministic Buy / Sell / Hold ratings that anchor every report.
- Wave 3: Claude file analysis pipeline.
Users right-click any file (PDF, DOCX, XLSX, PNG, JSON, etc.), see a real-time cost estimate,
approve the spend, and the
Gmi.ClaudeAnalysis.Consolebackground service processes the job — batched 5 at a time, 3 concurrent API calls, 3 retries, with results saved as DOCX and HTML alongside the original file. - Wave 4: Report Comparison.
Users select two ML report runs from the same symbol group;
Gmi.ReportComparison.Consoleproduces a structured 11-section narrative DOCX explaining what changed and why. - Token-aware billing. Every Claude call is metered server-side with cost estimation shown to the user before they commit. Stripe webhooks reconcile payment state with the usage ledger; idempotency keys prevent double-charging on retries.
- Infrastructure as Code with Pulumi.
Two complete environments (
Gmi.Pulumi.Infrastructure.Devand.Prod) defined in C#, deploying 50+ Azure resources reproducibly. - Multi-threaded report engine. Concurrent report generation with backpressure, request staggering, and aggressive caching to absorb upstream FMP rate limits without dropping user requests.
- Scale-tested 200–500 virtual users.
Custom
Gmi.ScaleTest.Console+Gmi.ScaleTestRunner.Consoleload harness shaped to match expected end-of-quarter spikes; bottlenecks resolved before any customer could touch them. - 695 unit and integration tests. Dedicated test projects for the report engine and data access layer, with comprehensive coverage of the financial math and integration boundaries.
By the Numbers
Tech Stack
Frontend
Backend
AI
Cloud & Ops
Data
Auth & Payments
AI Dev Tooling
See it live
The full platform is running on Azure. Click through, run a few symbols, and ask Claude about a balance sheet.