<?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: Justino Contingo </title>
    <description>The latest articles on DEV Community by Justino Contingo  (@justino_contingo).</description>
    <link>https://dev.to/justino_contingo</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%2F3956158%2F1b16696b-b5cd-453f-8132-10a1e5e9d6a0.png</url>
      <title>DEV Community: Justino Contingo </title>
      <link>https://dev.to/justino_contingo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justino_contingo"/>
    <language>en</language>
    <item>
      <title>Rebuilding an Abandoned Laravel Page Builder With a JSON-Based Architecture</title>
      <dc:creator>Justino Contingo </dc:creator>
      <pubDate>Sun, 07 Jun 2026 20:19:06 +0000</pubDate>
      <link>https://dev.to/justino_contingo/rebuilding-an-abandoned-laravel-page-builder-with-a-json-based-architecture-28dc</link>
      <guid>https://dev.to/justino_contingo/rebuilding-an-abandoned-laravel-page-builder-with-a-json-based-architecture-28dc</guid>
      <description>&lt;p&gt;Submission for the GitHub Finish-Up-A-Thon Challenge&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built a Laravel Page Builder that allows developers to create and manage pages through a visual drag-and-drop interface.&lt;/p&gt;

&lt;p&gt;Unlike most page builders that rely heavily on database storage, this project takes a different approach: page layouts are stored as JSON files directly in the filesystem.&lt;/p&gt;

&lt;p&gt;The idea behind this decision was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pages become portable&lt;/li&gt;
&lt;li&gt;Content can be versioned with Git&lt;/li&gt;
&lt;li&gt;Deployments become easier&lt;/li&gt;
&lt;li&gt;Developers can review page changes through pull requests&lt;/li&gt;
&lt;li&gt;No dependency on SQL or NoSQL storage for page definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn't just to create another page builder, but to explore an alternative architecture for page composition within Laravel applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Drag-and-drop page builder&lt;/li&gt;
&lt;li&gt;Modular block-based architecture&lt;/li&gt;
&lt;li&gt;JSON filesystem storage&lt;/li&gt;
&lt;li&gt;Livewire v3 integration&lt;/li&gt;
&lt;li&gt;Editable headers and footers&lt;/li&gt;
&lt;li&gt;Import and export functionality&lt;/li&gt;
&lt;li&gt;Custom block support&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is currently a working prototype, but it already demonstrates the core concept and architectural direction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Justino-code/pagebuilder" rel="noopener noreferrer"&gt;https://github.com/Justino-code/pagebuilder&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Evolution
&lt;/h2&gt;

&lt;p&gt;To make the progress made during the challenge transparent, I preserved two separate branches:&lt;/p&gt;

&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Justino-code/pagebuilder/tree/before-changes" rel="noopener noreferrer"&gt;https://github.com/Justino-code/pagebuilder/tree/before-changes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  After
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Justino-code/pagebuilder/tree/after-changes" rel="noopener noreferrer"&gt;https://github.com/Justino-code/pagebuilder/tree/after-changes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These branches show the project's state before and after the redesign and refactoring work completed during the challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;Project screenshots can be found here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Justino-code/pagebuilder/blob/main/docs/screen.md" rel="noopener noreferrer"&gt;https://github.com/Justino-code/pagebuilder/blob/main/docs/screen.md&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Story Behind the Project
&lt;/h2&gt;

&lt;p&gt;This project actually started long before the challenge.&lt;/p&gt;

&lt;p&gt;The original idea was to build a page builder centered around a filesystem-first philosophy, where page definitions would live as JSON files rather than database records.&lt;/p&gt;

&lt;p&gt;While the concept was promising, the project eventually stalled and was left unfinished.&lt;/p&gt;

&lt;p&gt;The GitHub Finish-Up-A-Thon provided the perfect opportunity to revisit the idea and determine whether it was worth pursuing.&lt;/p&gt;

&lt;p&gt;Instead of trying to build every planned feature, I focused on validating the architecture, improving the internal structure, and delivering a functional prototype.&lt;/p&gt;

&lt;p&gt;During the challenge I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reworked the block architecture&lt;/li&gt;
&lt;li&gt;Improved page composition workflows&lt;/li&gt;
&lt;li&gt;Refactored major portions of the codebase&lt;/li&gt;
&lt;li&gt;Expanded customization capabilities&lt;/li&gt;
&lt;li&gt;Clarified the long-term direction of the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest achievement wasn't adding a specific feature.&lt;/p&gt;

&lt;p&gt;It was proving that the concept works.&lt;/p&gt;

&lt;p&gt;Today, the project has evolved from an abandoned experiment into a functional foundation that can continue to grow.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot played an important role throughout the development process.&lt;/p&gt;

&lt;p&gt;It helped accelerate implementation by assisting with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel and Livewire boilerplate generation&lt;/li&gt;
&lt;li&gt;Refactoring repetitive code&lt;/li&gt;
&lt;li&gt;Block rendering improvements&lt;/li&gt;
&lt;li&gt;TailwindCSS UI development&lt;/li&gt;
&lt;li&gt;Exploring alternative implementations during redesign&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than replacing decision-making, Copilot acted as a productivity multiplier, allowing me to spend more time thinking about architecture and less time writing repetitive code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;For me, this challenge wasn't about shipping a finished product.&lt;/p&gt;

&lt;p&gt;It was about finishing a phase of development.&lt;/p&gt;

&lt;p&gt;Given the available time, I prioritized validating the idea and rebuilding the core functionality instead of focusing on perfect architecture or extensive polishing.&lt;/p&gt;

&lt;p&gt;There is still a lot of work ahead, including improvements to structure, design patterns, developer experience, and overall refinement.&lt;/p&gt;

&lt;p&gt;But the most important milestone has been reached:&lt;/p&gt;

&lt;p&gt;The concept is validated.&lt;/p&gt;

&lt;p&gt;What started as an abandoned idea is now a working prototype and a solid foundation for future development.&lt;/p&gt;

&lt;p&gt;And that, for me, is exactly what the Finish-Up-A-Thon was about.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
    <item>
      <title>Will junior developers disappear because of AI?</title>
      <dc:creator>Justino Contingo </dc:creator>
      <pubDate>Fri, 05 Jun 2026 20:19:09 +0000</pubDate>
      <link>https://dev.to/justino_contingo/will-junior-developers-disappear-because-of-ai-50of</link>
      <guid>https://dev.to/justino_contingo/will-junior-developers-disappear-because-of-ai-50of</guid>
      <description>&lt;p&gt;Over the past few months, I've seen many people claim that junior developers will disappear because of AI.&lt;/p&gt;

&lt;p&gt;I'm not convinced that's what's happening.&lt;/p&gt;

&lt;p&gt;My impression is that we're witnessing something different: a technological transition that may redefine how software development is learned and practiced.&lt;/p&gt;

&lt;p&gt;This isn't the first time the industry has gone through a major shift.&lt;/p&gt;

&lt;p&gt;Personal computers changed how people worked.&lt;/p&gt;

&lt;p&gt;The Internet changed how people accessed information.&lt;/p&gt;

&lt;p&gt;Smartphones changed how people interacted with technology.&lt;/p&gt;

&lt;p&gt;None of these innovations eliminated the need for professionals.&lt;/p&gt;

&lt;p&gt;What they did change were the skills that professionals were expected to have.&lt;/p&gt;

&lt;p&gt;That's why I wonder if we're asking the wrong question.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;"Will junior developers disappear?"&lt;/p&gt;

&lt;p&gt;Perhaps we should ask:&lt;/p&gt;

&lt;p&gt;"What will it mean to be a junior developer in an AI-assisted world?"&lt;/p&gt;

&lt;p&gt;The traditional distinction between junior, mid-level and senior developers is not just about writing code.&lt;/p&gt;

&lt;p&gt;It reflects differences in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;experience&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;responsibility&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;decision-making&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;understanding of trade-offs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ability to work with uncertainty&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't see those differences disappearing.&lt;/p&gt;

&lt;p&gt;What may change are the skills expected at each level.&lt;/p&gt;

&lt;p&gt;For example, today it is becoming increasingly common for developers to use AI tools to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;generate code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;explore solutions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;review implementations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;explain concepts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;accelerate routine tasks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As these tools become part of everyday development, the ability to use them effectively may become a standard expectation rather than a differentiator.&lt;/p&gt;

&lt;p&gt;However, using a tool is not the same as understanding a problem.&lt;/p&gt;

&lt;p&gt;Software development still requires people who can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;understand requirements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;evaluate solutions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;identify limitations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;make technical decisions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;understand trade-offs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my experience, AI often makes implementation faster.&lt;/p&gt;

&lt;p&gt;What it doesn't remove is the need for judgment.&lt;/p&gt;

&lt;p&gt;In some situations, it may even make judgment more important.&lt;/p&gt;

&lt;p&gt;A generated solution can work and still be inappropriate for the context.&lt;/p&gt;

&lt;p&gt;A recommendation can be technically correct and still introduce unnecessary complexity.&lt;/p&gt;

&lt;p&gt;These are not problems that disappear simply because code can be generated more quickly.&lt;/p&gt;

&lt;p&gt;For that reason, I don't think we're necessarily witnessing the disappearance of junior developers.&lt;/p&gt;

&lt;p&gt;What I think we may be witnessing is the evolution of what being a junior developer means.&lt;/p&gt;

&lt;p&gt;The industry has adapted to major technological changes before.&lt;/p&gt;

&lt;p&gt;It will likely adapt again.&lt;/p&gt;

&lt;p&gt;The interesting question is not whether developers will disappear.&lt;/p&gt;

&lt;p&gt;It's how the expectations placed on developers will change.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

&lt;p&gt;Are junior developers disappearing, or are we simply redefining the skills that will be expected from them?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The biggest challenge I've found when using AI for programming</title>
      <dc:creator>Justino Contingo </dc:creator>
      <pubDate>Mon, 01 Jun 2026 07:08:43 +0000</pubDate>
      <link>https://dev.to/justino_contingo/the-biggest-challenge-ive-found-when-using-ai-for-programming-391</link>
      <guid>https://dev.to/justino_contingo/the-biggest-challenge-ive-found-when-using-ai-for-programming-391</guid>
      <description>&lt;p&gt;The hardest part of using AI for programming isn't writing prompts&lt;/p&gt;

&lt;p&gt;I've been using AI tools quite frequently during software development.&lt;/p&gt;

&lt;p&gt;They help with many tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exploring ideas&lt;/li&gt;
&lt;li&gt;generating boilerplate code&lt;/li&gt;
&lt;li&gt;reviewing implementations&lt;/li&gt;
&lt;li&gt;explaining concepts&lt;/li&gt;
&lt;li&gt;proposing alternative solutions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of the time, getting an answer is not the difficult part.&lt;/p&gt;

&lt;p&gt;The difficulty starts after the answer is generated.&lt;/p&gt;

&lt;p&gt;A generated solution can look convincing.&lt;/p&gt;

&lt;p&gt;It can compile.&lt;/p&gt;

&lt;p&gt;It can pass tests.&lt;/p&gt;

&lt;p&gt;It can even solve the immediate problem.&lt;/p&gt;

&lt;p&gt;But that doesn't necessarily mean it's the right solution.&lt;/p&gt;

&lt;p&gt;Recently, I asked an AI assistant for help solving a programming problem. The generated solution worked and produced the expected output. At first glance, it seemed completely reasonable.&lt;/p&gt;

&lt;p&gt;However, after reviewing it more carefully, I realized that the implementation introduced unnecessary complexity that wasn't required by the problem. The solution was technically correct, but not appropriate for the context.&lt;/p&gt;

&lt;p&gt;That experience reinforced an important lesson:&lt;/p&gt;

&lt;p&gt;A working solution and a good solution are not always the same thing.&lt;/p&gt;

&lt;p&gt;Questions often remain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it actually solve the problem I'm trying to solve?&lt;/li&gt;
&lt;li&gt;Is it aligned with the requirements?&lt;/li&gt;
&lt;li&gt;What trade-offs does it introduce?&lt;/li&gt;
&lt;li&gt;Will it still make sense as the system grows?&lt;/li&gt;
&lt;li&gt;Is there a simpler approach?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where software engineering still matters.&lt;/p&gt;

&lt;p&gt;The value isn't only in producing code.&lt;/p&gt;

&lt;p&gt;It's in understanding the problem well enough to evaluate whether a proposed solution makes sense.&lt;/p&gt;

&lt;p&gt;The more I use AI, the more I realize that these tools don't remove the need for knowledge and critical thinking.&lt;/p&gt;

&lt;p&gt;In some ways, they make them even more important.&lt;/p&gt;

&lt;p&gt;Without context, it's easy to accept an answer simply because it looks correct.&lt;/p&gt;

&lt;p&gt;With context, you can challenge assumptions, identify limitations, and adapt solutions to the actual problem.&lt;/p&gt;

&lt;p&gt;For me, AI has been most useful not as a replacement for understanding, but as an accelerator for it.&lt;/p&gt;

&lt;p&gt;It can generate possibilities.&lt;/p&gt;

&lt;p&gt;But deciding which possibility is appropriate still requires analysis and judgment.&lt;/p&gt;

&lt;p&gt;That's been my experience so far.&lt;/p&gt;

&lt;p&gt;What has been the biggest challenge you've encountered when using AI for software development?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Debugging Node.js? console.log isn't enough anymore</title>
      <dc:creator>Justino Contingo </dc:creator>
      <pubDate>Thu, 28 May 2026 10:17:30 +0000</pubDate>
      <link>https://dev.to/justino_contingo/debugging-nodejs-consolelog-isnt-enough-anymore-1o6p</link>
      <guid>https://dev.to/justino_contingo/debugging-nodejs-consolelog-isnt-enough-anymore-1o6p</guid>
      <description>&lt;p&gt;We've all been there.&lt;/p&gt;

&lt;p&gt;Deeply nested objects. Circular references. Repeated structures.&lt;/p&gt;

&lt;p&gt;At some point, you stop debugging and start trying to understand what you're even looking at.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;DumpKit&lt;/strong&gt; — a small debugging tool inspired by Laravel's &lt;code&gt;dump()&lt;/code&gt; and &lt;code&gt;dd()&lt;/code&gt;, designed for Node.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;dump&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dumpkit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;complexObject&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It handles common debugging pain points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safe handling of circular references&lt;/li&gt;
&lt;li&gt;Support for shared references&lt;/li&gt;
&lt;li&gt;Large and deeply nested structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also inspect data in different formats:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;view&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tree&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;   &lt;span class="c1"&gt;// hierarchical view&lt;/span&gt;
&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;view&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;table&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;  &lt;span class="c1"&gt;// structured collections&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another useful feature is &lt;strong&gt;dump and pause (dp)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Execution pauses until you press ENTER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it easier to inspect application state at critical points in execution.&lt;/p&gt;

&lt;p&gt;DumpKit also exposes a structured internal representation (&lt;code&gt;AnalysisNode&lt;/code&gt;), which can be used to build custom debugging tools on top of it.&lt;/p&gt;

&lt;p&gt;DumpKit doesn't replace the console.&lt;/p&gt;

&lt;p&gt;It simply gives you more clarity when complexity grows beyond simple logs.&lt;/p&gt;

&lt;p&gt;Debugging isn't just about finding bugs — it's about understanding structure.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Justino-code/dumpkit" rel="noopener noreferrer"&gt;https://github.com/Justino-code/dumpkit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>debug</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
