1 line
11 KiB
JavaScript
1 line
11 KiB
JavaScript
"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[413],{6785(e,n,t){t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"overview","title":"Development Hub","description":"Central orchestration project for managing Rob\'s multi-project development ecosystem.","source":"@site/docs/overview.md","sourceDirName":".","slug":"/","permalink":"/rob/development-hub/","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"slug":"/","sidebar_position":1},"sidebar":"docs"}');var i=t(4848),s=t(8453);const l={slug:"/",sidebar_position:1},o="Development Hub",c={},d=[{value:"Overview",id:"overview",level:2},{value:"GUI Application",id:"gui-application",level:2},{value:"Running the App",id:"running-the-app",level:3},{value:"Features",id:"features",level:3},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"The <code>new-project</code> Script",id:"the-new-project-script",level:2},{value:"What It Creates",id:"what-it-creates",level:3},{value:"Usage",id:"usage",level:3},{value:"Project Structure",id:"project-structure",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Gitea API Token",id:"gitea-api-token",level:3},{value:"Related Projects",id:"related-projects",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"development-hub",children:"Development Hub"})}),"\n",(0,i.jsx)(n.p,{children:"Central orchestration project for managing Rob's multi-project development ecosystem."}),"\n",(0,i.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Development Hub provides:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"GUI Application"})," - PyQt6 workspace with project list, splittable terminal panes, and session persistence"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"CLI Tools"})," - Scripts to create and manage projects following consistent patterns"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Centralized Documentation"})," - Docusaurus-based docs with Gitea Pages deployment"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"gui-application",children:"GUI Application"}),"\n",(0,i.jsx)(n.p,{children:"A PyQt6-based workspace for managing your development projects."}),"\n",(0,i.jsx)(n.h3,{id:"running-the-app",children:"Running the App"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/PycharmProjects/development-hub\nsource .venv/bin/activate\npython -m development_hub\n"})}),"\n",(0,i.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Project List"})," - Auto-discovers projects, right-click for actions (terminal, editor, Gitea, docs, deploy)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Splittable Panes"})," - Horizontal/vertical splits, each pane has its own tab bar"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"PTY Terminals"})," - Full terminal emulation with TUI support (vim, htop work)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Drag & Drop"})," - Drop files/folders into terminal to inject paths"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Session Persistence"})," - Remembers pane layout and open terminals on restart"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"New Project Dialog"})," - Create projects with optional Ramble voice input"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"keyboard-shortcuts",children:"Keyboard Shortcuts"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Shortcut"}),(0,i.jsx)(n.th,{children:"Action"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+Shift+T"})}),(0,i.jsx)(n.td,{children:"New terminal tab"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+Shift+W"})}),(0,i.jsx)(n.td,{children:"Close current tab"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+Shift+D"})}),(0,i.jsx)(n.td,{children:"Split horizontal"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+Shift+E"})}),(0,i.jsx)(n.td,{children:"Split vertical"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+Alt+Left/Right"})}),(0,i.jsx)(n.td,{children:"Switch panes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+B"})}),(0,i.jsx)(n.td,{children:"Toggle project panel"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+N"})}),(0,i.jsx)(n.td,{children:"New project dialog"})]})]})]}),"\n",(0,i.jsxs)(n.h2,{id:"the-new-project-script",children:["The ",(0,i.jsx)(n.code,{children:"new-project"})," Script"]}),"\n",(0,i.jsxs)(n.p,{children:["The main tool is ",(0,i.jsx)(n.code,{children:"new-project"}),", which automates creating a new project in the ecosystem:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'new-project my-tool --title "My Tool" --tagline "Does useful things"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"what-it-creates",children:"What It Creates"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Gitea repository"})," at ",(0,i.jsx)(n.code,{children:"gitea.brrd.tech/rob/my-tool"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Local project"})," at ",(0,i.jsx)(n.code,{children:"~/PycharmProjects/my-tool/"})," with:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"CLAUDE.md"})," - AI assistant context"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"README.md"})," - Project readme"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"pyproject.toml"})," - Python packaging"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:".gitignore"})," - Standard ignores"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docs/"})," - Symlink to centralized docs"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Documentation folder"})," at ",(0,i.jsx)(n.code,{children:"project-docs/docs/projects/my-tool/"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Build configuration"})," in ",(0,i.jsx)(n.code,{children:"build-public-docs.sh"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# Full specification\nnew-project myproject --title "My Project" --tagline "Short description"\n\n# Interactive mode (prompts for title/tagline)\nnew-project myproject\n\n# Options\n--dry-run Show what would happen without making changes\n--skip-gitea Skip Gitea repo creation (for offline use)\n--help Show help\n'})}),"\n",(0,i.jsx)(n.h2,{id:"project-structure",children:"Project Structure"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"development-hub/\n\u251c\u2500\u2500 src/development_hub/ # GUI application\n\u2502 \u251c\u2500\u2500 main_window.py # Main window with menus\n\u2502 \u251c\u2500\u2500 project_list.py # Project discovery & context menu\n\u2502 \u251c\u2500\u2500 workspace.py # Splittable pane layout\n\u2502 \u251c\u2500\u2500 terminal_widget.py # PTY terminal with pyte\n\u2502 \u251c\u2500\u2500 dialogs.py # New Project, Settings dialogs\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 bin/\n\u2502 \u2514\u2500\u2500 new-project # CLI scaffolding script\n\u251c\u2500\u2500 templates/ # Project templates\n\u251c\u2500\u2500 docs/ # Symlink to this folder\n\u251c\u2500\u2500 pyproject.toml\n\u251c\u2500\u2500 CLAUDE.md\n\u2514\u2500\u2500 README.md\n"})}),"\n",(0,i.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(n.h3,{id:"gitea-api-token",children:"Gitea API Token"}),"\n",(0,i.jsx)(n.p,{children:"The script needs a Gitea API token to create repositories automatically."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Setup options:"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Environment variable: ",(0,i.jsx)(n.code,{children:"export GITEA_TOKEN=your_token"})]}),"\n",(0,i.jsxs)(n.li,{children:["Config file: ",(0,i.jsx)(n.code,{children:"~/.config/development-hub/gitea-token"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The script will prompt for the token on first run and save it automatically."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Creating a token:"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Go to ",(0,i.jsx)(n.a,{href:"https://gitea.brrd.tech/user/settings/applications",children:"https://gitea.brrd.tech/user/settings/applications"})]}),"\n",(0,i.jsx)(n.li,{children:"Generate a new token with 'repo' scope"}),"\n",(0,i.jsx)(n.li,{children:"Copy the token when prompted"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"related-projects",children:"Related Projects"}),"\n",(0,i.jsx)(n.p,{children:"Development Hub manages these projects:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Project"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"../cmdforge/overview",children:"CmdForge"})}),(0,i.jsx)(n.td,{children:"AI-powered CLI tool builder"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"../cascadingdev/overview",children:"CascadingDev"})}),(0,i.jsx)(n.td,{children:"Cascading Development Framework"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"../orchestrated-discussions/overview",children:"Orchestrated Discussions"})}),(0,i.jsx)(n.td,{children:"AI Discussion Framework"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"../artifact-editor/overview",children:"Artifact Editor"})}),(0,i.jsx)(n.td,{children:"Code Artifact Editor"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"../ramble/overview",children:"Ramble"})}),(0,i.jsx)(n.td,{children:"Voice Note Transcription"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["All projects follow the same patterns and can be created using ",(0,i.jsx)(n.code,{children:"new-project"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453(e,n,t){t.d(n,{R:()=>l,x:()=>o});var r=t(6540);const i={},s=r.createContext(i);function l(e){const n=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); |