In my last post, I mentioned that we are designing the visual client application. And as it turns out, we both dislike building Single Page Applications (SPA). Yes, "dislike" because "hate" sounds a bit harsh.
Okay, I'm exaggerating a bit to get my point across. A SPA architecture is a very useful one... But only when needed, and most of the time the benefits don't pay of the added complexity.
And as it turns out, for Tracepaper building a SPA would be overkill. How did we choose a SPA in the first place? Well, we were just dazzled by the fancy GraphQL API in thinking we needed a fancy frontend framework.
How did we come to the conclusion to ditch the SPA? We were building the frontend in vuejs and even though we like this framework it just felt wrong, simply put, it was not fun building the frontend. And in my honest opinion, building software should always be fun, if it is not fun there is something wrong. And most of the time it has to do with Technical Debt.
Technical Debt has the tendency to suck all the fun right out of your development project. In this case, we had encountered some Architectural Debt. We chose a front-end architecture that didn't fit with our vision. Like hammering a square peg into a round hole, you are going to have a bad time.
What to do... We are getting fairly good in code generation, so let's do that. In the past 3 weeks, we expanded our generator and the draftsman modeling language to support what we call "screens & widgets". What kind of models you ask, we'll get there eventually with the Modeling in Tracepaper series.
On a closing note, you assumed correctly that we don't generate a SPA. Inspired by a post from Aaron Swartz called "Bake, don't fry" and the principles behind the JAMstack methodology we prerender as much as we can and host it from a CDN. It is simple and fast, and that brings the fun back into our front-end design.