Skip to content
Samuel Gfeller edited this page Jan 20, 2024 · 25 revisions

What is this project?

This repository showcases the implementation of a simple yet robust architecture with a variety of backend and frontend features built using the Slim micro-framework.

The primary goal of this project is to provide a modern codebase with a scalable structure and a range of practical features. These can serve as learning examples or be adapted for developing new applications.

External library dependencies are kept to a minimum to facilitate maintenance and ensure long-term viability.

Features

All features were developed with an effort to ensure maximum user-friendliness. Frontend has to be intuitive, aesthetically pleasing, minimalistic, and functional.

The project is currently designed for non-profit organizations or foundations that require a platform to manage and maintain a record of communication through notes of people they assist.

Project components:

  • Authentication (login) and authorization (permissions)
  • Account verification and password reset via email link and token
  • Protection against rapid fire and distributed brute force attacks (time throttling and captcha) - docs
  • Localization — English, German and French
  • Flash messages
  • Request body and input validation
  • Template rendering with native PHP syntax
  • An intuitive method for editing values in the browser using "contenteditable"
  • Dark theme
  • Custom error handler - docs
  • Integration testing with fixtures and data providers docs
  • Database migrations and seeding docs

Application components demonstrating real-world features:

  • Users with 4 different roles and different permissions
  • User management for administrators
  • User activity history
  • Client creation and mutation with status and attributed user
  • Client list filtering by text input and filter chips
  • Note creation and mutation for clients with different permissions
  • Notes hidden from unauthorised users
  • Dashboard with panels

Demo

Link: Login
Usernames: admin@user.com | managing-advisor@user.com | advisor@user.com | newcomer@user.com
Password: 12345678
The database is reset every hour.

The reason this project was made

There is a ton of great content on the internet about learning how to write clean and sustainable code. However, I found myself searching for more than just skeleton projects or general documentations and tutorials when I wanted to learn how to do things within the scope of a potential real-world application. I never found resources such as an open-source, efficient implementation of all the features surrounding a full-sized project.

This is what I try to provide here. This project isn't just a skeleton, it contains a lot of practical examples on how to implement features that are often needed in real-world applications.

One example of the things I was looking for when I wanted to learn how to build a scalable project was how to build complex integration test cases such as authorization of actions with different roles in different contexts.
This project contains real examples and documentation with it in the testing examples which also addresses what should be tested.

Another example is the implementation of a robust security concept. How to protect against brute force attacks? Or XSS attacks or against email spamming?
This isn't perfect, but there is a relatively simple implementation of these concepts in this project.

Authorization, localization, validation, error handling, database migrations and lightweight PHP template rendering are other examples of features I struggled to find open-source lightweight real-world-like implementations.

Of course, there are big frameworks that have answers to all these problems. However, I find them often too complex, where the code makes too much "behind the scenes" combined with a high dependency and time-consuming refactoring on version changes.
I also dislike having to follow the propitiatory conventions of a framework and much prefer the freedom of a micro-framework and choosing the libraries I want to use.
This lets me stay in control of the codebase, keep it lightweight, performant and tailored to my needs.

Disclaimer

This project and its documentation are the result of my personal learning process in the last 6 years in trying to create the best possible template app with lots of real world examples.
I'm making what wish I had when I started getting seriously into web development.

The codebase is big and thus lots of subjective decisions had to be made that may not be the best long-term solution for everybody.

The main focus throughout the development was to make the code as dependency free as possible so that it's long living and can be adapted to different needs and preferences.

Basically, this is my take on what a modern and efficient web app could look like with today's tech.

I worked closely with the software architect Daniel Opitz, who also reviewed this project. I learned a lot during our exchanges and was inspired by his books, articles, tutorials and his slim skeleton-project.

Clone this wiki locally