1 line
8.1 KiB
JavaScript
1 line
8.1 KiB
JavaScript
"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[413],{6785(e,t,n){n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,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=n(4848),s=n(8453);const o={slug:"/",sidebar_position:1},c="Development Hub",l={},d=[{value:"Overview",id:"overview",level:2},{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 t={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)(t.header,{children:(0,i.jsx)(t.h1,{id:"development-hub",children:"Development Hub"})}),"\n",(0,i.jsx)(t.p,{children:"Central orchestration project for managing Rob's multi-project development ecosystem."}),"\n",(0,i.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"Development Hub provides tooling to create and manage projects that follow consistent patterns:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Centralized documentation via Docusaurus"}),"\n",(0,i.jsx)(t.li,{children:"Gitea repository hosting with Pages support"}),"\n",(0,i.jsx)(t.li,{children:"AI-assistant context files (CLAUDE.md)"}),"\n",(0,i.jsx)(t.li,{children:"Python project structure"}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"the-new-project-script",children:["The ",(0,i.jsx)(t.code,{children:"new-project"})," Script"]}),"\n",(0,i.jsxs)(t.p,{children:["The main tool is ",(0,i.jsx)(t.code,{children:"new-project"}),", which automates creating a new project in the ecosystem:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:'new-project my-tool --title "My Tool" --tagline "Does useful things"\n'})}),"\n",(0,i.jsx)(t.h3,{id:"what-it-creates",children:"What It Creates"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Gitea repository"})," at ",(0,i.jsx)(t.code,{children:"gitea.brrd.tech/rob/my-tool"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Local project"})," at ",(0,i.jsx)(t.code,{children:"~/PycharmProjects/my-tool/"})," with:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"CLAUDE.md"})," - AI assistant context"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"README.md"})," - Project readme"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"pyproject.toml"})," - Python packaging"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:".gitignore"})," - Standard ignores"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"docs/"})," - Symlink to centralized docs"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Documentation folder"})," at ",(0,i.jsx)(t.code,{children:"project-docs/docs/projects/my-tool/"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Build configuration"})," in ",(0,i.jsx)(t.code,{children:"build-public-docs.sh"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"usage",children:"Usage"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.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)(t.h2,{id:"project-structure",children:"Project Structure"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"development-hub/\n\u251c\u2500\u2500 bin/\n\u2502 \u2514\u2500\u2500 new-project # Main scaffolding script\n\u251c\u2500\u2500 templates/\n\u2502 \u251c\u2500\u2500 gitignore.template\n\u2502 \u251c\u2500\u2500 CLAUDE.md.template\n\u2502 \u251c\u2500\u2500 README.md.template\n\u2502 \u251c\u2500\u2500 pyproject.toml.template\n\u2502 \u251c\u2500\u2500 overview.md.template\n\u2502 \u2514\u2500\u2500 updating-documentation.md.template\n\u251c\u2500\u2500 docs/ # Symlink to this folder\n\u251c\u2500\u2500 CLAUDE.md\n\u251c\u2500\u2500 README.md\n\u2514\u2500\u2500 .gitignore\n"})}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.h3,{id:"gitea-api-token",children:"Gitea API Token"}),"\n",(0,i.jsx)(t.p,{children:"The script needs a Gitea API token to create repositories automatically."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Setup options:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Environment variable: ",(0,i.jsx)(t.code,{children:"export GITEA_TOKEN=your_token"})]}),"\n",(0,i.jsxs)(t.li,{children:["Config file: ",(0,i.jsx)(t.code,{children:"~/.config/development-hub/gitea-token"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The script will prompt for the token on first run and save it automatically."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Creating a token:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Go to ",(0,i.jsx)(t.a,{href:"https://gitea.brrd.tech/user/settings/applications",children:"https://gitea.brrd.tech/user/settings/applications"})]}),"\n",(0,i.jsx)(t.li,{children:"Generate a new token with 'repo' scope"}),"\n",(0,i.jsx)(t.li,{children:"Copy the token when prompted"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"related-projects",children:"Related Projects"}),"\n",(0,i.jsx)(t.p,{children:"Development Hub manages these projects:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Project"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"../cmdforge/overview",children:"CmdForge"})}),(0,i.jsx)(t.td,{children:"AI-powered CLI tool builder"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"../cascadingdev/overview",children:"CascadingDev"})}),(0,i.jsx)(t.td,{children:"Cascading Development Framework"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"../orchestrated-discussions/overview",children:"Orchestrated Discussions"})}),(0,i.jsx)(t.td,{children:"AI Discussion Framework"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"../artifact-editor/overview",children:"Artifact Editor"})}),(0,i.jsx)(t.td,{children:"Code Artifact Editor"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"../ramble/overview",children:"Ramble"})}),(0,i.jsx)(t.td,{children:"Voice Note Transcription"})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:["All projects follow the same patterns and can be created using ",(0,i.jsx)(t.code,{children:"new-project"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453(e,t,n){n.d(t,{R:()=>o,x:()=>c});var r=n(6540);const i={},s=r.createContext(i);function o(e){const t=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); |