Hey everyone. How are you doing?
Throughout the development cycle of Next, I’ve established a buddy system with a childhood friend of mine who is also a developer and entrepreneur, called Rodrigo.
He’s been keeping tabs on me, asking for updates on Next and I have no problem telling him how things are going. He also has been aggressively pushing for me to communicate these advancements, roadblocks, issues, amazing solutions, etc to you all.
However, week in, and week out, I still can’t bring myself to do it. At all.
As the team grew and Ultimo started to be used by larger projects, I started to feel a mostly self-imposed pressure to do things in a more “professional”, business-like manner. The past year of Ultimo development made me see the community as creditors.
In the case of Prime members, that perception is a reality.
One of the reasons why I chose to try and build something myself was the fact that I know what I don’t like doing and what I’m not good at doing.
The plan was simple: by owning the thing, I’d be able to do things differently.
What I’ve decided to do then, is to roll back this internalized perception I’ve built of the community all the way back to the beginnings of WP Ultimo.
I’ll force myself to view you all as friends again because I know you all are – and you’ve been telling me as much pretty much every day.
I’ll write updates to you as I write them to Rodrigo. I’ll show you things that make me excited with quirk little looms as I do with him. I’ll share the roadblocks the team is facing and ask for advice when I need it.
I won’t promise daily updates or anything like that, but I’ll keep you in the loop more often as if we’ve agreed on a Buddy system ourselves.
Today, I’ll cover how things are going with two of the most advanced modules of Next: Connect and Assistant, and the work we’ve been doing on those tools mostly during the past week and this past weekend. I’ll briefly touch on what the rest of the team has been up to as well.
Note: the text might be a bit too dense at times and I’d like to ask for forgiveness in advance. I hope that as we have more of these, I’ll be able to clarify things a bit better. I just need to get this out and control the urge to write an essay on every single aspect of development, otherwise I’ll spend the entire day writing these things. Feel free to ask questions in the comments below, though =)
This past weekend, my work was mostly focused on Connect.
We fully embraced the server-client architecture and getting it to work required refactoring some other portions of the code.
The trick with Connect is to develop things as if we were developing two different plugins: the connect server and the connect client. On the main network, both are present, but even then, the client behaves “as if” it had nothing to do with the server. The client does not know a thing about being part of the network or being installed on a remote site on a completely different server…
At the logic level, we detect if we are on the same site the server is and if that’s the case, we switch the transport layer used by the client, so the client “thinks” it is talking with the server over a REST API, but it is actually doing it directly.
The cool thing about this approach is that we only have to develop it once. To handle external sites, then, we just need to make a REST API-based transporter available to the client. Voilà, it all works.
All of this is already working with RunCloud. I’m hoping to finish up Digital Ocean next. The next targets might depend on what prime members are using/prefer, so please, let me know what you think.
Another cool advantage of the server-client approach is that I can implement different clients to interact with the connect server. I’m pretty ahead with a WP CLI that would allow customers to use Connect via WP CLI. It is not ideal, but at least it would be something tangible for Prime members to finally get their hands on.
I won’t make promises about when it will be available, but I’ll show you the progress as we move along here.
And just to make it clear: both server and client components are just internal components of a single unit – Connect. Although I’ll probably offer backups and temporary domains for Connect as a service for Prime members sometime down the line, you’ll be able to handle everything without needing to reach out for an Ultimo-based mothership – for Connect, at least. The AI assistant is a different beast altogether.
This last paragraph reminds me of two important things:
- Due to the very nature of how Connect works, we get another feature “for free”: sub-site backups!
- Connect will require some sort of DNS management layer to create temp domains for external sites as they get created and migrated. Right now, we support Cloudflare, but I’d love to hear which other providers you’ve been using.
Below, is a quick demo of how it works with Runcloud, up to the creation of the web app and WordPress install. Exporting and Importing the site comes next and was already tested, we just need to finish up refactoring the code from the Site Exporter add-on into the actions-based approach described above.
As the truly lucky person I am, Cloudflare decided to go down while this was recorded! What are the odds? The previous recording froze after minute 11, so I’ve re-recorded it from scratch. By the time of the new recording, CLoudflare was operational again.
Another cool thing – Runcloud supports web-app aliases, meaning you can share the install files across different web apps. This is virtually what multi-tenant is, and it has the potential to reduce cloning times a great deal. Not sure if this is something we’d be able to support right off the bat, but it is on our list to take a closer look 😉
You might wonder why Assistant is something we’ve already been working on when things like workflows still lack a usable UI. Well, the thing about Assistant is that it is so powerful, that it literally helps me test and even write some of the actions we have.
I’ve mentioned this before, but even though each Next module has the potential to be really useful on its own, things get exponentially crazier when we start to combine them. They were built to work together. Always keep this in mind.
For example, one of the key architectural decisions of how we are building Workflows was to make sure Actions are pieces of code that do only one thing, and that can be composed easily.
Actions can only take scalar types as inputs (strings – texts; integers, floats – numbers; booleans – true or false). And they always need to return something that can be pluggable into the input of other actions down the line.
Open AI models were updated recently to use functions. When you combine these two things we get a bot that has any and all actions added to WP Ultimo (core or extensions) are instantly available for the large language model to use.
Then, if you combine it with the server-client architecture I described above, you get a bot that knows how to perform changes not only on local sites but also over HTTP, on remote sites!!!
The results are scary, especially since the whole thing is a bit unhinged at the moment, with no safeguards preventing it from performing destructive actions. When this gets shipped, Access Gates come into the picture to make sure unauthorized users can only run certain types of actions or workflows. Again, each module is powerful on its own, but combining them yields even more possibilities.
In the same way that I’m building a WP CLI client to allow you to get your hands on Connect as soon as possible, I’m also baking in that client commands to interact with the Assistant. Here’s a quick demo for you:
OFF: I’ve originally planned to record a loom for this as well, but Cloudflare being down make it almost impossible to keep it consistent. I’ll include it on the next one
Since Assistant relies on fine-tuning, training material, technologies (vector databases, other programming languages), and other stuff, it will require making calls to an API endpoint of ours.
As a Prime member, you’ll have access to Assistant at the network level, to help you manage your network (imagine just typing “extend Josh’s membership for a month” and it just happens!) as well as actions that you can use on custom workflows you create for your customers. This is what will allow you to offer your customers features such as ai-generated content for pages, SEO, page layouts, etc.
Later this week we’ll be rolling out a major revamp of our entire support system, to address some of the major issues that have been plaguing it for a while now. It makes use of Assistant in some portions of it under the hood (although in a very small way, at this point). Huge pain points that now require human intervention (such as requesting access to the Community private spaces) can be resolved instantly.
It was the result of a ton of work by our amazing team members Allyson, Juliana, and Anyssa.
I’ll probably write at some point how you could use AI Toolkit to build something similar in the future for your own customers.
Lucas, Gustavo, and Yan were instrumental in the releases of last week. I’ve been told that Lucas and Gustavo in particular have something cool coming up soon as well, so stay tuned.
WordCamp Madrid 2023
I know that there are WP Ultimo users based in Spain and in Madrid, so if any of you are planning on attending WordCamp Madrid – which happens this weekend -, let me know and we can meet up and chat (my Spanish is quite the work in progress, but it should be enough!). I’ll be using a WP Ultimo shirt, so it should be easy to spot!
See you soon!