Hey dev.to community! 👋
I'm Volodymyr, a Java Engineer with over 12 years of experience in coding and building distributed backend systems.
For the past 3+ years, alongside my full-time job, I've been building a side project called KulmanLab. It is a completely free, browser-based, offline-first 2D CAD editor for technical drawings built with Angular, TypeScript, and HTML5 Canvas.
A few months ago, I rolled out the core foundation. Today, I want to share an honest, transparent breakdown of what happened next: the architectural decisions, performance challenges, AI workflows, failed marketing experiments, and real user metrics.
If you are a developer looking to push a complex side project into production, building a micro-SaaS, or working with heavy client-side Canvas rendering, this is for you.
🏗 The Architecture: Why a Backend Developer Built a Serverless Web App
Here is the irony: Despite 12+ years specializing in Java, Spring, microservices, and databases, I deliberately chose a 100% Client-Side Only / Serverless architecture for KulmanLab.
I know firsthand how much maintenance, infrastructure, and operational effort backend services require. For a side project, I wanted zero server overhead.
Core Architecture Principles:
- No Server Calculations: All geometry calculations, 2D vector pathing, state management, and rendering happen strictly in the browser.
- Offline-First Storage: User project files and drawing history persist locally via IndexedDB.
- Zero Onboarding Friction: No registration, no email verification, no trial paywalls. Users open the app and instantly start drawing.
-
Interoperability: Native import/export for CAD standards, including
.dxfformat support.
🛠 Features & Engineering Milestones
In the last four months alone, the project evolved from a basic line renderer to a capable technical drawing tool:
-
Rich Text Engine (
MTEXT/TEXT): Handled parsing and rendering formatted CAD typography natively onto the HTML5 Canvas. -
Vector Hatching Patterns (
HATCH): Generates and fills complex closed boundaries with repeating vector patterns. - Dynamic Dimension Lines: Auto-calculates linear, angular, and radial dimensions with real-time vector alignment.
- Layouts & Paper Space: Printing setup, view scaling, and readying blueprints for export.
- AI-Assisted Iteration: Using tools like Claude Code accelerated feature shipping by up to 10x, though much of the day-to-day still comes down to deep code inspection, edge-case fixes, and Canvas performance optimization.
📊 Real Growth Metrics (No Fluff)
Initial user traction started in early May, but organic growth accelerated significantly through the summer:
- Monthly Active Users (MAU): ~7,000 unique users / 30 days
- Peak Daily Active Users (DAU): 520 DAU
- Average Session Duration: 13–15 minutes (A critical engagement metric showing users actually complete technical drawings rather than bouncing).
- Traffic Quality: 100% organic without paid ads.
Key Traffic Insights:
-
Organic Search (SEO): Moving the web application from the main domain root to
app.kulmanlab.comand building a dedicated static landing page onkulmanlab.comprovided the single biggest SEO boost. - Global Distribution: Broad global usage with steady engagement across Europe, North America, and Asia.
- OS & Browsers: Heavily dominated by desktop Chrome and Edge users, fitting the B2B/engineering user persona.
📣 Marketing Experiments: What Worked vs. What Failed
As a solo engineer without a marketing budget, getting the word out was pure experimentation.
❌ What Didn't Work
- Engineering & CNC Forums: Low reach, high risk of instant bans for self-promotion.
- Cold Pitching Reviewers/Bloggers: Near 0% response rate.
- Product Hunt: "Unfeatured" launch yielded virtually zero traffic or SEO indexation benefit.
- Student Discord Servers & Social Media (X/Facebook): High time investment with minimal conversion for a specialized B2B tool.
✅ What Actually Worked
-
SEO Optimization & Landing Page Separation: Separating the landing marketing site from the functional app (
app.kulmanlab.com) drastically improved Google indexing for CAD queries. - Building in Public & Developer Communities: Sharing genuine technical challenges, changelogs, and honest post-mortems on developer platforms created authentic organic word-of-mouth.
💡 Key Takeaways for Developers
- Embrace Constraints: Eliminating the backend forced me to solve complex state and rendering logic on the client side, keeping infrastructure costs at $0 while delivering instant speed to users.
- Focus on Time-to-Value: Removing logins, sign-ups, and paywalls created frictionless trial loops.
-
Listen to Local Storage: Using
IndexedDBenabled an offline-first experience that users in low-connectivity environments deeply appreciate.
Try it out & feedback welcome!
You can test the app directly in your browser without creating an account:
🌐 Web App: kulmanlab.com
I'd love to hear your thoughts on building complex Canvas-based applications in Angular! How do you handle heavy client-side state and rendering performance in your own projects? Let's discuss in the comments below! 👇

Top comments (0)