If you want to build a solid app then you better do your homework. Here we'll walk through some of the problems we've encountered and explain the design choices that make Factor ideal to solve them.
Factor is designed to provide structure and help with best practices. It is built with cutting edge JS technologies:
Note: Factor can be used with any frontend framework such as React, Svelte, etc.. However at this time we've decided to focus on working wih Vue3 applications.
The most common CMS structure—used by tools like WordPress, Drupal, Ghost, etc.— is to combine everything together into one giant "monolith." That means the code for your your database, image storage, email, app all live together in the same install.
While this may have certain advantages, there is one massive problem that arises: you can't work easily across environments. In other words, your development work and production work are always going to be different. This leads to challenges because things that work locally, might break when you push to production.
Also, you may want to share a database or images across multiple websites or apps. This isn't possible with the monolithic approach without working with their APIs (and adopting a bunch more code in the process.)
Factor follows the 12 Factor App methodology which outlines a strategy for achieving maximum portability in your applications. It does this by having your connect key services—like your image storage and database— which allows you to easily share them across multiple apps.
The ability of your application to "scale" is important, not necessarily because you'll be pushing millions of page views, but also because this directly correlates to the cost of running your app.
Many older frameworks are hard to scale (e.g. WordPress, Rails).
This is because they are server-rendered and servers have to work every time a user loads a page. This can be solved somewhat by caching, but becomes challenging when you want to deliver user-specific content.
The modern JamStack paradigm recommends you build your application templates ahead of time and simply make calls to API endpoints when interactivity is needed. This makes Factor, and other JamStack apps, super easy to host and scale.
Factor provides a simple yet powerful extension interface which allows you to easily use plugins and even themes by including them in your files.
With JamStack apps, it's become to easy to delegate critical functionality to services run by third-parties.
APIs can be problematic. It is hard to work across many APIs. Things can quickly become a web of requests and integrations that are nearly impossible to work with effectively.
Factor comes with a standard endpoint framework that makes it easy to create your own Node powered endpoints to do whatever you need.
Most full-stack applications are a compilation of dozens of technologies which sometimes don't work well together.
Here are some key "rules" we follow in Factor: