My LaSalle Software Version 2.0: Over The Hump -- Close To My First Production Release
Today is August 21st, 2019
I just wrapped up authentication with the completion of these big chunks since my last "alpha" release: API auth with JWT, my custom "logins" feature, and my custom "personbydomains" feature.
Next big chunk on-deck is wrapping up blogging: finishing Nova integration, API endpoints, client consumption of those endpoints, and a few little other blogging features.
Then, there's a laundry list of little things to do, including upgrading to Laravel Framework's version 6 (upgrade guide). See the just released redesigned Laravel site.
Releasing version 2.0 is now a matter of weeks.
There is this small matter of needing proper websites for myself. Looking forward to using TailWindCSS!
Also, there is the still-in-beta Laravel Vapor, the AWS Serverless deployment service for Laravel Framework based apps. There is some serious learning to be done here, and I am anxious to get my sites up first!
So, it is really happening: LaSalle Software Version 2.0, new LaSalleSoftware.ca, new blogging site (domain TBD), probably a new podcasting site. Stay tuned!
My LaSalle Software Version 2.0: A Birthday Alpha Release
Today is July 25th, 2019, my birthday
Yesterday I completed version 1.9.3 of my LaSalle Software, my third "alpha" release en route to releasing Version 2.0.
It sure is taking a while to release version 2.0. I was thinking about this yesterday. I was thinking that the automated software tests that I was finishing was typical of what I've been going through. I thought that I had finished the automated software tests for my profiles database and administration. But, looking at what I had, I did not think what I did was sufficient, so I spent a couple of days writing what became an additional 224 tests with 1,200+ assertions (which need over a half hour to run -- all green!). This is typical. What was a very simple basic scope has grown. And the time and complexity has grown. Every step of the way has been an education.
I use the superb Laravel Framework, which is fabulous for writing web applications. Applications that you access through a browser, as opposed to native apps you use on your phone. You can use web apps on your phone by opening Chrome (or whatever browser) and typing in the URL, as usual. Well, Laravel does not come with an administrative back-end, that's not what it is. Laravel does not come with a blog, that's not what it is. You use Laravel to build your back-end, to build your blog, to build whatever it is that you are building. It comes with the templating for building your admin. It comes with the database plumbing, the routing, the queuing, and all sorts of wonderful things we need to build modern web applications (and API's!).
Every time I did a web app, I was figuring out the same things over and over. I need something with all the web app basics figured out, so I can just get going. After searching and searching and searching, it was clear that I had to build this thing myself. I called it LaSalle Software Version 1. It has blogging, an admin back-end, a lot of automated data cleansing and processing, and something else: a lot of love! When you are creating the software, and creating it because you are using it, you can do things!
I spent a lot of time looking over my Version One code. And, boy, a huge deficiency is that there are no automated tests. This is Not Good. Another deficiency is that it is monolithic, because Laravel is monolithic. I really have to do something about this. It's designed so that one domain has one complete deploy. Except that I need something where the admin supports multiple domains. Just for myself, I need my admin to support a separate podcasting site, a separate blogging site, a consulting lead generation site. As well, I want a central deploy with an admin that supports all sorts of fun stuff -- potential serverless set-ups with Twilio. A central something with a built-in "starter" profile database already baked in -- a huge head start for future development, such as Spotify integration, blogging, CRM (either custom and/or integrated). A central deploy that can push and consume external API's.
Well, the issue of how to build the admin back-end was huge. Considering that I actually built a full-blown admin back-end basically from scratch (with the help of an html/css stock template), but was searching for other solutions, tells you what a problem it is. There were, what, half a dozen Laravel based admin solutions out there, and each was a journey that left me feeling that something was wanting. Then, the Laravel Project released its own administrative back-end commercial software called Nova. Nova promised an intimate integration with the Laravel Framework that could never be possible with any other solution out there. Plus, it uses hot front-end tech. So I adopted Nova for LaSalle Software Version 2.
I confess that I thought that maybe I could just slot in Nova, bolt it to LaSalle Software, and away we go. Wrong! My experience with Nova is my experience with Laravel: poring over source code, learning its idiosyncracies and philosohpy, trying this-and-that, and figuring shit out. And the fun part of this is that there is still a whole aspect to Nova that I have yet to touch! Time time time time, my friend!
The promise of integrating intimately with Laravel is real. In some critical respects, it really feels like it's all just "Laravel", and this has become a critical thing. Especially the Dusk tests, the Laravel testing facility to similate programmatically running your Laravel app through the browser. I have spent more time programming these Dusk tests than I have programming my actual code! It's taken a ton of time, but no doubt it has led to a much better LaSalle Software. Being able to do changes, then run the automated test again, has proved so valuable. It's also led to a phenomena I dub "well, it's already on the hoist". Your mechanic (mine is a gem, btw) says, well, the car is already "up there", we are already "in there", we "might as well" do what we're going to end up doing at some point anyways. It is no small point that when I am deep writing the tests, when I understand the tests and the code, that when I see something to augment it is awfully tempting because I am at the peak of knowledge of those particular processes. And "augmenting" usually spawns further development work, which the tests frequently trigger. Oh, I did not realize that I would affect this-and-that... so I would nest into further rounds of coding-and-testing-rinse-and-repeat. Time time time!
The notion of building something with Laravel that accommodates multiple domains -- well, boy, this has been a journey. My goal is to use native Laravel to do something that native Laravel is not designed to do out-of-the box! However, the Laravel Framework is designed so that you can build it! You got that! My goal is to use Laravel as it is designed to build something that it allows but that it does not do out-of-the-box. I absolutely do not want to build a layer that sits on top of Laravel, that itself powers my LaSalle Software. I want to use Laravel itself the whole way through. Hence, my attraction to Nova, right!
So having a one person logging into the back-end and seeing only the stuff relating to their own domain has to be built. This is not part of the Laravel Framework out-of-the-box. So really figuring this out, and building it, and testing it, has been a job for me. I tried many things, and it all seemed to take forever to accomplish. The upside is that I feel like I have a pretty deep appreciation for why they do things the way they do. There is still a piece to this that I have to finish in Nova, something I have purposefully saved for last. The good news is that the concept has worked out nicely in practice and has not been subject to changes, so now I can focus on finishing this "personbydomain" admin. Which I will do after I go through my third live-test-deploy, with my just-released v1.9.3 -- released just for this purpose!
I still have the front-end piece mostly ahead of me. There is no ready-made solution for me to use, so I am putting this piece together myself, after much study, implementing a sub-set of OAuth with json-web-tokens. MOre time time time. I am absolutely going to use Tailwind CSS for my front-ends. I have blogging endpoints to do, and blogging consuming front-ends to put together. I have to smooth the rough edges of registration out. So there's a bit to go. Time time time.
But, LaSalle Software Version 2.0 is well past the vapourware point. It is tangible. It is deployable as is (well, after I get the kinks out of today's live-test-deploy). It took two days to build the installation command line script. There are two apps and four packages in my GitHub repositories.
For all the time it is taking, I am feeling renewed excitement as the focus of releasing Version 2.0, deploying it live for myself, and finally having something to point to, is invigourating.