Sitecore Hackathon


The 2023 Sitecore Hackathon is a free online community-driven event organized by Akshay Sura and supported by Sitecore. (Shout out to Pieter and Tamas).

There were 3 categories that were revealed when the Hackathon started and then your submission must be uploaded 24 hours later.

The categories were:

  1. Best enhancement to SXA Headless
  2. Best Enhancement to XM Cloud
  3. Best Migration Module to move from XP (traditional) to XM Cloud/Content Hub One/Headless CMS
Hackathon logo

I had the join to participate this year together with my good colleagues from Valtech: Per Bering and Carl Nielsen as Team NotImplementedException. It is really joyful to send a day with friends implementing what we find fun and don’t care about Jira tickets, client prioritization, budgets - even though there there is still a hard deadline!

Our submission

We were (of course) discussing several ideas, what fun stuff we would like to try, how it could fit with the categories, and if we could make something that we could imagine we would use ourselves.

We went for the category “Best Enhancement to XM Cloud”, all submissions are completely open and your can see our submission on GitHub

One of the few integrations to XM Cloud is the webhooks which is a nice almost standard for the web, but we don’t really have solution to add anything to the new interfaces in XM Cloud, yet. We came up with the idea that we could inject code to XM Cloud Pages application by using a browser extensions, that would actually allow us to inject javascript into the pages and do whatever we want.

In the long run it would be quite annoying if one had to keep a customization aligned with how the inner workings are in a SaaS product, and maybe also because it was simpler for us, we could just have the browser extension display the information. The button for the extension is available in the top of the browser anyway, so the difference is not that huge.

Hereby the solution we went with.

Architecture of our solution

We also had to make a small video for presenting the solution, it was really late and we were struggling with video recording and downloading the video and that kind of IT stuff… However, we made it, so it is available on YouTube

Learnings

We ended up being way more pressured by the deadline than we had expected. Maybe the discussions went on for longer than we needed (maybe a company party the night before doesn’t help), but I feel it was right to go for something we could see ourselves.

After choosing we fairly easy got the work we could foresee split into 3 major parts that we could divide between us. We know each other quite well, what we find easy, and what we find fun.

We wanted to use the nice new and FOSS stuff with Grafana and Loki to store the audit records and I spent quite some time on writing Dockerfiles to run it in Windows Containers so it could easily be run in the same stack as the Sitecore instance. However, when trying to add the records we were really struggling, as Loki is really focused on consuming a log stream, but that was not really what we had. Hereby, quite late we decided to switch to well-known ElasticSearch and Kibana.

This also postponed our integration with the browser extension for quite some time. For such integrations it is often a good to agree on an contract and maybe even a fake implementation to keep development speed up and isolate integration issues. It might be that we could also have had benefit of this…

Yeah and then the video recording, it is actually something you can prepare so you know how to easily record and upload the video. We thought we could just use MS Teams, that went fine but downloading the actual file was actually a struggle.

Potential for this approach

Integration with webhooks is a nice non-intrusive way to easily add integrations and it is great that Sitecore now also (one could say finally) supports this.

Audits have always been a request from customers and even though there have been several solutions it had never really been nice or it had introduced more complications in the solution, regarding database size, complicating maintenance with backups, server sizes, etc.

Moving this to a completely different tech stack, optimized for this kind of data, seems like a much better way for this. It would also be possible to use one of the providers to have an ElasticSearch/Kibana or similar stack available as a hosted service, so you would not have to bother with hosting etc. For a test like this it just made sense that you won’t have to sign up for a service or similar.

The approach with a browser extension is a nice and definitely very flexible solution to extend any webapp that is not really supporting extending, it is actually more or less as loosely coupled as it can be. Currently, XM Cloud is such an app, this might change in the future, I am (also) not sure what would be a good approach, and I really understand that it had be this way at least initially. However, Sitecore has always been strong on integrations and supporting extensions and customizations by both partners and customers, and I guess that we will also see a model to support this in the future.

I have been wondering if we could make a “generic” browser extension, where you could just add “integrations” or “services” that you use. The services would need to expose some data model to indicate which urls they know of (and the user is allowed to see) and the user could get all the enriched data from the service(s). It should be a quite more advanced extension than this one, but maybe there is a potential for this generic integration.

Conclusion

We had quite fun with implementing this, we even found a weird issue that Sitecore can now fix. I will definitely recommend to anyone (if you can at all make the arrangement with your schedule, family, and other constraints we all know) to take the opportunity to explore some new technology in company with good friends.

Thank you to everyone who participated and a great thank you for this Hackathon both the arrangement and the committee who have to investigate all of those solution, I am sure there is a significant amount of work for this to succeed.

UPDATE: BTW, we actually won within this category. At SugCon in Malaga the winners were announced and we got a nice little award to place on the desk. Thank you and congratulations to all the winners (and everyone who participated).