Process

01

Why This Exists

Struqo is a personal project that sits at the intersection of my two backgrounds: architecture and digital product design. Wood frame construction is growing in Europe, but the planning tools available to small builders and self-builders are either oversimplified or require expensive CAD licenses. I wanted to build something useful for that gap.

More practically: this project is a testbed for building a real product with AI as the primary development partner. Every line of code was written with Claude Code. The question I set out to answer: how far can one person go with AI, domain knowledge, and a clear product vision?

02

What It Does

Struqo is a design tool for small timber structures: carports, sheds, terraces. You draw in a floor plan, place posts, beams, rafters, studs, cladding and roofing, choose a wood species, and the model exists once. Every other drawing derives from it: elevations, sections and detail sheets live in one project, listed in a drawings panel on the left. Dimensions are added automatically. A north setting on the project drives the compass directions of elevations and sections, and each sheet carries its own scale.

The wood species shows the same way in 2D, 3D and print. The bill of materials is generated from the drawing and lists cross sections, cut lengths and fasteners, with subtotals per cross section, exportable as PDF or CSV. The plan set prints as a multi-page PDF with a title block on every sheet: scale, sheet count, version tag, and a note that structural sizing stays with a qualified planner.

Floor plan

Struqo editor, floor plan Plan 1 of the example carport, zoomed in on a selected post: automatic dimensions of 120 mm and 718 mm, axis mark A, properties panel on the right with wood species larch and cross section KVH 120 by 120, status bar reading 86 parts
Floor plan, zoomed in on one post (German UI). Dimensions and axis marks are generated, the properties panel carries species, cross section and position. The drawings panel sits collapsed on the left. Open this drawing in Struqo.

3D perspective

Struqo editor, 3D perspective of the example carport: larch posts and braces in brown, olive-grey cladding and a mono-pitch roof, breadcrumb at the top reading Example: Carport, Perspective, 3D
Same model, 3D perspective. Switching between drawings is one click in the breadcrumb. The wood species sets the colour. Open this drawing in Struqo.

West elevation

Struqo editor, west elevation of the example carport with the drawings panel open, derived from the plan
West elevation, derived from the plan. Compass directions follow the project's north setting. Open this drawing in Struqo.

Bill of materials

Struqo bill of materials panel beside the 3D model: posts and rafters by cross section, fasteners, order quantities
Bill of materials, generated from the drawing: cross sections, cut lengths, fasteners. Open the model in Struqo, the list sits in the right panel.
03

Design Decisions

Struqo looks like a plan, on purpose. Line weights follow DIN EN ISO 128, the sheets go easy on toner, and every printout carries a title block. The bar is set by the tools a small builder would otherwise reach for, AutoCAD LT and SketchUp Free. Rayon is the closest peer, Shapr3D the level of polish I aim for. The visual attitude comes from Rams and Aicher: typography carries hierarchy, whitespace is a function. Inter for everything you read or operate, IBM Plex Mono for everything you read off, from dimensions to the scale bar.

The carport is the first template because it is the smallest structure that exercises the whole system: posts, beams, rafters, braces, roofing, foundations. The example project lists 86 parts in its plan and twelve drawings, and it opens without an account. A configurator would only vary the template. In Struqo the template is a starting point you can take apart: move a post, add a bay, change the roof.

Guest mode came before sign-up because the funnel broke inside the editor. New visitors landed on an empty canvas, and the login wall was the first thing they met. Today the example opens in the editor straight from the landing page, a draft is kept in the browser, and an account is offered the moment there is something worth saving.

Guest draft

Struqo editor in guest mode, project named Mein Carport with the label Draft in browser, drawings panel open on the left listing perspective, floor plan, side elevation and a section, 3D perspective of a carport with rafters and battens on the canvas
A guest draft from the carport template. The drawings panel lists perspective, plan, elevation and section of one project. No account yet, the header offers one.

Section A-A

Struqo editor, section A-A through the example carport looking south: two posts on foundations, mono-pitch roof with rafters and battens, dimension chain 800, 2120, 800 and a height of 2400, level mark plus minus 0.00, section plane panel on the right
Section A-A, cut at 2890 mm and looking south. Axis marks, dimension chain and the level mark come from the model. Open this drawing in Struqo.

Printed sheet

Printed A3 sheet from the Struqo plan set: ground plan of the example carport with title block
Printed sheet with title block. Scale, sheet count, version, and the note that sizing and load bearing should be checked by a qualified planner before construction.
04

Design System

The design system is public. struqo.app/styleguide renders tokens, building blocks and voice straight from the code. The token values on that page are read live from the CSS custom properties of the app, so they match the product. Tokens come in two tiers, primitives and semantic names, and components consume only the semantic tier. A lint hook rejects hardcoded colours outside the token file.

Building blocks follow Brad Frost's atomic hierarchy, from foundations and atoms to templates and pages. One catalog file in the code records each block's layer, status, code path and the Figma set that mirrors it. The styleguide navigation is built from that file and the Figma pages reference it. Direction of truth is one way: code changes first, Figma and the styleguide follow, and a script compares the Figma variables against the code in light and dark.

Three tools sit around the code. FigJam carries the strategy map, regenerated every week from a Markdown file and Linear. Figma holds the library, with variable collections for primitives, semantic colours in light and dark, and scale, and one page per layer. Claude Design works on a bundle of the real components, compiled CSS and fonts that a sync script builds from the repository, so explorations start from the shipped building blocks.

05

Technical Decisions

The stack is intentionally lean: Next.js for the application shell, Konva for the 2D canvas, Three.js for the 3D views, Zustand with Immer for state and Zundo for undo/redo, Tailwind for styling. Data lives in Supabase in Ireland, hosting runs on Vercel in Frankfurt, so traffic stays in the EU. The repository is a Turborepo monorepo on pnpm. Design tokens follow a 4px grid.

The construction engine is a separate package with its own test suite: material properties for seven European wood species, standard lumber dimensions, and the geometry that turns a model into plans, sections and the bill of materials. Across the monorepo, 3,870 Vitest tests run on every commit, plus Playwright end-to-end tests for the flows that matter. CI runs on GitLab with a self-hosted runner and quality gates (type checking, linting, tests, build) before every merge.

Every architectural decision prioritized simplicity. No ORM, no state management beyond Zustand, no CSS-in-JS. Biome for formatting and linting instead of the ESLint/Prettier combination. The fewer moving parts, the easier it is to reason about the system, for me and for the AI.

06

What I Learned

Building a canvas application with AI taught me where the collaboration works well and where it breaks down. Boilerplate, test scaffolding, state management wiring, CSS layout: AI handles these reliably. Complex spatial logic (canvas coordinate transforms, hit detection, snap-to-grid behavior): AI needs precise context and frequent correction.

The bigger lesson is about process. AI delivers reliably when the work around it is disciplined. Every change starts as a Linear story with a job to be done, a persona and acceptance criteria, and no code is written without an issue. A session owns one merge request, never two. A merge skill walks a fixed sequence of gates before anything reaches main: preflight, merge, verify, push, reconcile the issue, clean up, log. The skill calls existing checks instead of re-implementing them, and it measures where it could guess: test counts, build stamps, timestamps.

I measure the collaboration itself. One story was tracked at 25 interruptions and 10.9 hours of waiting, most of it caused by a shell command pattern that kept tripping the permission system. Fixing that one pattern removed most of the waiting. The portfolio value is the process: one person shaping a workflow in which AI ships product reliably, session after session.

07

Where It Stands

Live at struqo.app since April 2026. The landing page opens the example carport in the editor, guest mode works without an account, projects are saved once you sign in, and the plan set exports as a multi-page PDF. Struqo is run as a sole proprietorship.

Next: a paid plan via Stripe, for which the plan schema, webhooks and free-tier gates are already in place, and an AI assistant on a European provider. [OPEN SOURCE: Stephan klärt]

My Role

Everything. Product vision, UX design, architecture decisions, and development with Claude Code. This is a solo project built to explore what one person with domain expertise and AI tooling can ship.

Stack

FigJam · Claude Design · Figma · Next.js · Konva · Three.js · Zustand · Tailwind · Supabase · Vercel · Turborepo · Vitest · Playwright · GitLab CI · Claude Code

Try it

Struqo is live. Open the example carport in your browser, no account required, and move a post or switch to the 3D view.

Open the editor