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.


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.
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.
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.
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.
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.
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.
What the application is made of
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.
What else we built

Walio: a loyalty system for businessesA card in the wallet, a terminal for staff and a portal with reporting.
Branuál: a brand manual as a website, not a PDFPages, blocks and an asset library with publishing. Our own product.
Layered: a website that sells the course and checks the guest inBooking with live capacity, payment and confirmation in one place.