Skip to content
Internal productApplicationCRMLive

WCRM: leads and tasks instead of spreadsheets

An internal CRM for the Walio sales team. It brings together leads from Scrapik and Google Maps, planning the next step and the sales person’s work on the computer and on the phone. It runs on real data and the team works in it every day.

Clientnkz.dev, internal
RoleInterface design and development
StatusLive
WCRM – team overview with overdue tasks, today’s plan and upcoming tasks
The brief

Leads in a spreadsheet and in someone’s head

We sell Walio to local venues. Scrapik collects the contacts, but a batch of companies solves nothing on its own: someone has to decide who to call, when, and what happened last time. We ran it in a spreadsheet and in Notion, and after a few hundred records that stopped working.

Ready-made CRMs handle this part, but none could take batches from Scrapik without overwriting work in progress. So we wrote our own.

What it does

Six parts of one application

Every screen reads and writes real data. After the first weeks in use we redesigned the interface around how the team actually works with it.

Team overview

Four tiles at the top: overdue, today’s plan, open deals and this week’s activity. Below them, tasks in three columns and, for management, a table of the sales team.

Companies and pipeline in one

Companies switch between Table and Pipeline. The default order is by the nearest next step, stages have their own colours, and a next step can be planned for selected companies spread across days.

Company detail

A stage bar, a company note, contacts with phone and e-mail, and history as a timeline: what’s ahead and what’s behind us. The Plan section works out the monthly price from the Walio price list.

Leads from Scrapik and Google Maps

A Scrapik batch arrives with one button, goes through the duplicate check, and its score becomes an A, B or C lead tag. New companies are filled in from Google Maps suggestions.

Mobile and My results

Below 900 pixels a mobile app renders with Today, Companies, Search and Me tabs. Sales people also see their own results for the week, month or year.

Roles and passkey sign-in

Sales, manager and admin see different screens. Anything a user has no right to is simply not in the interface. Sign-in works with a password or a passkey.

Why this way

Three interface decisions

The pipeline is not a menu item but a switch in Companies

The table and the kanban show the same companies, just ordered differently. Two menu items would make people think about where to click. The redesign shortened the menu and moved notifications under the bell in the header.

A logged activity moves the stage, not the sales person

A call or e-mail moves a company from New to Contacted, a meeting to Negotiation. A missed call doesn’t count. The database enforces it, so it holds on desktop, mobile and import, and every stage change is recorded in the history with its author.

Permissions aren’t locked, they just don’t render

No greyed-out button and no “missing permission” message. On someone else’s company a sales person sees a limited preview and one action: ask to take it over. Contacts on other people’s companies are hidden by the database itself.

How it went

Four stages

Working in spreadsheets

We kept leads in a spreadsheet and in Notion. Nobody could see who had called whom and what should happen next.

Interface design

First came a design handoff for desktop and mobile: screens, states, tokens for colours, radii and heights.

Database and real data

A Supabase schema with permissions enforced in the database. At launch we brought over 298 companies from Notion; since then the screens read only real data.

Live use and redesign

The first weeks of the team’s work produced a new overview, plans, the stage bar and a new look: the Geist typeface, larger text and more legible greys.

Business rules

What holds in the CRM even when you can’t see it

These rules are not interface details. If they stopped holding, the application would start losing work in progress.

Import doesn’t overwrite work

A new batch only updates factual data about the venue. Owner, status, notes, tasks and history stay.

Scrapik skips known companies

The CRM sends it only fingerprints of companies, no data. Scrapik uses them to drop known venues before paying for them in Google Places.

Logging an activity is not a plan

An activity goes into history, a step into the future. After logging, the next step is offered, and it can be skipped.

A win is confirmed with a plan

Moving to Won asks for the reason, the plan and the number of locations. Without them the win can’t be confirmed, so reports add up real monthly revenue.

Duplicates by person’s name too

The check looks at name, company ID, e-mail, phone, domain and the person’s name. When it reports a match, the sales person can still create the lead, because a match is not yet a duplicate.

Taking over is not assigning

A free lead the sales person takes right away. For a company a colleague already has, they must ask, and the request goes to the colleague and the manager.

Technology

The database guards permissions

Permissions, stage moves and their history are enforced by the database, not the interface. Colours, radii and heights are held by our own tokens.

Application and data
React 19TypeScriptVite 7React Router 7SupabasePostgreSQLRow Level SecurityEdge FunctionsGoogle Places APIPasskeysCustom CSS tokens
Scope

What the application is made of

3Roles with their own set of screens
2Interfaces: desktop and mobile
298Companies brought over from Notion at launch
6Business rules described above
Where it is now

The team works in the CRM every day

The application runs on real data. Sales people plan steps, log calls and meetings in it, and management sees where things stand. Notion still runs alongside for now, and a script takes over only the companies that changed since the last transfer.

Scrapik batches arrive with one button and new companies are filled in from Google Maps suggestions. We keep adjusting the look and features based on what shows up in daily work.

Working on something similar?

Tell us how you track sales today. We reply within two business days.

More projects

What else we built

All projects →