Skip to main content

The Technical Design of FluentCommunity Plugin & Some Confusions Cleared

The FluentCommunity plugin is a WordPress plugin that allows you to create a community website with WordPress. It is designed to be easy to use, flexible, super fast, and super responsive, so you can create a scalable community website that people will love.

Side Note:

For the last couple of weeks, I’ve received tons of messages from some of my friends (also customers) about someone developing a similar plugin and providing some confusing information about FluentCommunity. Here are their points:

  • FluentCommunity uses custom database tables that are outside WordPress!
  • It's built on JavaScript and not WordPress-native!
  • It's a side-loaded plugin and will not work with other plugins!
  • Since it's based on JavaScript, any integration will be super expensive!
  • It's expensive!

So, I decided to write this article for @everyone to clear up all the confusion and provide a clear picture of the technical design of the FluentCommunity plugin.

Technologies/Design System Used in FluentCommunity

  • Separate, well-designed database tables for storing associated data.
  • VueJS 3
  • Vite (for compile & building all the assets)
  • Element-Plus for building the UI components
  • WordPress REST API

Let’s discuss each of these points in detail and understand why we chose these technologies/design systems.

Why Does FluentCommunity Use Custom Database Tables?

Any community plugin generates a lot of complex data. Most of this data is user-generated, such as posts, comments, reactions, courses, lessons, quizzes, etc.
We could use default WordPress database tables like posts, postmeta, comments, etc., to store this data, but it would make the database structure complex and slow. Heavily using postmeta would lead to complex MySQL queries that are extremely slow.

Thus, we decided to create separate tables for storing this data. This keeps the database structure clean and ensures the website is super fast.

Why Does FluentCommunity Use VueJS 3 Instead of the WordPress Interactive API?

VueJS 3 is a modern JavaScript framework that allows you to build interactive user interfaces. It’s super fast and highly responsive. Millions of developers use VueJS to build their web applications.
We believe that any library or framework should be used based on the project requirements. For a simple plugin, you can use the default WordPress API to build the user interface. However, for a complex community plugin, a modern JavaScript framework like VueJS or React is a better choice. This is the same reason why Gutenberg (the WordPress Editor) uses ReactJS.

Our goal was to make FluentCommunity super fast, highly responsive, and lightweight. As a Single Page Application (SPA), it doesn’t reload the entire page repeatedly but fetches only the required data in JSON format and updates the UI directly in the browser.

While we could use the WordPress Interactive API, it would create a significant server load to compile templates and wouldn’t be as fast or responsive as VueJS.

Based on these criteria, we chose VueJS 3 for building the FluentCommunity user interface.

Why Does FluentCommunity Use the WordPress REST API?

We believe all modern WordPress plugins should use the WordPress REST API. It’s a modern way to interact with WordPress data. WordPress itself uses REST API for many admin pages like the Site Editor and Block Editor. Based on the new roadmap, WordPress will increasingly rely on REST API.

Another advantage is that REST API allows the same endpoints to be used for building mobile apps, desktop apps, and more.

A Few More Points to Clear Confusion/Misinformation

Misinformation 1: FluentCommunity uses custom database tables that are outside WordPress!

Yes, FluentCommunity uses custom database tables to store associated data. However, this is not “outside WordPress.” Big plugins should use custom tables for better performance and cleaner database structures. WooCommerce spent millions of dollars and years migrating its data from postmeta to custom tables. So, using custom tables is a standard practice, not outside WordPress.

Misinformation 2: It’s built on JavaScript and is not WordPress native!

Yes, FluentCommunity uses VueJS 3 for its UI, but that doesn’t make it non-native. This modern approach ensures a fast and interactive experience, similar to why Gutenberg uses ReactJS.

Misinformation 3: It’s a side-loaded plugin and won’t work with other plugins!

No, FluentCommunity is not side-loaded, headless, or a SaaS solution storing data on the plugin author's server. It is a purely self-hosted, open-source plugin. In version 1, we avoided loading other CSS and JS files to improve speed and prevent conflicts. In the next quarter, supporting your default theme is a top priority.

Misinformation 4: Since it’s based on JavaScript, any integration will be super expensive!

This depends on who you hire! FluentCommunity’s API is simple and well-documented. Developers can create integrations in hours, not days or weeks. Recently, Flowmattic integrated over 15+ actions and custom workflows into their automation plugin in under an hour. Check out our PHP API docs.

Misinformation 5: It’s expensive!

While some may compare it to cheaper plugins, FluentCommunity is competitively priced. From 1000+ customers, only 2–3 people have mentioned pricing concerns.

Footnote on the Confusions

Healthy competition is good for the market—it drives innovation and results in better products. Personally, I respect all companies building similar products. When I meet them at WordCamps or other events, I enjoy discussing ideas with them. I don’t view companies with similar products as competitors. The WordPress market is vast, with ample room for everyone.

However, spreading misinformation harms the market. It not only damages the company’s reputation but also confuses customers. Let customers choose what they want. Build a good product, and people will love it. Spread misinformation, and people won’t trust you.

Conclusion

I hope this article helps you understand the technical design of the FluentCommunity plugin and clears any confusion about it. Please feel free to add your comment if you have any queries about technical design.

Useful Links:

PS: Please avoid mentioning any person or company name in the comments. I respect all companies and don’t want to create a bad impression on anyone.

Carlos Rodera

Thanks for clearing the points, the reality is that is crazy fast and works beautiful, I'm sure the improves will come in the processes with time but the base of it is amazing.

Nelson Miller

I'm glad you shared this. I have seen the types of comments you are referring to and was not pleased by them. It's easy to be proud of our own work, but it should never mean we have to criticize others to make ours look better. Well done for keeping the high road here, and for making a quality product that is well thought through.

Ferenc Sárosi

There are always going to be people who have lots of problems for every solution. As long as they are busy bitching, give way to those who will do the impossible. Thank you for this fantastic solution. All I have left is to use and enjoy it.

Jonathan Gwyer

Great post, and that single line PS at the bottom is a brilliant example of positive attitude a great approach to business.

Sella Yoffe

Thank you, Shahjahan Jewel 

I was amazed by what you built even before you made it a product :)

I was never so excited about "a plugin release" as I am with FluentCommunity. I'm 200% counting on you and the team to do what is best. with Flowmattic integration or FluentCRM integration, there are endless opportunities with no limits to integrations. Appreciate all you do 🙏

Shahjahan Jewel

Sella Yoffe I think all the requests like this were the main reason we converted the internal tool into a product. I did not have any plan for this as a product.

Sella Yoffe

Shahjahan Jewel, im so glad you did and impressed by the results, the possibilities, and the future of FluentComminity.

Gee Adriaansz

Shahjahan Jewel We're glad you did :)

Bob Edward

Shahjahan Jewel  We're also glad you guys did :) Please, do not bloat it with lots of settings and options that people are asking. Keep this plugin light, clean and easy to setup and run! Thanks for your awesome work!

Joost den Hartog

Amazing plugin. Not expensive for what is does. It has added so much extra value to our business model.

Miljenko Bulaš

Great post, Shahjahan Jewel, I respect how you approach these kinds of issues. It's also great to read about the backend structure of the Community!

I can't understand why anyone would argue if a plugin uses custom tables. It's THE WAY to go nowadays. I try to avoid plugins that (mis)use native WP tables.

Achim Kirchmeier

Shahjahan Jewel Jealous competitors who take advantage of the half-knowledge of some users can be frustrating! You have chosen an elegant way to deal with it. Congratulations!

I totally agree! the only thing I'm missing is an easy way to translate. We as developers know what to do, but our customers do not.

Shahjahan Jewel

Marco di Guglielmo We used all the standard practices to translate. For the next version, this plugin will be available on the WP Polyglot project so people will translate and make it available for everyone.

Itachi Sensei

Shahjahan Jewel Can I translate the plugin now to hungarian language?

Vladimír Smitka

Thanks for the summary, most of the points never bothered me. However, I wonder if it will be possible to interfere with the frontend in some official way. I wouldn't have a problem building a new vue app/custom theme with my own modifications. But as far as I know, there is no way to have the custom frontend loaded yet, and the source files for the build are also not available.

Specifically, I would like to add for example a custom button (upvote, report to moderator) next to the like button on reply. It could be possible to handle this using for example systemJS, but there are other more complex (module federation) or simpler methods (hacking window object).

Shahjahan Jewel

Vladimír Smitka We have JS api but not been documented yet. I will release the documentation once things settled down. Also report to moderator will be available next month.

Vladimír Smitka

Shahjahan Jewel Amazing, looking forward and thank you for your reply!

Tobi Salami

If a person didn't already make the purchase of this plugin, this is enough reason.

We can all see clearly that he's a person who will remain true to the vision of his product!

Tabitha Hawkins

not sure what this other community program is, but I’m all in on FC! I believe in this solution and am excited to be here, watching it grow. I’ve stopped looking at other apps and I’m invested in what FluentCommunity is and will become!

Pierre

Great mindset Shahjahan Jewel !
Thanks for all that, but especially for the work you and your team are doing for years now.

Sheryl Coe

This is very helpful. I have heard some of those opinions, so thanks!

Manoj Sharma

Loved the footnote comment about healthy competition—it’s a great perspective and resonates well! It’s a shame that some people are spreading misinformation, as it only creates confusion instead of fostering growth. As for the rest, it’s a bit too technical for me, which is why I prefer to leave it to the expertise of the Ninja Team and Shahjahan Jewel . My confidence in the team and Jewel’s leadership gives me complete trust in the direction you’re taking with FluentCommunity and rest of the Fluent products. Keep up the great work!

K A

David Shin

Shahjahan Jewel Thanks.

Why Does FluentCommunity Use Custom Database Tables?

Any community plugin generates a lot of complex data. Most of this data is user-generated, such as posts, comments, reactions, courses, lessons, quizzes, etc.
We could use default WordPress database tables like postspostmetacomments, etc., to store this data, but it would make the database structure complex and slow. Heavily using postmeta would lead to complex MySQL queries that are extremely slow.

Thus, we decided to create separate tables for storing this data. This keeps the database structure clean and ensures the website is super fast.

My questions are,

  1. If data is stored externally, where is it stored?
  2. Is that data accessible to the plugin owner?
  3. Is it possible for community plugins to backup their personal data?

This is something I've been wondering about while using the plugin. Please answer me.

Shahjahan Jewel

David 

  1. Data is not stored externally rather it's stored in custom database tables so it will not bother your default WordPress page / post performances.
  2. As a plugin author, we don't have any access over your data. You host your community, you own and host your data.
  3. You can backup your database using any backup plugins.

Jose Luis Duron

Man!
I applaud you for the way you approached this topic.

It has caused me a lot of sadness/disappointment to read the comments that led to this article.

Keep up the good work!

Debo Ogunrinde

Shahjahan Jewel keep your abundance mentality- enough fish for everyone. No need to disparage the competition…time will tell.

Eduardo V

Excellent way of clarifying and substantiating the decisions involved in the development, this just reinforces even more the credibility and trust we have placed in you.

Aaron Liang

I’m happy to see healthy competitions. They will drive innovation and faster improvements, and we can all benefit from that.

In terms of the technicals, you are making all the right decisions. I just hope that the development of fluent comm does not slow down when you move on to the next big project, whatever it may be.

Shahjahan Jewel

Aaron Liang ⭐ I am not alone in the company. I do very little work. I have a team of 120+ highly skilled members.

well now I’m curious about the naysayers. Where can i read up on that ?

Paul Bradley

Very well written post! Clear and informative. Thank you.

Tim Olukayode

Well, I am one of many who raised concerns about integrating with other plugin. I must confess that you did justice with this post. My doubt is completely cleared and I am happy that I got a license.

Trevor Lowing

Shahjahan Jewel When hosting on WP are there any special consideration for ensuring proper data backup? Are passwords encrypted? Is the data encrypted?

Akira Zabala

Thanks for the detailed explanation Shahjahan Jewel , really useful to understand where are we going with the FluentCommunity ship! I'm not sure this is answered yet, but is it reasonable to think loading wordpress pages and shortcodes inside the community will be available soon? Got a project with lots of content from other plugins and need to be able to integrate all of them into the community experience.

Thanks again and keep up the awesome work! 💪

Jonathan Gwyer

Akira Zabala I get the impression the first thing will be being able to add the FC sidebar and menu to other pages on your site.

On my first community I've already got a pretty seamless switch between portal content and non-portal content, the users don't even notice.

Jonathan Gwyer may I see your website?

Jonathan Gwyer

Tindaro Battaglia Inside portal...

Jonathan Gwyer

Outside portal...

Jonathan Gwyer

Once we have the sidebar and I spend a bit more time on it (this is a bit quick and dirty) it will be better.

Jonathan Gwyer

Subscriptions handled with SureCart

Akira Zabala

Jonathan Gwyer I see your point, but at the same time I think it may defeat the purpose of the platform being able to pull data without refreshing the whole page, as Jewel was detailing previously. I would love it to work in any way possible rather than not, but on this instance it may be even better to build it in the right way from the ground up. Hope the platform has this kind of scalability, as I'm really interested on creating a big community 💪🤓

Jonathan Gwyer

Akira Zabala I think the idea is the portal is fast because it doesn't pull pages or shortcodes inside it. As soon as you do, you lose all the performance benefits.

That's why they are working on making the sidebar and menus available in pages, and a shortcode to embed the portal within a page.

Akira Zabala

Jonathan Gwyer That's a fair point, let's see how the product evolve! It's only a win for me either way 😀

Jonathan Gwyer

Akira Zabala absolutely - I've got high hopes for 2025!

Sam Jansen

Jonathan Gwyer Hello, how are you displaying header and sidebar on custom page? with a shortcode? What tool did you use to integrate Surecart with Fluent community to five people access to differant spaces/courses. Are you doing this with FluentCRM?

Jonathan Gwyer

Sam Jansen I just customised my header to look like the FluentCommunity header - users cannot tell the difference.

Yes, using FluentCRM to add and remove spaces/courses depending on SureCart purchases.

Sam Jansen

Jonathan Gwyer nice! What happens when user cancels surecart membership plan or does not pay. Will they automatically be removed from the circle/course?

Jonathan Gwyer

Sam Jansen you can set a FluentCRM automation to trigger when SureCart revokes the purchase (i.e. the subscription is cancelled).

When the volume of sites I'm running justifies the cost, I will probably invest in WP Fusion as this will simplify things further. https://wpfusion.com/documentation/ecommerce/surecart/

Kaneisha G.

Jonathan Gwyer I own Surecart and would look to use Surecart for subscription payments in FC. How do you get their Surecart info to show up in the My Account area of FC?

Jonathan Gwyer

Kaneisha Grayson I saw your other post, which looks like you're getting some good answers on.

Our users don't have their Surecart info in the My Account area of FC, but we've made the My Account page on Surecart look as much like FC as we can.

Going a bit further with this currently, using the FC theme from https://fluentcommunityaddons.com/ - but you don't need to go that far!

Kaneisha G.

Jonathan Gwyer got it. Thanks!

Inspiring post Jewel!

Frank Adeche

how about putting an option to turn off powered by fluent community for the free version . this is what drove me off peepso after a yearly subscription and we couldnt afford the renewal as peepso free is loaded with ads to upgrade . free is really not free if we advertise your product and moreover any techie can still decipher its FC anyway

Frank Adeche

its great stuff anyway you have put on

Frank Adeche

also put an invite for upgrade list so when we can afford the lifetime subs we still get it . not everyone can afford this in january a lot of people are just learning about FC

Elaine Montoya

Shahjahan Jewel do you have test data yet on server load, especially as the database size increases? Also server recommendations to meet such loads? Will running Fluent Community add so much load to the server that it would make sense to do something like run a separate RDS instance for the database?

Holger Gruenhagen

Shahjahan Jewel Great post! It’s really helpful to see you clearing up the "non-native" misconceptions with such a transparent breakdown of the architecture.

I am curious about your Vue.js decision:

  • Why Vue 3 over Alpine.js? Alpine is often seen as the "modern jQuery" for WordPress because it stays closer to the DOM and avoids the context-switching of a heavy SPA framework. Given that FluentCommunity is so deeply integrated with WP, did you consider Alpine to keep the footprint smaller, or did the need for complex state management and a component-based architecture make Vue the clear winner for you?
  • Why Vue 3 over React? Since Gutenberg and the WordPress core team have essentially "standardized" React for the admin UI, many developers stick to React to leverage the @ wordpress/* packages and shared components. Was it the developer experience (DX) of Vue’s Composition API or perhaps the performance of Vite that steered you away from the "WP-standard" React ecosystem?

I’m curious if there were specific technical roadblocks you anticipated with the other frameworks that Vue 3 solves more elegantly for a community platform.

Keep up the great work—the performance of FC is already speaking for itself!

Shahjahan Jewel

Holger Gruenhagen Thanks for the questions.

  • We could use any framework or JS Library, actually. Alpine is great but check the Vue's development. It's super fast, 100% community-driven, super low memory footprint and most importantly, it's super easy to maintain a large codebase. About Alpine JS: It's a micro library inspired by VueJS so you can say, Alpine is a subset of Vue.
  • React: Kind of the same answer. In almost all of our products, we prefer the view because of its simplicity. React is great for a project like Gutenberg. React can get really really ugly as there has not straight-forward convensions so it's up to the related devs. In Vue, they have a clear convension which any devs can follow easily and build complex apps without messing up.

When we choose a library or a framework, we just don't choose blindly. It's always about the application, which will be the best for the implementations, managing the codebase for years. Sometimes, we use different JS lib for different parts in a same project.

For example: In FluentBooking, the admin panel is built with vue3 but the frontend panel (Booking) is built with Svelte and I think that was the perfect choice.

Holger Gruenhagen

Shahjahan Jewel Hey Jewel, Thanks for taking the time to give such a detailed breakdown! I truly appreciate the "behind the scenes" look at your architectural decisions.
Wishing you and the Ninja Team continued success with the upcoming updates!