<?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: Dejan S. Višekruna</title>
    <description>The latest articles on DEV Community by Dejan S. Višekruna (@dveb).</description>
    <link>https://dev.to/dveb</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%2F1072158%2Fc52da2b9-95ae-4cc4-8af6-9e1dcb73f8fb.jpg</url>
      <title>DEV Community: Dejan S. Višekruna</title>
      <link>https://dev.to/dveb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dveb"/>
    <language>en</language>
    <item>
      <title>Supracorona Login Gate: Simple Access Control for WordPress Sites</title>
      <dc:creator>Dejan S. Višekruna</dc:creator>
      <pubDate>Mon, 06 Jul 2026 15:59:26 +0000</pubDate>
      <link>https://dev.to/dveb/supracorona-login-gate-simple-access-control-for-wordpress-sites-l1i</link>
      <guid>https://dev.to/dveb/supracorona-login-gate-simple-access-control-for-wordpress-sites-l1i</guid>
      <description>&lt;p&gt;&lt;strong&gt;For internal websites, client portals, development environments, and WordPress projects that should not be publicly accessible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not every private WordPress website needs a complete membership system.&lt;/p&gt;

&lt;p&gt;Sometimes there is no need to manage subscriptions, membership plans, payments, complex user roles, or dozens of content-access rules.&lt;/p&gt;

&lt;p&gt;Sometimes the requirement is much simpler:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The website should only be accessible to logged-in users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the reason I created &lt;strong&gt;Supracorona Login Gate&lt;/strong&gt;, a lightweight WordPress plugin that places a simple access gate in front of a website.&lt;/p&gt;

&lt;p&gt;When the plugin is enabled, logged-out visitors cannot browse protected site content. Instead, they are redirected to the standard WordPress login page or to a custom page selected by the site administrator.&lt;/p&gt;

&lt;p&gt;The plugin is now published on WordPress.org:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://wordpress.org/plugins/supracorona-login-gate/" rel="noopener noreferrer"&gt;Supracorona Login Gate&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem the plugin solves
&lt;/h2&gt;

&lt;p&gt;Many WordPress projects are not intended to be publicly accessible at every stage of their lifecycle.&lt;/p&gt;

&lt;p&gt;They may be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;development or staging websites;&lt;/li&gt;
&lt;li&gt;internal company or organization websites;&lt;/li&gt;
&lt;li&gt;client portals;&lt;/li&gt;
&lt;li&gt;private knowledge bases;&lt;/li&gt;
&lt;li&gt;documentation websites intended only for team members;&lt;/li&gt;
&lt;li&gt;projects being prepared for launch;&lt;/li&gt;
&lt;li&gt;demo websites available only to selected users;&lt;/li&gt;
&lt;li&gt;websites temporarily closed during migration or reconstruction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WordPress provides privacy controls for individual posts, but that is not the same as restricting access to the entire website.&lt;/p&gt;

&lt;p&gt;Installing a full membership plugin is possible, but it is often far more than the project requires. Such systems may introduce additional database tables, large settings panels, custom profiles, login forms, subscription management, and complex rule engines that will never be used.&lt;/p&gt;

&lt;p&gt;Supracorona Login Gate has a much narrower responsibility.&lt;/p&gt;

&lt;p&gt;It is not intended to become a complete membership platform. It is intended to answer one clear question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is the current visitor logged in?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When the answer is yes, the website behaves normally.&lt;/p&gt;

&lt;p&gt;When the answer is no, the visitor is redirected before protected content is displayed.&lt;/p&gt;




&lt;h2&gt;
  
  
  A single access gate for the whole website
&lt;/h2&gt;

&lt;p&gt;The central idea behind the plugin is site-wide protection.&lt;/p&gt;

&lt;p&gt;Administrators can enable or disable the access gate from:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Settings → Supracorona Login Gate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once protection is enabled, logged-out visitors can be redirected to one of two destinations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the standard WordPress login page;&lt;/li&gt;
&lt;li&gt;a custom page on the website.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The native WordPress login page is the simplest choice for internal websites and projects where users already have accounts.&lt;/p&gt;

&lt;p&gt;A custom page is useful when the website needs to display additional information, contact details, or a more appropriate message, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this website is available only to team members;&lt;/li&gt;
&lt;li&gt;access to this project is restricted;&lt;/li&gt;
&lt;li&gt;contact the administrator to request an account;&lt;/li&gt;
&lt;li&gt;this project is still under development;&lt;/li&gt;
&lt;li&gt;the public website will become available soon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin therefore does not force every website into the same workflow. The administrator can choose the behavior that makes sense for the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Returning users to the page they originally requested
&lt;/h2&gt;

&lt;p&gt;One practical problem with login protection is losing the page that the user originally wanted to visit.&lt;/p&gt;

&lt;p&gt;For example, a user receives a direct link to an internal documentation page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cool-domain.tld/internal-documentation/project-architecture/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the user is not logged in, WordPress redirects them to the login page.&lt;/p&gt;

&lt;p&gt;Without preserving the original destination, the user may end up in the Dashboard after logging in and then have to search for the document again.&lt;/p&gt;

&lt;p&gt;Supracorona Login Gate can preserve the requested path and return the user to the original page after a successful login.&lt;/p&gt;

&lt;p&gt;It is a small feature, but it noticeably improves the experience of internal portals, documentation websites, and projects where direct links are frequently shared.&lt;/p&gt;




&lt;h2&gt;
  
  
  Direct login: Dashboard or front page
&lt;/h2&gt;

&lt;p&gt;Not every login starts with an attempt to access a specific protected page.&lt;/p&gt;

&lt;p&gt;Sometimes a user directly opens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cool-domain.tld/wp-login.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For those cases, the plugin provides a choice of destinations after login:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the WordPress Dashboard;&lt;/li&gt;
&lt;li&gt;the website front page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Dashboard is the logical choice for administrators, editors, and users who work with content.&lt;/p&gt;

&lt;p&gt;The front page is often a better destination for internal portals, client websites, and projects where users interact with the frontend rather than the WordPress administration area.&lt;/p&gt;

&lt;p&gt;This allows the same plugin to support different types of WordPress projects without requiring theme modifications or additional redirect code.&lt;/p&gt;




&lt;h2&gt;
  
  
  RSS feed protection
&lt;/h2&gt;

&lt;p&gt;When protecting a WordPress website, it is easy to forget about RSS feeds.&lt;/p&gt;

&lt;p&gt;A website may appear closed in the browser while its posts remain accessible through URLs such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cool-domain.tld/feed/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cool-domain.tld/comments/feed/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supracorona Login Gate therefore includes an optional RSS feed protection setting.&lt;/p&gt;

&lt;p&gt;When feed protection is enabled, logged-out visitors cannot access feed content. When it is disabled, RSS feeds remain publicly available.&lt;/p&gt;

&lt;p&gt;This is particularly important for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;internal blogs;&lt;/li&gt;
&lt;li&gt;private documentation;&lt;/li&gt;
&lt;li&gt;company knowledge bases;&lt;/li&gt;
&lt;li&gt;websites containing material that should not be indexed or retrieved by feed readers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feed protection is optional because some projects may intentionally restrict the website frontend while keeping their RSS content public.&lt;/p&gt;




&lt;h2&gt;
  
  
  Independent of the active theme
&lt;/h2&gt;

&lt;p&gt;The plugin does not require any changes to the WordPress theme.&lt;/p&gt;

&lt;p&gt;There is no need to add code to &lt;code&gt;functions.php&lt;/code&gt;, create custom template files, or integrate the plugin with a particular page builder.&lt;/p&gt;

&lt;p&gt;Supracorona Login Gate operates during the WordPress request flow and redirects logged-out visitors before protected content is rendered.&lt;/p&gt;

&lt;p&gt;This means it can continue working after:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;changing the active theme;&lt;/li&gt;
&lt;li&gt;modifying a child theme;&lt;/li&gt;
&lt;li&gt;redesigning the website;&lt;/li&gt;
&lt;li&gt;moving from a classic theme to a block theme;&lt;/li&gt;
&lt;li&gt;changing the template structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin’s admin stylesheet is loaded only on its own settings screen, so it does not add unnecessary CSS to the frontend or unrelated WordPress administration pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the plugin deliberately does not do
&lt;/h2&gt;

&lt;p&gt;Supracorona Login Gate is not intended to replace a complete membership system.&lt;/p&gt;

&lt;p&gt;Version 1.0.0 does not attempt to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;paid memberships;&lt;/li&gt;
&lt;li&gt;subscriptions;&lt;/li&gt;
&lt;li&gt;access tiers;&lt;/li&gt;
&lt;li&gt;role-based content visibility;&lt;/li&gt;
&lt;li&gt;individual rules for every post;&lt;/li&gt;
&lt;li&gt;user registration;&lt;/li&gt;
&lt;li&gt;member profiles;&lt;/li&gt;
&lt;li&gt;frontend account areas;&lt;/li&gt;
&lt;li&gt;e-commerce content access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This version also does not include a whitelist system for individual pages.&lt;/p&gt;

&lt;p&gt;The current model is intentionally straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the website is available to logged-in users, while logged-out visitors are redirected.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That limitation is deliberate. It keeps the plugin small, understandable, and focused on one specific responsibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Plugin-level protection is not server-level protection
&lt;/h2&gt;

&lt;p&gt;It is also important to understand the limits of this type of solution.&lt;/p&gt;

&lt;p&gt;Supracorona Login Gate protects content that passes through WordPress and its standard request flow. It is designed to restrict access to WordPress pages, posts, archives, and feeds.&lt;/p&gt;

&lt;p&gt;It is not a replacement for server-level protection such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP Basic Authentication;&lt;/li&gt;
&lt;li&gt;VPN access;&lt;/li&gt;
&lt;li&gt;firewall rules;&lt;/li&gt;
&lt;li&gt;complete staging-environment protection;&lt;/li&gt;
&lt;li&gt;IP-based access restrictions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Files that are directly accessible on the server, including certain media files, may require additional web server configuration.&lt;/p&gt;

&lt;p&gt;For highly sensitive development environments, the safest approach is to combine WordPress-level access control with server-level authentication.&lt;/p&gt;

&lt;p&gt;Supracorona Login Gate is intended for situations where a project needs a simple and practical way to restrict access to WordPress content without introducing an entire membership infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Caching requires attention
&lt;/h2&gt;

&lt;p&gt;Caching systems may store a publicly generated version of a page and serve it later without executing the normal WordPress request logic again.&lt;/p&gt;

&lt;p&gt;For that reason, a caching plugin or server cache should be configured so that it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does not cache protected content as public content;&lt;/li&gt;
&lt;li&gt;correctly distinguishes logged-in and logged-out users;&lt;/li&gt;
&lt;li&gt;excludes protected pages from caching when necessary;&lt;/li&gt;
&lt;li&gt;clears existing cached pages after access protection is enabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin can correctly redirect WordPress requests, but an incorrectly configured cache may bypass the expected request flow.&lt;/p&gt;

&lt;p&gt;After enabling protection, it is a good idea to test the website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in a private or incognito browser window;&lt;/li&gt;
&lt;li&gt;as a logged-in user;&lt;/li&gt;
&lt;li&gt;as a logged-out visitor;&lt;/li&gt;
&lt;li&gt;after clearing browser and server caches;&lt;/li&gt;
&lt;li&gt;through both the main RSS feed and the comments feed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why a small plugin still makes sense
&lt;/h2&gt;

&lt;p&gt;The WordPress ecosystem often approaches small problems with large solutions.&lt;/p&gt;

&lt;p&gt;Sometimes that is justified. Complex projects genuinely require complex systems.&lt;/p&gt;

&lt;p&gt;But there is another category of projects where a focused plugin is a better fit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it is easier to understand;&lt;/li&gt;
&lt;li&gt;it is easier to test;&lt;/li&gt;
&lt;li&gt;it provides fewer settings;&lt;/li&gt;
&lt;li&gt;it introduces fewer dependencies;&lt;/li&gt;
&lt;li&gt;it does not try to control unrelated parts of the website;&lt;/li&gt;
&lt;li&gt;it is easier to remove when it is no longer needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supracorona Login Gate follows that approach.&lt;/p&gt;

&lt;p&gt;The plugin has one clearly defined responsibility: control access to a WordPress website based on the visitor’s login status.&lt;/p&gt;

&lt;p&gt;It does not try to become a complete security platform, membership system, or user-management suite.&lt;/p&gt;

&lt;p&gt;It is an access gate — and that is exactly what it is supposed to be.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the plugin came to be
&lt;/h2&gt;

&lt;p&gt;Supracorona Login Gate did not begin as a deliberately planned new product.&lt;/p&gt;

&lt;p&gt;For years, I used an older plugin to restrict access to WordPress websites. It was no longer actively maintained, but it still solved a very specific problem that I regularly encountered on development, internal, and private projects.&lt;/p&gt;

&lt;p&gt;With each new WordPress release, its behavior had to be reviewed, outdated code had to be adjusted, and additional changes were needed to keep it compatible with current WordPress standards. What started as maintaining an existing solution gradually turned into a much larger rewrite.&lt;/p&gt;

&lt;p&gt;Over time, the code structure, prefixes, option names, administration interface, data validation and sanitization, redirect handling, feed protection, and overall plugin organization were changed. The settings were reorganized, and the behavior was adapted to better match the needs of modern WordPress projects.&lt;/p&gt;

&lt;p&gt;Eventually, it no longer made sense to treat the result as another locally patched version of an abandoned plugin. It had become a separate codebase with its own name, maintenance process, testing, and development direction.&lt;/p&gt;

&lt;p&gt;That is how Supracorona Login Gate came to be: from the practical need to preserve a simple site-wide access model while rebuilding it as a modern, maintainable, and independent WordPress plugin.&lt;/p&gt;




&lt;h2&gt;
  
  
  The first release
&lt;/h2&gt;

&lt;p&gt;Version &lt;strong&gt;1.0.0&lt;/strong&gt; includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;site access restricted to logged-in users;&lt;/li&gt;
&lt;li&gt;redirection to the native WordPress login page;&lt;/li&gt;
&lt;li&gt;redirection to a custom page;&lt;/li&gt;
&lt;li&gt;return to the originally requested page after login;&lt;/li&gt;
&lt;li&gt;configurable destination for direct logins;&lt;/li&gt;
&lt;li&gt;optional RSS feed protection;&lt;/li&gt;
&lt;li&gt;a simple settings screen;&lt;/li&gt;
&lt;li&gt;independence from the active WordPress theme.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supracorona Login Gate is available from the official WordPress plugin directory:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://wordpress.org/plugins/supracorona-login-gate/" rel="noopener noreferrer"&gt;https://wordpress.org/plugins/supracorona-login-gate/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the second public WordPress.org release under the Supracorona name, following &lt;strong&gt;Classic Visual Editor Options&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One focused problem at a time. One plugin at a time.&lt;/p&gt;




</description>
      <category>wordpress</category>
      <category>php</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>50 Shades of grAI</title>
      <dc:creator>Dejan S. Višekruna</dc:creator>
      <pubDate>Thu, 11 Jun 2026 22:57:10 +0000</pubDate>
      <link>https://dev.to/dveb/50-shades-of-grai-9c3</link>
      <guid>https://dev.to/dveb/50-shades-of-grai-9c3</guid>
      <description>&lt;p&gt;When working with AI tools, the difference between expectations and real delivery becomes visible very quickly.&lt;/p&gt;

&lt;p&gt;The expectation is simple: AI writes code, speeds up work, and reduces repetition. That is true. AI can suggest structure, write initial code, explain an existing implementation, and accelerate parts of everyday development work.&lt;/p&gt;

&lt;p&gt;But output is not the same as a delivered solution.&lt;/p&gt;

&lt;p&gt;In a real project, code has to fit the product, the context, the architecture, the team’s rules, and the expected behavior of the system. AI can help write code, but it does not take responsibility for whether that code should be accepted, changed, or rejected.&lt;/p&gt;

&lt;p&gt;That is where the real delivery problem starts.&lt;/p&gt;

&lt;p&gt;The question is not only whether AI can generate something. The question is who understands the requirement, who verifies the result, who sees the error in context, and who takes responsibility when the solution reaches production.&lt;/p&gt;

&lt;p&gt;AI has value when it is used by someone who knows what to verify.&lt;/p&gt;

&lt;p&gt;Without that, AI only makes work faster without enough control.&lt;/p&gt;

&lt;p&gt;50 Shades of grAI is an attempt to describe that space through 50 short statements from real software delivery.&lt;/p&gt;

&lt;p&gt;The cards are published on LinkedIn and Instagram, while the full archive is kept at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://50shadesofgrai.com/" rel="noopener noreferrer"&gt;https://50shadesofgrai.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not as a prompt list.&lt;/p&gt;

&lt;p&gt;Not as AI hype.&lt;/p&gt;

&lt;p&gt;Just as practical notes from the work.&lt;br&gt;
Series: #50ShadesOfGrAI&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How I Used ChatGPT to Identify Two Songs I Heard Once — Over 30 Years Ago</title>
      <dc:creator>Dejan S. Višekruna</dc:creator>
      <pubDate>Sat, 07 Jun 2025 22:30:26 +0000</pubDate>
      <link>https://dev.to/dveb/how-i-used-chatgpt-to-identify-two-songs-i-heard-once-over-30-years-ago-28f8</link>
      <guid>https://dev.to/dveb/how-i-used-chatgpt-to-identify-two-songs-i-heard-once-over-30-years-ago-28f8</guid>
      <description>&lt;blockquote&gt;
&lt;h2&gt;
  
  
  A personal memory retrieval turned technical challenge — and how ChatGPT helped solve it.
&lt;/h2&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎯 The Challenge
&lt;/h2&gt;

&lt;p&gt;I had been searching for two songs for decades. One was a dreamy eurobeat track, the other a dance cover with a female vocal.&lt;br&gt;&lt;br&gt;
I had no artist, no title, no recording — only a feeling, a rough memory of the beat, and the fact that I heard each one only once on the radio in Belgrade in the early ’90s.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Using ChatGPT as a Research Tool
&lt;/h2&gt;

&lt;p&gt;Instead of asking &lt;em&gt;“What song is this?”&lt;/em&gt;, I approached ChatGPT like a research assistant.&lt;/p&gt;

&lt;p&gt;Here’s what I gave it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vocal style:&lt;/strong&gt; Female
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Era clues:&lt;/strong&gt; One was from the late ’80s/early ’90s, the other from the mid-’90s
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beat style:&lt;/strong&gt; One had a groove similar to &lt;em&gt;Back to Life&lt;/em&gt; by Soul II Soul; the other leaned more toward eurobeat
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context:&lt;/strong&gt; Both songs were aired only once on Belgrade radio stations during a time of severe UN sanctions
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data issue:&lt;/strong&gt; One track was misidentified as “Three Times” due to a faulty RDS display
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory anchor:&lt;/strong&gt; I remembered a single chorus line from one of them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I turned that into a structured query — and then refined it through several iterations.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ The Result
&lt;/h2&gt;

&lt;p&gt;After a series of narrowing-down steps, ChatGPT helped identify two songs I never expected to find:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;“Dreamtime” – Zee&lt;/strong&gt; &lt;em&gt;(misread on radio as “Three Times”)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;“Dream” – W.I.P.&lt;/strong&gt; &lt;em&gt;(a 1991 dance cover of “All I Have to Do Is Dream”)&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🔍 Prompting Breakdown
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Structured inputs: genre, rhythm, era, vocal type, source context
&lt;span class="p"&gt;-&lt;/span&gt; Prompt chaining: refining results based on emotional match and memory fragments
&lt;span class="p"&gt;-&lt;/span&gt; Rejection criteria: wrong mood, wrong lyrics, wrong production style
&lt;span class="p"&gt;-&lt;/span&gt; AI cross-referenced musical style, RDS errors, historical distribution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🤔 Why This Matters
&lt;/h2&gt;

&lt;p&gt;LLMs aren’t just for coding, summarizing, or rewriting emails.&lt;br&gt;&lt;br&gt;
They can act as context engines — helping us reconnect with pieces of our lives that search engines left behind.&lt;/p&gt;




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

&lt;p&gt;This wasn’t just about finding songs. It was about proving how &lt;em&gt;human memory + AI reasoning&lt;/em&gt; can solve a decades-old emotional puzzle.&lt;/p&gt;

&lt;p&gt;And to write it using the very same &lt;strong&gt;ChatGPT&lt;/strong&gt; that helped me find those songs in the first place — that was part of the closure.&lt;br&gt;&lt;br&gt;
Because this isn’t just my story. It’s a reminder that &lt;strong&gt;humans + AI can bring back something deeply personal&lt;/strong&gt; — something even search engines forgot.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ever used AI to find a lost piece of your past? Let me know in the comments.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieuxywz4ecb4269u37p1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieuxywz4ecb4269u37p1.png" alt="A nostalgic view of a car dashboard with “THREE TIMES” on the radio, and a teenager gazing out into the late afternoon light." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI-generated by ChatGPT for illustration purposes. No memories (or animals) were harmed during the making of this post.&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>promptengineering</category>
      <category>casestudy</category>
    </item>
    <item>
      <title>Restoring the Freedom of Choice: Why I Decided to Bring Back the “Disable Visual Editor” Option in WordPress</title>
      <dc:creator>Dejan S. Višekruna</dc:creator>
      <pubDate>Fri, 30 May 2025 17:28:59 +0000</pubDate>
      <link>https://dev.to/dveb/restoring-the-freedom-of-choice-why-i-decided-to-bring-back-the-disable-visual-editor-option-in-4bi3</link>
      <guid>https://dev.to/dveb/restoring-the-freedom-of-choice-why-i-decided-to-bring-back-the-disable-visual-editor-option-in-4bi3</guid>
      <description>&lt;p&gt;As a developer who writes directly in HTML, I’ve always relied on a small but important setting in WordPress:&lt;br&gt;
“&lt;strong&gt;Visual Editor: +/- Disable the visual editor when writing&lt;/strong&gt;” in the user profile.&lt;/p&gt;

&lt;p&gt;But in version 6.8, WordPress removed that option — without warning.&lt;/p&gt;

&lt;p&gt;For me, this wasn’t just a small inconvenience. It was the loss of &lt;strong&gt;freedom of choice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I decided to fix that and bring it back as a plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem That Affects Many
&lt;/h2&gt;

&lt;p&gt;Many developers, freelancers, and users who work with code are &lt;strong&gt;not fans of WYSIWYG editors&lt;/strong&gt;. Not everyone is a “visual type.”&lt;/p&gt;

&lt;p&gt;Additionally, there are times when you simply need to input HTML tags that aren’t well supported in a standard text editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem with the visual editor&lt;/strong&gt; is that it can “clean up” the code. A small fix through the Edit Page/Post in the Dashboard — or, more often, accidentally opening the Visual tab — can wipe out all the HTML you worked so hard to write. And then, back to square one.&lt;/p&gt;

&lt;p&gt;I’ve gone as far as preparing HTML-based content locally, then &lt;strong&gt;copy/pasting&lt;/strong&gt; it directly into the database (&lt;code&gt;wp_posts &amp;gt; post_content&lt;/code&gt;). I no longer even add new &lt;code&gt;wp_post&lt;/code&gt; IDs through the Dashboard; I do it via SQL commands or my own upgraded &lt;em&gt;legacy&lt;/em&gt; version of a previously banned mass page creation plugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And then I pack it all...&lt;/strong&gt; Then someone (or I) opens the WP TinyMCE Editor — the &lt;em&gt;Visual&lt;/em&gt; tab — and &lt;strong&gt;flushes the code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the old WordPress, all you needed to do was check the box “&lt;strong&gt;Disable the visual editor when writing&lt;/strong&gt;” in your profile. &lt;strong&gt;Let the worst happen — the code stays&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But since version 6.8, WordPress no longer shows this option, even if the Classic Editor plugin is active. What was once a simple solution — is now completely removed from the interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution I Made
&lt;/h2&gt;

&lt;p&gt;This is where I created &lt;strong&gt;Classic Visual Editor Options&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The plugin does just one thing: &lt;strong&gt;restores that old&lt;/strong&gt;, &lt;strong&gt;beloved option&lt;/strong&gt; in the user profile.&lt;/p&gt;

&lt;p&gt;No additional settings. No extra UI. No bloat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just that one checkbox&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Works even if you use Block Editor&lt;/li&gt;
&lt;li&gt;✅ Works even if you use Classic Editor&lt;/li&gt;
&lt;li&gt;✅ Respects user settings (rich_editing meta)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I purposely kept it minimalist because sometimes, that’s exactly what’s needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion — It’s Not Nostalgia, It’s a Choice
&lt;/h2&gt;

&lt;p&gt;This story isn’t about the past. It’s not even about one checkbox.&lt;/p&gt;

&lt;p&gt;It’s about the fact that s*&lt;em&gt;ome users still want control over how they write&lt;/em&gt;*. They want a work environment without visual “flavor.” They want to write in peace — just as they always have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’re one of them — this plugin is for you&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 Plugin Link: &lt;a href="https://wordpress.org/plugins/classic-visual-editor-options/" rel="noopener noreferrer"&gt;Classic Visual Editor Options&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to leave a comment, suggestion, or question.&lt;br&gt;
I’m open to feedback — and new solutions that respect the old things that worked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dejan S. Višekruna&lt;/strong&gt;&lt;br&gt;
WP developer and someone who still believes that — &lt;strong&gt;Code is Poetry&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
