title: Common Lisp - how to do a highly interactive single-page web app?
body: <p>I want to implement an online document editing and correction platform. This works as an <strong>interactive single-page web application</strong>. <em>Think of google docs, but with more complex widgets inside.</em></p>
  
  <p>I have done this app in React (JS) + Node.js + Postgres, which took some months of work, but I am not liking the JS experience that much, specially when things get more complicated handling this very complex state and the solutions presented in this frameworks are very restrictive, and changing a bit of code somewhere has "high" maintenance.</p>
  
  <p>I've never done any Common Lisp web app but I've read a lot about the available tools, and although there are many solutions for a web server (hunchentoot, clack, wookie, woo, fastcgi, ...), web application frameworks (caveman, ningle, radiance, lucerne, ...), html-generation libs (cl-who, spinneret, ...) and even javascript "transpiling" (parenscript), <strong>my main limitaion here is the heavy focus on the single-web-page app that must do most operations exclusively on the client side.</strong></p>
  
  <p>Architecture:</p>
  
  <ul>
  <li>Back-end server handles all permanent document storing/retrieval and user logins</li>
  <li>Front-end does all document manipulation client-side (including intermediate document state changes, without needing to communicate each change to the back-end)</li>
  </ul>
  
  <p>Core needs:</p>
  
  <ul>
  <li>Completely dynamic single-page web application interface (content is mostly the document you're editing)</li>
  <li>Negligible interaction latency</li>
  <li>Scale to many users with as low load on the main server as possible</li>
  <li>All interaction with the document should happen on the client side (including managing intermediate changes)</li>
  <li>Back-end server should only be contacted for login, pull document, pushing a new final document state, or requesting special operations like automated processing of the document information.</li>
  <li>Modern browser experience, namely HTML5 with support for drag-and-drop operations in the document editing</li>
  </ul>
  
  <p>Library requirements (I don't want to use libraries that turn out to be a dead end project):</p>
  
  <ul>
  <li>Solid libraries (e.g.: hunchentoot, clack, parenscript)</li>
  <li>Definitely not:
  
  <ul>
  <li>Libraries that someone did and then there are open bugs for 3 years and the last commit was 5 years ago</li>
  <li>Bad documentation (which means one can't figure out how to do things without spending hours or reading the library code)</li>
  </ul></li>
  </ul>
  
  <p>I've also seen there are projects like slurm-cl, panic, weblocks, but the first 2 don't seem to be mantained anymore or lack some documentation, whilst the new <a href="https://github.com/40ants/weblocks" rel="nofollow noreferrer">weblocks</a> seems nice, but from what I understand runs server-side, not client-side, which is a limitation for me.</p>
  
  <p><strong>Million dollar Question</strong></p>
  
  <p>Sorry for the long post but can you tell me if Common Lisp has any library for this use case - client-side scripting? Is it possible? Would Parenscript fit the bill? (I assume if I go with that one I'd have to write most things from zero - which is not my goal either).
  Also, if I went with Parenscript I'm assuming it does not do DOM management either.</p>
  
  <p>Or should I not use Common Lisp at all for this?</p>