LIFE PAY: corporate website for a payments company with a lead funnel
Corporate website for a payments company: product pages, CMS, admin panel and a lead funnel integrated with amoCRM.

Vitaliy
Development
Roman
Development
Dmitry
Development
Andrey
Development
Marketing site for life-pay.ru, a CMS for the blog and marketplace, an admin panel and a lead hub with integrations. The project went through several redesign generations without stopping lead generation.
Industry: FinTech
Period: 2017–2019
Stack: Laravel 5.4, Vue 2, MySQL, Docker
Challenge
LIFE PAY sells online cash registers, acquiring and fiscal solutions. For a company like this the website is not a brochure — it is the main lead channel: a visitor arrives from ads, picks a product, leaves contacts, and the lead must reach sales without loss.
We had to close four jobs at once:
- ship a public site with product pages, blog, news and a marketplace;
- build a lead funnel from several sources: site forms, Tilda landings, partner API, Telegram bot;
- give marketing a way to manage content without developers;
- keep existing URLs and end-to-end analytics intact while updating the design.
Design
The homepage came from an external contractor. The rest of the site was designed at WAPP: 18 Figma frames — cash-register product landings, partner page, partner console, support service, payment pages, reviews, news, blog, contacts, 404.
A UI kit was assembled separately: typography, buttons, form fields, icons and colour variables. New pages were composed from these elements instead of being drawn from scratch.
Four UI generations in one codebase
The hardest part of the project. Over time the site went through several redesigns, and four template layers lived in the codebase at once: old, site, new and reboot.
That was not negligence — it was necessity. Switching a large site to a new design overnight means losing rankings on old URLs and breaking end-to-end analytics. So the migration was gradual:
- a new layer was added next to the existing ones, with its own templates and asset build;
- routes were flipped page by page;
- legacy pages kept serving from the old layer, so links and bookmarks stayed intact;
- the lead funnel stayed unified: forms from every generation posted to one handler.
By the end of the engagement the flagship layer was reboot — homepage, cash registers, acquiring, retail, services, news, reviews. Some legal and product pages stayed on older templates because rewriting them was not worth it.
Scale: about 150 Blade templates and 20 Vue components, ~80 routes, 24 database migrations.
Admin panel
The control panel is a Vue SPA with JWT auth — about 14 screens. Forms are built from backend model schemas, so adding a new entity does not need a separate layout.
What the content team got:
- Blog — full post management, scheduled publishing, image upload in the editor;
- Marketplace — partner solution cards with publish controls;
- Leads — list with filters by date, source, CRM status and partner, XLS export;
- Clients — search by phone, name and email.
Deletes are soft everywhere: records are marked inactive instead of being wiped.
Lead funnel
Leads arrived from four sources, each with its own handling: site forms, Tilda landings, partner API with key checks, Telegram bot with a dialogue tree.
Lead path:
- Validate and normalise data, detect source, partner and UTM tags
- Save to the database, create a client card for a new phone number
- Subscribe to the newsletter if the visitor opted in
- Hand off to the external lead-processing core
- Notify the sales chat with full context: name, contacts, source, partner, tags
The reverse loop ran through an amoCRM webhook: when a manager changed deal status, the site received the event, matched it to the original lead and passed the conversion into analytics. That made it possible to count closed deals by ad source — not just form submits.
Attribution was built separately: source tags were stored in cookies and session on the first visit and still reached the lead even if the visitor returned later from another page.
In 2017–2018 the funnel processed about 5,900 leads and 3,500 clients.
Outside the project scope
The client portal, online store, payment and fiscal stack were separate company systems on their own subdomains. The site did not overlap with them: a lead was sent to the external core via API, then handled in CRM.
Lead distribution among managers also lived in the external core. The site’s job was to collect the lead, enrich it with source data and deliver it without loss.
Stack
Backend: PHP, Laravel 5.4, MySQL
Frontend: Vue 2, Webpack, Gulp
Infrastructure: Docker, GitLab CI
Integrations: amoCRM, Telegram Bot API, Mailchimp, Google Analytics, Yandex Metrica, GTM, Adspire, CityAds, DaData
A similar scope — product pages, CMS and a lead funnel — is covered on our web application development page.