Home

Work

We cannot name clients — the contracts do not allow it. So instead of logos, here are the problems themselves: what people came with and what we built. The most interesting ones are taken apart in the blog, down to the code.

Enquiries and sales

Messengers

Enquiries land in five chats and never reach the CRM

Bots on Telegram, Instagram Direct and WhatsApp create the contact and the deal themselves and assign an owner. The phone number typed in the chat ends up on the card. A message that arrives overnight is in a manager’s queue by morning — no enquiry depends on someone re-reading every chat.

Telegram · Instagram Direct · WhatsApp → CRM
Calendar

The booking is in the calendar, the CRM is empty

Calendar bookings become deals on their own: a client books — a deal appears in the right pipeline; they reschedule — it updates; they cancel — the deal knows. Rebookings by the same person do not spawn duplicates.

calendar → CRM · no duplicates
Website

A website enquiry never becomes a task

A form on the site becomes a task in the tracker straight away, with the contact details and the client’s own message already in the fields. If someone corrects a detail or the enquiry changes status, we update that same task instead of opening a second one. Managers stay in the tracker and retype nothing.

forms → task tracker · one task per enquiry

Bots

Custom build

You need a bot, and the builders can’t handle your flow

We write the bot to your spec instead of assembling it from ready-made blocks: a catalogue that updates itself from channel posts, plain-text search, filters that show how many options are left at every step, a cart, and an order that lands with a manager or in the CRM. The logic lives in code with a change history, so the next tweak is not a rebuild.

Telegram · own backend · logic as code
Protection

The course link got forwarded to someone who never paid

Before serving content, the bot checks the user against payment status in the database. Not paid — no entry, even with a forwarded link. Paid content stops circulating for free.

payment check · gated bot content
AI

Support answers the same questions every day

A bot replies from your knowledge base around the clock and hands anything unusual to a manager with the whole conversation attached. Every dialogue exports in a usable format — for quality control, team training or analysis.

knowledge base · the unusual goes to a person · chat export

Marketing and analytics

Ads

Ads are running, but nobody knows which ones bring money

Payments from the CRM arrive in the ad platforms through the Conversions API. Ads learn from money rather than clicks, and every payment shows its channel. We have wired several ad accounts to one source of truth.

Meta Conversions API · GA4 · Google Ads
Attribution

Leads from ads reach the CRM without their tags

A lead-form enquiry passes through the bot and lands in the CRM together with its ad tags — campaign, ad, click id. Those tags then travel with the deal all the way to payment, so attribution adds up instead of breaking at step one.

lead forms → bot → CRM · click ids and campaigns
Dashboards

Data everywhere, the full picture nowhere

We pull ads, CRM and payments into one database and build a dashboard for your process: fresh numbers every morning, period comparisons, and access for people who need to see it without access to the raw data. We started such projects on Google Sheets — and wrote up honestly where Sheets stops being enough.

Read the write-up →own backend · Postgres · dashboards

Data hygiene

Duplicates

The same customer is in the database three times

We find and merge duplicate contacts and deals: comments, tasks, files and amounts move into one card, and the history survives. A duplicate with a payment is never deleted until the payment is moved. Works in any system with an API.

Read the write-up →contact and deal deduplication · CRM
Recovery

A bulk operation wiped half the database

We bring mass-deleted data back — from logs, backups and exports, with record counts verified before and after. Then we close the door that let it happen: permissions on bulk actions, and a segment export before every one of them.

Read the write-up →data recovery · reconciliation
Reports

The report shows growth that isn’t there

Subscriber growth is counted by the date a contact joined a list — so a person moved between lists is counted again. Customers in a report are grouped by name and phone — so one person becomes three. We recount by the contact’s first appearance in the account and by email as the key: the numbers change several times over, but they finally match reality.

Read the write-up: subscriber growth → · customer identifier →database analytics · SQL · method check

Education and access

LMS

Paid for the course — now waiting for access

After payment, course and bot access opens by itself; after a refund it closes. We track the state of the subscription, not a one-off event: renewed — everything keeps working; lapsed — access closes without a support thread.

LMS · payment webhooks · status-driven access
Documents

Certificates and invoices the system “can’t do” itself

We generate personal documents on an event — a payment, a completed course, a status change — and deliver them to the customer by email or messenger. Names, dates and numbers come from the database; the template is yours.

PDF generation · event triggers
Widgets

The platform can’t do the one thing you actually need

We embed custom widgets right into the site or the learning platform: support, homework, progress, intake forms. To the user it is a native part of the product, not a third-party service in a new tab.

custom widgets · site and LMS

Processes and email

Processes

Half the day goes to moving data between services

We wire CRM, mailing, task trackers, email and calendars into one process: an event in one system triggers the actions in the rest. The scenarios live as code in a repository, so a fix is made once and never lost.

Read the write-up →n8n · webhooks · any API
Email

Important things arrive by email and stay there

Triggers on incoming mail: attachments are filed where they belong, audio is transcribed to text, and the data from the letter lands in the CRM or a task. The inbox stops being the place where enquiries get lost.

mail triggers · attachments and audio
CRM

The CRM lacks the small things you need daily

We add the actions the box does not have: a deal moves between pipelines on a comment, an email goes out on a status, fields fill themselves on an event. The CRM starts working the way your process works, not the other way round.

custom actions · triggers · automatic emails

Custom systems and maintenance

Portals

The customer asks the bot for a balance that lives in a spreadsheet

A customer portal on a shared database: the site, the bot and support see the same purchases, balance and promo codes. A refund or a credit is one click in the admin panel, not a thread between three people.

web portal · shared database · bot
Migrations

Moving to a new platform means risking the data

We move databases, chats and automations completely — off an old CRM, out of spreadsheets, from Make to n8n — with record counts verified before and after. Old and new run side by side until nothing is missing.

migrations · data reconciliation · no downtime
Maintenance

You learn an automation broke from your customers

Every failed run lands in Telegram right away — with what exactly failed and on which record, not “something is off”. Scenarios are backed up to a repository, so any version can be restored in a minute. Tokens stay out of the nodes, so they never leak into backups.

Telegram alerts · scenario backups · no keys in nodes
If any of this sounds familiar

Describe your situation

Tell us which process eats the most time. We will write back with what can be automated and roughly what it would cost.

Discuss a project