Full reference for the bornara-hub private monorepo. How everything fits together, how to run it, and how to keep it working.
Last updated: April 23, 2026 ยท Repo: Bornara-AI/bornara-hub (private)
bornara-hub is the private central monorepo for Bornara AI โ a Canadian sole proprietorship run by Mahdi Moradi in Calgary, Alberta. It is the single source of truth for the entire business: documentation, business planning, tax compliance, project data, and the apps that serve it all.
It contains:
| Stream | Status | Target |
|---|---|---|
| Bornara Tools (tools.bornara.com) | Building โ May 2026 | $60โ$400/mo |
| Cookie Business (Instagram/local) | Active โ testing recipes | $300โ$1,500/mo |
| Giftifye (shop.bornara.com) | On hold โ Q4 2026 | โ |
| AI SaaS Platform (app.bornara.com) | Deferred โ Q1 2027 | โ |
bornara-hub/
โโโ MANIFEST.yml โ AI reads first โ map of everything
โโโ .github/SESSION_CONTEXT.md โ AI session handoff notes
โโโ .github/copilot/
โ โโโ instructions.md โ Master AI instructions
โ โโโ agents/ โ 14 agent .agent.md files
โโโ .github/prompts/ โ 9 prompt .prompt.md files
โ
โโโ apps/
โ โโโ docs/ โ Docusaurus site โ docs.bornara.com (LIVE)
โ โโโ hub/ โ Data entry app โ hub.bornara.com (planned)
โ โโโ landing/ โ Landing page โ bornara.com (planned)
โ
โโโ data/
โ โโโ timesheets/YYYY-MM.yml โ Time tracking (AI can read/write)
โ โโโ expenses/YYYY-MM.yml โ Expense tracking (AI can read/write)
โ โโโ tasks/YYYY-MM.yml โ Tasks (done tasks = immutable)
โ โโโ receipts/YYYY/ โ Receipt files
โ
โโโ business/
โ โโโ reports/ โ Generated reports (future use)
โ
โโโ integrations/ โ Service configs (NO passwords)
โ โโโ cloudflare.yml
โ โโโ vercel.yml
โ โโโ github.yml
โ โโโ ionos.yml
โ โโโ microsoft365.yml
โ
โโโ bornara.code-workspace โ VS Code multi-root workspace filebornara.code-workspace to see all folders in the sidebar simultaneously. This lets GitHub Copilot read docs, data, and app code all at once โ giving it full business context.| Property | Value |
|---|---|
| URL | https://docs.bornara.com |
| Tech | Docusaurus 3 (React 18 + TypeScript) |
| Deploy | Cloudflare Pages โ auto-deploys on push to main |
| Auth | Cloudflare Access โ One-time PIN to mahdi@bornara.com |
| Build command | npm run docs:build (must be this, not npx docusaurus build) |
| Output directory | build/ |
| Root directory (Cloudflare) | apps/docs |
Contains all company docs, business plans, CRA guides, project documentation, the task board, and this manual. Protected by Cloudflare Access so sensitive business content stays private.
| Property | Value |
|---|---|
| URL | https://hub.bornara.com (not live yet) |
| Tech | Next.js + TypeScript + Tailwind (planned) |
| Deploy | Cloudflare Pages (when built) |
| Auth | Cloudflare Access โ same as docs |
| Status | Not built โ only .gitkeep exists |
Purpose: Natural language data entry for timesheets, expenses, and tasks. You type "logged 3 hours on tools research today" โ OpenAI parses it โ GitHub API writes it as structured YAML to data/. Also shows dashboards: charts, spending summaries, task progress. Replaces manual YAML editing for day-to-day business data.
| Property | Value |
|---|---|
| URL | https://bornara.com (not live yet) |
| Tech | Next.js + TypeScript + Tailwind (planned) |
| Deploy | Cloudflare Pages (when built) |
| Auth | None โ public |
| Status | Not built โ only .gitkeep exists โ next to build |
Purpose: Public company page for visitors and potential clients. Showcases Bornara AI, links to free tools. No sensitive content here.
| Service | What It Does | Cost |
|---|---|---|
| Cloudflare Pages | Hosts all 3 apps โ auto-deploys from GitHub | Free |
| Cloudflare DNS | Manages all DNS for bornara.com | Free |
| Cloudflare Access | Zero Trust auth (One-time PIN) for private apps | Free |
| GitHub (Bornara-AI org) | Code hosting, private repo | Free |
| IONOS | Domain registrar (bornara.com) + Microsoft 365 email | Paid |
| Bitwarden | All passwords โ never stored in this repo | Free |
| Domain | App | Status | Auth |
|---|---|---|---|
| docs.bornara.com | apps/docs (Docusaurus) | Live โ | Cloudflare Access PIN |
| bornara.com | apps/landing (Next.js) | Not deployed yet | None (public) |
| hub.bornara.com | apps/hub (Next.js) | Not built yet | Cloudflare Access PIN |
| tools.bornara.com | bornara-tools (separate repo) | Building May 2026 | None (public) |
When you visit docs.bornara.com, Cloudflare intercepts the request and asks for your email. It emails a one-time PIN to mahdi@bornara.com. Enter the PIN โ you are authenticated for 24 hours. No passwords, no account creation, no app install needed. Team domain: bornara.cloudflareaccess.com
mainnpm run docs:build โ not npx docusaurus build. The custom script first generates tasks.json (required for the Task Board page). Without this, the Task Board shows a blank page or 404. Verify in: Cloudflare Dashboard โ Pages โ bornara-docs โ Settings โ Builds & deployments.cd apps/docsAll commands below are run from inside apps/docs/.npm ciUse npm ci (not npm install) for clean reproducible installs.npm run docs:startThis generates static/tasks.json then starts Docusaurus at http://localhost:3000 with hot reload.cd apps/docs
npm run docs:build # generates tasks.json + full static build โ build/
npm run docs:serve # serves build/ at http://localhost:3000Always test the production build locally before pushing if you suspect broken links โ Docusaurus build fails on broken internal links.
.gitkeep file. The app doesn't exist yet. When built, it will be a standard Next.js project.cd apps/landing
npm ci
npm run dev # http://localhost:3001.gitkeep file. When built, it will need an OpenAI API key and a GitHub fine-grained token for writing to data/.cd apps/hub
npm ci
# Create apps/hub/.env.local with:
# OPENAI_API_KEY=sk-...
# GITHUB_TOKEN=ghp-... (fine-grained, data/ write access only)
npm run dev # http://localhost:3002The docs app is already connected to Cloudflare Pages. Pushes to main auto-deploy. If you ever need to recreate the project from scratch:
| Setting | Value |
|---|---|
| Platform | Cloudflare Pages (under Workers & Pages โ Pages tab) |
| GitHub repo | Bornara-AI/bornara-hub |
| Production branch | main |
| Root directory | apps/docs |
| Build command | npm run docs:build |
| Output directory | build |
| NODE_VERSION env var | 18 |
Cloudflare Pages โ bornara-docs โ Deployments โ click Retry deployment on the latest build.
Useful when you want to pick up config changes made in the Cloudflare dashboard (e.g., updated build command).
docs.bornara.comCreate separate Cloudflare Pages projects (one per app), each pointing to the same repo but with different root directories: apps/landing and apps/hub respectively.
All business data lives as YAML files in data/. No database needed. Files are human-readable, git-diffable, version-controlled, and the AI can read and write them directly.
| Type | Path Pattern | Example |
|---|---|---|
| Timesheets | data/timesheets/YYYY-MM.yml | data/timesheets/2026-04.yml |
| Expenses | data/expenses/YYYY-MM.yml | data/expenses/2026-04.yml |
| Tasks | data/tasks/YYYY-MM.yml | data/tasks/2026-04.yml |
| Receipts | data/receipts/YYYY/filename | data/receipts/2026/apr-internet.pdf |
status: pending or status: in-progress. It cannot modify any task with status: done. These are permanent historical records.Edit YAML files directly in VS Code or ask Copilot to add entries in the correct format. The AI understands the schema from existing files.
Run all commands from inside apps/docs/. Use npm run <script>.
| Command | What It Does |
|---|---|
docs:start | Export tasks JSON โ start Docusaurus dev server at localhost:3000 with hot reload |
docs:build | Export tasks JSON โ full production build into build/ |
docs:serve | Serve the pre-built build/ folder for local production testing |
| Command | What It Does |
|---|---|
lint:md | Check all markdown for lint issues โ no changes made |
lint:md:fix | Auto-fix all markdown lint issues silently |
doc:fix | Interactive front-matter fixer โ proposes defaults, asks y/n per file |
doc:fix:staged | Same as above but only for git-staged files (used by Husky pre-commit hook) |
check:cross-refs | Validate all internal markdown links; report broken links and orphaned docs |
check:readme | Pre-commit hook โ warns if README needs updating |
| Command | What It Does |
|---|---|
issues:preview | Dry-run preview of all tasks โ no files written |
issues:create | Create GitHub Issues via gh CLI (requires gh auth login first) |
issues:export | Export tasks to static/tasks.json for the Task Board page |
| Command | What It Does |
|---|---|
project:create -- --name "Name" --id "slug" | Scaffold a new project under docs/05_Projects/slug/ |
project:list | List all projects grouped by status with color coding |
registry:update | Regenerate docs/01_Portfolio_Management/project-registry.md from all project.json files |
Agents live in .github/copilot/agents/ at the repo root. In VS Code Copilot Chat, type @agent-name to invoke one directly, or just describe your question and Copilot routes to the right agent automatically.
| Agent | Purpose |
|---|---|
@orchestrator | Meta-router โ reads roadmap, synthesizes priorities, presents 2โ3 options with trade-offs. Start here when unsure. |
@business-advisor | Business strategy, financial planning, growth decisions. Challenges unrealistic targets. |
@business-reviewer | CFO-lens quality gate โ validates revenue assumptions, flags what banks/grants would reject. |
| Agent | Purpose |
|---|---|
@cra-tax | CRA compliance for Canadian sole proprietorship. Maps expenses to T2125 lines, flags deadlines, suggests missed deductions. |
| Agent | Purpose |
|---|---|
@shopify-ops | Shopify ops for cookie business (active) and Giftifye (on hold until criteria met). |
@toolbox-planner | Market research, tool selection, SEO, ad revenue projections for Bornara Tools. |
@toolbox-dev | Technical dev advisor for Bornara Tools: Next.js, Vercel, Tailwind, client-side-first, AdSense. |
@ai-platform | AI Agent Platform advisor (deferred Q1 2027). Actively challenges any attempt to start early. |
| Agent | Purpose |
|---|---|
@code-reviewer | Senior code review with CRITICAL/MAJOR/MINOR classification. Always provides the corrected code, not just comments. |
@doc-autofix | Detects and repairs front-matter/lint issues. Auto-fixes formatting; asks permission for content changes. |
@standards-checker | Validates docs against Bornara AI templates: front-matter fields, structure, naming conventions. |
@cross-ref | Validates internal links, finds orphaned docs, suggests bidirectional cross-references. |
@doc-updater | Keeps docs current after code or config changes. Identifies which sections need updating. |
| Agent | Purpose |
|---|---|
@agent-creator | Designs new agents, merges overlapping ones, splits overgrown ones, updates the routing table. |
Prompt templates live in .github/prompts/ at the repo root. In VS Code Copilot Chat, type #prompt-name to attach one to your message, or select it with the / menu.
| Prompt | Use When |
|---|---|
#strategic-overview | "What should I do next?" โ cross-domain health check across all business areas |
#business-plan-review | Full quality gate on any business planning document |
#code-review | Senior review of scripts, workflows, or configuration files |
#cra-tax-advisor | Deep CRA compliance session โ T2125 mapping, deductions, audit readiness |
#shopify-growth-advisor | Cookie business or Giftifye strategy and optimization |
#ai-platform-advisor | SaaS architecture and platform planning (for 2027 planning) |
#doc-quality-review | Documentation structure, completeness, and style review |
#toolbox-website-planner | Bornara Tools market research and launch planning |
#weekly-memo | Weekly status report and next-week priorities across all domains |
The Task Board at /tasks shows all 69 tasks across 8 milestones with filters, progress bars, and checkboxes that persist in your browser.
npm run docs:build calls issues:export first, which runs scripts/generate-github-issues.js --export-json static/tasks.json/tasks.json on load and renders the board with milestone grouping and person/priority filterslocalStorage key bornara-task-done โ survives page refresh, but not clearing browser data or switching devicesnpm run docs:build, not npx docusaurus build. Running Docusaurus directly skips the export step and the task board breaks.apps/docs/scripts/generate-github-issues.jsISSUES array and add/edit entries following the existing structurenpm run issues:export to regenerate static/tasks.jsonnpm run docs:build for a full production rebuildAll documentation lives under apps/docs/docs/. The Docusaurus sidebar auto-generates from this folder structure โ no manual sidebar config needed.
| Folder | URL Prefix | Contents |
|---|---|---|
00_Company_Overview/ | /docs/Company_Overview/ | Vision, mission, business context, organizational structure |
01_Portfolio_Management/ | /docs/Portfolio_Management/ | Auto-generated project registry |
02_Standards_and_Governance/ | /docs/Standards_and_Governance/ | Documentation standards, architecture principles, security policies, AI governance, code quality |
04_Technology_Stack/ | /docs/Technology_Stack/ | Approved technologies and framework decisions |
05_Projects/ | /docs/Projects/ | Per-project docs โ bornara-tools/ (active), agentic-ai-platform/ (deferred) |
06_Business_Planning/ | /docs/Business_Planning/ | Business plans, 12-month roadmap, revenue model, CRA compliance guide, T2125 templates, expense guide, tax optimization, time management, April action plan, and more (22 files) |
06_Business_Planning/ โ URL prefix /docs/Business_Planning/. File 12-month-roadmap.md โ slug /docs/Business_Planning/month-roadmap (the leading 12- is stripped). If a link returns 404, check the actual slug by looking at the build output or the running dev server.Every .md file in docs/ must have this front-matter at the top:
# Document Title
**Owner:** Mahdi Moradi
**Status:** Draft
**Version:** 0.1.0
**Last Updated:** 2026-04-23
**Applies To:** Bornara AI| Field | Valid Values |
|---|---|
| Owner | Mahdi Moradi (or team member name) |
| Status | Draft ยท Reviewed ยท Approved |
| Version | Semver โ 0.1.0, 1.0.0, etc. |
| Last Updated | YYYY-MM-DD format |
| Applies To | Bornara AI (or specific project) |
| Issue | What Happens |
|---|---|
| Markdown lint (blank lines, trailing spaces, heading levels) | Auto-fixed silently by npm run lint:md:fix |
| Missing front-matter fields | npm run doc:fix proposes defaults, waits for y/n per file |
| Existing field values | Never overwritten without explicit confirmation |
| Body content changes | Always require explicit user approval |
cd apps/docs
npm run project:create -- --name "My Project" --id "my-project"Creates under docs/05_Projects/my-project/: project.json, README.md, and 5 section folders with templates (Overview, Architecture, Data, Platform Services, Operations).
npm run project:listPrints all projects grouped by status (Active, Planned, On-Hold, Completed) with color coding.
npm run registry:updateScans all project.json files and rewrites docs/01_Portfolio_Management/project-registry.md with tables grouped by status.
# Make changes to docs, data, or code
git add -A
git commit -m "docs: update april action plan"
git push
# Cloudflare Pages auto-deploys in ~1-2 minutes| Prefix | Use For | Example |
|---|---|---|
docs: | Documentation changes | docs: update roadmap milestones |
feat: | New pages, new scripts, new features | feat: add weekly memo prompt |
fix: | Bug fixes, broken links | fix: correct roadmap slug in footer |
data: | Changes to data/ YAML files | data: add april timesheets |
config: | Integration configs, package.json, Docusaurus config | config: update cloudflare build command |
It's generated at build time from scripts/generate-github-issues.js and gitignored to keep the git history clean. Every build regenerates it fresh from the task definitions in the script.
Vercel's free Hobby plan does not support private GitHub organization repos. Since the repo is under the Bornara-AI org, Vercel requires a Pro plan ($20/mo). Cloudflare Pages supports private org repos for free.
Originally they were in a separate public repo โ a public repo can't hold sensitive data. Now the entire hub is private + protected by Cloudflare Access, so there's no need to separate them. Keeping everything in one place makes it easy for the AI to cross-reference business plans with code decisions.
YAML in git is sufficient for a solo founder. It's human-readable, version-controlled, fully diffable, and the AI can read and write it directly without an API layer. A database adds cost and complexity with no benefit at this scale. Revisit when the hub app needs real-time multi-user features.
Create a .md file in the right subfolder under apps/docs/docs/ with the required front-matter. The sidebar auto-updates on the next build.
Create a .tsx file in apps/docs/src/pages/. It becomes accessible at /filename automatically.
Edit apps/docs/docusaurus.config.js โ the themeConfig.navbar and themeConfig.footer sections. Push to main and Cloudflare auto-deploys.
Bitwarden (free cloud). Never in this repo. The integrations/ folder contains only non-secret config: account emails, team names, domain names.
Tell Copilot to read MANIFEST.yml and .github/SESSION_CONTEXT.md first. These are maintained as the project evolves and give the AI full context on current state, pending tasks, and decisions made.
The Cloudflare Pages build command is probably set to npx docusaurus build instead of npm run docs:build. Fix it in: Cloudflare Dashboard โ Pages โ bornara-docs โ Settings โ Builds & deployments โ Build command. Then trigger a new deployment.