Part 1 of 3 in the “Building with Claude Code” series
I spent a weekend learning Claude Code from scratch, not just the commands, but how to think alongside it. By the end, I had a fully working web app, a clean Git history, and a fundamentally different view of how I’ll write software going forward.
What Claude Code Does
If you’ve been using Claude through the web UI, the CLI version feels different in a way that’s hard to describe until you’ve tried it. Instead of copying code between a browser and your editor, Claude Code runs in your terminal and has direct access to your project files. It reads your codebase, writes code, runs commands, handles Git, all through natural language.
The key difference: Claude Code doesn’t just talk about your code. It works on it.
Think of it as the difference between asking a colleague for advice over Slack versus having them sit down at your machine and pair-program with you.
What We’re Building
Throughout this series, we’ll build a Bookmarks Manager, a web app for saving, tagging, searching, and organizing links. The stack:
- Kotlin + Spring Boot 3 (backend)
- Thymeleaf + vanilla JS (frontend)
- H2 in-memory database
- Gradle with Kotlin DSL
- Git + GitHub for version control
Setting Up Claude Code
Install the CLI
On macOS or Linux, one command gets you there:
curl -fsSL https://claude.ai/install.sh | bash
Verify it worked:
claude --version
You’ll need a Claude Pro ($20/month) or Max subscription. The first time you run claude, it opens your browser for a one-time login.
Install the IntelliJ Plugin
Optional but worth it. The plugin gives you visual diffs, automatic context sharing, and keyboard shortcuts.
- Open IntelliJ IDEA → Settings → Plugins → Marketplace
- Search for “Claude Code” by Anthropic PBC
- Click Install, then restart IntelliJ
Heads up: You’ll need IntelliJ 2024.x or newer. I was running 2021.3 and had to update first. The plugin simply won’t install on older versions. Took me a bit to figure that out.
Set Up Git and GitHub
Install the GitHub CLI. It makes repo creation and PR workflows much smoother:
brew install gh
gh auth login
Phase 0: Project Init
Create the project folder and initialize everything:
mkdir ~/bookmarks-app
cd ~/bookmarks-app
git init
gh repo create bookmarks-app --public --source=. --remote=origin
Now launch Claude Code:
claude
Your First Real Prompt
Here’s where the prompting principle matters. Compare these two approaches:
Vague prompt (don’t do this):
Make me a Spring Boot project
Specific prompt (do this):
Create a Kotlin + Spring Boot 3 project for a bookmarks manager web app.
Use Gradle with Kotlin DSL. Include these dependencies:
- Spring Web
- Spring Data JPA
- H2 Database
- Thymeleaf (for server-side HTML)
Set up the standard project structure:
- src/main/kotlin/com/bookmarks/ (with Application.kt)
- src/main/resources/templates/ (for HTML)
- src/main/resources/static/ (for CSS/JS)
- src/main/resources/application.yml
Configure H2 as an in-memory database with the web console enabled.
The app should run on port 8080.
Also create a .gitignore for Kotlin, Gradle, IntelliJ IDEA, and macOS.
The specific prompt takes 30 seconds longer to write. It saves you 10 minutes of back-and-forth corrections. Every time.
Introducing CLAUDE.md: Your Project’s Memory
CLAUDE.md lives at the root of your project. Claude reads it at the start of every session. It’s how you give Claude persistent knowledge about your project: your tech stack, your conventions, your Git workflow. No more repeating yourself every session.
Include your Git conventions in CLAUDE.md. Claude follows the rules you set here consistently. Think of it as configuring a very capable new team member on their first day.
Your First AI-Powered Commit
Tell Claude:
Stage all files, create an initial commit with the message
"chore: scaffold Kotlin + Spring Boot project with Gradle",
and push to origin main.
Claude runs git add ., git commit, and git push, all from within the session. Verify with:
! git log --oneline
What We’ve Covered
- Installing Claude Code: one command on Mac/Linux
- IntelliJ integration: plugin install, shortcuts, and the version requirement
- The specific prompting principle: 30 extra seconds of detail saves 10 minutes
- CLAUDE.md: your project’s persistent memory
- Git from the CLI: Claude handles add, commit, push, and PR creation
Coming Up Next
In Part 2, we’ll build the app: Plan Mode for multi-file features, the feature-branch workflow with pull requests, debugging with Claude, and building both the backend API and frontend UI.
In Part 3, we’ll cover power-user tricks: context management, piping Git diffs into Claude for review, auto-generated commit messages, and building a reusable prompt library.
All code from this series is available on GitHub.