Jonas ForshellSenior Product Owner
jonas@jforshell.seEmail me
Never usedCase · Own build

Vard CRM, a small CRM for one freelance photographer

A small CRM for one freelance photographer's workflow, built with Claude and Codex. It was finished but never used.

Context
Solo freelancer CRM
Role
Product Owner
Date
April 2026

The short version

Result
He got a job before he started using it, so it was finished and never used. It was also my first build with a frontend, a backend and a database.
What I did
Built a small CRM for a freelance photographer friend, with a status pipeline, linked clients and a start page of next actions.
The call
I built it around how he works and left out everything an agency would need.

Problem

A freelance photographer friend ran his client work in Trello and was tired of forcing a project workflow into a generic board. He wanted something calmer than a sales CRM for keeping track of clients, projects, status and the next action on each, and none of the features an agency would want.

The name comes from the Nordic varde, a stone cairn that marks the way for whoever comes next. That felt right for a small CRM whose job is to make the next step obvious.

Vard CRM start page showing upcoming sessions, work in progress, and awaiting payment
The start page is built around the next action on each project.

Approach

I built it for one real user instead of an imagined market of freelancers. Claude and Codex wrote the code, and I directed, decided and tested. It was my first build with a frontend, a backend and a database. Before it I'd only made prototypes.

Status drives the whole app. A project moves through a pipeline with its client attached, and the start page shows what needs attention next. I kept the scope narrow, so there are no multi user agency workflows, no forecasting, no sales team reporting and no heavy permission model in the main product.

Vard CRM workflow board with projects grouped by pipeline status
The workflow board keeps the pipeline visible.

What I built

It has a status pipeline from lead to paid, with project and client records that keep their linked history. The start page shows next actions and recent activity, and keyboard shortcuts cover editing, saving and cancelling. Export and an audit log are in the main app, and a separate admin backoffice handles user lifecycle, feature flags, maintenance banners, session controls and security events.

Vard CRM project detail panel with status, client, session date, checklist, and save controls
Project details open in a panel, with explicit save and cancel.
Vard CRM project list with project names, dates, statuses, and quick actions
The list view keeps the same records available for sorting, scanning and quick edits.
Vard CRM mobile start page showing next actions and bottom navigation
I checked the core flow on a phone too, so it works as a quick reference as well as a desktop board.
Vard CRM preferences screen showing appearance, language, startup page, and checklist defaults
Settings stayed small, covering language, start page, theme and checklist defaults.

Security learning

I'm not a developer, so I treated security as something to go and check instead of assuming it. I used AI to map the likely risks, ran Snyk and Aikido over the repository, reviewed the Supabase row level security policies, kept privileged admin actions on the server, added audit logging and moved the admin concerns out of the main product.

None of that replaces a proper security review. It did change the questions I ask, and it showed me how far a working product is from one that's ready for other people.

Vard CRM audit log showing recent append-only events
The audit log records recent changes as append-only events.

What I learned

Building it gave me more respect for the judgement developers bring to architecture, testing, maintainability and security. Having one real user also forced choices about what mattered, what could wait and what would make the product safer to run.

Building with AI has its own kind of fatigue too. You write a spec, hand it over and something works a few minutes later. That momentum makes it easy to keep going long after you should have stopped, until it's 04:00 and five more ideas have gone into the backlog.