Building a Full-Stack SaaS Solo: Maintaining 5 Codebases as a One-Person Team
588 Java files, 296 Vue components, 91 TypeScript modules, 82 Go files, and 5 programming languages -- behind Flash Warehouse WMS is a solo developer who serves as PM, designer, and DevOps engineer all at once. Here is what that actually looks like.
Five Codebases, One Developer
Flash Warehouse WMS currently consists of five separate codebases:
- wms/ -- Spring Boot backend, 9 Maven modules, 588 Java files, roughly 52,000 lines of code
- flash_warehouse_pc/ -- Vue 3 PC management client, 40 Vue components, roughly 52,000 lines
- flash_warehouse_mobile-main/ -- uni-app mobile client, 256 Vue components, roughly 79,000 lines
- flash_warehouse_website/ -- Next.js 15 marketing site, 91 TypeScript files, roughly 14,000 lines
- flash_warehouse_cli/ -- Go CLI tool + MCP Server, 82 Go files, roughly 11,000 lines
Five projects. Five primary technology stacks (Java, JavaScript, TypeScript, Go, Python). All maintained by one person. This post is not a success story -- it is an honest account of the technical decisions, the mistakes, and the lessons that come with building a SaaS product alone.
Why This Particular Tech Stack
Every technology choice here has a concrete reason behind it, not a trend-driven one.
Spring Boot 2.7 + JDK 1.8 for the backend. The Java ecosystem has the most mature enterprise libraries. MyBatis Plus handles complex multi-tenant queries efficiently, and JDK 1.8 ensures the widest server compatibility. The goods table in Flash Warehouse has 154 fields. The bill_of_document system covers 16 distinct bill types. That level of domain complexity benefits from a strongly-typed language.
Vue 3 + TDesign for the PC client. TDesign's table and form components are a natural fit for WMS interfaces. The core interaction pattern in any warehouse management system is editing large tables and filling out forms -- TDesign handles this well out of the box.
uni-app for mobile. One codebase targets H5, Android, and WeChat Mini Programs simultaneously. Warehouse staff need to scan barcodes, run stocktakes, and check inventory on their phones. Cross-platform output from a single source is the practical choice here.
Next.js 15 + Cloudflare Pages for the website. A marketing site needs SEO and fast global access. Cloudflare's edge network combined with D1 database provides a zero-ops hosting setup. Twelve database migration files manage blog posts, contact forms, APK download metadata, and more.
Go for the CLI tool. Go compiles to a single binary that requires no runtime installation on the user's machine. The fwh tool exposes 23 CLI commands and 110 MCP tools (45 read-only + 65 write), built on a login-first, tenant-locked safety model.
What Multi-Role Solo Development Actually Looks Like
Being a solo developer is not just writing code. On this project, one person handles:
Product management. Deciding what to build and what to skip. WMS is a domain where requirements are nearly infinite -- purchasing, sales, inventory, finance, staff management, supplier management, BI dashboards, stocktaking, POS retail, RBAC permissions. Each of the 16 bill types has its own create, audit, reject, and conversion workflows. Prioritization is the hardest part.
Design. There are no design mockups. The PC client relies on TDesign's defaults, the mobile app on uView's component library, and the website is hand-built with Tailwind CSS. The interfaces are functional, not polished.
DevOps. The backend runs on an Alibaba Cloud ECS instance. A deploy.sh script automates the build-upload-restart-healthcheck-test pipeline with automatic rollback on failure. The website deploys to Cloudflare Pages with npm run pages:deploy. Twenty-nine integration test files containing 103 test cases verify core functionality after every deployment.
Security engineering. The system implements RSA 2048-bit + AES-GCM hybrid encryption, toggled via the X-Encryption-Enabled: true request header. The filter chain processes requests in order: CachedBodyFilter, then RSADecryptionFilter, then LogInterceptor.
The Real Pain of Cross-Codebase Maintenance
The hardest part of maintaining five codebases is not writing code. It is context switching.
In the morning you are writing @RequestMapping annotations in Java. In the afternoon you switch to Vue 3's Composition API. In the evening you might be debugging cobra command-line argument parsing in Go. Each language has its own package manager (Maven, npm, go modules), its own build pipeline, its own deployment process.
Internationalization is a multiplier. Flash Warehouse supports Chinese, English, and Russian. The PC and mobile clients use $t('key') syntax with locales/{zh-CN,en-US,ru-RU}/ directory structures. The website uses next-intl's useTranslations('Namespace') pattern. Every new feature means triple the translation work.
Multi-tenancy runs through the entire system. Every database table has a binding_user_id column. Every backend query must include tenant filtering. The constraint is simple but must never be missed -- a single omission is a data leak.
Lessons Learned
First, use existing component libraries. TDesign, uView, and Tailwind CSS saved enormous amounts of UI development time. A solo developer's time is the scarcest resource.
Second, automated tests are not optional. 103 integration test cases may not sound like many, but they cover every core API endpoint. Without them, every backend change would be a gamble. The deploy.sh script runs tests automatically after deployment and rolls back on failure -- this mechanism has prevented real incidents multiple times.
Third, CLI tools and MCP Servers are force multipliers for solo developers. The 110 MCP tools in fwh let AI editors like Claude Code and Cursor operate directly on warehouse data. Repetitive data operations that would require navigating through the PC management interface can be done with natural language instead.
Fourth, documentation is memory. Each sub-project has its own CLAUDE.md or README.md documenting build commands, architecture decisions, and development conventions. After three days away from a codebase, these documents are the fastest way to restore context.
Fifth, perfect is the enemy of shipped. Flash Warehouse's UI is not beautiful. There is code that could be refactored. Some features are not implemented optimally. But the system is running, users are using it, and problems are getting fixed one by one.
Is This Path Right for You
Building a complete SaaS product solo is not an easy path. It requires working familiarity with backend, frontend, mobile, DevOps, and basic product design. The cognitive overhead of context switching is real. Time is always insufficient. Prioritization trade-offs happen daily.
But there are unique advantages: zero communication overhead, the shortest possible path from decision to execution, and a depth of system understanding that is difficult to achieve in team development.
Flash Warehouse WMS is free and actively maintained. If you are a solo developer or considering this path, visit flashwarehouse.cn to learn more, or try the fwh CLI tool to experience the MCP Server integration firsthand.