Customizing WordPress to work like Confluence

The image shows a smooth transition from the blue and white confluence logo, which consists of two overlapping circles and a letter C, to the blue and white wordpress logo, which consists of a stylized W inside a circle. The image conveys the idea of changing from one platform to another, or integrating them together.

At Homeville, when we started active product development, JIRA and Confluence were our go to tools. As the technology team grew from a 4 member team to a 65+ member team, one of the things that became a slow burn for me was to see the monthly user-wise licensing model for both of these tools.

JIRA was free for the first 10 users, then for the next 40 odd users that we added, we were paying roughly 400 USD per month! Similarily, Confluence was free for the first 10 users, but at a team of 40 or so, our bills from Atlassian was matching our bills from AWS!

Shifting from Atlassian

One of the quickest shifts we did was to find an open source self hosted version of JIRA. OpenProject was the perfect solution. The benefit of self hosting these systems was that access to all the proprietary analysis and research in the form of features and requirements was now within our AWS account and thus in a much more secure environment. The added benefit of localization within the country also meant any form of regulatory compliance was also much better aligned.

It took some scripting, but using a python script to connect to JIRA and OpenProject (OP) both, we were able to import the projects, tickets and sprint informations from JIRA to OP.

Wiki or independent system

One of the key decision that we had to undertake was to see if the documentation was to be done within the OP, or was it to be hosted separately? One option was to continue with Confluence albeit under a smaller user base.

We finally decided to try things with a self-hosted WordPress. However, we did tweak quite a lot of things, listing all of these.

Customizing WordPress

Going into this project, I knew that this would be a continuous evaluation and test work. Sort of a rinse and repeat exercise. Hence, choosing WordPress was the obvious choice.

Custom Taxonomies

We setup PODs because of its ability to quickly add custom post types, custom taxonomies and easy relationships between the two. Using this we could easily keep a separate taxonomy for our credit platforms and systems.

Authorization and Access

Since we were on Microsoft o365, we setup an active directory plugin to enable tech team users to login using their o365 credentials. This also seamlessly created their user ids on WordPress and enabled access without the trouble of invites and importing users.

We also wanted a login gate to enable authorized access to our content. Thus a simple membership plugin to restrict content access was setup.

Similarly, we also setup a plugin that disabled the REST API so that the content wasnt available over unauthorized REST API calls.

We also setup a NACL rule on our AWS to prevent access to the system outside the office premises.

Integration with OpenProject

We also setup easy shortcodes that would pull data from OpenProject agile sprints and display those within a post, allowing for product teams to create east release notes followed by the sprint backlog with links to the OpenProject stories.

This was done using a custom plugin integration that we wrote. Obviously this could not have been possible without OP not having a REST API.

Document Templates FTW

This entire process would not have been successful without the new WordPress editor and its ability to create document template types within the post.

We took our most commonly used Confluence templates and set them up exactly in the same manner in WordPress. This enabled our product teams to seamless shift from Confluence to WordPress.

The fact that most discussions can also be captured as minutes with the exact time of publishing as the time when the meeting occurred also meant that we could also have a temporal view of our product development.

Thus with these simple and easy tweaks we shifted from Confluence to a self hosted WordPress.

WordCamp Mumbai 2023!

Back in 2015, when Mumbai WordPress meetup was kicked off with enthusiasm, I did not dream of this thing catching on and becoming something special. It was a good gathering of some pretty cool folks enthusiastic about WordPress. In 2014, my own understanding of WP was pretty smattering and thus it was with a bit of trepidation that I decided to attend a meetup in 2014.

This was our second year at 13 Llama, and it was pretty much the time when we had chosen to focus on WordPress as our primary stack. Earlier, we had done some development projects which were all over the place – Node, Core PHP, Smarty, Yii, Cake … we were all over the place and having found WP, it really did feel like home.

Mumbai WP Junta

Over the period of a decade, there are some familiar faces which have remained as part of this WordPress meetup. Some who have moved on and some who have faded into oblivion. But there are those few who have been a steady set of community leaders and built this friendly community of WordPress fanatics.

A whole lot of them are directly working with WP, but a bunch of these cool people just happen to use WP and have built some pretty cool things with it.

The hiatus

After we closed down 13 Llama Studio and the development arm, one of the things that I did miss is the conversations around WordPress and this community. Over the years, as I was busy in building out the technology at Homeville, I steered away from WP. At Homeville, we were using WordPress as a headless content management system (CMS). That’s it.

As our CMS requirements grew more complex, we kept stretching what WordPress could do for us. Over the next 5 years or so, a strong solid conviction grew that having a headless CMS is pretty much a no-brainer for most product organizations. It saves so much of time!

After COVID, most of the meetups and WordCamps had come to a stand still, however, this year the community reached out and setup a meetup and the organization for Mumbai WordCamp 2023

Mumbai WordCamp 2023

Coming back to attending WordCamps after so long was a great experience. Most of the organizers and regulars are known faces and thus, catching up with them after close to a decade was like meeting old friends and making some new ones!

The one thing that this community has taught me is that there are so many things to learn about a topic that you would want to include pretty much everyone in the conversation instead of just speaking to the devs! I remember the early days of this community when there used to be some pretty heated debates on who is better – the maker or the user! Thankfully people have matured :)

This year, I thought I would speak about our headless CMS and the pros and cons for the same. The talk went well – honestly, I thought that this topic would be considered a done and dusted kind of thing, however, much to my surprise a fair number of attendees were hearing for this for the first time.

Always learning

One great thing that I love about attending WordCamp is that you always get to learn something new! This time around, there were discussions on template parts, custom templates, how to contribute to WordPress without writing a single line of code, how to do public speaking (super useful!) and also an insight into the recent DPDP Act of India!

Seeing this trend continue, I decided to ensure that instead of focusing on financial technology only, attending these events and then applying the learning would help!

My slides on headless CMS

Now on to WC Ahmedabad!

How to setup Microsoft Word to post to WordPress

For those bloggers who publish directly to WordPress, life has been good. Especially after the Gettysburg editor, users got a live site, rich text editor which just worked. The user experience is very much like the much loved Medium editor and for quite some time this was the default mode in which I used to publish. Not that I write frequently these days! In fact, this post is after an hiatus of more than a year! One pet peeve I have with the existing WordPress editor is that in the aim of making writing easy, a lot of the advanced options have been hidden. Somehow it ticks me off and I haven’t been able to write as much as I wanted to.

Perhaps it was writers block, or a busy schedule, or just being plain lazy. I have no excuses for this and in future will try and be much more regular. However, this post is not about my lack of writing, its about this cool feature that I recently found about in the MS Office suite. Microsoft Word has always been a major editor for most individuals (be it a student or a professional). Would it not be super cool if we can somehow directly publish to our blog from MS Word? Let’s find out how!

Step 1: Create a new document

Open your MS Word (as long as its higher than version 2007), and search for a new document type – blog post. You will find this in templates and more if you haven’t earlier done this. Once you find the template, you will notice that there is a Create button.

When you set this up, Office will prompt you to setup your blog. Click on Register Now. This is where its going to get a bit technical, but don’t panic.

Step 2: Register your blog

In this list, choose WordPress. Now, you need to know the URL of your self-hosted or WordPress.com website as well the username and password that you use.

Add these details and make sure to click the Remember Password, else every time you try to publish to your WordPress site, you will be asked to key in the password.

Step 3: Write a draft

You are now done! Start writing your blog post, and once you are done, hit publish!

The post would then be submitted to your WordPress site with your credentials. That’s all there is to it.

Nitropack review

Those of you who are running some sort of a content management system (CMS) for your websites would be familiar with the problem of improving the site loading speed through different methods. From the age old caching methods of using op cache module, to using an application specific caching method such as WP-Supercache for your WordPress installations, the sheer variety of solutions out there is a lot.

For a non-tech webmaster (these days, this term seems like a conundrum!), it becomes difficult to choose. At the end of the day, what one ends up going for is how fast the website is loading and more importantly how is the web performance of the site.

Let’s take a look at what are some of the common factors that any webmaster would like at for their caching solution.

Server site rendering time

This is effectively how fast is your server giving the response on the browser. Let’s say that you are running a blog on a small instance or a shared hosting solution. This would usually have limited resources associated with it, be it computing or memory. For instance, currently, these pages are being served off a 512 MB droplet.

Needless to say as your traffic increases, these limited resources are then not enough to address the entire traffic and thus, the response time for all your visitors starts to increase. A simple solution for these problems could be to bump up the hardware and increase the computing and memory being made available for the server. The computing speed is obvious, but why the memory you might ask? Well, since most web servers are softwares running on servers (for e.g Apache or Nginx are the servers most commonly used for WordPress), these software processes have to run on the server. The more the traffic, the more the number of processes.

If you are running WordPress and are facing a load of traffic, and if you are running your database on the same server, then you might sometimes be seeing images like the one below –

MySQL error with WordPress

Seems familiar? A common reason for this is when there are too many apache2 processes and not enough memory to handle all of them. The server promptly terminates the other processes, including the MySQL daemon.

Caching to the rescue

This is where server side caching comes to the rescue. Take this blog post for instance. How many times in the week am I going to edit this? Not many right?

In which case, instead of the PHP script executing every time, why can I not serve the static (HTML pre-rendered) version of this post?

WP-Supercache does a good job as a plugin to do this, however, in this case, for supercache to execute, the WordPress PHP scripts are still executing. How can we stop those?

Another option would be to run caching at Apache or Nginx’s level. This is a much better approach since instead of calling PHP scripts, the server will serve the last known cached static file. The problem with this approach is cache management and storage.

With a small server, you may not have a lot of storage, and if you have been maintaining a content heavy site, then caching all pages might be a storage intensive process. The expectation from your instance’s compute power also increases.

This is where you will find reverse proxy servers shining.

Reverse proxy servers

A reverse proxy server is a server that sits in front of the web servers and forwards client requests. One of the older versions for PHP based websites was Varnish. Nginx also offers this, and newer versions of Apache also do offer this functionality.

What the reverse proxy does is for each request, it caches the response from the down stream server and serves that response for each subsequent request. Think of it as a smart cache manager that sites seamlessly between your CMS and the user.

Traditionally, these were a bit difficult to setup, and therefore were the domain of only the tech oriented webmasters. However, of late, there have been a couple of smart SasS based reverse proxies, and that’s what I wanted to write about.

Cloud-based reverse proxies

A cloud based reverse proxy is a reverse proxy server that’s not on your network/server infrastructure, but rather hosted as a separate service that you choose to buy.

I had initially tried Cloudflare, but wasn’t really impressed with the results. There were a couple of Indian service providers as well, but the outcome wasn’t that great.

Then, one of my colleagues pointed me to Nitropack. Getting started with Nitropack was a breeze and I could easily set this up. There was also a plugin to be installed in my WordPress setup and that’s about it. Nitropack even had a CloudFlare integration (since I manage my DNS on CloudFlare), where it made the relevent DNS entries and I was able to use this without too much of a hassle.

I am currently on the free plan, but the immediate impact on my server response times, and my web performance has been substantial.

If you are a website owner and if you have been harangued with web performance issues, do give this solution a try. It makes a sufficient impact on your response times.

How to Clean an Infected Site — WordPress.tv

If you have been playing with WordPress themes or providing WordPress based web builds as part of your business, then you would have installed a nulled theme in your life.

What’s a Nulled theme?

A nulled theme is a premium theme that’s released by someone in the wild. There are multiple such sites.

Wait, isn’t that piracy?

I consider it so. But this is where two different ideals are conflicting. That’s space for another post.

So what happens when you do install a nulled theme … chances are it might contain a malware.

An infected site

This is a nightmare to handle. The worry is not at the technical front, the worry is the grief the publishing team feels … as someone who regularly writes – I would feel bad if my blog were to get compromised.

Here’s a methodical way to sort yourself out.

https://videopress.com/embed/4vjvbhOr?hd=0

Immensely passionate about technology, Owen has built his career on his innate ability to understand and dissect organisational challenges and apply timely and effective solutions, typically focusing on emerging techniques and systems. Owen has been using WordPress since version 2 and runs a number of sites for himself and his clients. He is a Certified Ethical Hacker (CEH) and tries to learn everything about the WordPress security scene. His talk is on ‘Keeping WordPress secure, how sites get infected and how to clean them when they do.’ He decided to talk about malware in WordPress, because it’s a problem that effects a lot of people. he explained malware is just code, code in the same type of code that WordPress is, if you understand what it does and how it does it then there are steps you can take to avoid it.

via Owen Cutajar: How WordPress Malware Works and How to Clean an Infected Site — WordPress.tv

Taking a look at Jetpack Stats

Let me state upfront that I love Google Analytics. I use it at work in 13 Llama Interactive to measure the effectiveness of the campaigns that my team runs.

That being said, I will try and not be too biased about comparing Jetpack Stats to Google Analytics. As a marketer, the way I look at an analytics package is from an ability to extract a fair amount of data.

However, Jetpack Stats is on top of WordPress and available to all WordPress based sites which are connected to the WordPress.com site. This makes Jetpack Stats primary user base as bloggers.

Let’s see what Jetpack Stats has to offer.

The wp-admin Dashboard Integration

Jetpack Stats puts a nice pretty looking graph on the wp-admin Dashboard. This is how it looks like for my site –

Jetpack-Stats-on-wp-admin-Dashboard

Now, this is fairly similar to the Audience Overview you get when you check out Google Analytics.

Google-Analytics-Dashboard

Straight off the bat, I prefer Jetpack Stats overview as opposed to the one given by Google Analytics. Jetpack Stats also provides me with how my posts have performed this day, this report would be available in GA witin the Behavior section, the Site Content report.

The Top Searches that you see in the screenshot would have been helpful had it been accurate. Unfortunately, Google accounts for the majority of organic traffic on my site, and most of that traffic is encrypted. Thus, these keywords that you see (really, I rank for ‘big ass girl dunes’) are not a complete set!

Jetpack Stats does not talk to Google Webmaster Tools, which now is the only source of this keyword data.

Jetpack Stats Posting Activity

One awesome feature about Jetpack Stats is the posting activity screen –

Jetpack-Posting_Activity

This data is shown with a correlation of average traffic per day as well as traffic per month. You could always get this data in Google Analytics (here is a useful post I had written some time back – Google Analytics for Content Marketers).

It’s just this kind of insights that makes me keep Jetpack around for my measurement requirements.

Jetpack Stats vs Google Analytics

Jetpack Stats is a very lightweight tool and it would be useful for a simple blog. However the minute we enter the realm of finding user engagement and performance marketing, Jetpack simply does not have those features yet.

This is where Google Analytics shines through with its Event tracking.

Having said that, Jetpack Stats is an apt solution for a user who is more focused on the publishing process.