Why we chose this framework for the POSiFLORA accounting system


In brief

  • 01
    Kind of tool

    Symfony — PHP framework

  • 02
    Where we use it

    On the server side of the accounting system for floristry business PosiFlora

  • 03
    Reason to use Symfony

    Symfony creates new components quickly, and doesn’t burden the system

    Symfony helps programmers re-use code and make fewer errors

    Symfony organizes the environment around an easy-to-use code base

  • 04

    We launched the app in 9 months

    8,500 users by June 2021

    Supports nearly every type of device

    The application is compatible with all popular online cash registers: Evotor, ATOL, and Shtrih-M

    Only 2 developers are needed for development and support

The PosiFlora app places orders, processes payments, and stores customer data

PosiFlora is a stock control and sales development system for florists. It’s used by online delivery shops, supermarkets, and small retail shops. As of June 2021, PosiFlora is used by 8,500 customers. OrbitSoft developed this total solution from scratch.

With the app, floral managers can:

  • Enter a customer’s phone number, name and address, and place orders
  • Accept cash and non-cash payments
  • Print out receipts
  • Store order information in a database
  • Keep track of stock levels
  • Write off flowers if they are spoiled or wilted
  • Assign shifts to employees
  • Analyze customer activity
  • Plan ongoing and future development for the business

To make it easy for businesses to work with PosiFlora, the system works on any device: executives use computers, managers use tablets, and phones are used by florists to place orders and by couriers for deliveries.

What Symfony offers you

In the course of development we decided to use the popular Symfony framework. Following are the advantages it brings to the service…

Creates new components quickly and doesn’t bog down the system. Developers don’t need to write a lot of code to connect new features to the system. The Symfony framework evolution is perfomed by centralized components creation and new versions, and not by forking.

Example of installing and configuring an optional component for an application:

Once the dependencies are set, the commands in the next section of the composer. json file will be automatically executed. For example cache: clear performs file cache cleanup for the application:

Symfony helps by re-utilizing commonly used code, resulting in fewer mistakes. Many projects need to use a given solution over and over again between different components, for example: for storing data for different platforms.

Symfony has an original system of multiple code use called The Bundle System. This is an out-of-the-box library with a recipe for integrating Dependency Injection into the application container and describing the necessary configuration options. We often use these bundles in our work.

For example, a bundle from which different backend applications communicate with each other and also between client applications in the JSON format with predefined entity schemas.

An example of the bundle:

Symfony organizes the environment around the code base, which is very easy to work with. To make it convenient for the programmer, the framework creates a special environment where it stores files with passwords and addresses in different file formats.

Symfony supports all file formats: native PHP files as well as XML, INI, and YAML. For PosiFlora, we use the YAML format. It’s easy to read and organically describes the necessary parameter structures. The framework by default caches the results of parsing the YAML configuration file. Thanks to this, the performance of the framework isn’t affected.

Example of a configuration file in YAML format:

Symfony results: we launched the application in just 9 months

PosiFlora supports all iPad versions, iPhone versions from 6 up, and over 10,000 Android devices. A single tablet is enough for a retail outlet. Most customers use iPads.

The app adapts according to a client’s needs. If a client has a new task for the system, we try to solve it. For example, we implemented a ranking of supplies according to European markings, added barcode support, and the ability to connect information from different advertising offices. In just two years, we solved more than 2 thousand.

We released 87 new versions of the app in two years. It was automatically updated on all devices at once, without any additional developer involvement.

The app works quickly. When any button is clicked, only part of the page is updated, rather than reloading the whole page as on normal websites. This is possible because the client-server paradigm allows the server-side and the interface-side to be separated.

All order data is stored, even if florists/clients have entered it offline. Interaction with the back-end takes place over the network using the JSON API protocol. On the server-side, the Symfony app accepts and serves requests from clients, communicating with each other via the JSON API, or asynchronously via RabbitMQ message queues.

The application won’t crash, even on holidays when requests increase. Each module is packaged in a container on the server and can be horizontally scaled depending on the load.

Saves money on maintenance. The framework helps save on a company’s development expenditures: only two programmers are needed to write updates and maintain the application. There is no need to pay for the use of the framework and technical support.

8,500 1600175,000
retail shopsEvery second, the system processes requestssales per day

Technical block


  • Backend: Symfony
  • Web Front End: Angular
  • Mobile/Desktop App: Qt

Programming languages:

  • Backend: PHP 7.3—7.4
  • Web Front End: TypeScript
  • Mobile/Desktop App: C++


  • neomer/json-api
  • Doctrine ORM
  • Enqueue
  • League/Flysystem
  • Monolog
  • Swift Maile
  • Twig


  • MySQL
  • Redis
  • Apache Kafka
  • RabbitMQ
  • Couchbase
  • SQLite
  • ElasticSearch

Platforms and third-party software:

  • Docker, Docker Compose, Docker Swarm
  • HashiCorp Consul
  • HashiCorp Vault
  • Kafka Connect
  • Graylog
  • Grafana, Graphite, StatsD

Whatever your needs, we can help!

Tell us what problems you’re facing with your business. We look forward to hearing from you.

Получите ответ по смс

Ваше сообщение успешно отправлено!
Представьтесь пожалуйста
Укажите номер, на который придет ответ
Нажимая на кнопку, вы даете согласие
на обработку персональных данных.