🚀
ShipClojure
  • README
  • Development
    • Getting Started
    • REPL Workflow
    • AI Development with ShipClojure
    • Getting Updates
    • Formatting code
    • ShipClojure Guiding Principles
  • Backend
    • Migrations
    • Secrets
    • Routing
    • ShipClojure Blog
    • Email
  • Frontend
    • UIx + re-frame
    • HTTP Requests with Re-frame
    • Frontend Navigation with Re-frame
    • Toast Notifications
    • Icons
  • Server Side Rendering
    • Static/Landing pages
  • Auth
    • How Auth works
    • Oauth2 providers
  • Deployment
    • Deployment
  • Decisions
    • 001 - Cookie Sessions
    • 002 - Single Page Application Architecture
    • 003 - Re-frame instead of Refx
    • 003 - Move from cookie sessions to JWT Access + refresh tokens
Powered by GitBook
On this page
  • Context
  • Decision
  • Consequences
  1. Decisions

002 - Single Page Application Architecture

Previous001 - Cookie SessionsNext003 - Re-frame instead of Refx

Last updated 1 month ago

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 of with-placeholder functions to account for this

  • The 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

  • The backend API can be reused for a mobile application

Re-Frame