Built an entire CRM system with Symfony

I have been tasked with repairing an old, self-rolled CRM system. After analyzing the system it was obvious, that the current system is unmaintainable, filled with security holes and is just simply incapable of holding up for the plans of the company.

I advised to start building on a trustable foundation, the Symfony framework, and it paid back dividends over the past 5+ years since I’m building and maintaining the system.

My Role

I have designed the architecture on top of Symfony, and created numerous complex components and bundles that are well documented and reusable. I have created an extensive documentation on how to install, manage, develop the system, so that other developers working on the business logic could progress quickly without understanding all the depths of the system.

I have also provided a full set of examples featuring all the modules/options/settings that my extra components have. These are practically copy-pasteable solutions for the everyday needs of the business logic developers.

The system

The System is an advanced CRM system with diverse features, such as:

  • Invoice generation
  • API integrations
  • User, Service, Warehouse, Order management
  • Backend data source for our courier application
  • Document generation & conversion
  • Email management

Main achievements

I’m honored to sustain a long, happy and fruitful cooperation with my client. It’s great to see that other developers are capable of using my documentation and all the features I have provided and the example codes properly.

Custom services

Grid service

This is a complex, ajax based, DQL backed table component, that can show tabular data. It provides pagination, advanced filtering, custom cell rendering, and much more.

Most of its usage is declarative, therefore the columns, and the behaviour can be defined in the system configuration. This way it provides reusability and clarity.

File-management service

The file-management service provides a central service for handling files all around the system. It supports adding, removing, downloading and listing of files.

It makes easy for BL developers to forget about the hurdles of file management.

Background jobs service

The background jobs service provides a simple way to submit work that must be done asynchronously. It supports status reporting, inspection (e.g. logs, status), restarting and overall management of background jobs.

It makes easy for BL developers to just “post” a task that needs to be done once upon a time in the near future, when resources allow it.

Cron job service

The cron jobs service allows to set up repetitive, scheduled tasks inside our system. It provides logging, dependency injection of commonly used services and much more.

It is a well documented service, making it easier to create recurring or maintenance operations.

Entity change logger service

Provides tracking for who changed what and when and from what to what. Extremely useful in case of debugging or tracking back issues.

Outgoing email management service

Manages outgoing emails, provides reports on emails and supports error handling in case if the sending was unsuccessful.

This eases handling emails for BL developers, and also eliminates some bugs that could occur by using the default mailing service in Symfony.

Incoming email management service

Automatic receiving, parsing and handling of special incoming emails.

Payment gateway service

The payment gateway service provides a unified interface for all kinds of payments and payment systems. It is a plugin based service that enables changing/adding additional payment methods if needed.

This makes super easy for BL developers to implement payment anywhere in the system. They just supply the basic details, e.g. how much to charge the user, and the rest is managed by my solution.

Advanced PDF templating service

I have developed a unique solution for invoice template generation. The templates are editable by average users, but they are simple, and they easily produce beautiful, multi paged, properly paginated invoices.

API Integrations

I have integrated with countless APIs in this project, e.g.:

  • The national postal service
  • The national tax office for reporting generated invoices (required by law in Hungary)
  • The national insurance plan searching tool
  • Lexis Nexis Sanctions List checker service

Custom form elements

This CRM is very hard on CRUD operations, therefore I was tasked to build several form elements that would ease the everyday life of the backoffice personnel.

Autocomplete form element

A configurable (declarative) form element that supports advanced retrieval and labeling of the system entities.

Tagging form element

Enables the addition, editing and listing of tags for any of the entities in the system.

Chunked file uploader form element

This is a form element for uploading multiple files, even really huge ones. It supports multiple files, pausing/resuming file uploads, and chunked upload for large file uploads.

Integrated services

I have built several companion services that I’m exposing as separate portfolio elements:

  • Document server: Advanced PDF signing, PDF generator, PDF manipulator and document converter service.
  • Insurance plan calculator: Multi layered, security-first solution for enabling user-supplied source code execution in a safe sandbox.
  • Courier application: Companion Android app for couriers, to aid their every-day tasks while on the go.