development-hub/index.html

102 lines
35 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-overview" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Development Hub</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pages.brrd.tech/rob/development-hub/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Development Hub"><meta data-rh="true" name="description" content="Central orchestration project for managing Rob&#x27;s multi-project development ecosystem."><meta data-rh="true" property="og:description" content="Central orchestration project for managing Rob&#x27;s multi-project development ecosystem."><link data-rh="true" rel="icon" href="/rob/development-hub/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pages.brrd.tech/rob/development-hub/"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/development-hub/" hreflang="en"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/development-hub/" hreflang="x-default"><script data-rh="true">function insertBanner(){var n=document.createElement("div");n.id="__docusaurus-base-url-issue-banner-container";n.innerHTML='\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">/rob/development-hub/</span> </p>\n <p>We suggest trying baseUrl = <span id="__docusaurus-base-url-issue-banner-suggestion-container" style="font-weight: bold; color: green;"></span></p>\n</div>\n',document.body.prepend(n);var e=document.getElementById("__docusaurus-base-url-issue-banner-suggestion-container"),o=window.location.pathname,s="/"===o.substr(-1)?o:o+"/";e.innerHTML=s}document.addEventListener("DOMContentLoaded",function(){void 0===window.docusaurus&&insertBanner()})</script><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Development Hub","item":"https://pages.brrd.tech/rob/development-hub/"}]}</script><link rel="stylesheet" href="/rob/development-hub/assets/css/styles.6095798e.css">
<script src="/rob/development-hub/assets/js/runtime~main.940eef11.js" defer="defer"></script>
<script src="/rob/development-hub/assets/js/main.c74b9cfb.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/rob/development-hub/"><b class="navbar__title text--truncate">Development Hub</b></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://gitea.brrd.tech/rob/development-hub" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Source Code<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/rob/development-hub/"><span title="Development Hub" class="linkLabel_WmDU">Development Hub</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/rob/development-hub/todos"><span title="Development Hub TODOs" class="linkLabel_WmDU">Development Hub TODOs</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/rob/development-hub/goals"><span title="Goals" class="linkLabel_WmDU">Goals</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/rob/development-hub/milestones"><span title="Milestones" class="linkLabel_WmDU">Milestones</span></a></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/rob/development-hub/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Development Hub</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Development Hub</h1></header>
<p>Central orchestration project for managing Rob&#x27;s multi-project development ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview" translate="no"></a></h2>
<p>Development Hub provides:</p>
<ul>
<li class=""><strong>GUI Application</strong> - PyQt6 workspace with project list, splittable terminal panes, and session persistence</li>
<li class=""><strong>CLI Tools</strong> - Scripts to create and manage projects following consistent patterns</li>
<li class=""><strong>Centralized Documentation</strong> - Docusaurus-based docs with Gitea Pages deployment</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gui-application">GUI Application<a href="#gui-application" class="hash-link" aria-label="Direct link to GUI Application" title="Direct link to GUI Application" translate="no"></a></h2>
<p>A PyQt6-based workspace for managing your development projects.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="running-the-app">Running the App<a href="#running-the-app" class="hash-link" aria-label="Direct link to Running the App" title="Direct link to Running the App" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">cd ~/PycharmProjects/development-hub</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">source .venv/bin/activate</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">python -m development_hub</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features" translate="no"></a></h3>
<ul>
<li class=""><strong>Project Auto-Discovery</strong> - Scans configurable directories for git repos, with ignore patterns</li>
<li class=""><strong>Project Dashboard</strong> - View todos, goals, milestones at a glance with interactive checkboxes</li>
<li class=""><strong>Splittable Panes</strong> - Horizontal/vertical splits, each pane has its own tab bar</li>
<li class=""><strong>PTY Terminals</strong> - Full terminal emulation with TUI support (vim, htop work)</li>
<li class=""><strong>Drag &amp; Drop</strong> - Drop files/folders into terminal to inject paths</li>
<li class=""><strong>Session Persistence</strong> - Remembers pane layout and open terminals on restart</li>
<li class=""><strong>New Project Dialog</strong> - Create projects with optional Ramble voice input</li>
<li class=""><strong>Context Menu Actions</strong> - Open terminal, editor, Gitea, docs, deploy from right-click</li>
<li class=""><strong>Documentation Preview</strong> - Preview documentation updates before applying changes</li>
<li class=""><strong>Discussion Integration</strong> - Launch orchestrated discussions for todos and milestones</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="keyboard-shortcuts">Keyboard Shortcuts<a href="#keyboard-shortcuts" class="hash-link" aria-label="Direct link to Keyboard Shortcuts" title="Direct link to Keyboard Shortcuts" translate="no"></a></h3>
<table><thead><tr><th>Shortcut</th><th>Action</th></tr></thead><tbody><tr><td><code>Ctrl+Shift+T</code></td><td>New terminal tab</td></tr><tr><td><code>Ctrl+Shift+W</code></td><td>Close current tab</td></tr><tr><td><code>Ctrl+Shift+D</code></td><td>Split horizontal</td></tr><tr><td><code>Ctrl+Shift+E</code></td><td>Split vertical</td></tr><tr><td><code>Ctrl+Shift+P</code></td><td>Close active pane</td></tr><tr><td><code>Ctrl+Alt+Left/Right</code></td><td>Switch panes</td></tr><tr><td><code>Ctrl+B</code></td><td>Toggle project panel</td></tr><tr><td><code>Ctrl+N</code></td><td>New project dialog</td></tr><tr><td><code>F5</code></td><td>Refresh project list</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-new-project-script">The <code>new-project</code> Script<a href="#the-new-project-script" class="hash-link" aria-label="Direct link to the-new-project-script" title="Direct link to the-new-project-script" translate="no"></a></h2>
<p>The main tool is <code>new-project</code>, which automates creating a new project in the ecosystem:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">new-project my-tool --title &quot;My Tool&quot; --tagline &quot;Does useful things&quot;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-creates">What It Creates<a href="#what-it-creates" class="hash-link" aria-label="Direct link to What It Creates" title="Direct link to What It Creates" translate="no"></a></h3>
<ol>
<li class=""><strong>Gitea repository</strong> at <code>gitea.brrd.tech/rob/my-tool</code></li>
<li class=""><strong>Local project</strong> at <code>~/PycharmProjects/my-tool/</code> with:<!-- -->
<ul>
<li class=""><code>CLAUDE.md</code> - AI assistant context</li>
<li class=""><code>README.md</code> - Project readme</li>
<li class=""><code>pyproject.toml</code> - Python packaging</li>
<li class=""><code>.gitignore</code> - Standard ignores</li>
<li class=""><code>docs/</code> - Symlink to centralized docs</li>
</ul>
</li>
<li class=""><strong>Documentation folder</strong> at <code>project-docs/docs/projects/my-tool/</code></li>
<li class=""><strong>Build configuration</strong> in <code>build-public-docs.sh</code></li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Full specification</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">new-project myproject --title &quot;My Project&quot; --tagline &quot;Short description&quot;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Interactive mode (prompts for title/tagline)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">new-project myproject</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Options</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">--dry-run Show what would happen without making changes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">--skip-gitea Skip Gitea repo creation (for offline use)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">--help Show help</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture">Architecture<a href="#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture" translate="no"></a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">src/development_hub/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── __init__.py</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── __main__.py # Entry point</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── app.py # QApplication subclass</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── main_window.py # Main window with menus</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── project_list.py # Left panel - project discovery &amp; context menu</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── workspace.py # Right panel - splittable panes with tabs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── terminal_widget.py # PTY terminal with pyte emulation</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── project_discovery.py # Auto-discover projects from configurable paths</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── dialogs.py # New Project (with Ramble), Settings, Preview dialogs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── settings.py # JSON persistence for settings &amp; session</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── styles.py # Dark theme stylesheet</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── models/ # Data models (Goal, Todo, Milestone, Health)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── views/ # Dashboard views (Project, Global)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── parsers/ # Markdown file parsers (todos, goals, milestones)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── services/ # Business logic (git, health checker, progress writer)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└── widgets/ # Reusable UI components</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-classes">Key Classes<a href="#key-classes" class="hash-link" aria-label="Direct link to Key Classes" title="Direct link to Key Classes" translate="no"></a></h3>
<table><thead><tr><th>Class</th><th>File</th><th>Purpose</th></tr></thead><tbody><tr><td><code>MainWindow</code></td><td>main_window.py</td><td>QMainWindow with menus, splitter layout</td></tr><tr><td><code>ProjectListWidget</code></td><td>project_list.py</td><td>Project list with context menu actions</td></tr><tr><td><code>WorkspaceManager</code></td><td>workspace.py</td><td>Manages splittable pane layout</td></tr><tr><td><code>PaneWidget</code></td><td>workspace.py</td><td>Tab container within a pane</td></tr><tr><td><code>TerminalWidget</code></td><td>terminal_widget.py</td><td>PTY-based terminal with pyte screen emulation</td></tr><tr><td><code>ProjectDashboard</code></td><td>views/dashboard.py</td><td>Project-specific dashboard view</td></tr><tr><td><code>GlobalDashboard</code></td><td>views/global_dashboard.py</td><td>Cross-project overview dashboard</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="project-structure">Project Structure<a href="#project-structure" class="hash-link" aria-label="Direct link to Project Structure" title="Direct link to Project Structure" translate="no"></a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">development-hub/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── src/development_hub/ # GUI application (see Architecture above)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── bin/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ └── new-project # CLI scaffolding script</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── templates/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ├── gitignore.template # Python .gitignore with docs exclusion</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ├── CLAUDE.md.template # AI context file</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ├── README.md.template # Basic README</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ├── pyproject.toml.template</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ├── overview.md.template # Docs overview</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ └── updating-documentation.md.template</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── docs/ # Symlink to project-docs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── pyproject.toml # Python packaging with PyQt6 dep</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── CLAUDE.md</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└── README.md</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="project-search-paths">Project Search Paths<a href="#project-search-paths" class="hash-link" aria-label="Direct link to Project Search Paths" title="Direct link to Project Search Paths" translate="no"></a></h3>
<p>Projects are auto-discovered by scanning configured directories for <code>.git</code> folders. Configure in Settings dialog or edit <code>~/.config/development-hub/settings.json</code>:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;project_search_paths&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;~/PycharmProjects&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token property">&quot;project_ignore_folders&quot;</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">&quot;trash&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;project-docs&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;.cache&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;__pycache__&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;node_modules&quot;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p><strong>Discovery rules:</strong></p>
<ul>
<li class="">Scans immediate subdirectories (not recursive)</li>
<li class="">Requires <code>.git</code> folder to be recognized as a project</li>
<li class="">Skips hidden folders (starting with <code>.</code>)</li>
<li class="">Skips folders in ignore list</li>
<li class="">Merges rich metadata from <code>build-public-docs.sh</code> when available</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="gitea-api-token">Gitea API Token<a href="#gitea-api-token" class="hash-link" aria-label="Direct link to Gitea API Token" title="Direct link to Gitea API Token" translate="no"></a></h3>
<p>The <code>new-project</code> script needs a Gitea API token to create repositories automatically.</p>
<p><strong>Setup options:</strong></p>
<ol>
<li class="">Environment variable: <code>export GITEA_TOKEN=your_token</code></li>
<li class="">Config file: <code>~/.config/development-hub/gitea-token</code></li>
</ol>
<p>The script will prompt for the token on first run and save it automatically.</p>
<p><strong>Creating a token:</strong></p>
<ol>
<li class="">Go to <a href="https://gitea.brrd.tech/user/settings/applications" target="_blank" rel="noopener noreferrer" class="">https://gitea.brrd.tech/user/settings/applications</a></li>
<li class="">Generate a new token with &#x27;repo&#x27; scope</li>
<li class="">Copy the token when prompted</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="template-placeholders">Template Placeholders<a href="#template-placeholders" class="hash-link" aria-label="Direct link to Template Placeholders" title="Direct link to Template Placeholders" translate="no"></a></h2>
<p>When creating new projects, templates use these placeholders:</p>
<table><thead><tr><th>Placeholder</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td><code>{{PROJECT_NAME}}</code></td><td>Lowercase project name</td><td><code>my-tool</code></td></tr><tr><td><code>{{PROJECT_TITLE}}</code></td><td>Display title</td><td><code>My Tool</code></td></tr><tr><td><code>{{PROJECT_TAGLINE}}</code></td><td>Short description</td><td><code>Does useful things</code></td></tr><tr><td><code>{{YEAR}}</code></td><td>Current year</td><td><code>2026</code></td></tr><tr><td><code>{{DATE}}</code></td><td>Creation date</td><td><code>2026-01-07</code></td></tr><tr><td><code>{{GITEA_URL}}</code></td><td>Gitea server URL</td><td><code>https://gitea.brrd.tech</code></td></tr><tr><td><code>{{GITEA_OWNER}}</code></td><td>Repository owner</td><td><code>rob</code></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-projects">Related Projects<a href="#related-projects" class="hash-link" aria-label="Direct link to Related Projects" title="Direct link to Related Projects" translate="no"></a></h2>
<p>Development Hub manages these projects:</p>
<table><thead><tr><th>Project</th><th>Description</th></tr></thead><tbody><tr><td><a class="" href="/rob/cmdforge/overview">CmdForge</a></td><td>AI-powered CLI tool builder</td></tr><tr><td><a class="" href="/rob/cascadingdev/overview">CascadingDev</a></td><td>Cascading Development Framework</td></tr><tr><td><a class="" href="/rob/orchestrated-discussions/overview">Orchestrated Discussions</a></td><td>AI Discussion Framework</td></tr><tr><td><a class="" href="/rob/artifact-editor/overview">Artifact Editor</a></td><td>Code Artifact Editor</td></tr><tr><td><a class="" href="/rob/ramble/overview">Ramble</a></td><td>Voice Note Transcription</td></tr></tbody></table>
<p>All projects follow the same patterns and can be created using <code>new-project</code>.</p></div></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--next" href="/rob/development-hub/todos"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Development Hub TODOs</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#gui-application" class="table-of-contents__link toc-highlight">GUI Application</a><ul><li><a href="#running-the-app" class="table-of-contents__link toc-highlight">Running the App</a></li><li><a href="#features" class="table-of-contents__link toc-highlight">Features</a></li><li><a href="#keyboard-shortcuts" class="table-of-contents__link toc-highlight">Keyboard Shortcuts</a></li></ul></li><li><a href="#the-new-project-script" class="table-of-contents__link toc-highlight">The <code>new-project</code> Script</a><ul><li><a href="#what-it-creates" class="table-of-contents__link toc-highlight">What It Creates</a></li><li><a href="#usage" class="table-of-contents__link toc-highlight">Usage</a></li></ul></li><li><a href="#architecture" class="table-of-contents__link toc-highlight">Architecture</a><ul><li><a href="#key-classes" class="table-of-contents__link toc-highlight">Key Classes</a></li></ul></li><li><a href="#project-structure" class="table-of-contents__link toc-highlight">Project Structure</a></li><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a><ul><li><a href="#project-search-paths" class="table-of-contents__link toc-highlight">Project Search Paths</a></li><li><a href="#gitea-api-token" class="table-of-contents__link toc-highlight">Gitea API Token</a></li></ul></li><li><a href="#template-placeholders" class="table-of-contents__link toc-highlight">Template Placeholders</a></li><li><a href="#related-projects" class="table-of-contents__link toc-highlight">Related Projects</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/rob/development-hub/">Overview</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitea.brrd.tech/rob/development-hub" target="_blank" rel="noopener noreferrer" class="footer__link-item">Gitea<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Development Hub Documentation</div></div></div></footer></div>
</body>
</html>