ArchLens started from an open-source project: [system-design-simulator](https://github.com/vijaygupta18/system-design-simulator) by Vijay Gupta (MIT licensed). It already had a great drag-and-drop canvas built with Next.js and React Flow, traffic simulation, and a rule-based scoring engine. What it didn't have was a backend. Everything lived in the browser.
I wanted to turn it into something people could sign up for and come back to, so I built the backend myself.
What I added
- **A Spring Boot 3 + PostgreSQL backend** with Flyway migrations: about 82 classes and 56 tests.
- **Auth and rate limiting**: JWT-based login, plus rate limiting so the API can't be hammered.
- **Credits and a paywall**: users spend credits on AI reviews, with promo codes and user tracking.
- **Saved designs**: architectures are stored server-side instead of in local storage.
- **AI architecture reviews**: Claude and Gemini read the user's design and write feedback the way a senior engineer would, grounded in what the rule engine has already proved about the graph.
Structured output, and an annoying SDK detail
I wanted the AI review to come back as structured JSON, not free text, so the frontend could render it reliably. Both providers support this, but one detail took a while: in the Anthropic Java SDK, setting the output format and setting the effort level both replace the whole output config instead of merging. Chaining them in either order silently drops one setting. I worked around it by deriving the schema once at startup and building a single config per request that carries both.
The bug a test caught
The most useful thing I wrote was a test that simply constructs the AI evaluator. Every earlier test used a fake provider, so none of them touched the real SDK. The new test failed immediately: the SDK refuses to start with the Jackson version that Spring Boot 3.4.0 ships with. In production, the app would have crashed on startup the first time anyone set an API key. Pinning the Jackson version fixed it.
What I learned
Building on someone else's codebase taught me to read before I write. Most of my time went into understanding the existing scoring engine so the backend and the AI reviews would agree with it, not fight it.
Try it at [archlens.ajinkyadhotre.com](https://archlens.ajinkyadhotre.com).