analuisa
Fecho logo

Designing without a canvas

Fecho puts a small business's invoices, bank statements and Social Security notices in one place, ready for the accountant. Soon to be in production with pilot users, so this case study is about how the work is made and how we approach the design process.

Fecho's landing page, with the transactions screen it is built from
9:41

Current team

Northwind Studio

Switch

Inbox

9 receipts to match

Most recent

PDF energy-invoice-aug.pdfto match 48.20 €
IMG office-supplies.jpgto match 12.90 €
PDF hardware-store.pdfto match 89.40 €
IMG fuel-station.jpgto match 52.10 €
PDF courier-july.pdfto match 6.80 €
PDF print-shop.pdfto match 93.90 €
Scan receipt

Opens the document camera

Not a folder, a reconciliation

Fecho is not merely a product to add files to. A statement becomes movements, and users can upload a receipt using their phone camera or via email and match it to the transaction it belongs to. The original idea started with two core personas:

Owner

Captures the evidence, imports the records

  • Photographs or forwards receipts as they arrive
  • Imports bank statements and resolves the matches

Manages the workspace and its integrations

Accountant

Reviews the records against the evidence

  • Discusses corrections in comments, on the transaction
  • Downloads the source bank statement by month

Eventually exports accounting-ready data

First things first: the UX audit

Before establishing a specific process for the design field, the main goal was to run a UX audit with low bias, to understand product requirements, user flows and friction points that needed fixing. A couple of issues stood out:

Wrong control class

Tabs are for navigation, but here they were filtering time - so a filter looked like a place to go.

It grew every month

One tab per month meant the control kept growing with every statement imported.

Lineage invisible

Nothing told users the rows came from a statement someone uploaded.

Extends in place

Month presets needed room to grow into a date range without breaking the layout.

Before - one tab per month
MayJuneJulyAugustSeptember

The control sits above the table, styled like navigation, one tab per statement imported.

After - a filter in the toolbar
All transactions ▾

The range joins the other controls in the toolbar, and a line above the list names where the rows came from.

The range became a filter in the toolbar, and the flow followed through: the movements at the first level, and the statements behind them. The change was made by trial and error, via prompting against the running product, rather than fully designed in Figma first.

The first dark iteration beside the current transactions screen with the range filter open
Before After

The product, mapped

Behind login sits one workspace. Three ways in - a scan, a forwarded email, a dropped statement - and every route converges on the transaction detail, where the receipt is attached, the note is left and corrections are discussed. What leaves is the source statement, downloadable by month.

Ways inThe workspaceEvery route ends hereWhat leaves
AUTH LoginAuth0, with invite tokens
SCAN iOS scanthe document camera
MAIL Email forwardone secret address per team
PDF Statement PDFdropped into the browser
Receipt inboxreceipts waiting to be matched
Transactionsmovements from imported statements
Segurança Socialnotices, in the same place
Teammembers · invites
Settingsbank connections · inbound address · name
Taskscoming soon
Transaction detail
  • the receipt, attached
  • the note, left where it belongs
  • corrections, discussed in comments
Month downloadthe source statement, for the accountant

From the bank to the receipt

A statement arrives as a dropped PDF, and behind the movements sits the second level the audit asked for. Forward, every movement has one destination: the receipt is attached there, and the note is left there.

The statements page behind the import dialog and the transaction drawer

From camera to inbox

Receipts are photographed where they are handed over, not at a desk. The iOS companion makes the PDF on the device and sends it to the same inbox the web app reads.

9:41

Current team

Northwind Studio

Switch

Inbox

9 receipts to match

Most recent

PDF energy-invoice-aug.pdfto match 48.20 €
IMG office-supplies.jpgto match 12.90 €
PDF hardware-store.pdfto match 89.40 €
IMG fuel-station.jpgto match 52.10 €
PDF courier-july.pdfto match 6.80 €
PDF print-shop.pdfto match 93.90 €
Scan receipt

Opens the document camera

9:41

BRIDGE STREET PRINT

84 Bridge Street · Porto

500 A5 flyers42.00

2 reams A4 paper8.90

1 black toner38.50

1 binding4.50

TOTAL93.90

VAT 23% included · 2026-08-25

Creating the PDF…

9:41

Current team

Northwind Studio

Switch

Inbox

9 receipts to match

BRIDGE STREET PRINT

84 Bridge Street · Porto

500 A5 flyers42.00

2 reams A4 paper8.90

1 black toner38.50

1 binding4.50

TOTAL93.90

VAT 23% included · 2026-08-25

Bridge Street Print

25/08 · receipt scanned93.90 €
Match to a movement

Most recent

PDF energy-invoice-aug.pdfto match 48.20 €

AI-native workflow

By taking a look at the project and business needs, it was easy to tell traditional Figma design screens would delay us and create unnecessary constraints to the workflow engineering had. So it was time to test an AI-native workflow, where screens are assembled directly from the design system in the branch and reviewed running. A proof of concept in hours rather than days.

Concepts

Still explored on the canvas.

Figma
01

Design system

Storybook holds the foundations, components and patterns every screen is built from.

Storybook
02

Prompt

A screen described against the design system, not drawn beside it, then assembled by the agent.

Claude Code
03

Branch and PR

The change travels as ordinary product history: a design branch and a pull request to review.

GitHub
04

Staging

Reviewed running in the real components, judged next to its neighbours, not in isolation.

Staging
what staging teaches goes back into the design system

Storybook renders what ships

The design system is a package both the web app and the marketing site import, and Storybook renders those same components - so it is where the system is seen and approved, not a gallery beside the product. Three layers, and a fix belongs at the lowest one that can carry it: a token before a component, a component before a screen. Screens themselves are the final stage, and they live in the product - assembled from these layers in the branch, not drawn in the design system.

01

Foundations

The decisions every other layer reads: colour, type, spacing, radius. A value is defined here once, or it does not exist.

Colour roles as they stand in the product today
02

Components

The things you place. One element with all of its states - it knows how it looks and behaves, and nothing about where it is used.

Button states: default, hover, active, focus, disabled, loading
03

Patterns

Recurring arrangements of components, like the table toolbar. The arrangement is what is designed.

The table toolbar: components arranged into a recurring pattern

The brief the agent reads first

The rules are built into the GitHub repo through a skill called design-assistant. What started as a set of guidelines evolved into the foundations of our design methodology. It is one of eight charters in the repository, one per job on a company of two, and changing how a job gets done is a pull request.

skills/

design-assistant/SKILL.md
  • Three layers
  • Storybook is the only vocabulary
  • Storybook is the source of truth, not a mockup
  • Foundations are approved by being seen
  • Be honest about what is undecided
  • Change the foundation, not the instance
standup/SKILL.md
ops/SKILL.md
cfo/SKILL.md
legal/SKILL.md
marketing/SKILL.md

Where it stands

Fecho is soon to be in production. The pilot will be with business owners, and what they report is what allows a team of two - design and engineering - to keep iterating around product and business requirements. User stories are also described and centralised in the repo so everyone can access them. We run the QA.

Fecho's document inbox, the range filter and the invite banner