Skip to main content

๐Ÿ“– Bornara AI โ€” Project Manual

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)

๐Ÿข What Is This Project?

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:

  • 3 web apps โ€” docs site (live), hub data-entry app (planned), landing page (planned)
  • Business docs โ€” plans, CRA/tax guides, revenue models, roadmaps (private, protected by Cloudflare Access)
  • YAML data โ€” timesheets, expenses, tasks (human-readable, git-tracked)
  • 14 AI agents + 9 prompt templates โ€” for VS Code Copilot Chat
  • Automation scripts โ€” doc fixing, task export, project scaffolding, link validation
  • Integration configs โ€” Cloudflare, GitHub, Vercel, IONOS (no passwords ever)

Revenue Streams (2026)

StreamStatusTarget
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โ€”

๐Ÿ“‚ Repository Structure

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 file
VS Code Multi-Root Workspace: Open bornara.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.

๐Ÿ–ฅ๏ธ The 3 Apps

1. apps/docs โ€” Docusaurus Documentation Site โœ… Live

PropertyValue
URLhttps://docs.bornara.com
TechDocusaurus 3 (React 18 + TypeScript)
DeployCloudflare Pages โ€” auto-deploys on push to main
AuthCloudflare Access โ€” One-time PIN to mahdi@bornara.com
Build commandnpm run docs:build (must be this, not npx docusaurus build)
Output directorybuild/
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.

2. apps/hub โ€” Data Entry App ๐Ÿ”ง Planned

PropertyValue
URLhttps://hub.bornara.com (not live yet)
TechNext.js + TypeScript + Tailwind (planned)
DeployCloudflare Pages (when built)
AuthCloudflare Access โ€” same as docs
StatusNot 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.

3. apps/landing โ€” Public Landing Page ๐Ÿ”ง Planned

PropertyValue
URLhttps://bornara.com (not live yet)
TechNext.js + TypeScript + Tailwind (planned)
DeployCloudflare Pages (when built)
AuthNone โ€” public
StatusNot 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.

๐ŸŒ Hosting & Domains

Infrastructure Overview

ServiceWhat It DoesCost
Cloudflare PagesHosts all 3 apps โ€” auto-deploys from GitHubFree
Cloudflare DNSManages all DNS for bornara.comFree
Cloudflare AccessZero Trust auth (One-time PIN) for private appsFree
GitHub (Bornara-AI org)Code hosting, private repoFree
IONOSDomain registrar (bornara.com) + Microsoft 365 emailPaid
BitwardenAll passwords โ€” never stored in this repoFree

Domain โ†’ App Routing

DomainAppStatusAuth
docs.bornara.comapps/docs (Docusaurus)Live โœ…Cloudflare Access PIN
bornara.comapps/landing (Next.js)Not deployed yetNone (public)
hub.bornara.comapps/hub (Next.js)Not built yetCloudflare Access PIN
tools.bornara.combornara-tools (separate repo)Building May 2026None (public)

How Cloudflare Access Works

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

How Cloudflare Pages Auto-Deploy Works

  1. You push a commit to main
  2. GitHub notifies Cloudflare Pages via webhook
  3. Cloudflare runs the build command inside the configured root directory
  4. On success, the new version goes live โ€” usually within 1โ€“2 minutes
Critical: The docs build command in Cloudflare must be npm 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.

๐Ÿ’ป Running Locally

Prerequisites

  • Node.js 18 or higher (LTS recommended)
  • npm 9 or higher
  • Git
  • VS Code + GitHub Copilot extension (for AI agents)

Docs App (apps/docs) โ€” Currently the only app to run

1
Navigate to the docs app folder
cd apps/docs
All commands below are run from inside apps/docs/.
2
Install dependencies
npm ci
Use npm ci (not npm install) for clean reproducible installs.
3
Start the dev server
npm run docs:start
This generates static/tasks.json then starts Docusaurus at http://localhost:3000 with hot reload.

Test the Production Build Locally

cd apps/docs
npm run docs:build   # generates tasks.json + full static build โ†’ build/
npm run docs:serve   # serves build/ at http://localhost:3000

Always test the production build locally before pushing if you suspect broken links โ€” Docusaurus build fails on broken internal links.

Landing Page (apps/landing) โ€” Not Built Yet

The landing folder only contains a .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

Hub App (apps/hub) โ€” Not Built Yet

The hub folder only contains a .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:3002

๐Ÿš€ Deploying

Docs App โ€” Cloudflare Pages Config

The docs app is already connected to Cloudflare Pages. Pushes to main auto-deploy. If you ever need to recreate the project from scratch:

SettingValue
PlatformCloudflare Pages (under Workers & Pages โ†’ Pages tab)
GitHub repoBornara-AI/bornara-hub
Production branchmain
Root directoryapps/docs
Build commandnpm run docs:build
Output directorybuild
NODE_VERSION env var18

Manual Redeploy (Without Code Change)

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).

Custom Domain Setup

  1. In Cloudflare Pages project, click Custom domains โ†’ Add
  2. Enter docs.bornara.com
  3. Since DNS is already managed by Cloudflare, it connects automatically
  4. Then add the Cloudflare Access policy on that domain (Zero Trust โ†’ Access โ†’ Applications)

Adding Landing and Hub Later

Create separate Cloudflare Pages projects (one per app), each pointing to the same repo but with different root directories: apps/landing and apps/hub respectively.

๐Ÿ—„๏ธ Data Layer (YAML)

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.

File Locations & Format

TypePath PatternExample
Timesheetsdata/timesheets/YYYY-MM.ymldata/timesheets/2026-04.yml
Expensesdata/expenses/YYYY-MM.ymldata/expenses/2026-04.yml
Tasksdata/tasks/YYYY-MM.ymldata/tasks/2026-04.yml
Receiptsdata/receipts/YYYY/filenamedata/receipts/2026/apr-internet.pdf

AI Write Rules

Done tasks are permanently immutable. The AI can create tasks, and update tasks with status: pending or status: in-progress. It cannot modify any task with status: done. These are permanent historical records.
  • AI can add new entries to timesheets and expenses
  • AI can add tasks and update non-done tasks
  • AI cannot edit or delete done tasks
  • AI never stores API keys, tokens, or passwords in any file

Manual Data Entry (Until Hub App Is Built)

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.

โš™๏ธ All npm Scripts (docs app)

Run all commands from inside apps/docs/. Use npm run <script>.

Documentation Site

CommandWhat It Does
docs:startExport tasks JSON โ†’ start Docusaurus dev server at localhost:3000 with hot reload
docs:buildExport tasks JSON โ†’ full production build into build/
docs:serveServe the pre-built build/ folder for local production testing

Linting & Validation

CommandWhat It Does
lint:mdCheck all markdown for lint issues โ€” no changes made
lint:md:fixAuto-fix all markdown lint issues silently
doc:fixInteractive front-matter fixer โ€” proposes defaults, asks y/n per file
doc:fix:stagedSame as above but only for git-staged files (used by Husky pre-commit hook)
check:cross-refsValidate all internal markdown links; report broken links and orphaned docs
check:readmePre-commit hook โ€” warns if README needs updating

Task / Issue Management

CommandWhat It Does
issues:previewDry-run preview of all tasks โ€” no files written
issues:createCreate GitHub Issues via gh CLI (requires gh auth login first)
issues:exportExport tasks to static/tasks.json for the Task Board page

Project Management

CommandWhat It Does
project:create -- --name "Name" --id "slug"Scaffold a new project under docs/05_Projects/slug/
project:listList all projects grouped by status with color coding
registry:updateRegenerate docs/01_Portfolio_Management/project-registry.md from all project.json files

๐Ÿค– AI Agents (14)

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.

Strategy & Planning

AgentPurpose
@orchestratorMeta-router โ€” reads roadmap, synthesizes priorities, presents 2โ€“3 options with trade-offs. Start here when unsure.
@business-advisorBusiness strategy, financial planning, growth decisions. Challenges unrealistic targets.
@business-reviewerCFO-lens quality gate โ€” validates revenue assumptions, flags what banks/grants would reject.

Tax & Compliance

AgentPurpose
@cra-taxCRA compliance for Canadian sole proprietorship. Maps expenses to T2125 lines, flags deadlines, suggests missed deductions.

Product & Operations

AgentPurpose
@shopify-opsShopify ops for cookie business (active) and Giftifye (on hold until criteria met).
@toolbox-plannerMarket research, tool selection, SEO, ad revenue projections for Bornara Tools.
@toolbox-devTechnical dev advisor for Bornara Tools: Next.js, Vercel, Tailwind, client-side-first, AdSense.
@ai-platformAI Agent Platform advisor (deferred Q1 2027). Actively challenges any attempt to start early.

Code & Documentation

AgentPurpose
@code-reviewerSenior code review with CRITICAL/MAJOR/MINOR classification. Always provides the corrected code, not just comments.
@doc-autofixDetects and repairs front-matter/lint issues. Auto-fixes formatting; asks permission for content changes.
@standards-checkerValidates docs against Bornara AI templates: front-matter fields, structure, naming conventions.
@cross-refValidates internal links, finds orphaned docs, suggests bidirectional cross-references.
@doc-updaterKeeps docs current after code or config changes. Identifies which sections need updating.

Meta

AgentPurpose
@agent-creatorDesigns new agents, merges overlapping ones, splits overgrown ones, updates the routing table.

๐Ÿ’ฌ Prompt Templates (9)

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.

PromptUse When
#strategic-overview"What should I do next?" โ€” cross-domain health check across all business areas
#business-plan-reviewFull quality gate on any business planning document
#code-reviewSenior review of scripts, workflows, or configuration files
#cra-tax-advisorDeep CRA compliance session โ€” T2125 mapping, deductions, audit readiness
#shopify-growth-advisorCookie business or Giftifye strategy and optimization
#ai-platform-advisorSaaS architecture and platform planning (for 2027 planning)
#doc-quality-reviewDocumentation structure, completeness, and style review
#toolbox-website-plannerBornara Tools market research and launch planning
#weekly-memoWeekly status report and next-week priorities across all domains

โœ… Task Board

The Task Board at /tasks shows all 69 tasks across 8 milestones with filters, progress bars, and checkboxes that persist in your browser.

How It Works

  1. npm run docs:build calls issues:export first, which runs scripts/generate-github-issues.js --export-json static/tasks.json
  2. The React page fetches /tasks.json on load and renders the board with milestone grouping and person/priority filters
  3. Checkbox state is saved to localStorage key bornara-task-done โ€” survives page refresh, but not clearing browser data or switching devices
tasks.json is gitignored โ€” generated at build time, not committed to the repo. This is why the Cloudflare build command must be npm run docs:build, not npx docusaurus build. Running Docusaurus directly skips the export step and the task board breaks.

How to Add or Edit Tasks

  1. Open apps/docs/scripts/generate-github-issues.js
  2. Find the ISSUES array and add/edit entries following the existing structure
  3. Run npm run issues:export to regenerate static/tasks.json
  4. Dev server hot-reloads automatically, or run npm run docs:build for a full production rebuild

๐Ÿ“ Docs Folder Structure

All documentation lives under apps/docs/docs/. The Docusaurus sidebar auto-generates from this folder structure โ€” no manual sidebar config needed.

FolderURL PrefixContents
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)
URL slug rules: Docusaurus strips numeric prefixes from both folder and file names.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.

๐Ÿ“ Documentation Standards

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
FieldValid Values
OwnerMahdi Moradi (or team member name)
StatusDraft ยท Reviewed ยท Approved
VersionSemver โ€” 0.1.0, 1.0.0, etc.
Last UpdatedYYYY-MM-DD format
Applies ToBornara AI (or specific project)

Auto-Fix Behaviour

IssueWhat Happens
Markdown lint (blank lines, trailing spaces, heading levels)Auto-fixed silently by npm run lint:md:fix
Missing front-matter fieldsnpm run doc:fix proposes defaults, waits for y/n per file
Existing field valuesNever overwritten without explicit confirmation
Body content changesAlways require explicit user approval

๐Ÿ—‚๏ธ Project Management Scripts

Scaffold a New Project

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).

List All Projects

npm run project:list

Prints all projects grouped by status (Active, Planned, On-Hold, Completed) with color coding.

Regenerate Project Registry

npm run registry:update

Scans all project.json files and rewrites docs/01_Portfolio_Management/project-registry.md with tables grouped by status.

๐ŸŒฟ Git Workflow

Typical Workflow

# 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

Commit Message Convention

PrefixUse ForExample
docs:Documentation changesdocs: update roadmap milestones
feat:New pages, new scripts, new featuresfeat: add weekly memo prompt
fix:Bug fixes, broken linksfix: correct roadmap slug in footer
data:Changes to data/ YAML filesdata: add april timesheets
config:Integration configs, package.json, Docusaurus configconfig: update cloudflare build command
Direct pushes to main are fine. This is a solo founder project. There are no branch protection rules that block direct pushes โ€” push freely and let Cloudflare auto-deploy.

โ“ FAQ

Why isn't tasks.json committed to the repo?

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.

Why Cloudflare Pages instead of Vercel?

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.

Why are business docs inside the docs site instead of a separate private repo?

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.

Why YAML instead of a database?

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.

How do I add a new documentation page?

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.

How do I add a new standalone React page?

Create a .tsx file in apps/docs/src/pages/. It becomes accessible at /filename automatically.

How do I change the navbar or footer?

Edit apps/docs/docusaurus.config.js โ€” the themeConfig.navbar and themeConfig.footer sections. Push to main and Cloudflare auto-deploys.

Where are all the passwords?

Bitwarden (free cloud). Never in this repo. The integrations/ folder contains only non-secret config: account emails, team names, domain names.

How do I start a new AI session and pick up where things left off?

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 task board is blank or shows an error โ€” what happened?

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.