<?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: Fran Bar Instance</title>
    <description>The latest articles on DEV Community by Fran Bar Instance (@franbarinstance).</description>
    <link>https://dev.to/franbarinstance</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3768642%2Facb691cf-8557-4b7d-979e-4b0baed62f39.jpg</url>
      <title>DEV Community: Fran Bar Instance</title>
      <link>https://dev.to/franbarinstance</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/franbarinstance"/>
    <language>en</language>
    <item>
      <title>Your AI Agent Forgets You Every Time? Meet memento-context</title>
      <dc:creator>Fran Bar Instance</dc:creator>
      <pubDate>Fri, 10 Apr 2026 13:30:23 +0000</pubDate>
      <link>https://dev.to/franbarinstance/your-ai-agent-forgets-you-every-time-meet-memento-context-4ke6</link>
      <guid>https://dev.to/franbarinstance/your-ai-agent-forgets-you-every-time-meet-memento-context-4ke6</guid>
      <description>&lt;p&gt;If you use any &lt;strong&gt;AI Agent&lt;/strong&gt; (like Claude, Cursor, Windsurf, or similar) for coding, this has definitely happened to you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I prefer concise answers in Spanish, please."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;"Sure, I'll keep that in mind."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The next day (or even in another conversation the same day):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Here is a detailed explanation in English…"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No memory between sessions. You waste time repeating the same things over and over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;memento-context&lt;/code&gt;&lt;/strong&gt; solves this problem. Here is an &lt;strong&gt;MCP&lt;/strong&gt; (Model Context Protocol) server that gives your agent &lt;strong&gt;persistent, scoped memory, completely local and no-nonsense&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does it actually do?&lt;/strong&gt; It injects small notes and reminders at the start of &lt;strong&gt;every&lt;/strong&gt; conversation. Short notes, one or two lines, to &lt;strong&gt;avoid saturating the agent's context&lt;/strong&gt;. Just enough so it remembers your preferences or the rules of each project without becoming annoying.&lt;/p&gt;

&lt;p&gt;And yes, it's open source and on GitHub:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/FranBarInstance/memento-context" rel="noopener noreferrer"&gt;https://github.com/FranBarInstance/memento-context&lt;/a&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%2Foz83ck2rl2t5c4y0zsb4.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%2Foz83ck2rl2t5c4y0zsb4.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What is MCP and why does it matter?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; is an emerging standard that allows AI applications to connect to &lt;em&gt;context servers&lt;/em&gt; running on your machine. These servers expose &lt;strong&gt;tools&lt;/strong&gt; that the agent can call, just like it uses a browser or a code interpreter.&lt;/p&gt;

&lt;p&gt;What does MCP solve? Until now, every conversation with an AI agent was its own isolated world. The agent didn't know who you were, what your preferences were, or how you work on each project. MCP creates a bridge: the agent can call these tools to &lt;strong&gt;read and write memory&lt;/strong&gt; in a structured way.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;memento-context&lt;/code&gt; is one such server, specialised in &lt;strong&gt;long-term memory&lt;/strong&gt;. It does it cleanly, without cloud, without magic.&lt;/p&gt;


&lt;h2&gt;
  
  
  How it works: three levels of memory (the second one is coming)
&lt;/h2&gt;

&lt;p&gt;The design is very deliberate. No "dump all tokens and see what happens". Right now you have two operational levels, and a third one on the way:&lt;/p&gt;
&lt;h3&gt;
  
  
  Level 1: Notes – fully operational
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Short, high‑signal statements (1-2 lines).
&lt;/li&gt;
&lt;li&gt;Automatically injected at the start of &lt;strong&gt;every&lt;/strong&gt; session.
&lt;/li&gt;
&lt;li&gt;Two scopes:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;global&lt;/code&gt;: follows you across all projects.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;repo&lt;/code&gt;: only for the current repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example (global):&lt;/strong&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I prefer direct answers in Spanish, without explaining basic concepts unless I ask."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Example (repo):&lt;/strong&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This project uses DDD with hexagonal architecture. Tests are written &lt;em&gt;before&lt;/em&gt; the code."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Level 2: Skills – coming soon
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;(Complete procedures, like "how to deploy to production". Not implemented yet, but it will come.)&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Level 3: References + Conversation attachments – operational
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;large&lt;/strong&gt; content: entire conversations, architectural decisions, long documents.
&lt;/li&gt;
&lt;li&gt;Only a lightweight pointer lives in active memory.
&lt;/li&gt;
&lt;li&gt;The full content is loaded &lt;strong&gt;on demand&lt;/strong&gt; only when the agent needs the detail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most powerful part: &lt;strong&gt;conversation attachments&lt;/strong&gt;. When you explicitly tell the agent &lt;em&gt;"Remember this conversation"&lt;/em&gt; or &lt;em&gt;"Save this chat"&lt;/em&gt;, it creates a memento and stores the dialogue and any files you indicate. &lt;strong&gt;You don't need to know how it's saved&lt;/strong&gt;, just ask for it.&lt;/p&gt;


&lt;h2&gt;
  
  
  What it deliberately does NOT do (just as important)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It is &lt;strong&gt;not a RAG system&lt;/strong&gt; → no vector search, no external API calls. Retrieval is &lt;strong&gt;deterministic&lt;/strong&gt; and context‑driven.
&lt;/li&gt;
&lt;li&gt;It does &lt;strong&gt;not save conversations automatically&lt;/strong&gt; → privacy first. It only saves when you ask.
&lt;/li&gt;
&lt;li&gt;It is &lt;strong&gt;not a document dump&lt;/strong&gt; → philosophy: "small, high‑impact context".
&lt;/li&gt;
&lt;li&gt;It is &lt;strong&gt;not cloud‑based&lt;/strong&gt; → &lt;strong&gt;everything lives on your machine&lt;/strong&gt;, in &lt;code&gt;~/.memento-context/&lt;/code&gt;. No remote requests of any kind.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Real‑world use cases (no technical jargon)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Personal preferences (global)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"Never use &lt;code&gt;any&lt;/code&gt; in TypeScript unless strictly necessary."
&lt;/li&gt;
&lt;li&gt;"I like functional programming patterns when reasonable."
&lt;/li&gt;
&lt;li&gt;"Always answer with code examples first, then explanation."&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Project conventions (repo)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"All API endpoints must have proper error handling with concrete exception types."
&lt;/li&gt;
&lt;li&gt;"We use &lt;code&gt;pytest&lt;/code&gt; with fixtures; not &lt;code&gt;unittest&lt;/code&gt;."
&lt;/li&gt;
&lt;li&gt;"Database migrations are generated with Alembic."&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Architectural decisions and saved conversations
&lt;/h3&gt;

&lt;p&gt;Imagine you've had a long discussion about redesigning the cache system. You say: &lt;em&gt;"Save this conversation, and attach the diagram I uploaded."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
Days later, you simply ask: &lt;em&gt;"Do you remember what we talked about regarding the cache system?"&lt;/em&gt; and the agent retrieves &lt;strong&gt;all the context&lt;/strong&gt; (including attachments) without you having to repeat anything.&lt;/p&gt;
&lt;h3&gt;
  
  
  Memory that travels between agents (this is key)
&lt;/h3&gt;

&lt;p&gt;The best part: you can switch agents (for example, from Claude to Cursor) and, because everything is stored locally in the same format, the new agent can also read the mementos. The memory &lt;strong&gt;is not tied to a single assistant&lt;/strong&gt;. Just ask: &lt;em&gt;"Do you remember my global preferences?"&lt;/em&gt; and it will retrieve them instantly. That easy.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to get started
&lt;/h2&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%2Fo1nitby6cdmdfkh2n3dv.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%2Fo1nitby6cdmdfkh2n3dv.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Visit the repository
&lt;/h3&gt;

&lt;p&gt;All the up‑to‑date information, installation scripts and documentation is at:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/FranBarInstance/memento-context" rel="noopener noreferrer"&gt;https://github.com/FranBarInstance/memento-context&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There you will find the quick method (curl for Linux/Mac, PowerShell for Windows) as well as manual installation from source.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Configure your MCP client
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; each agent or assistant has its own quirks when it comes to configuring MCP servers. The syntax of the configuration file may vary from one to another. For example, in some cases you can install the server &lt;strong&gt;globally&lt;/strong&gt; (available for any project) and also &lt;strong&gt;locally&lt;/strong&gt; (only for a specific project), while in other assistants only global installation is available.&lt;/p&gt;

&lt;p&gt;Consult your agent's documentation (Claude Desktop, Cursor, VS Code with MCP extension, etc.) to know exactly where and how to add the configuration. In most cases, editing an &lt;code&gt;mcp.json&lt;/code&gt; or similar file with this content will suffice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"memento-context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"memento-context"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your agent allows local configurations, you can put that block in the project's configuration; otherwise, you will have to put it in the agent's global configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use natural language, forget about the internal tools
&lt;/h3&gt;

&lt;p&gt;You don't need to know that &lt;code&gt;save_memento&lt;/code&gt;, &lt;code&gt;get_memento_attachments&lt;/code&gt; or similar exist. That is the agent's job. &lt;strong&gt;You just speak normally&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;"Remember that in this repository we always use FastAPI and SQLAlchemy."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Remember that for all my repositories I prefer answers in Spanish."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Save this conversation about the new architecture."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Do you remember what we talked about yesterday regarding tests?"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent automatically detects the context (whether you are in a repository or not) and decides whether to save the memento as &lt;code&gt;global&lt;/code&gt; or &lt;code&gt;repo&lt;/code&gt;. You can also be explicit: &lt;em&gt;"this only for this project"&lt;/em&gt; or &lt;em&gt;"this for all projects"&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Everything is on your disk, visible and editable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.memento-context/
├── global/
│   └── mementos.json
└── repos/
    └── my-project__hash/
        └── mementos.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you save a conversation with files, a folder with the attachments is created. But &lt;strong&gt;you don't have to worry about that&lt;/strong&gt;: the agent manages it on its own. If you want, you can open the JSON files and see what has been saved.&lt;/p&gt;




&lt;h2&gt;
  
  
  When does this pattern shine?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You work on &lt;strong&gt;multiple long‑running projects&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You have &lt;strong&gt;strong personal coding preferences&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You want your agent to &lt;strong&gt;evolve with you&lt;/strong&gt; over months.&lt;/li&gt;
&lt;li&gt;You often switch between different assistants (Claude, Cursor, etc.) and don't want to repeat yourself.&lt;/li&gt;
&lt;li&gt;You value &lt;strong&gt;privacy&lt;/strong&gt; and everything staying local, with no external API calls.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Links and resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Official repository (installation, docs, code)&lt;/strong&gt;: &lt;a href="https://github.com/FranBarInstance/memento-context" rel="noopener noreferrer"&gt;https://github.com/FranBarInstance/memento-context&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: MIT&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What about you?
&lt;/h2&gt;

&lt;p&gt;Have you already tried any memory system for your AI agent? Do you suffer from the "every conversation starts from zero" syndrome? Do you like the idea of memory travelling between agents? Tell me in the comments.&lt;/p&gt;

&lt;p&gt;And if you try &lt;code&gt;memento-context&lt;/code&gt;, I would love to hear about your experience!&lt;/p&gt;




</description>
      <category>ai</category>
      <category>agents</category>
      <category>agentskills</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Dynamic Bootstrap 5 Themes Without SASS, Without Hardcoded Dark/Light — and Without the Usual Headaches</title>
      <dc:creator>Fran Bar Instance</dc:creator>
      <pubDate>Sun, 15 Mar 2026 12:17:27 +0000</pubDate>
      <link>https://dev.to/franbarinstance/dynamic-bootstrap-5-themes-without-sass-without-hardcoded-darklight-and-without-the-usual-1h4n</link>
      <guid>https://dev.to/franbarinstance/dynamic-bootstrap-5-themes-without-sass-without-hardcoded-darklight-and-without-the-usual-1h4n</guid>
      <description>&lt;p&gt;I'll admit it: for more years than I care to count, I've been patching Bootstrap projects with Bootswatch, telling myself &lt;em&gt;"someday I'll build a proper dynamic theming system."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Someday finally arrived — in 2026, when AI is supposedly doing everything. Better late than never. Here it is: &lt;a href="https://github.com/FranBarInstance/bootstrap-dynamic-themes" rel="noopener noreferrer"&gt;bootstrap-dynamic-themes&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The core problem with Bootstrap theming&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bootstrap needs to know upfront whether your theme is dark or light. That means hardcoding contrast mode directly into your templates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-primary"&lt;/span&gt; &lt;span class="na"&gt;data-bs-theme=&lt;/span&gt;&lt;span class="s"&gt;"dark"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Static Link&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;data-bs-theme="dark"&lt;/code&gt; tells Bootstrap that &lt;code&gt;bg-primary&lt;/code&gt; is dark and should render light text on top. Fine — until you dynamically switch to a light palette at runtime. Now that hardcoded attribute causes white text on a light background, and your UI silently breaks.&lt;/p&gt;

&lt;p&gt;This is what makes dynamic theming genuinely hard in Bootstrap: it's not just about swapping colors, it's about contrast awareness.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;How BTDT solves it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BTDT handles contrast at the CSS variable level. Each theme calculates its own contrast colors (&lt;code&gt;--bs-primary-contrast&lt;/code&gt;, etc.), and the engine applies them automatically. Your HTML stays clean and agnostic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Automatic Dynamic Link&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Switch from a dark professional theme to a light pastel one at runtime — menus, cards, links, even SVG icons like the navbar toggler adapt automatically. No &lt;code&gt;data-bs-theme&lt;/code&gt; juggling, no conditional logic in your templates, zero HTML changes.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;More than a theming fix — a full design system&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project ships with a visual editor where you can design your theme in real time: 50+ color palettes, 50+ fonts, 50+ presets, and multiple structural styles. When you're done, you click "Copy CSS Preset" and drop the output into your project.&lt;/p&gt;

&lt;p&gt;No SASS, no npm, no Webpack, no build steps at all — just standard CSS custom properties. It even works opened directly from the filesystem (&lt;code&gt;file:///&lt;/code&gt;), which makes it ideal for prototyping.&lt;/p&gt;

&lt;p&gt;Once you have a theme, integration is a single line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Option A: Pure CSS, maximum performance --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"btdt/themes/preset/studio.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Option B: One-line loader with JS API --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;data-preset=&lt;/span&gt;&lt;span class="s"&gt;"studio"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"btdt/js/btdt.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And at runtime you get a clean JS API:&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="nx"&gt;btdt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aurora&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Switch preset&lt;/span&gt;
&lt;span class="nx"&gt;btdt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggleMode&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;     &lt;span class="c1"&gt;// Toggle dark/light&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;BTDT vs. Bootswatch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bootswatch is great for static themes. BTDT is for when you need more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fully editable&lt;/strong&gt; — tweak every variable in real time, not just pick from a list&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic runtime&lt;/strong&gt; — switch themes or toggle dark mode without a page reload&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular&lt;/strong&gt; — combine the palette from one theme with the typography from another&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No compilation&lt;/strong&gt; — pure CSS, no toolchain overhead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-extendable&lt;/strong&gt; — the project includes agent skills so an AI assistant can add new palettes, fonts, or presets following the established architecture&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 &lt;a href="https://franbarinstance.github.io/bootstrap-dynamic-themes/btdt/editor/" rel="noopener noreferrer"&gt;Live editor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⭐ &lt;a href="https://github.com/FranBarInstance/bootstrap-dynamic-themes" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; — stars are very welcome :-)&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>webdev</category>
      <category>bootstrap</category>
      <category>themes</category>
      <category>design</category>
    </item>
    <item>
      <title>Developing for AI: The New Paradigm of Application Architecture with Intelligent Agents</title>
      <dc:creator>Fran Bar Instance</dc:creator>
      <pubDate>Thu, 19 Feb 2026 10:28:56 +0000</pubDate>
      <link>https://dev.to/franbarinstance/developing-for-ai-the-new-paradigm-of-application-architecture-with-intelligent-agents-4ndb</link>
      <guid>https://dev.to/franbarinstance/developing-for-ai-the-new-paradigm-of-application-architecture-with-intelligent-agents-4ndb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction: An Experiment to Understand the Future of Development
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/FranBarInstance/neutral-starter-py" rel="noopener noreferrer"&gt;Neutral Starter Py&lt;/a&gt; is an experiment conceived to explore how we should design applications in the era of AI agents. Its premise is radical: &lt;strong&gt;if we want AI to actively collaborate in software development and maintenance, the architecture must be designed from the ground up to be readable, modifiable, and extensible by language models&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This project, which combines Python (Flask) with the &lt;strong&gt;&lt;a href="https://github.com/FranBarInstance/neutralts" rel="noopener noreferrer"&gt;Neutral TS&lt;/a&gt;&lt;/strong&gt; template engine, proposes one path: &lt;strong&gt;extreme modularity based on self-contained components&lt;/strong&gt;. But beyond the technology, what is truly innovative is its stated goal: "to provide developers with AI-powered agentic capabilities." It is, above all, a testing ground for understanding where we are heading.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Motivation: Adapting to the New Reality
&lt;/h2&gt;

&lt;p&gt;We are living through a paradigm shift. AI models are no longer just tools for consultation or text generation; they are becoming &lt;strong&gt;agents capable of executing complex tasks&lt;/strong&gt; within our development environment. However, most current codebases are optimized for human reading, not for autonomous AI intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can we, as developers, face this challenge?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer may lie in changing our role: from being mere "code scribes" to becoming &lt;strong&gt;architects and orchestrators of architectures&lt;/strong&gt;. Our work will no longer be just implementing functionalities, but creating the blueprints and rules (the "skills") so that AI agents can build and evolve software within safe and coherent boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Heart of the System: Components as "Atomic Units" for AI
&lt;/h2&gt;

&lt;p&gt;The strength of this approach lies in a directory like &lt;code&gt;src/component/&lt;/code&gt;. Each subfolder with an identifying prefix (for example, &lt;code&gt;cmp_6100_rrss&lt;/code&gt;, an RSS reader) is a &lt;strong&gt;complete and isolated functionality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What does this mean for an AI?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Self-containment&lt;/strong&gt;: A component includes everything it needs: routes, business logic, templates, static files, configuration, and metadata. An AI can read a single component and fully understand its purpose and operation without examining the rest of the project.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Isolation&lt;/strong&gt;: If a model receives the instruction "modify the RSS reader to include images," it can operate within the boundaries of that component with the certainty that it &lt;strong&gt;will not affect&lt;/strong&gt; the login component or the database one. This drastically reduces cascading errors and the need for constant human supervision.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Replaceability&lt;/strong&gt;: A component can be removed simply by deleting its folder, without causing application failures. This feature is crucial to allow the AI to experiment, propose alternative versions, and subject them to testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Practical Example&lt;/strong&gt;: A component like &lt;code&gt;cmp_7000_hellocomp&lt;/code&gt; serves as a template. It contains its own logic, its specific CSS/JS, and its templates. For an AI, it is a model to follow: "if you want to create a new component, copy the structure of &lt;code&gt;hellocomp&lt;/code&gt; and adapt it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Persistent Memory: The AI's "Skills"
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges when working with AI on software projects is the &lt;strong&gt;loss of context&lt;/strong&gt; between conversations. Each new interaction starts practically from scratch, leading to inconsistencies and having to repeat instructions.&lt;/p&gt;

&lt;p&gt;The solution proposed by this paradigm is the creation of a repository of &lt;strong&gt;"skills"&lt;/strong&gt; accessible to the AI, typically in a folder like &lt;code&gt;.agent/skills&lt;/code&gt;. These are definitions of "abilities" that the AI must read to align its behavior with the project's architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do they work in practice?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; When starting a new task, the AI consults these files.&lt;/li&gt;
&lt;li&gt; It finds rules like: "To create a new component, you must:

&lt;ul&gt;
&lt;li&gt;  Name it with a prefix and an order number.&lt;/li&gt;
&lt;li&gt;  Include a metadata file.&lt;/li&gt;
&lt;li&gt;  Define its routes following the established pattern."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; With these "workshop instructions," the AI can generate code that integrates perfectly with the rest of the application, maintaining coherence over time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The conclusion is key&lt;/strong&gt;: a large part of the developer's work in this new paradigm will consist of &lt;strong&gt;providing the project with sufficient skills&lt;/strong&gt;. In the same way that we used to document code so that other humans could understand it, we now have to &lt;strong&gt;document tasks and processes&lt;/strong&gt; so that the AI can execute them autonomously and coherently. Every recurring operation (creating a component, adding a route, modifying a template) must have its counterpart documented in the form of a "skill." These skills are the &lt;strong&gt;project's long-term memory and the main deliverable of the developer-architect&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt Strategy: The Art of Communicating with AI
&lt;/h2&gt;

&lt;p&gt;If the &lt;em&gt;skills&lt;/em&gt; are the "manual," the &lt;strong&gt;prompt&lt;/strong&gt; is the "work order." A good prompt in this context follows a structure we can call &lt;strong&gt;Prompt Strategy&lt;/strong&gt;: the systematic way of asking the AI to generate new functionality.&lt;/p&gt;

&lt;p&gt;An effective prompt contains key elements:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Your task is to create the component &lt;code&gt;[name]&lt;/code&gt;, which must [functional description]. Use route: &lt;code&gt;/my-route&lt;/code&gt;. To complete this task, review: - &lt;code&gt;.agent/skills/manage-component/SKILL.md&lt;/code&gt; - &lt;code&gt;.agent/skills/manage-templates/SKILL.md&lt;/code&gt; - &lt;code&gt;src/component/[example_component]&lt;/code&gt; (as an example). Define routes dynamically if needed, following the pattern used by other components."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This strategy includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Clear Identity&lt;/strong&gt;: Component name.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Functional Purpose&lt;/strong&gt;: What it should do.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Entry Point&lt;/strong&gt;: The URL.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;References to Documentation&lt;/strong&gt;: The &lt;em&gt;skills&lt;/em&gt; the AI must consult.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;A Concrete Example&lt;/strong&gt;: A real component from which to extract patterns.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Design Principles&lt;/strong&gt;: Style guidelines.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A good &lt;strong&gt;Prompt Strategy&lt;/strong&gt; recognizes that the AI is a "collaborator" that needs context, examples, and clear rules to operate effectively within our code ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Qualitative Leap: Towards "Darwinian" Component Development
&lt;/h2&gt;

&lt;p&gt;Component-based modularity opens fascinating possibilities. Since each component is an independent unit, nothing prevents the existence of &lt;strong&gt;multiple simultaneous versions&lt;/strong&gt; for the same functionality (e.g., a comment system) generated by different AI models or in different sessions.&lt;/p&gt;

&lt;p&gt;A developer (or even an "AI supervisor") could then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Run performance and security tests on each version.&lt;/li&gt;
&lt;li&gt; Evaluate code quality, readability, or resource consumption.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Select the best implementation&lt;/strong&gt; and promote it to the definitive version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This turns the development process into a cycle of &lt;strong&gt;generation, evaluation, and selection&lt;/strong&gt;, similar to an evolutionary process. Our role would no longer be to write every line, but to &lt;strong&gt;design the experiment, define the selection criteria, and orchestrate the flow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: The New Role of the Developer as Architect-Orchestrator
&lt;/h2&gt;

&lt;p&gt;If AI can write increasingly complex code, our value will no longer reside in the ability to type algorithms, but in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Designing architectures&lt;/strong&gt; that are inherently "AI-friendly," with clear boundaries and explicit rules.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Defining the "skills"&lt;/strong&gt; , i.e., documenting the tasks and processes that the AI needs to know to operate coherently. This is, essentially, &lt;strong&gt;documenting the "how things are done" in the project&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Creating effective Prompt Strategies&lt;/strong&gt; that guide the AI towards optimal solutions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Orchestrating and evaluating&lt;/strong&gt; the generated work, deciding which components deserve integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this new paradigm, code is not only for humans to read, but also for machines to interpret and modify. Documentation is no longer just for other developers: it is the &lt;strong&gt;fuel that allows AI to operate autonomously and aligned with our objectives&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The question is no longer "how do I program this?", but &lt;strong&gt;"how do I organize the knowledge, architecture, and tasks so that AI can program it with me, coherently and reliably?"&lt;/strong&gt; Answering this question will likely be the most valuable skill for developers in the coming decade.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>python</category>
    </item>
    <item>
      <title>Neutral TS: Language-Agnostic Backend Web Templates</title>
      <dc:creator>Fran Bar Instance</dc:creator>
      <pubDate>Thu, 12 Feb 2026 17:25:52 +0000</pubDate>
      <link>https://dev.to/franbarinstance/neutral-ts-language-agnostic-backend-web-templates-33dg</link>
      <guid>https://dev.to/franbarinstance/neutral-ts-language-agnostic-backend-web-templates-33dg</guid>
      <description>&lt;p&gt;I’ve been using my own PHP-based template system for years. A little over a year ago, I decided to port it to Rust and make it open source – that’s how &lt;strong&gt;Neutral TS&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;Web development today is heavily frontend‑focused, with JavaScript templating everywhere. Neutral TS, on the other hand, is a backend templating system, so right off the bat that’s its first weak spot. Still, there are cases where you genuinely need a backend template engine.&lt;/p&gt;

&lt;p&gt;With that in mind, I thought: what if the main feature was being &lt;strong&gt;language‑agnostic&lt;/strong&gt;? The exact same templates could be reused in any programming language.&lt;/p&gt;

&lt;p&gt;Another feature – “objects” – lets you create a plugin that can be embedded in any Neutral TS template and work regardless of the host language. Right now objects are experimental and must be written in Python, but that’s not a problem even if your main app is in Rust or PHP, for example.&lt;/p&gt;

&lt;p&gt;So I can build a set of web templates and use them interchangeably from a Rust app, a Python app, a PHP app, or whatever.&lt;/p&gt;

&lt;p&gt;Neutral TS works natively in Rust and Python. For other languages you need an IPC, and to illustrate that I like to use the MySQL (or any database) analogy.&lt;/p&gt;

&lt;p&gt;MySQL runs a TCP server to talk to your app: you send a query, you get a result. Neutral TS can also run as a TCP server – you send the template, you get the rendered result. The language doesn’t matter, and just like with MySQL the result is always exactly the same.&lt;/p&gt;

&lt;p&gt;This model is also more secure than the traditional one, because templates are rendered in a separate sandbox with no shared memory.&lt;/p&gt;

&lt;p&gt;I tend to build complex things with no real utility – you guys can tell me if that’s the case :-)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust crate: &lt;a href="https://crates.io/crates/neutralts" rel="noopener noreferrer"&gt;https://crates.io/crates/neutralts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Python package: &lt;a href="https://pypi.org/project/neutraltemplate/" rel="noopener noreferrer"&gt;https://pypi.org/project/neutraltemplate/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To use it as an IPC you need a server and a client:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server: &lt;a href="https://github.com/FranBarInstance/neutral-ipc/releases" rel="noopener noreferrer"&gt;https://github.com/FranBarInstance/neutral-ipc/releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Clients: &lt;a href="https://github.com/FranBarInstance/neutral-ipc/tree/master/clients" rel="noopener noreferrer"&gt;https://github.com/FranBarInstance/neutral-ipc/tree/master/clients&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples: &lt;a href="https://github.com/FranBarInstance/neutralts-docs/tree/master/examples" rel="noopener noreferrer"&gt;https://github.com/FranBarInstance/neutralts-docs/tree/master/examples&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>rust</category>
      <category>python</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
