A method performed by one or more data processing apparatus, the method comprising: providing a configuration user interface that enables a user to select and arrange building block user interface elements in a layout for a page; receiving, from the configuration user interface, data specifying a layout of one or more building block user interface elements, wherein each building block user interface element includes a micro frontend (310, 410, 610) and corresponding backend (330, 430, 630), wherein: each micro frontend structures user interfaces as a group of frontend components that can be reused in other user interfaces, and each micro frontend includes one or more frontend components and a store (211, 313, 413), wherein the store manages a model that represents a state of the one or more frontend components of the micro frontend; and the corresponding backend for each micro frontend includes a function that updates the model of the micro frontend based on a previous model of the micro frontend and an action; wherein when the micro frontend receives an action, the store can send data specifying the action to the backend corresponding to the micro frontend and the function receives the model and the data specifying the action and generates an updated model based on the action and the received model; and generating user interface data that, when processed by an application, causes the application to generate a user interface that presents the one or more frontend components of each of the one or more building block user interface elements in the layout specified by the received data. providing a configuration user interface that enables a user to select and arrange building block user interface elements in a layout for a page; receiving, from the configuration user interface, data specifying a layout of one or more building block user interface elements, wherein each building block user interface element includes a micro frontend (310, 410, 610) and corresponding backend (330, 430, 630), wherein: each micro frontend structures user interfaces as a group of frontend components that can be reused in other user interfaces, and each micro frontend includes one or more frontend components and a store (211, 313, 413), wherein the store manages a model that represents a state of the one or more frontend components of the micro frontend; and the corresponding backend for each micro frontend includes a function that updates the model of the micro frontend based on a previous model of the micro frontend and an action; wherein when the micro frontend receives an action, the store can send data specifying the action to the backend corresponding to the micro frontend and the function receives the model and the data specifying the action and generates an updated model based on the action and the received model; and each micro frontend structures user interfaces as a group of frontend components that can be reused in other user interfaces, and each micro frontend includes one or more frontend components and a store (211, 313, 413), wherein the store manages a model that represents a state of the one or more frontend components of the micro frontend; and the corresponding backend for each micro frontend includes a function that updates the model of the micro frontend based on a previous model of the micro frontend and an action; wherein when the micro frontend receives an action, the store can send data specifying the action to the backend corresponding to the micro frontend and the function receives the model and the data specifying the action and generates an updated model based on the action and the received model; and generating user interface data that, when processed by an application, causes the application to generate a user interface that presents the one or more frontend components of each of the one or more building block user interface elements in the layout specified by the received data.