Akaunting – Free Accounting Software Powered by Laravel

Akaunting is a free and open source accounting software built on Laravel. It handles everything from invoicing to expense tracking to accounting and runs on your infrastructure.

What makes Akaunting unique in the accounting software space is it’s not a SaaS app, you download it and run it on the server setup of your choice. This gives you full control over all your financial data and keeps you from having to share it, like many of the other big name accounting software.

Akaunting is completely free to use and it’s open source, and they make money by selling additional features through their app store. Some of these include estimates, 2Checkout, open cart, and plenty more.

For more details check out the Akaunting site and Github repo.

Monica is a Laravel Powered Personal Relationship Manager

Monica is a new kind of CRM that is designed to organize interactions with your friends and family and it’s built on Laravel.

Monica allows people to keep track of everything that’s important about their friends and family. Like the activities done with them. When you last called someone. What you talked about. It will help you remember the name and the age of the kids. It can also remind you to call someone you haven’t talked to in a while.

Monica is available as a download from Github or a hosted edition that you can signup for on their website.

Coaster CMS

Coaster CMS is a Laravel powered CMS created by the full-service digital agency Web-Feet.co.uk. Being an agency, they specialize in offering solutions to a wide range of clients, and this is where Coaster CMS was born.

“With eight years of combined developer experience of multiple CMS systems led us to a belief that there was still a market out there for a “block based CMS system” that didn’t confuse a user when they logged in to manage content.”, said senior developer Daniel Chadwick, “We had a pretty strong set of core ideas that keeps Coaster tied to being flexible in development and simple for the end user.”

Coaster CMS made its first official launch in March of 2016 they released it as open source to give back to the community and give people a different CMS option. Since then, the project has grown, and they just released v5.4 which includes a new WordPress importer, a new theme, full page caching, and more.

Coaster CMS Administration Highlights

Coaster CMS Dashboard
Coaster CMS Dashboard
Coaster CMS Pages
Coaster CMS Pages
Coaster CMS Edit Page
Coaster CMS Edit Page
Coaster CMS Media Manager
Coaster CMS Media Manager

The admin also features an advanced permissions setup and unique time specific content versioning, which allows pages to show different content at different times of the day.

Coaster CMS Beacons

Beacons are something I haven’t heard of before and from the Coaster CMS site here is what they are:

A beacon is a small Bluetooth radio transmitter. Think of it like a small lighthouse: it constantly transmits a signal that devices can see. Instead of light, they emit a very short-range radio signal transmitted on a regular interval of approximately 1/10th of a second. A Bluetooth-equipped device like a smartphone can “see” a beacon once it is in range. Depending on both devices’ proximity, a smartphone can perform several different actions. It can update an indoor map with your location, open a lock, or even change the music in your house as you walk from room to room. Beacons are a key technology in connecting the power of the Internet to our everyday life.

The key to the power of Beacons is that they are ‘location aware’ meaning that the information they broadcast is tailored to their location. This means that the user experience is incredibly valuable as there is no need to sift through irrelevant data. The experience can also be very personal to the user, as mobile phones are very personal devices.

As an example, you could have a page dedicated to an event that your company will be attending and linked to a beacon at the conference stand. The, when people are on their phones near the stand, they would see the notification for the page. This would be perfect as a lead generation system where it could have a form on the page to get their information.

Another example is a museum or an art gallery. You could have content pages that are dedicated to an art collection or individual items; then people could find out more info from their phones.

Time Specific Versioning

CoasterCMS Versions

Time specific versioning is a unique feature that allows you to set up content that should be published at a specific date or time, or go advanced and have special content only appear on particular days of the week or times of the year.

Developer Friendly Features

Coaster CMS is also developer friendly, and you’ll feel right at home since it utilizes Laravel and has embraced Laravel’s tooling such as Blade, Mix, migrations, Artisan, etc. Plus it supports powerful features for creating themes, great documentation, and a robust blocks system that includes the following types:

  • String, Dates, and Links
  • Forms
  • Gallery
  • Images
  • Selects
  • Videos
  • Repeaters

With these different types, you can create some unique and powerful views.

Getting Involved

If you’d like to get involved with the Coaster CMS project, they have a growing and active Slack channel, the GitHub repo for pull requests, and would enjoy having more themes created if you are of the designer type.

You can download the CMS, try it out, and join the community all from the Coaster CMS site. Give it a try and add a new CMS to your arsenal.


Many thanks to Coaster CMS for sponsoring Laravel News this week.

MarkdownMail – A Web App to Create Laravel Markdown Email Themes

MarkdownMail is a new web app that allows you to create markdown email themes for you Laravel apps. You register and login with Github and create a new theme. Next, it gives you a demo email and options on the left side to edit the colors:

Once you are satisfied you can export as HTML or a Laravel Theme.

MarkdownMail is free to use and will save you a lot of time in building those emails. Give it a try!

The Static Site Generator Jigsaw Launched V1.0

Jigsaw, a static site generator, made by Tighten just tagged and launched v1.0 that includes the addition of Collections. These allow you to work with a list of related content, like blog posts, a portfolio of your work, staff bios, and more.

Just like the earlier version Jigsaw still runs on Blade, so you get to continue using the familiar syntax you are used to when building out your templates. That paired with Markdown content makes it super friendly to create the content you need.

“Like the core of Jigsaw itself, collections are designed to be as simple as possible to implement,” Keith Damiani said in the release announcement, “while at the same time giving you the power and flexibility to build some pretty advanced sites.”

Here it the config example for setting up a new set of Collections:

return [
    'company' => 'Tighten Co',
    'contact_email' => 'support@tighten.co',
    'collections' => [
        'people' => [
            'path' => 'people',
            'sort' => 'last_name',
        ],
        'posts' => [
            'path' => 'blog/{date|Y-m-d}/{filename}',
            'author' => 'Tighten Co.',
        ],
    ],
];

In this sample, the “people” are sorted by last_name which would be defined in the Markdown files YAML front matter. Then the “posts” uses a dynamic folder path with the date stamp and a default author of Tighten Co., which is a fallback from the YAML front matter.

Jigsaw Pagination

V1.0 also comes with a pagination system that is defined directly in your Blade file:

// posts.blade.php
---
pagination:
  collection: posts
  perPage: 5
---
@extends('_layouts.master')

Then your view has access to a $pagination object with everything you need for creating advanced pagination.

Jigsaw Variables and Helpers

I briefly touched on variables above where the “posts” collection had a fallback author if one wasn’t defined in the YAML front matter. To add to this is a new helper functions system that can be utilized right in the config file:

return [
    'excerpt' => function ($page, $characters = 100) {
        return substr($page->getContent(), 0, $characters);
    },
    'collections' => [
        'posts' => [
            'excerpt' => function ($page, $characters = 50) {
                return substr(strip_tags($page->getContent()), 0, $characters);
            },
        ],
    ],
];

In this example, the first excerpt limits the characters to a default of 100, and in the “posts” collection it overrides the first by stripping HTML tags and defaulting to limiting just 50 characters.

Conclusion

When I first looked at Jigsaw back in December of 2015 I was excited about the possibilities because of everything just felt easy. With Blade it had the template syntax I was comfortable with, which meant I didn’t have to learn yet another template system; it utilizes Gulp and Elixir and even carries a jigsaw console command similar to Artisan.

With the addition of Collections this static site generator will be a fantastic tool to use for the next site you build or even your blog. For more details on Jigsaw, you can read Tighten’s release announcement and visit the official site.

F-Bar – Manage your Laravel Forge Servers from your Mac’s Menubar

F-Bar is a brand new Mac App made by EASTWEST, that allows you to manage your Laravel Forge servers from your Menubar.

Last month Laravel released its first official Forge API, and F-Bar utilizes this so you can quickly handle almost all aspects of your servers from an easy to use location.

To get started, install the app and enter your Forge API key:

Next, switch over the general tab and select your preferred terminal application:

Then for each server you get a list of server options, and individual site options like deploying the site, the deployment log, Nginx and .env configuration and more.

Most are self-explanatory, and in my testing, I’ve found the open in Terminal one of the ones I’m always using. I have many sites within my Forge account and rarely setup custom aliases so I’m always logging into Forge to get the IP address so I can SSH in. With this option, your terminal of choice opens, and the default ssh forge@ip command runs.

Another custom option is the ability to monitor your servers directly from the app.

The monitor sends an HTTP request to every site on a given interval and will pop up a notification telling you to check out the site. Since the monitoring runs from your computer, it will rely on it being turned on and is not meant to be a replacement for a more advanced solution. However, it can still be useful.

Other useful features include rebooting services, uploading SSH keys, and viewing the latest deployment log. It is nice having all these options available on your desktop instead of going through the browser.

F-Bar is available today for the introductory price of $9.95 and it comes with a 10-day free trial.

Atlantis CMS Framework

Building a CMS is a task similar to building a car. Both are designed by engineers but ultimately used by non-technical users. There’s always a balance between usability and craftsmanship. Such a system always has to satisfy both programmers and content editors, and also perform tasks in such a fashion that also attracts business users. Fun, isn’t it?

Why Does the World Need Another CMS?

Most of the systems you can find tend to solve a rather large set of problems, where Atlantis is trying to be very good at what a CMS should be—content creation and maintenance.

We also believe a system should be fairly self-explanatory and not need a big learning curve to be able to achieve basic tasks. One of our primary goals was to create an environment where developers had all the tools needed to create a product which can be used by content editors.

That being said, if you are familiar with Laravel, starting with Atlantis should be smooth sailing.

First, let’s shift the paradigm a bit. Atlantis is not a stand-alone product, but rather a module for Laravel which provides well-rounded CMS functionality by relying on an already great framework. The users, however, don’t have to install both separately since the installer has everything bundled.

One can use all the packages out there compatible with Laravel but can also build or download modules that are Atlantis specific. We are trying to keep both separate which allows easy updates of Laravel and Atlantis independently via Composer.

There are a lot of features in Atlantis that can’t all be addressed in one article, but I am going to stop for a moment and talk about few neat features which will make your life easier.

  • Page and Pattern Cloning: building a page in any CMS these days is usually related to selecting a lot of options from a significant number of menus, and more often than not you need to create something that is “similar” but not exactly the same. Here is where cloning comes in—with a single click of a button the system will create a duplicate of existing page under new URL. Want to create a structure for your users to enter content, but you want to isolate them from actually having to write HTML? Patterns come in handy. You can define custom fields attached to patterns using the administration UI and match them to a specifically premade blade template.
  • URL Masking: attach patterns to pages by using the page URL ( or wildcard mask ) as a reference.
  • Events: Atlantis issues a set of events during the page lifecycle, and you can bind listeners and perform additional tasks when these events occur.
  • Mechanism to “skin” each module you have installed via the currently active theme.  You can, essentially, overload any module view in the current theme and rearrange it any way you see fit without interfering with the original module code.
  • Powerful visual form builder: will save you a ton of time and make your life significantly easier. You can literally create, validate, and skin a form using only the Atlantis admin interface.
  • Built-in support for Amazon S3 and Amazon CloudFront out of the box.
  • Multi-user environment with automatic page locking while multiple users are editing the same content.
  • Page/Pattern Versioning: you can rollback to a previous version at any time.
  • Media Manager to upload files that can be set to automatically resize to your custom specifications. Additionally, there is also a TinyPNG module that can automatically compress files for better performance.
  • Submit your Atlantis3 module using just a simple Artisan command.
  • Ability to tell the system to omit certain DOM elements if the page is being served to a mobile client.
  • You can build and organize in gallery any set of images and pull them by a tag.
  • Users can select their own editing tool (switchable from account preferences and based on the available modules).

We also made sure anyone walking into the CMS will be able to easily identify resources that are used on a particular page; in the admin UI we are displaying lists of every module or pattern attached to a page at a glance. It’s all about productivity at the end!

So, there you have it in a nutshell. Feel free to download, experiment, use, etc. We are looking forward to hearing feedback from you so we can make Atlantis even better!

13 Laravel Admin Panel Generators

Developers are lazy. No, I’m not kidding—they work hard to create systems that help them avoid more work in the future. Especially, repetitive work. And there are quite extreme examples now—we don’t need to write code anymore; it is being generated for us. Today we will look at the examples of various admin panel and back-end project builders for the Laravel framework. How much time can they actually save us?

Disclaimer: I am a founder of one of these builders, QuickAdminPanel, but for this market review I’m trying to be as honest and unbiased, as possible. There are really great competitors, and they deserve kind words.

There are two big groups of admin panel generators: visual builders and console-based. The choice depends on your preference, whether you like to use GUI or type Artisan commands with parameters.

Also, an important term to know here is a CRUD—this abbreviation stands for “Create, Read, Update, Delete”—these operations are a base for all admin panels. One CRUD usually represents one model and one menu item to manage that data.

Important notice: all the tools below were tested with Laravel 5.3. At the time of writing, it’s still too early to demand official 5.4 version support from them.

Visual Admin Panel Builders

Voyager: The Missing Laravel Admin

Laravel Voyager

This product, although being quite new, made the biggest impression on me. It already has a big audience of fans, has been mentioned before on Laravel News, and has its own Youtube series by DevDojo.

Voyager stands out with a polished and professional interface, but the main point is that it just works. Clear usage instructions, friendly front-end theme, no obvious bugs or unfinished parts—that’s Voyager. Even the icons like captain’s picture or ship wheel makes it look nice overall.

Another smart decision is to have a parameter “dummy-data” during installation—you can have your admin panel with pre-filled entries to play around with.

Voyager also has a media manager to take care of all your uploaded files, which is really convenient and helps it stand out among other admin panel builders.

Finally, with the help of Voyager, you can also change database tables directly from your admin panel—a kind of a mini-phpMyAdmin inside of your back-end app.

All in all, Voyager seems like the most polished solution on the market, but the situation could easily change if it’s not supported or updated for a while, which happens quite often with open-source packages.

LaraAdmin: Admin Panel + CRM

This is another project that had me impressed. After installing and logging into your admin panel, you can visually create modules, which represent your CRUDs. The modular system, according to the authors, is inspired by SugarCRM.

With a few clicks, you can generate database migrations for your model, and also CRUD at the same time, or separately, if you prefer.

LaraAdmin comes with quite a few predefined modules. They help you to get to know the system, but, on the other hand, if I had to create my project from scratch, it would take me some time to get rid of those LaraAdmin defaults.

Same as Voyager above, LaraAdmin has Uploads. Basically, it’s an internal browser for your uploads.

For the front-end view, LaraAdmin uses a very popular theme AdminLTE. It is actually used by most of the admin panel builders; it became kind of a market standard.

QuickAdmin: Package and Online Generator

This package is pretty simple—after installing it, you can create CRUD or non-CRUD menu items, with specifying fields and roles/permissions. It probably has the shortest readme file among all the tools in this review.

An important milestone for QuickAdmin is an online version of admin panel builder —instead of serving as a Laravel package for your existing project, this generator builds the whole Laravel project for you to download and use. So you don’t have any package dependencies and don’t need to learn any syntax for this particular package.

Non-Visual Admin Panel Builders

Z-song / Laravel-admin

This package is almost between the two worlds—part of the generator is actually visual, so you can create new menu items inside your admin panel, but for most of the process you would have to write code manually, like:

php artisan admin:make UserController --model=App\\User

$router->resource('users', UserController::class);

use Encore\Admin\Grid;
use Encore\Admin\Facades\Admin;
$grid = Admin::grid(Movie::class, function(Grid $grid){

This is the fundamental difference between visual and code-based generators—for the latter ones you need to learn their syntax, some rules and stick to them. And if you want to create something custom on top of that package, it might be quite tricky. Nevertheless, Z-Song package is a really good one and works well.

It also offers additional functions like model-grid, model-form, model-tree, and even ready-built widgets.

InfyOm Laravel Generator

Pretty impressive generator with a slogan “Get your APIs and Admin Panel ready in minutes,” so they emphasize APIs first, not admin panels. For that, they have a separate API generator, which may work as a part of admin panel, or as a standalone. Not only that—they will also generate Swagger annotations for the API.

Although InfyOm Generator is not visual (they claim they’re working on GUI at the moment), it offers three different options to specify CRUD parameters: console, JSON file, or an existing database table. Yes, you can generate CRUD for an already existing table, isn’t that cool?

An interesting feature of this generator is that it generates code using the repository pattern, so your controller will look like this:

class BookController extends AppBaseController
{
    /** @var  BookRepository */
    private $bookRepository;

    public function __construct(BookRepository $bookRepo)
    {
        $this->bookRepository = $bookRepo;
    }

    /**
     * Display a listing of the Book.
     *
     * @param Request $request
     * @return Response
     */
    public function index(Request $request)
    {
        $this->bookRepository->pushCriteria(new RequestCriteria($request));
        $books = $this->bookRepository->all();

        return view('books.index')
            ->with('books', $books);
    }

It may be a really good thing, but also too complicated if you don’t want to use repositories. The greatest benefit—by using this pattern, InfyOm also generates test cases for you!

In terms of front-end, InfyOm offers four templates to choose from: AdminLTE, Metronic, Bootstrap, and FlatLab.

The biggest problem with InfyOm (as with most non-visual generators), is you have to strictly follow their rules for syntax. They clearly state in the documentation: “Read docs carefully to specify field inputs.” But if you don’t make typos in parameters, this generator will work like magic.

AppzCoder: CRUD Generator + Admin Panel

This package is two products in one—there is a standalone CRUD Generator or Laravel Admin package. Its official documentation says the requirement is Laravel 5.1, but during testing it worked with 5.3 version as well.

After installing, you get a default Laravel bootstrap-themed view and can add CRUDs manually one by one, using Artisan commands with prefix crud:[command].

An example from their official documentation:

php artisan crud:generate Posts --fields="title#string; content#text; category#select#options=technology,tips,health" --view-path=admin --controller-namespace=Admin --route-group=admin

If this sounds too difficult for you, you can provide fields details in a JSON file and then specify it as a parameter to the command.

You can also generate different files separately, like this:

php artisan crud:controller PostsController --crud-name=posts --model-name=Post --view-path="directory" --route-group=admin
php artisan crud:model Post --fillable="['title', 'body']"

After generating CRUDs, you then specify all the details yourself in the code—where to put menu item, what middleware/roles to use, etc. So, this generator will only do a part of work for your admin panel.

Backpack for Laravel

This one is actually a huge project in size. It grew way beyond just an admin panel generator, and it has a convenient structure of separate packages: Base, CRUD, LogManager, BackupManager, etc. The authors claim Backpack is suitable for presentation websites, startups, and complex web apps.

Notice: Backpack has already been mentioned in a Laravel News article with usage cases and overview.

In addition to the CRUD generator, it has already pre-built CRUDs—permission manager, settings, page manager, news manager, and menu manager. Also, some of the packages in Backpack family serve as extensions: logs, backups, and some other features can be added to your app quite easily.

The problem with Backpack, however, is its strictness—you have to describe all the functionality of the CRUD in your controller code, it may look like this:

class TagCrudController extends CrudController {

  public function setup() {
    $this->crud->setModel("App\Models\Tag");
    $this->crud->setRoute("admin/tag");
    $this->crud->setEntityNameStrings('tag', 'tags');

    $this->crud->setColumns(['name']);
    $this->crud->addField([
    'name' => 'name',
    'label' => "Tag name"
    ]);
  }

While it may look convenient to set everything up in controller method, but if you want to build anything custom on top of it, you would have to “hack” Backpack on your own. To be fair, that applies to most of the packages in this series—you have to deal with dependencies, perhaps Backpack has one of the most strict here.

It is also worth mentioning Backpack is not free for commercial use. The authors phrase it in a human-friendly way: “Free if you don’t make money using it, cheap if you do.” ($19, to be precise.)

SleepingOwl Admin

Probably one of the oldest packages in this list, but still actively maintained—this package is created by a Russian company, and you can see the Russian language in some parts of the documentation, commit messages, and other texts here and there. But it doesn’t get in the way of actually using SleepingOwl; the package is pretty powerful.

Same as in other cases, here you have to use the syntax of the package quite heavilyhere’s how you add a menu in SleepingOwl:

Admin::menu()->url('/')->label('Start Page')->icon('fa-dashboard')->uses('\App\HTTP\Controllers\AdminController@getIndex');
Admin::menu(\App\User::class)->icon('fa-user');
Admin::menu()->label('Subitems')->icon('fa-book')->items(function ()
{
    Admin::menu(\Acme\Models\Bar\User::class)->icon('fa-user');
    Admin::menu(\Acme\Models\Foo::class)->label('my label');
});

Another drawback here is that documentation of the package seems outdated a little bit—so instead of the Artisan command admin:install you need to use sleepingowl:install, and some more examples of this inconsistency can be found here and there.


So these are eight packages to consider for generating your admin panel, and there are five more to mention but not include them as a full review.

I’ve tested two more packages which failed to deliver:

  • CrudBooster – made it work by some manual fixes, but the documentation is difficult to understand (might have used Google Translate, author is from Indonesia), and also I didn’t like some recommendations by the author, like using field names id_xxxx instead of xxxx_id.

  • Zofe / Rapyd-Laravel – unfortunately, didn’t work on Laravel 5.3, so probably isn’t planned to be updated at the time of writing. The latest supported version, according to their readme, is 5.2.

Finally, three more options to choose from—premium packages from CodeCanyon. I cannot provide a lot of information about them, so I’m leaving them for you to check them out:

And, we’re done. These are all the viable options I’ve found to build your Laravel admin panel (almost) without actually writing code.

SameTime: Group Text Reminders App Built on Laravel

SameTime is a new web app by Tommy and Joey Marshall that will automatically send a text message to you and a group of eight friends on a designated schedule.

“We’d lament on a weekly basis how we wanted to wake up early or work out after work, but would keep sleeping in and watching reruns of Seinfeld.”, Tommy said, “We needed to keep each other accountable, but sending that “sooo did you do X?” text at certain times during a day wouldn’t happen because we’d either both forget or didn’t want to be annoying (accountability is hard). “

SameTime is perfect for anything that you and your friends want to be reminded about, workout, read, have lunch, etc. Another nice feature is everyone has 10 minutes to write a response that gets sent back to the group; this creates accountability for reminders like waking up and also prevents your group message from annoying you all day like most group texts do.

The app is free to use with no account needed and it’s built on Laravel making heavy use of its queueing system.

GitScrum: A free open source application for your development team

GitScrum is a Laravel 5.3 application to helps teams use Git version control and the Scrum framework in the support for day-to-day task management.

GitScrum gives you full scrum control through all the typical requirements. A product backlog, sprint backlog, issues, and stories.

The application is currently tied to GitHub and you will need to setup an app for the OAuth then everything else installs like a typical Laravel app through Composer or you can use a Docker container.

For more information see the GitScrum repo on GitHub and it’s licensed under GPL v3.