Blog

Notes on development and products

Practice from our projects: architecture, estimates, integrations and support.

Synchronizing the role model across environments: how we got rid of “only works in production”

Synchronizing the role model across environments: how we got rid of “only works in production”

Support and managers maintained the role model only in prod, leaving test and preprod incomplete and some scenarios impossible to reproduce. We implemented one-way synchronization from prod, with additions, deletions, ignore flags, slug-based matching, and cron or admin-panel triggers. The role model is now **consistent** across environments.

Document Management Service: how we built a secure file storage in 3 months

Document Management Service: how we built a secure file storage in 3 months

The business requested a service for accounting and exchanging documents of senior management. The functionality is similar to Google Drive: subfolders, sharing, search, favorites, trash. But with strict security requirements: file encryption, 1-hour session, authorization through our service. We chose Laravel, PostgreSQL, and DocumentDB (later MongoDB) for hashes, and connected WebSockets for real-time. The project was completed on time — the business is successfully using it.

Bad experience with SAML: how we spent a month and a half developing a solution that had to be disabled

Bad experience with SAML: how we spent a month and a half developing a solution that had to be disabled

The company had an Active Directory portal, and the business wanted single sign-on via SAML 2.0. We integrated the `aacotroneo/laravel-saml2` package, but users had to authenticate twice: in our service and on the portal. A week after launch, most employees complained, and we eventually disabled the solution. Here’s what went wrong and what we learned.

End-to-end authorization via OAuth 2.0: how we combined 6 services on 1C-Bitrix

End-to-end authorization via OAuth 2.0: how we combined 6 services on 1C-Bitrix

On a large project, there were 6 1C-Bitrix services, each with its own authorization. The business decided to create a single entry point on Laravel. We implemented end-to-end authorization via OAuth 2.0, created technical users for API exchanges, optimized the transfer of large objects, and then finalized the redirect mechanism for guest services and direct links to files. The client logs in once and gets into any service without logging in again.

Role model for a multiservice structure: from role verification to access grid

Role model for a multiservice structure: from role verification to access grid

In the multiservice project, authorization was initially role-based. As the number of roles grew, we shifted to access-based checks. We implemented a flexible model where users have a role and an organizational affiliation, roles define default access rights, and organizations can receive custom permissions. We also built an interface for business teams to manage roles and access rights, view change history, and roll back changes.

How we defended our clients: the story of one transition between mailing aggregators

How we defended our clients: the story of one transition between mailing aggregators

In the process of creating a mailing service, we started with Mailchimp, then switched to DashaMail. When the business asked to switch to an internal aggregator, we conducted an analysis and identified critical limitations: there is no API, there are no status webhooks, it cannot withstand the load. We proposed a compromise — to use the internal aggregator only for infrastructure emails, and leave the client emails on the external one. The service has become multi-aggregator.

Laravel Mailing service: how we combined email and SMS sending for all internal services

Laravel Mailing service: how we combined email and SMS sending for all internal services

In a large project, each service sent emails and SMS in its own way: code duplication, lack of a status dashboard, and long improvements. We have designed a single mailing service on Laravel and RabbitMQ from three solutions — dashboard, API and sender. Providers connect once, statuses are visible through aggregators' webhooks, and the team no longer spends time on duplicate integrations.

Asynchronous activation of gift cards: the continuation of the story

Asynchronous activation of gift cards: the continuation of the story

After the warehouse was automated, the activity on the site increased. On peak days, the number of activations reached tens of thousands per day. Synchronous activation started to fail: delays, duplicate requests, and data errors. We switched activation to asynchronous processing via RabbitMQ and Laravel Jobs, increased the number of workers, and connected WebSockets for instant balance updates. The load has decreased, duplicates have disappeared, and the user sees the result immediately.

How We Automated Gift Card Inventory: From Excel to a System with an API for 1C

How We Automated Gift Card Inventory: From Excel to a System with an API for 1C

A gift solutions company managed gift cards and promo codes in Excel and processed bonus redemptions manually. We built a Laravel-based system with an admin panel for inventory management, activation, reservations, and reporting, plus an API for 1C integration. The system eliminated manual work, freeing the specialist to focus on higher-priority tasks.

How We Dropped Vue.js for Reliability: The Story of an Authentication Module

How We Dropped Vue.js for Reliability: The Story of an Authentication Module

Recurring authentication loops forced us to investigate the issue in depth. The cause was unexpected: users’ older devices and browsers, combined with corporate security software, were effectively DDoSing the site due to certain Vue.js behaviors. We made a decisive call: rebuild the authentication service using the simplest possible stack—HTML, CSS, and vanilla JavaScript, with no libraries. After the migration, the problem disappeared entirely

ROSTU is an ecosystem for the growth of small businesses.

ROSTU is an ecosystem for the growth of small businesses.

ROSTU is a Belarusian SaaS platform that combines a catalog for attracting customers, CRM, an online booking widget, inventory management, and analytics in a single system. Basic functionality is free. No cash nodes or complex integrations. Suitable for salons, service stations, restaurants, stores, clinics, and fitness clubs.

How Vpodarok evolved from a monolith built on Yii1 to a service‑oriented architecture with its own processing.

How Vpodarok evolved from a monolith built on Yii1 to a service‑oriented architecture with its own processing.

The Vpodarok project started as a regular online store selling gift certificates using Yii1. Over time, it evolved into an ecosystem with B2B showcases, APIs, and complex business logic. We’ll tell you how the team gradually moved the core into a separate service called Processing, why the Data Connector was needed, and what compromises had to be made when transitioning to a service‑based model.

Let’s talk

Tell us about the task — we’ll estimate it in a couple of days

Contacts