Overview

    UserFrosting is a free, open-source jumping-off point for building user-centered web applications with PHP and Javascript. It comes with a sleek, modern interface, basic user account features, and an administrative user management system - all fully functioning out of the box.

    UserFrosting also has a not-so-secret ulterior motive: to get you to become a better developer. The PHP community has evolved considerably over the past decade, beginning with PHP5's support for object-oriented programming in 2006, to the first meetings of PHP-FIG to develop a set of standards for PHP code, to the release of Composer as the de facto package manager in 2012. At the same time the web development community as a whole has been changing, with websites becoming more dependent on Javascript and CSS to provide sophisticated client-side features.

    This breakneck pace has caused a lot of people to get left behind. For someone who hasn't been doing web development continuously for the past ten years, it can feel like a hopeless task to try and get acquainted with all of the new tools and frameworks that seem to be coming out every day. Relevant comic from Abstruse Goose:

    BlooP and FlooP and GlooP

    The problem is that when you're a busy developer with a lot of Real-Life (tm) projects to work on, it's very difficult to set aside time to read a book about technology X - especially when you're not even sure that you really need to learn X!

    UserFrosting has a better idea. Instead of learning about these technologies as a purely academic exercise, you'll work on one of your projects, and learn what you need as you go!

    What exactly will I learn?

    There are three main categories that UserFrosting attempts to cover: software architecture, tools of the trade, and best practices. Most of the PHP developers we see in chat or on Stack Overflow are behind in at least one these areas:

    Software architecture

    • Object-oriented programming and SOLID
    • The model-view-controller (MVC) paradigm
    • Designing for maintainability and reuse
    • Representational State Transfer (REST)
    • Security

    Tools of the trade

    • Frameworks
    • Version control (Git)
    • Package management (Composer)
    • Templating engines (Twig)
    • Data modeling and database abstraction (Eloquent)
    • Logging
    • Markdown

    Best practices

    • Coding style and standards
    • Development environments
    • Debugging
    • Test-driven development
    • Going live