← All Guides
Tools

The Non-Coder's Stack: Tools I Actually Use

Developers have strong opinions about their tech stacks. React vs Vue. TypeScript vs JavaScript. Vim vs everything else. I have no opinions about any of this because I don't write code.

Here's what I actually use to build and ship products, and why each tool earned its place.

The core tools

Claude Code (CLI)

Primary builder

This is where 90% of building happens. Claude Code runs in my terminal and can read, write, and edit files directly. I describe what I want, it builds it, I review and iterate.

The key feature: it has persistent context. I've built a library of custom skills (reusable prompts) that encode my workflow preferences, quality standards, and project conventions. When I start a session, it already knows how I work.

Cost: Max plan subscription. Worth it if you're building daily. The overnight autonomous work alone would justify it.

GitHub

Version control + deployment trigger

I use GitHub for two things: keeping a history of my work, and triggering deployments. When I push code to the repository, Render automatically deploys the updated site.

I don't use branches, pull requests, or code review. It's just me. A single main branch with descriptive commit messages is all I need.

Cost: Free tier.

Render

Hosting

Static site hosting with auto-deploy from GitHub. I push, it deploys, the site updates. No servers to manage, no build pipelines to configure.

I chose Render over Netlify and Vercel because it was the first one that worked when I tried it. That's genuinely the level of evaluation I did.

Cost: Free tier for static sites.

VS Code

File viewer (barely)

I open VS Code to look at files sometimes. I don't really edit in it. Claude Code does the editing. But it's useful for seeing the file tree and occasionally checking what something looks like.

Cost: Free.

Obsidian

Documentation + knowledge management

All my project documentation, research files, and session notes live in an Obsidian vault. It's a local markdown editor with graph view and backlinks. My entire project structure is also my documentation structure.

Cost: Free for local use.

The occasional tools

Streamlit

Python dashboards

For data-heavy projects where I need charts, filters, and interactivity with real data processing (not just display), Streamlit turns a Python script into a web app. My family finance dashboard uses it.

For simpler visualisations, I use Chart.js in plain HTML. The decision point: if it needs to process data on load, use Streamlit. If the data is pre-processed, use HTML.

Cost: Free (runs locally).

Gemini

UI design

I use Google's Gemini for visual design. It generates React component code from UI descriptions, which I then hand to Claude Code to adapt into my project. It's a cross-AI workflow: Gemini designs, Claude builds.

The Stackless website's neo-brutalist design came from a Gemini-generated React component that Claude then converted to my stack.

Cost: Free tier.

What I don't use

No frameworks (React is in one project, but I don't understand it). No package managers. No TypeScript. No Docker. No databases. No testing frameworks. No linters.

My projects are static HTML/CSS/JS files that you can open by double-clicking. Data lives in JavaScript files loaded via script tags, not fetched from APIs. Everything runs locally with zero dependencies.

This is deliberate. Every dependency is a thing that can break. Every build tool is a thing I don't understand. Every framework is a thing that will need updating. Plain HTML works in every browser, runs from the filesystem, and will still work in 10 years.

The anti-pattern that works

Developers would look at my setup and cringe. No tests. No type safety. Inline styles in some places. Global variables in data files. Script tags instead of module imports.

Here's why it works for me:

Cost breakdown

Monthly cost to run everything:

Total: one subscription and a domain name. Everything else is free.

When to add complexity

I'll add tools when a real problem forces me to, not before. If I need a database, I'll add one. If I need server-side processing, I'll use Streamlit or a serverless function. If I need real-time updates, I'll figure that out then.

But I won't add complexity because someone on the internet says I should. The stack that ships is better than the stack that's theoretically correct.