<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Wellington Pragidi</title>
    <description>The latest articles on DEV Community by Wellington Pragidi (@wellingtonpragidi).</description>
    <link>https://dev.to/wellingtonpragidi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4073861%2F40a994f1-b8ff-4383-916f-573a7ae5a661.jpg</url>
      <title>DEV Community: Wellington Pragidi</title>
      <link>https://dev.to/wellingtonpragidi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wellingtonpragidi"/>
    <language>en</language>
    <item>
      <title>I Didn't Set Out to Build an Open Source CMS. I Just Needed One</title>
      <dc:creator>Wellington Pragidi</dc:creator>
      <pubDate>Mon, 07 Sep 2026 15:18:58 +0000</pubDate>
      <link>https://dev.to/wellingtonpragidi/i-didnt-set-out-to-build-an-open-source-cms-i-just-needed-one-1cco</link>
      <guid>https://dev.to/wellingtonpragidi/i-didnt-set-out-to-build-an-open-source-cms-i-just-needed-one-1cco</guid>
      <description>&lt;p&gt;Initially born out of practical necessity and real headaches, not from a romantic idea of something like “revolutionary free software”. I have been working on it alone for quite some time, creating, updating, and managing websites with the same system. I decided to open-source it because if it works well for me, it may work well for others too.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the project started
&lt;/h2&gt;

&lt;p&gt;I used to maintain an entertainment website that started on Blogger and later moved to WordPress. As the project grew, I needed to customize themes, create my own plugins, and extend its functionality. Eventually, the WordPress ecosystem started to make the process feel restrictive.&lt;/p&gt;

&lt;p&gt;That was when I decided to build a system from scratch, tailored specifically to what I needed.&lt;/p&gt;

&lt;p&gt;The problem came later: I decided to run that same system on my agency's website (webship). Suddenly, I had two similar but separate systems running in parallel. The only documentation that existed was my own memory and a few comments in the code. Updating both became a nightmare.&lt;/p&gt;

&lt;p&gt;To avoid going crazy maintaining duplicated code, I decided to unify everything into a generic codebase. And it was this need to get things organized that eventually turned OpusCore into an Open Source project on GitHub.&lt;/p&gt;

&lt;p&gt;(Note: I still take WordPress jobs when a client specifically asks for it. Let's just say I don't exactly enjoy it.)&lt;/p&gt;

&lt;p&gt;I'm not trying to compete with established frameworks or CMSs, but rather to have autonomy. Of course, comparisons with WordPress are inevitable, first because of the problem described above, and then for the obvious reason that it is the most widely used CMS in the world. But this isn't about competing for its space. They are different approaches. WordPress has its enormous ecosystem. OpusCore follows a different path: more freedom to build without crutches and without asking for permission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical decisions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Layered performance:&lt;/strong&gt; I treat performance like security: you don't get a fast system by applying a single isolated optimization. It requires continuous attention at every layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visible SQL (without excessive abstraction):&lt;/strong&gt; I don't like the idea of hiding SQL behind huge ORM abstraction layers. In OpusCore, database queries remain visible, simple, and straightforward.&lt;/p&gt;

&lt;p&gt;If maintaining code is already work, imagine hiding that code behind unnecessary abstractions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple dependency injection:&lt;/strong&gt; The system uses a container for instances, taking advantage of what modern frameworks do well. The difference from something like Laravel or Symfony is that here it is a lean class, without dozens of stacked dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment structure:&lt;/strong&gt; The code does not use namespaces. It is organized and separated into three clear environments: &lt;code&gt;web&lt;/code&gt; (public), &lt;code&gt;dashboard&lt;/code&gt; (administration panel), and &lt;code&gt;dist&lt;/code&gt; (distribution).&lt;/p&gt;

&lt;p&gt;The goal is to provide the essentials needed to run a complete website without having to install anything from a few plugins to dozens of third-party plugins for basic features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Native OpusCore features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Integrated SEO:&lt;/strong&gt; Automatic generation and updating of meta tags and &lt;code&gt;sitemap.xml&lt;/code&gt;, with configurable options directly from the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS management:&lt;/strong&gt; Stylesheets can be loaded in &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; blocks, with minification and conditional loading (when using blocks).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context Architecture:&lt;/strong&gt; A publishing block in the dashboard that can be injected into any route through a keyed function in the template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security and Users:&lt;/strong&gt; Login routes are separated from the site's administration, with a &lt;code&gt;user.php&lt;/code&gt; file for user profiles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimized Media:&lt;/strong&gt; Featured images are handled separately by entity, avoiding the creation of multiple unnecessary image sizes that clutter the server's disk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optional native features:&lt;/strong&gt; An asynchronous comment system, conditional script loading, an SVG helper, and integrated sharing buttons.  &lt;/p&gt;

&lt;p&gt;The main reason I'm sharing this here is that developing and maintaining a system of this size alone for years creates the famous “blind spot”: you get used to your own code and stop seeing its flaws, sometimes even the obvious ones.  &lt;/p&gt;

&lt;p&gt;OpusCore has room for improvement, and it will. That's one of the reasons I opened the project to the community.&lt;/p&gt;

&lt;p&gt;If you're looking for, or interested in, a tool and management system for building your own projects, rather than a tool that tries to build them for you, take a look at OpusCore.&lt;/p&gt;

&lt;p&gt;Technical feedback, suggestions, and criticism are welcome and necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/wellingtonpragidi/opuscore" rel="noopener noreferrer"&gt;https://github.com/wellingtonpragidi/opuscore&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://opuscore.dev/download" rel="noopener noreferrer"&gt;https://opuscore.dev/download&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>software</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Do you really need all of this to build a website?</title>
      <dc:creator>Wellington Pragidi</dc:creator>
      <pubDate>Tue, 18 Aug 2026 02:06:10 +0000</pubDate>
      <link>https://dev.to/wellingtonpragidi/do-you-really-need-all-of-this-to-build-a-website-3lp8</link>
      <guid>https://dev.to/wellingtonpragidi/do-you-really-need-all-of-this-to-build-a-website-3lp8</guid>
      <description>&lt;p&gt;You need to build a site.&lt;br&gt;&lt;br&gt;
So you install a CMS, and then:&lt;/p&gt;

&lt;p&gt;• You need an SEO plugin&lt;br&gt;&lt;br&gt;
• Then another plugin for forms&lt;br&gt;&lt;br&gt;
• Yet another one for user management&lt;br&gt;&lt;br&gt;
• And one for optimization&lt;br&gt;&lt;br&gt;
• Image manipulation&lt;br&gt;&lt;br&gt;
• And suddenly, a plugin requires even more plugins. Before you know it, that simple site has a whole population of plugins living inside it.&lt;/p&gt;

&lt;p&gt;Opus Core was born from a different perspective.&lt;br&gt;
What if the foundation already came equipped with the essentials you need to build?&lt;/p&gt;

&lt;p&gt;An open-source Web Content Manager built with PHP, featuring:&lt;br&gt;
✓ Clean and intuitive control panel&lt;br&gt;&lt;br&gt;
✓ User profiles and commenting system&lt;br&gt;&lt;br&gt;
✓ Instance container&lt;br&gt;&lt;br&gt;
✓ Fully integrated SEO&lt;br&gt;&lt;br&gt;
✓ Asynchronous loading lists&lt;br&gt;&lt;br&gt;
✓ Stylesheet loading via &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; and/or &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; blocks, with minification and conditional loading&lt;br&gt;&lt;br&gt;
✓ Automated manifest.json generation&lt;br&gt;&lt;br&gt;
✓ Contexts&lt;br&gt;&lt;br&gt;
And much more...&lt;/p&gt;

&lt;p&gt;The system relies on a database for most tasks, utilizing file storage where it genuinely makes sense.&lt;br&gt;&lt;br&gt;
Each approach is applied based on its practical value within the system.&lt;/p&gt;

&lt;p&gt;Without trying to be everything to everyone.  &lt;/p&gt;

&lt;p&gt;Keep in mind that while the tool provides structure and direction, it doesn't strictly enforce how you use it.&lt;br&gt;&lt;br&gt;
How each developer leverages the system remains their own responsibility.&lt;/p&gt;

&lt;p&gt;No architecture can replace technical judgment.&lt;/p&gt;

&lt;p&gt;Opus Core is available.&lt;br&gt;&lt;br&gt;
Download it. Install it. Inspect the code. Test it out.&lt;/p&gt;

&lt;p&gt;Download: &lt;a href="https://opuscore.dev/download" rel="noopener noreferrer"&gt;https://opuscore.dev/download&lt;/a&gt;&lt;br&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/wellingtonpragidi/opuscore" rel="noopener noreferrer"&gt;https://github.com/wellingtonpragidi/opuscore&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>php</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>Você realmente precisa de tudo isso para fazer um site?</title>
      <dc:creator>Wellington Pragidi</dc:creator>
      <pubDate>Tue, 18 Aug 2026 00:33:11 +0000</pubDate>
      <link>https://dev.to/wellingtonpragidi/voce-realmente-precisa-de-tudo-isso-para-fazer-um-site-38k3</link>
      <guid>https://dev.to/wellingtonpragidi/voce-realmente-precisa-de-tudo-isso-para-fazer-um-site-38k3</guid>
      <description>&lt;p&gt;Você precisa construir um site.&lt;br&gt;
Aí então instala um CMS, e depois:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Precisa de um plugin para SEO&lt;/li&gt;
&lt;li&gt;Depois outro plugin para formulário&lt;/li&gt;
&lt;li&gt;Mais um para usuários&lt;/li&gt;
&lt;li&gt;E para otimização&lt;/li&gt;
&lt;li&gt;Manipulação de imagens&lt;/li&gt;
&lt;li&gt;E então um plugin requer mais plugins
Quando percebe, aquele site simples já tem uma população de plugins morando dentro dele.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  O Opus Core nasceu de uma ideia diferente.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;E se a base já viesse preparada com o essencial para você construir?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Um Gerenciador Web open source em PHP, com:&lt;br&gt;
✓ Painel de controle limpo e intuitivo&lt;br&gt;
✓ Perfil de usuários e comentários&lt;br&gt;
✓ Container de instância&lt;br&gt;
✓ SEO totalmente integrado.&lt;br&gt;
✓ Listagem por carregamento assíncrono.&lt;br&gt;
✓ Carregamento de folhas de estilo por bloco &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; e/ou &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;, com compactação e carregamento condicional.&lt;br&gt;
✓ Geração de arquivo manifest.json&lt;br&gt;
✓ Contexts&lt;br&gt;
E muito mais..&lt;/p&gt;

&lt;p&gt;O sistema utiliza banco de dados na maior parte, e armazenamento em arquivos onde isso realmente faz sentido.&lt;br&gt;
Cada abordagem é utilizada conforme sua utilidade prática dentro do sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Sem tentar ser tudo para todos.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lembrando que a ferramenta oferece estrutura e direção, mas não controla completamente quem a usa.&lt;br&gt;
A forma como cada desenvolvedor utiliza o sistema continua sendo responsabilidade do próprio desenvolvedor.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nenhuma arquitetura substitui critério técnico.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O &lt;a href="https://opuscore.dev/" rel="noopener noreferrer"&gt;Opus Core&lt;/a&gt; está disponível.&lt;br&gt;
Baixe. Instale. Abra o código. Teste.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opuscore.dev/download" rel="noopener noreferrer"&gt;Download&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wellingtonpragidi/opuscore" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>php</category>
      <category>opensource</category>
      <category>opuscore</category>
    </item>
    <item>
      <title>Apresentando o Opus Core, um CMS open source em PHP, feito para quem gosta e colocar a mão na massa e ter controle
Sem depender de addons
Nascido de necessidades reais
Download: http://opuscore.dev/download
GitHub: github.com/wellingtonpragidi/opuscore</title>
      <dc:creator>Wellington Pragidi</dc:creator>
      <pubDate>Wed, 12 Aug 2026 00:56:27 +0000</pubDate>
      <link>https://dev.to/wellingtonpragidi/apresentando-o-opus-core-um-cms-open-source-em-php-feito-para-quem-gosta-e-colocar-a-mao-na-massa-5c90</link>
      <guid>https://dev.to/wellingtonpragidi/apresentando-o-opus-core-um-cms-open-source-em-php-feito-para-quem-gosta-e-colocar-a-mao-na-massa-5c90</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="http://opuscore.dev/download" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;opuscore.dev / download&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
