<?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: Nicolas</title>
    <description>The latest articles on DEV Community by Nicolas (@ntrossat).</description>
    <link>https://dev.to/ntrossat</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%2F2169719%2F319e7e35-edae-40bc-9de5-3e3c567aa4ad.jpg</url>
      <title>DEV Community: Nicolas</title>
      <link>https://dev.to/ntrossat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ntrossat"/>
    <language>en</language>
    <item>
      <title>One architecture, one set of guidelines, for all your projects?</title>
      <dc:creator>Nicolas</dc:creator>
      <pubDate>Tue, 20 Oct 2026 12:52:13 +0000</pubDate>
      <link>https://dev.to/ntrossat/one-architecture-one-set-of-guidelines-for-all-your-projects-14p</link>
      <guid>https://dev.to/ntrossat/one-architecture-one-set-of-guidelines-for-all-your-projects-14p</guid>
      <description>&lt;h2&gt;
  
  
  Ten repos, ten architectures
&lt;/h2&gt;

&lt;p&gt;Open any three repositories at your company. One uses a service layer, one puts SQL in the route handlers, one has a &lt;code&gt;utils/&lt;/code&gt; folder that does everything. The buttons are three shades of blue. Each repo has its own &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;AGENTS.md&lt;/code&gt;, copied from another one six months ago and edited since.&lt;/p&gt;

&lt;p&gt;Then someone decides: "From now on, every API returns errors in this format." That decision lands in a meeting, then a wiki page, then maybe in two of the ten &lt;code&gt;CLAUDE.md&lt;/code&gt; files. The coding assistants in the other eight repos never hear about it.&lt;/p&gt;

&lt;p&gt;And the docs? They were right the day they shipped. Nobody updates the page after the next refactor, because nobody remembers it exists.&lt;/p&gt;

&lt;p&gt;Coding assistants made this worse and better at once. Worse, because they write code fast, in whatever style the local context suggests. Better, because they follow instructions very well, if every one of them gets the same instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea: decide once, in one repository
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/ntrossat/ohara" rel="noopener noreferrer"&gt;Ohara&lt;/a&gt;, an open-source tool that puts every guideline and every doc in one GitHub repository. Coding assistants read it live through MCP. People read it on a website. Nothing is copied into each project.&lt;/p&gt;

&lt;p&gt;The docs repository holds plain Markdown. Folders become the menu, and every change is a pull request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guidelines/
  backend.md        # FastAPI structure, errors, state
  frontend.md       # React, paths, styles
  security.md
  testing.md
  git.md
design/
  brand.md
  style-guide.md    # tokens: color, type, spacing
  ui-kit.md         # component and screen specs
architecture/
  ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn68nq8bs3yxyppttitpj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn68nq8bs3yxyppttitpj.png" alt="How Ohara connects the docs repository to every project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assistants read the guidelines from Ohara when they work, and send doc changes back as pull requests. A human merges each one, and the website rebuilds on the merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same architecture, guidelines, and UI in every project
&lt;/h2&gt;

&lt;p&gt;Connect your assistant once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http ohara https://your-ohara/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run one command in each project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ohara:init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant finds the guidelines and docs that apply to this project, and writes them into &lt;code&gt;.claude/rules/ohara.md&lt;/code&gt; (or &lt;code&gt;AGENTS.md&lt;/code&gt; for other assistants), with the workflow to follow. It adds the server to &lt;code&gt;.mcp.json&lt;/code&gt;, so the whole team gets it on the next pull. The rules file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Ohara instructions&lt;/span&gt;

Ohara is the source of truth for documentation and engineering guidelines.

Guidelines:
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`guidelines/backend`&lt;/span&gt;: Python and FastAPI: structure, style, errors.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`guidelines/frontend`&lt;/span&gt;: React, TypeScript, and Vite.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`design/ui-kit`&lt;/span&gt;: component and screen specs for the website.

Workflow:
&lt;span class="p"&gt;-&lt;/span&gt; Before planning a change, read the guidelines that apply.
&lt;span class="p"&gt;-&lt;/span&gt; Propose an architecture that follows them, and name them.
&lt;span class="p"&gt;-&lt;/span&gt; After the change, check it against the guidelines.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file holds pointers, not copies. The assistant reads each guideline from Ohara when it works, so it always gets the merged version.&lt;/p&gt;

&lt;p&gt;That is the part that changes the game. An architect changes &lt;code&gt;guidelines/backend.md&lt;/code&gt; in a pull request. Once it is merged, the next task in every repository follows it. No copy-paste across ten &lt;code&gt;CLAUDE.md&lt;/code&gt; files, no Slack announcement.&lt;/p&gt;

&lt;p&gt;The UI works the same way. Put your design tokens, brand, and component specs in &lt;code&gt;design/&lt;/code&gt;, and every frontend your assistants build uses the same colors, spacing, and components.&lt;/p&gt;

&lt;p&gt;To check a project that already exists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ohara:review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reports each violation with its guideline, file, and line, and changes nothing unless you ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docs that update and publish themselves
&lt;/h2&gt;

&lt;p&gt;Guidelines flow into the code. The other direction matters as much: the code has to flow back into the docs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docs live next to the code
&lt;/h3&gt;

&lt;p&gt;A code repository can keep its own docs in &lt;code&gt;docs/&lt;/code&gt;. Add a &lt;code&gt;.ohara.yml&lt;/code&gt; at its root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;docs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On each push to the default branch, Ohara syncs those pages into &lt;code&gt;apps/&amp;lt;repo&amp;gt;/&lt;/code&gt; of the website. Your docs change in the same pull request as your code, and they are published the moment it merges.&lt;/p&gt;

&lt;h3&gt;
  
  
  The assistant writes the doc update
&lt;/h3&gt;

&lt;p&gt;After a change, the workflow in the rules file tells the assistant to update the docs in the same change. Or run it yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ohara:update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant compares the docs with the latest code changes. It edits the project's own docs in place, and proposes every other affected page, such as an architecture page or the API reference, through the &lt;code&gt;propose_change&lt;/code&gt; tool.&lt;/p&gt;

&lt;p&gt;All proposals from one code branch land in a single docs pull request. Branch &lt;code&gt;feature/billing&lt;/code&gt; in repo &lt;code&gt;api&lt;/code&gt; becomes branch &lt;code&gt;api/feature/billing&lt;/code&gt; in the docs repository. The assistant puts its link in the code pull request, so the reviewer sees the code and its docs side by side.&lt;/p&gt;

&lt;p&gt;AI writes. A human merges. Ohara never merges anything on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing is a merge
&lt;/h3&gt;

&lt;p&gt;A merge to the docs repository triggers a rebuild. The website, the search index, and the MCP server all serve the new version. There is no build step to run and no deploy to remember.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stale pages get flagged
&lt;/h3&gt;

&lt;p&gt;Each page can say what code it describes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alice&lt;/span&gt;
&lt;span class="na"&gt;covers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;acme/api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;src/billing/*&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-10-01&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a push changes &lt;code&gt;src/billing/&lt;/code&gt;, Ohara flags the page with the changed files and a compare link. A page that nobody verified in 180 days is flagged too. Assistants see the flags through the &lt;code&gt;stale_pages&lt;/code&gt; tool and propose the fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  A feature, start to finish
&lt;/h2&gt;

&lt;p&gt;Here is what a normal day looks like. You ask your assistant to add invoice exports to the &lt;code&gt;api&lt;/code&gt; repo.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It plans.&lt;/strong&gt; It reads &lt;code&gt;guidelines/backend&lt;/code&gt;, &lt;code&gt;guidelines/security&lt;/code&gt;, and the billing docs from Ohara, proposes an architecture, and names the guidelines it relies on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You review the plan.&lt;/strong&gt; Five minutes, before any code exists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It builds&lt;/strong&gt; from the approved plan, then checks the result against the guidelines and fixes what does not follow them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It updates the docs.&lt;/strong&gt; It edits &lt;code&gt;docs/billing.md&lt;/code&gt; in the &lt;code&gt;api&lt;/code&gt; repo, and proposes a change to the architecture page in the docs repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You open one code pull request&lt;/strong&gt; that links one docs pull request. The reviewer reads both together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You merge.&lt;/strong&gt; The code ships, &lt;code&gt;.ohara.yml&lt;/code&gt; syncs the project docs, and the docs merge rebuilds the website.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The next developer, in a different repo, asks about invoices. Their assistant reads the updated page. Nobody wrote a wiki page by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Ohara is one Docker container, Apache-2.0, and your docs stay in your own GitHub repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSLO&lt;/span&gt; https://raw.githubusercontent.com/ntrossat/ohara/main/compose.yml &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:8000&lt;/code&gt;. The setup page creates a GitHub App. Install it on your docs repository and your code repositories, then run &lt;code&gt;/ohara:init&lt;/code&gt; in each project.&lt;/p&gt;

&lt;p&gt;Access mirrors GitHub. A public docs repository makes a public website. A private one requires GitHub sign-in, and only people who can read the repository can read the docs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live demo, Ohara's own docs served by Ohara: &lt;a href="https://ohara.trossat.com/docs" rel="noopener noreferrer"&gt;ohara.trossat.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/ntrossat/ohara" rel="noopener noreferrer"&gt;github.com/ntrossat/ohara&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your repos have drifted apart, try it on two of them and let me know how it goes in the comments. And if it helps, a star on GitHub helps other teams find it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>documentation</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
