For context, I am new to Clojure. Recently I’ve been studying Duct and Fulcro.
if you’re unsure or unclear where to begin, the (likely) quickest way to get started is to go with a template like Luminus, which does a lot for you out-of-the-box. That said, I am really enjoying learning how to architect a SPA client and API server using Duct and Fulcro together.
You are correct: Duct is a server-side, backend framework, and Fulcro is primarily a client-side, frontend framework.
Here is an example application built using Duct and Fulcro. This is also a demo of Walkable, which is a tool for talking to SQL databases from Clojure. Walkable is built using Pathom, which is a tool that helps map Fulcro graph queries (EQL) to data sources such as databases, APIs, GraphQL tools like Prisma, etc.
Fulcro is used to build SPA (single page applications) (I am not sure what MPA refers to). Fulcro uses ClojureScript, which compiles to Javascript which runs in the browser.
Fulcro would work fine with a server written in Duct, or anything else (Clojure or not). As a client-side framework, Fulcro is not meant to talk directly to a backend component like Datomic (which is a database).
Fulcro has a free, comprehensive book. Recently the main developer of Fulcro communicated his intent to update the book to de-emphasize some of the server-side bits of Fulcro.
Duct can be used to build server-side backends. Here is a video explaining the concepts behind Duct. Duct can work with Datomic or any other database. Duct uses Clojure, which runs on the server on the JVM (Java Virtual Machine). Duct can be used to build an API server for a SPA, or be used to build a server for anything else.
Duct already has lots of modules, and you can also build your own.