Inside Humm - A Retrospective, Some Clarifications and a Bit About Technology

Hi! I'm Nick Mitchell and I'm the Product Manager for humm. I am in charge of planning & architecting humm features, and making sure our engineers and everyone involved in the project are working on the highest impact tasks along our truest path.

We launched this blog on Friday. We've learned a lot in the few days since then.

First, some background.

We're a small, self-funded (non-ICO) team of seven humans that has spent the majority of our time for the past decade building content websites - almost exclusively on Wordpress. We decided to change our direction and try to build something for humanity and the earth. Several of us have been avid followers of cryptocurrency and blockchain. With a history in online publishing, we decided to create a media platform based on distributed technology.

After discovering Holochain it became clear that was our way forward, so we focused fully on re-skilling and learning how to operate as a software development company. We also started pushing forward with this new technology.

After going to the Denver Hackathon and meeting Arthur Brock, Eric Bear, and lots of incredibly intelligent people, I came away with an embodied understanding of what "agent centric" and "unencloseable carrier" meant, what those concepts mean when applied to how we think about software, and (most importantly) I came away excited about the possibilities and what we could build.

The rest of our team had already attended hackathons around the world, so our creative director and I were the last ones to get the full Holochain experience. (Side note: if you're interested in Holochain and have not yet attended an event, do. It is really helpful to grasp these paradigm-changing concepts while in dialogue with others.) We spent the next several weeks furiously scribbling diagrams on notepads, continuing to craft our vision and starting to build humm.

What is humm, really?

A lot of people who've dug into the rest of this website have said "Oh cool - Wordpress for Holochain."

That's not far off, but it's also the foundation for a new paradigm in personal publishing. Because we're building on Holochain, by using mixins and bridging to other hApps we can deliver a Wordpress that also allows you to manage a team, use built in project management, collaborate in real time with other people, never have to log in to other people's admin areas, manage licensing and receive payments for your content, activate Patreon-like functionality, and anything else you can imagine that will be built on Holochain.

We'll have loads more as we flesh out ideas and write more code. We're excited to have you along for the ride.

So what have we learned so far?

1. We must be very clear and intentional with the words we use.

There's been some confusion about what this blog is. Our first post wasn't crystal clear (because we got a bit excited). We are essentially running a publishing hApp that we built on a mini-network of 4 Holochain nodes on 4 different servers. You can find more details about our setup in the article following this one, by our lead developer Pedro Roman (keep scrolling down).

We are NOT claiming to have beat the Holo core team to a distributed user-run hosting network.

What ARE we claiming?

We're claiming that we've built a proof of concept Holochain-based publishing application. The words you're reading right now are being stored in, and served from, a Holochain DHT via http. We created a client app that serves as a user interface for the Holochain nodes.

2. People are really excited about our idea.

This is very satisfying for us here at humm, because our intuition about the need for something like this has been validated by the overwhelmingly positive and excited response we have received from the community. We couldn't be happier, more excited and ultimately more motivated to build something great that will serve as the bridge from an old, tired internet to a new, vibrant, people-powered web.

3. Launching something that people are excited about leads to lots of work.

We've received lots of communications via several different channels and it's pulled our attention away from building a little bit more than we expected. We're getting back on track and will be catching up on communications over the next few days.

4. And MOST IMPORTANTLY - never launch on a Friday!

See you later, weekend! We're never getting that one back :)

Why did we build this blog?

As a fledgling distributed software development company we were introduced to the idea of dogfooding and thought it would be a great idea to use our own software to run a blog that is focused on helping the Holochain community. Our goal is to be as transparent as possible about our development process by blogging about it, in real time.

We decided to mimic the network so we can port to Holo as seamlessly as possible when it launches. We have no inside info on the technicals of the network configuration, so we're just working off our best guess.

This also gives us an opportunity to build a better user experience by using our own software every day and constantly iterating to create a tool we really love to use.

What's next?

We've pushed back our Comments Mixin sprint so we can deal with some UI issues that have surfaced while creating and publishing our first few stories. We're also working at onboarding a few bloggers from the Holochain team and the Holochain community so they can start publishing some content here on humm. We'll have announcements about that in the next week or so.

Our engineers will be attending the online DevCamp Alpha this upcoming weekend to get their hands on the Rust refactor and will promptly work on refactoring our codebase so we can move forward in Rust.

I'll be writing a weekly column here updating you on what we're doing and - more importantly - why.

What technology stack are we using for the blog and why?

by Pedro Roman

We are currently using NGINX as the web server and Lavarel as a middleware between our Holochain network and the frontend. We could have opted for other alternatives such as NodeJS but since our team was already familiar with the current stack and our main website was running a LEMP stack we decided to use the NGINX and PHP that we already had installed.

How everything was put together

Diagram for showing a 3-agent approach
Original diagram for showing a 3-agent approach: image included using because Holochain's file storage app is under development.

To bring Holochain to the WWW, we had to expose one of the nodes to be accessible by anyone who visited the blog.

Making the interface of an agent utterly public by reverse proxying it, means that anyone using Agent Device #3 would have been able to create new content in our blog. Because we haven't implemented specific validation rules yet, anyone using the node would have been able to perform undesired actions in our Holochain network. Therefore, for our test, we needed a trusted network with known peers, and to keep the Zome functions inaccessible to the outside world.

After deciding on our stack and the path to follow, our team used NGINX as a web server and Lavarel as the middleware between our nodes to retrieve and show the content from their DHT. Therefore, everyone else on the WWW can see what everyone in the Holochain network sees right now. For a next iteration of the humm project, we are planning on allowing Lavarel to query other nodes instead of a single one to retrieve the data and keep a sense of high availability.

Currently we have 5 machines on running the following:

1) Main website (Wordpress) and humm blog (NGINX/Lavarel)

2) Node 1: Running the Humm Publisher on a machine with Ubuntu a Holochain.

3, 4 & 5) Node 2, 3 and 4: Running a Humm Publisher for our writers with a reverse proxy to a private but friendly domain name where they can access it with a similar configuration.

We decided to set up custom machines for our writers so that they wouldn't need to install Holochain on their computers, given the technical process currently involved. Additionally, these machines are always online, which is useful for testing the network layer and keeping the data available at all times. So this helps our writers use the Holochain nodes without them having to install anything and also helps to keep the network running between the nodes.

This approach works as intended, but has the same flaws as any centralized network. If the server where Lavarel is hosted becomes inaccessible, the link between the world and our Holochain network will be severed. One alternative was to have a load balancer and backup machines to minimize any possible outage, but that would increase the complexity, maintenance cost and still be centralized. Therefore, this is why the magic of a decentralized peer to peer network is magnificent and why we are so excited for the future, because right now it doesn't matter if one of the nodes goes down, the remaining peers are going to be there to save the day.

Watch out next week for more details on our approach to the technology stack and development process, via a collaborative post with Paul d'Aoust.

Make sure to sign up for email updates below so you're notified when we publish a new post.