Show HN: Hyvor Blogs – Multi-language blogging platform (blogs.hyvor.com)

2 points by supz_k ↗ HN
Hi HN,

We are super excited to launch our second SaaS product, Hyvor Blogs. We (a small team of 3) have been working on this for about a year. After a bunch of testing, feedback, and iterations, here we are at the launch.

We are trying to build a blogging platform that has all the features you need to run a blog without having to depend on plugins (themes, SEO, multi-language support, tags, team management, etc.). Most importantly, it’s just a blogging platform - not a site builder - not a membership platform.

Overall, it’s been a great learning experience working on Hyvor Blogs. We’d love to know what HN thinks about our project. I am happy to answer any questions you might have. Finally, if you plan to upgrade, use this coupon for a 40% discount: HN_ROCKS

(First, I was going to add all the technical details to the post text, but it looks like HN has a 4000 chars limit. I will add them in a comment below)

1 comment

[ 4.3 ms ] story [ 9.1 ms ] thread
Here are some enjoyable technical experiences we had / decisions we made while developing Hyvor Blogs...

Tech Stack

Our other product, Hyvor Talk [http://talk.hyvor.com], handles more than 30 million users and 500 million requests each month for a considerably low hosting cost using monolith architecture. So, it was a no-brainer to use the same technologies:

PHP and Laravel for the backend MYSQL for the primary database Meilisearch [https://meilisearch.com] for the search index Redis for cache

PHP isn’t dead. It definitely has some weirdness introduced in older versions that cannot be removed due to backward compatibility promises. However, recent versions of PHP have improved performance and developer experience significantly. Also, we use strict types and PHPStan [https://phpstan.org] (max level) to ensure type safety. And, we try to have 95%+ coverage using Pest PHP [https://pestphp.com]. With those tools, writing PHP is fun. Laravel saves a lot of time by abstracting away many HTTP, queue, and CLI-related tasks. MYSQL is the single source of truth. We sync data to Meilisearch for search. Laravel Scout makes syncing effortless. Redis is used for caching and queues.

More details on the open-source software we use are available here: [https://blogs.hyvor.com/docs/oss]

Theme Development:

In Hyvor Blogs, all themes are fully customizable. We wanted to make the theme development process as friendly as possible for developers. Being a hosted software, this is quite hard. Developers aren’t fond of (including me) editing a file on the browser to make something work. Providing an online web editor to create themes wasn’t an option. So, we created a simple CLI tool [https://github.com/hyvor/hyvor-blogs-cli] that developers can install locally via NPM. This CLI tool listens for file changes and syncs all theme files to a development blog in our production system. So, developers can make changes in their local editor and see changes with almost no delay. This has worked pretty well so far!

Theme Structure:

We wanted to keep the theme structure simple. No Javascript frameworks - just plain old-school HTML because it works the best with search engines, minimizes the data transfer required between the server and the browser, and even provides a better experience for end users.

We obviously needed a templating language to render HTML from data. There were many options like Handlebars, Liquid, and Twig. All do the job. We went with Twig because its original package is written in PHP and managed by the Symfony team so we could trust it and easily integrate it into our system.

Another thing we cared about a lot is creating standardized theme guidelines. For example, if you take WordPress themes, most themes have their own structure and are very different from each other. This adds a learning curve to each theme. To prevent that, we created standardized theme guidelines for all published themes to follow. We also standardized how common things in blogs like color theme switching, searching, language switching, etc. work. This helps users switch between and customize their themes effortlessly.

Then, there is one important thing we realized. “The structure of a blog is very simple”. First, you might think you need several stylesheets, jQuery, bootstrap, etc. NO! Just one stylesheet and barely some vanilla javascript for interactive elements like search. Realizing this helped us further improve theme performance. In our themes, the developer writes several SCSS files inside the /styles directory. This makes it easier for the...