Behind The Curtains: ARK Tooling

Brian Faust
ARK.io | Blog
Published in
6 min readJul 7, 2020

At ARK we work on a wide variety of projects which all require different development tooling to get the job done as efficiently as possible. We have a big focus on leveraging the vast ecosystem of open-source tooling that is available to achieve this goal and in this article, we will explain what tools and frameworks we use and why we chose them over others.

Back-End Tooling at ARK

Most of our larger projects are web-based projects like an upcoming Deployer and MarketSquare which means that we need a framework that allows our existing developers to be productive and make onboarding of new developers a breeze.

Laravel

Laravel by Taylor Otwell is the bread and butter of all our larger projects. It provides a pleasant developer experience with a vast ecosystem that allows us to iterate faster because we can leverage high-quality packages to save our developers time by not having to reinvent the wheel.

Spatie, a Webdesign agency based in Belgium, provides dozens and dozens of high-quality packages that are used in every Laravel-based project we work on. This gives our developers peace of mind because they can be assured that the packages meet a certain standard in terms of code quality, bugs get fixed fast and the developer experience will generally be what you would expect from official Laravel packages.

Livewire

The newest addition to our back-end stack is Livewire for Laravel by Caleb Porzio. Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.

Livewire enabled our back-end developers to become a lot more productive with front-end related tasks and dynamic UIs without having to bother with JavaScript, Vue or React. The reason for that was with Livewire we no longer had a disconnect between the UI and the server. We no longer had to maintain API endpoints that some Vue components would talk to, everything now simply lives inside of Livewire Components that are responsible for the UI and behaviors which are handled server-side.

Pest

The newest addition to our testing setup is Pest by Nuno Maduro. Pest is a Testing Framework with a focus on simplicity. It was carefully crafted to bring the joy of testing with Jest, which is a delightful JavaScript Testing Framework with a focus on simplicity, into the PHP Ecosystem.

Pest is a wrapper around PHPUnit which makes the migration to it seamless. The reason why we moved from PHPUnit to Pest is that it provides a better developer experience by making it more apparent what tests are running, passing or failing, and giving detailed coverage information for every file right in the terminal after a test run finishes. These small things make a big difference when you are working on larger projects or even multiple projects where it’s important to keep moving and get things done as fast as possible without your tooling being the bottleneck.

Front-End Tooling at ARK

When we started to work on Deployer, MarketSquare and the next major releases of our wallets we wanted to make the UX more streamlined which meant that we had to come up with a style guide and brand guide to ensure consistency. This meant that we would also have to make some changes to our tooling to make it easier for our developers to share this new UI across projects.

Tailwind CSS

All our products follow a style guide and brand colors which allows us to share a lot of UI code across all our products. This made Tailwind CSS by Adam Wathan and Steve Schoger the perfect fit because components and code re-use are at the core of it, which is important to move fast.

This had the same effect as Livewire but for our front-end developers. It made them more productive because it removed the need to write barely any custom CSS. Most of our UIs are now composed of reusable components that share the same styles and code across all projects.

It also enabled our back-end developers to do front-end work if needed because they would just have to learn how the class-system of Tailwind CSS worked and not bother with writing hundreds of custom CSS styles.

React

The newest addition to our front-end stack is React by Facebook. We had been using Vue.js for several years and it served us well but as we are moving forward we will streamline all our products around the vast React ecosystem.

This will allow our developers to become more productive over time and collaborate more because they will be working with a single framework and language. The plans for the future are to migrate our Desktop Wallet to React first to create a foundation and follow later with the Mobile Wallet which will be able to re-use parts of the work done in the Desktop Wallet.

Continuous Integration & Continuous Delivery

Having a good setup for your Continuous Integration & Continuous Delivery is essential to enable your team to move fast and break things without being afraid of major breaking changes going unnoticed or harming your production environment. In order to achieve this, we use several tools to reduce the amount of manual work our developers have to do to ensure that our products are working as intended and eventually get up and running for production.

GitHub Actions

We use GitHub Actions to automate a wide variety of tasks across all our public and private projects. An example would be our Desktop Wallet which has workflows to run tests, create release builds that are signed, uploaded to VirusTotal and finally uploaded to a draft release on GitHub.

All of those sound like quick tasks that a developer could do manually but being able to remove those repetitive tasks from the daily operation and minds of our developers is a major timesaver and also removes human error from the equation.

Laravel Forge

We use Laravel Forge by Taylor Otwell to deploy and manage our servers. It allows us to quickly deploy new servers with the right environment and setup without having to waste time on setting them up, configuring cronjobs, fiddling with daemons and getting queues up and running.

It simply works and saves our developers a lot of headaches when having to deal with servers or tools like Jenkins to set up automated deployments.

Laravel Envoyer

We use Laravel Envoyer by Taylor Otwell to provide zero-downtime deployments for all of our websites. This ensures that our websites are always online even if a bug sneaks in because every failed deployment will be automatically rolled back.

It not only avoids our websites becoming unavailable due to some faulty scripts or database migrations but also gives our developers peace of mind that they won’t be able to accidentally break something because Envoyer will simply perform a rollback of the database and deployment in those cases.

Leveraging Opensource Tools and Getting Involved

As you can see, we leverage a wide variety of tools here at ARK in order to ensure that all of our products and offerings run as efficiently as possible. By using opensource tools, ARK benefits greatly from using peer-reviewed solutions that optimize and complement our own work. For a more in-depth look at how we use these tools, check out the ARK Ecosystem Github. Additionally, feel free to look at our bounty program and get involved!

Read our new whitepaper, follow us on social media ( Twitter|Facebook | Reddit ), join our community ( Slack | Discord ), and stay tuned to our blog on Medium and on Steemit.

--

--

Brian Faust
ARK.io | Blog

Pragmatic Software Developer. Open Source Maintainer. Focusing on @php @laravel @vuejs @tailwindcss @rails.