In our previous article, Connecting AI and CMS: Building websites with AI and maintaining it in Joomla CMS, we mostly presented a vision of integrating artificial intelligence with content management systems. Today, we are following up on that vision with exciting news: we now have a complete component available in Alpha version!
Vision:
We have successfully removed two major obstacles that previously hindered the process: the necessity to use Node.js and the restriction of using only a local model.
As a result, Phoca AI can now be used on any Joomla 6 instance. However, before you install Phoca AI, we must emphasize that it is currently in Alpha version and has not yet undergone complete security audits. Therefore, it is highly recommended to test it on a localhost environment.
Alpha version:
Install the following extensions:
- Phoca AI component
- Phoca AI template (this package also includes the Phoca Particles module)
and copy demo images (optional) - you can copy the images that serve as demo content when generating websites. Please note: this is not a standard Joomla installation package. It is a regular zip archive that must be extracted and copied directly to the root of your Joomla installation (the package contains a directory tree, meaning the images will be automatically copied to the images/phocaai folder).
You can download all ZIP packages on Phoca AI download website.
It is also important to mention that we are just at the beginning of our journey. Since this is an Alpha version, not all the necessary data is complete yet. Whether we are talking about the list of categories, structures, rules or styles. These will be created and added gradually over time.
In the following image, you can see how Phoca AI works:

If you have successfully installed the Phoca AI component, the Phoca AI template, and the Phoca Particles module, go to Options within the Phoca AI component. There, set the path to your local model, or select an external model and enter your API key. Now, navigate to the Generate section, where you can enter a prompt and let the AI create a page for you.
Recommendation: It is always a good practice to start with a clean installation of Joomla. Furthermore, make sure to clear any existing demo data before each new generation.
Once you create a page you like, you can save it as a preset and load it again at any time (in presets view). All the generated content is displayed via standard Joomla modules (specifically the Phoca Particles Module). This means that if you need to make adjustments, you simply go to the module list, find the respective module, and edit it just like you normally would in Joomla.
We are excited to see what you create with Phoca AI. However, please remember that as an Alpha release, your feedback is crucial for us to move toward a stable version.
If you decide to test this component and encounter any bugs, or if you have suggestions for new features and improvements, please let us know. You can post your feedback, bug reports, or questions in the Phoca Forum.
Thank you for being part of this journey and for helping us shape the future of AI in Joomla.
The following article was updated in 2026 and added information about PHP 8.5.
Developers often require the ability to run multiple PHP versions in their development environment. This article provides a step-by-step guide on setting up a LAMP stack (Linux, Apache, MariaDB, PHP) with multiple PHP instances on Ubuntu/Kubuntu 23.10 Linux in the year 2024.
In order to have multiple versions of PHP running simultaneously on Apache, you need the fcgid apache module, which helps us run PHP scripts using FASTCGI. At the same time, it can then run these scripts using different PHP versions. And we do this by creating a virtual host for each PHP version.
Install PHP 7.4, 8.2, 8.3
Before beginning the installation process, ensure that your Ubuntu/Kubuntu system is up to date by running the following command:
sudo apt update
Start by installing Apache version 2:
sudo apt install -y apache2 apache2-utils
Check if the Apache service is running:
systemctl status apache2

Verify in your browser:

Since we'll be doing development, we'll set the rights and ownership for the server root folder right away (user: jan, group: jan):
sudo chown jan:jan /var/www/ -R
Proceed with the installation of MariaDB:
sudo apt install mariadb-server mariadb-client
As with Apache, we can check if the service is running:
systemctl status mariadb

Now we will perform the initial setup of MariaDB, mainly setting the password for the root user. Run the following command and follow the questions:
sudo mysql_secure_installation
For example:
Switch to unix_socket authentication? ... Y
Change the root password? ... Y
Remove anonymous users? ... Y
Disallow root login remotely? ... Y
Remove test database and access to it? ... Y
Reload privilege tables now? ... Y
And now we will install multiple instances of PHP. There will be two oddities:
1) to avoid conflicting PHP libraries, we will uninstall all the PHP libraries already installed.
sudo apt-get remove 'php*'
sudo apt-get purge 'php*'
2) Add a new specific repository to our system that will allow us to install the latest PHP versions
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update && sudo apt upgrade
After that, let's move on, install the apache module fcgid:
sudo apt install libapache2-mod-fcgid
And proceed to install PHP versions (along with PHP we list various modules here, go through the list of modules and you can delete the modules that are listed here and you don't need them)
sudo apt install php7.4 libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-cli php7.4-opcache php7.4-readline php7.4-phpdbg php7.4-fpm php7.4-cgi libphp7.4-embed php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-dev php7.4-imap php7.4-mbstring php7.4-soap php7.4-zip php7.4-intl php7.4-ssh2 -y
Open and edit following file: /etc/apt/sources.list.d/ondrej-ubuntu-php-mantic.sources
Change string "mantic" to "jammy"
then update the repository information:
sudo apt update
And then we can install version 7.4 or 8.3.
So we run the PHP 7.4 installation again (don't run it if everything was fine before).
And let's see an example of another problem, it may be that some library is in conflict, e.g:
The following packages have unmet dependencies: php7.4-intl : Depends on: libicu70 (>= 70.1-1~).
In such cases, you have to search the Internet for a solution and resolve the conflicts separately, in our case for the library: php7.4-intl we resolve them by reinstalling libicu70:
wget http://ftp.osuosl.org/pub/ubuntu/pool/main/i/icu/libicu70_70.1-2_amd64.deb
sudo dpkg -i libicu70_70.1-2_amd64.deb
And now, for the third time, install PHP 7.4 (don't do it if you managed to install it successfully before).
sudo apt install php8.2 libapache2-mod-php8.2 php8.2-common php8.2-mysql php8.2-cli php8.2-opcache php8.2-readline php8.2-phpdbg php8.2-fpm php8.2-cgi libphp8.2-embed php8.2-xml php8.2-xmlrpc php8.2-curl php8.2-gd php8.2-dev php8.2-imap php8.2-mbstring php8.2-soap php8.2-zip php8.2-intl php8.2-ssh2 -y
sudo apt install php8.3 libapache2-mod-php8.3 php8.3-common php8.3-mysql php8.3-cli php8.3-opcache php8.3-readline php8.3-phpdbg php8.3-fpm php8.3-cgi libphp8.3-embed php8.3-xml php8.3-xmlrpc php8.3-curl php8.3-gd php8.3-dev php8.3-imap php8.3-mbstring php8.3-soap php8.3-zip php8.3-intl php8.3-ssh2 -y
sudo apt install php8.5 libapache2-mod-php8.5 php8.5-common php8.5-mysql php8.5-cli php8.5-readline php8.5-phpdbg php8.5-fpm php8.5-cgi libphp8.5-embed php8.5-xml php8.5-xmlrpc php8.5-curl php8.5-gd php8.5-dev php8.5-imap php8.5-mbstring php8.5-soap php8.5-zip php8.5-intl php8.5-ssh2 -y
php8.5-opcache instruction was removed for PHP 8.5 because it is now included in core.
We can check if all PHP instances are installed:
ls -la /var/run/php/
The fpm service takes care of running all PHP instances. Before we start it or check its status, let's modify the user so that PHP scripts have the ownership and rights of the same user who creates folders on the server and uploads files to them.
Open and edit the following files, replace all occurrences of "www-data" in these files with the user (and group) name, in our case it is "jan":
/etc/php/7.4/fpm/pool.d/www.conf
/etc/php/8.2/fpm/pool.d/www.conf
/etc/php/8.3/fpm/pool.d/www.conf
Now start the fpm services (restart them if they are running):
sudo systemctl restart php7.4-fpm
sudo systemctl restart php8.2-fpm
sudo systemctl restart php8.3-fpm
By running the following command we can check the status of the service (e.g. for PHP 8.3)
sudo systemctl status php8.3-fpm

Let's enable some necessary apache modules:
sudo a2enmod actions fcgid alias proxy_fcgi rewrite
Restart Apache:
sudo systemctl restart apache2
Now we will create virtual hosts, for all PHP versions we will create our own file in the folder:
/etc/apache2/sites-available/
we create the following files:
site74.test.conf
site82.test.conf
site83.test.conf
Each of them will contain the following instructions (PHP 8.3 example):
<VirtualHost *:80>
ServerAdmin Site
ServerName site83.test
ServerAlias www.site83.test
DocumentRoot /var/www/site83.test
<Directory /var/www/site83.test/>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
<FilesMatch \.php>
SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
Once we have these files created and saved, then we enable all the pages:
sudo a2ensite site74.test.conf
sudo a2ensite site82.test.conf
sudo a2ensite site83.test.conf
And reload apache:
sudo systemctl reload apache2
To make sure that our system knows the names of our test pages, we will modify
/etc/hosts
and add this line:
127.0.0.1 localhost site74.test site82.test site83.test
In /var/www/ folder
create the following subfolders for our test domains:
mkdir /var/www/site74.test
mkdir /var/www/site82.test
mkdir /var/www/site83.test
We create them without sudo, using a user that also runs PHP scripts, in our case jan and insert a PHP file index.php into each of them, which will contain:
<?php
echo phpinfo();
?>
Every time we make a change to the settings (e.g. php.ini, etc.) we restart both apache and fpm
sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2
Then enter the following URLs into the address bar one by one:
site74.test

site82.test

site83.test

By following these steps, you can successfully set up a LAMP stack with multiple PHP instances on Ubuntu/Kubuntu 23.10 Linux in 2024. This configuration allows developers to work on different PHP versions simultaneously for their development needs.
It is true that a modern one-page website can be generated in seconds using AI or static site generators. While this speed is impressive, we have chosen to use a Content Management System (CMS) for this project for critical reasons like future management and scalability.
In our latest video tutorial (embedded below), we demonstrate how to build a fully functional One-Page Website using Joomla CMS. We take a very simple and efficient approach: rather than complex coding, we build the entire structure using Joomla modules. This allows us to take a client’s raw text and turn it into a clean, easily editable website in just a few minutes.
Last time, we explored how AI can generate websites instantly. But relying on static HTML brings significant challenges the moment a project is handed over to a client.
Static HTML is rigid. Updating content, adding new languages, or expanding a one-page site into a multi-page web application requires manual coding. If a client wants to change a paragraph or swap an image, they cannot do it without technical knowledge. As requirements grow, perhaps adding eCommerce or advanced user features, a static site faces limitations in its flexibility and capability.
By choosing a Content Management System (CMS) over static files, we prioritize the future of the website. A CMS handles the heavy lifting, allowing for:
For this project, we chose Joomla because it offers a perfect balance of power and flexibility. Unlike some platforms that rely heavily on bloated plugins, Joomla is a robust system built on modern code architecture.
Key advantages of using Joomla for this build include:
In the tutorial below, we guide you through the complete process step-by-step.
Since this is a one-page website, we take a slightly different approach than the standard "article-based" structure. Instead, we utilize modules to build distinct rows and containers.
To achieve a lightweight and responsive design, we utilize:
We walk through setting up the Home banner with animations, an About Us section, Team profiles, References, and a Contact form. Finally, we demonstrate the power of Joomla's customization by using user.css to globally change the color scheme in seconds, proving that you can have a custom design with the stability of a CMS.
In this article, we’ll explore how artificial intelligence can be integrated into a CMS environment - specifically Joomla CMS - to create complete websites quickly and flexibly. We’ll also walk through a demonstration where AI is used to generate two different websites inside Joomla. This article is intended primarily as inspiration and as a starting point for discussion about the possible directions Joomla CMS could take when working with AI. The system shown here is just one of many potential ways AI and a CMS could collaborate.
Watch the video below to see how Joomla CMS, together with several specialized extensions, could be used to build two example websites from start to finish.
As we mention in the video, an important aspect of combining AI with a CMS is that creating a website with AI is only the first step. We also need to be able to modify the site, make adjustments, add new features, or integrate ready-made solutions. This is where the CMS plays an irreplaceable role.
Alongside Joomla CMS itself, we’ll be using three key extensions from Phoca:
For our demonstration, we’ll give AI two different prompts:
"Freelance software developer. There will be a comparison table with three main pricing plans: Basic, Standard, and Pro. The site should include menu links like Portfolio, Services, and Contact. The developer is called 'Spectrum' and offers software development. The page should contain bold colors."
"Restaurant website that specializes in selling pasta, pizza, fish, and salads. There should be menu links like Menu, Order Online, and Find Us."
In each case, the prompt is sent to the AI, which then generates the website directly inside Joomla - complete with initial layout, structure, and styling.
AI gives us a strong starting point by generating the basic structure and design. The CMS - in this case Joomla - then takes over as the main platform for editing, expanding, and integrating specialized extensions for specific needs.
This collaboration between AI and CMS can take many forms:
The environment in which the CMS runs plays a crucial role. The setup shown in our demo is best suited for a SaaS-type environment, because it relies on three different technologies working together:
Such an environment is rarely available on typical shared hosting. However, all is not lost - Node.js could be replaced by PHP for certain tasks, and AI queries could be sent to external services. With the right adjustments, this system could run even on shared servers.
To replicate what you see in the video, the following would be needed on a single server or machine:
Design is one example where a CMS can help us be more flexible.
While AI tools might allow us to change the design only through prompts, combining AI with a CMS opens up more possibilities:
All of this gives us a wider range of options and greater flexibility.
A key decision is deciding what to let AI create from scratch and what to base on pre-prepared datasets.
Example: Color Schemes
Do we allow AI to generate colors freely, or do we supply professionally designed palettes and let AI choose the most appropriate one?
Example: Images
We can let AI generate them, or we can provide a curated dataset. However, in most real-world cases - such as restaurants - custom photography is essential. A restaurant will almost always want to feature images of its actual interior and dishes rather than entirely AI-generated visuals.
The integration of AI into a CMS like Joomla opens up exciting possibilities for rapid website creation. Whether you opt for fully automated generation or a hybrid approach with human-curated assets, the combination of AI’s creative speed and Joomla’s customization power can significantly accelerate the development process while maintaining full creative control.