002 - Single Page Application Architecture
Date: 2024-09-20
Status: accepted
Context
I initially wanted to make shipclojure be a server rendered application that hydrated react on the frontend for full interactivity.
UIX supports this type of application as it has server side rendering capabilities.
Problems with this architecture in clojure:
Server side rendering on the JVM poses problems if your components use libraries from
npm
and you need to write a lot ofwith-placeholder
functions to account for thisThe frontend code would need to be bundle split the route from the backend will server render and require JS only for that specific route. This becomes cumbersome, it would require adding complex bundling logic
There is still logic available for server rendered pages that are required for SEO like blog,
/about
,/contact
and landing pages This can be done throught static UIx rendering or hiccup
Decision
ShipClojure will be a backend API + Single Page Application that requests data from it.
Consequences
For the application state, ShipClojure will use Re-Frame
The backend API can be reused for a mobile application
Last updated