diff --git a/.claude/skills/gitnexus/gitnexus-cli/SKILL.md b/.claude/skills/gitnexus/gitnexus-cli/SKILL.md new file mode 100644 index 0000000..cd9a83b --- /dev/null +++ b/.claude/skills/gitnexus/gitnexus-cli/SKILL.md @@ -0,0 +1,83 @@ +--- +name: gitnexus-cli +description: "Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki, or list indexed repos. Examples: \"Index this repo\", \"Reanalyze the codebase\", \"Generate a wiki\"" +--- + +# GitNexus CLI Commands + +All commands work via `npx` — no global install required. + +## Commands + +### analyze — Build or refresh the index + +```bash +npx gitnexus analyze +``` + +Run from the project root. This parses all source files, builds the knowledge graph, writes it to `.gitnexus/`, and generates CLAUDE.md / AGENTS.md context files. + +| Flag | Effect | +| -------------- | ---------------------------------------------------------------- | +| `--force` | Force full re-index even if up to date | +| `--embeddings` | Enable embedding generation for semantic search (off by default) | +| `--drop-embeddings` | Drop existing embeddings on rebuild. By default, an `analyze` without `--embeddings` preserves them. | + +**When to run:** First time in a project, after major code changes, or when `gitnexus://repo/{name}/context` reports the index is stale. In Claude Code, a PostToolUse hook detects staleness after `git commit` and `git merge` and notifies the agent to run `analyze` — the hook does not run analyze itself, to avoid blocking the agent for up to 120s and risking KuzuDB corruption on timeout. + +### status — Check index freshness + +```bash +npx gitnexus status +``` + +Shows whether the current repo has a GitNexus index, when it was last updated, and symbol/relationship counts. Use this to check if re-indexing is needed. + +### clean — Delete the index + +```bash +npx gitnexus clean +``` + +Deletes the `.gitnexus/` directory and unregisters the repo from the global registry. Use before re-indexing if the index is corrupt or after removing GitNexus from a project. + +| Flag | Effect | +| --------- | ------------------------------------------------- | +| `--force` | Skip confirmation prompt | +| `--all` | Clean all indexed repos, not just the current one | + +### wiki — Generate documentation from the graph + +```bash +npx gitnexus wiki +``` + +Generates repository documentation from the knowledge graph using an LLM. Requires an API key (saved to `~/.gitnexus/config.json` on first use). + +| Flag | Effect | +| ------------------- | ----------------------------------------- | +| `--force` | Force full regeneration | +| `--model ` | LLM model (default: minimax/minimax-m2.5) | +| `--base-url ` | LLM API base URL | +| `--api-key ` | LLM API key | +| `--concurrency ` | Parallel LLM calls (default: 3) | +| `--gist` | Publish wiki as a public GitHub Gist | + +### list — Show all indexed repos + +```bash +npx gitnexus list +``` + +Lists all repositories registered in `~/.gitnexus/registry.json`. The MCP `list_repos` tool provides the same information. + +## After Indexing + +1. **Read `gitnexus://repo/{name}/context`** to verify the index loaded +2. Use the other GitNexus skills (`exploring`, `debugging`, `impact-analysis`, `refactoring`) for your task + +## Troubleshooting + +- **"Not inside a git repository"**: Run from a directory inside a git repo +- **Index is stale after re-analyzing**: Restart Claude Code to reload the MCP server +- **Embeddings slow**: Omit `--embeddings` (it's off by default) or set `OPENAI_API_KEY` for faster API-based embedding diff --git a/.claude/skills/gitnexus/gitnexus-debugging/SKILL.md b/.claude/skills/gitnexus/gitnexus-debugging/SKILL.md new file mode 100644 index 0000000..9510b97 --- /dev/null +++ b/.claude/skills/gitnexus/gitnexus-debugging/SKILL.md @@ -0,0 +1,89 @@ +--- +name: gitnexus-debugging +description: "Use when the user is debugging a bug, tracing an error, or asking why something fails. Examples: \"Why is X failing?\", \"Where does this error come from?\", \"Trace this bug\"" +--- + +# Debugging with GitNexus + +## When to Use + +- "Why is this function failing?" +- "Trace where this error comes from" +- "Who calls this method?" +- "This endpoint returns 500" +- Investigating bugs, errors, or unexpected behavior + +## Workflow + +``` +1. gitnexus_query({query: ""}) → Find related execution flows +2. gitnexus_context({name: ""}) → See callers/callees/processes +3. READ gitnexus://repo/{name}/process/{name} → Trace execution flow +4. gitnexus_cypher({query: "MATCH path..."}) → Custom traces if needed +``` + +> If "Index is stale" → run `npx gitnexus analyze` in terminal. + +## Checklist + +``` +- [ ] Understand the symptom (error message, unexpected behavior) +- [ ] gitnexus_query for error text or related code +- [ ] Identify the suspect function from returned processes +- [ ] gitnexus_context to see callers and callees +- [ ] Trace execution flow via process resource if applicable +- [ ] gitnexus_cypher for custom call chain traces if needed +- [ ] Read source files to confirm root cause +``` + +## Debugging Patterns + +| Symptom | GitNexus Approach | +| -------------------- | ---------------------------------------------------------- | +| Error message | `gitnexus_query` for error text → `context` on throw sites | +| Wrong return value | `context` on the function → trace callees for data flow | +| Intermittent failure | `context` → look for external calls, async deps | +| Performance issue | `context` → find symbols with many callers (hot paths) | +| Recent regression | `detect_changes` to see what your changes affect | + +## Tools + +**gitnexus_query** — find code related to error: + +``` +gitnexus_query({query: "payment validation error"}) +→ Processes: CheckoutFlow, ErrorHandling +→ Symbols: validatePayment, handlePaymentError, PaymentException +``` + +**gitnexus_context** — full context for a suspect: + +``` +gitnexus_context({name: "validatePayment"}) +→ Incoming calls: processCheckout, webhookHandler +→ Outgoing calls: verifyCard, fetchRates (external API!) +→ Processes: CheckoutFlow (step 3/7) +``` + +**gitnexus_cypher** — custom call chain traces: + +```cypher +MATCH path = (a)-[:CodeRelation {type: 'CALLS'}*1..2]->(b:Function {name: "validatePayment"}) +RETURN [n IN nodes(path) | n.name] AS chain +``` + +## Example: "Payment endpoint returns 500 intermittently" + +``` +1. gitnexus_query({query: "payment error handling"}) + → Processes: CheckoutFlow, ErrorHandling + → Symbols: validatePayment, handlePaymentError + +2. gitnexus_context({name: "validatePayment"}) + → Outgoing calls: verifyCard, fetchRates (external API!) + +3. READ gitnexus://repo/my-app/process/CheckoutFlow + → Step 3: validatePayment → calls fetchRates (external) + +4. Root cause: fetchRates calls external API without proper timeout +``` diff --git a/.claude/skills/gitnexus/gitnexus-exploring/SKILL.md b/.claude/skills/gitnexus/gitnexus-exploring/SKILL.md new file mode 100644 index 0000000..927a4e4 --- /dev/null +++ b/.claude/skills/gitnexus/gitnexus-exploring/SKILL.md @@ -0,0 +1,78 @@ +--- +name: gitnexus-exploring +description: "Use when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of the codebase. Examples: \"How does X work?\", \"What calls this function?\", \"Show me the auth flow\"" +--- + +# Exploring Codebases with GitNexus + +## When to Use + +- "How does authentication work?" +- "What's the project structure?" +- "Show me the main components" +- "Where is the database logic?" +- Understanding code you haven't seen before + +## Workflow + +``` +1. READ gitnexus://repos → Discover indexed repos +2. READ gitnexus://repo/{name}/context → Codebase overview, check staleness +3. gitnexus_query({query: ""}) → Find related execution flows +4. gitnexus_context({name: ""}) → Deep dive on specific symbol +5. READ gitnexus://repo/{name}/process/{name} → Trace full execution flow +``` + +> If step 2 says "Index is stale" → run `npx gitnexus analyze` in terminal. + +## Checklist + +``` +- [ ] READ gitnexus://repo/{name}/context +- [ ] gitnexus_query for the concept you want to understand +- [ ] Review returned processes (execution flows) +- [ ] gitnexus_context on key symbols for callers/callees +- [ ] READ process resource for full execution traces +- [ ] Read source files for implementation details +``` + +## Resources + +| Resource | What you get | +| --------------------------------------- | ------------------------------------------------------- | +| `gitnexus://repo/{name}/context` | Stats, staleness warning (~150 tokens) | +| `gitnexus://repo/{name}/clusters` | All functional areas with cohesion scores (~300 tokens) | +| `gitnexus://repo/{name}/cluster/{name}` | Area members with file paths (~500 tokens) | +| `gitnexus://repo/{name}/process/{name}` | Step-by-step execution trace (~200 tokens) | + +## Tools + +**gitnexus_query** — find execution flows related to a concept: + +``` +gitnexus_query({query: "payment processing"}) +→ Processes: CheckoutFlow, RefundFlow, WebhookHandler +→ Symbols grouped by flow with file locations +``` + +**gitnexus_context** — 360-degree view of a symbol: + +``` +gitnexus_context({name: "validateUser"}) +→ Incoming calls: loginHandler, apiMiddleware +→ Outgoing calls: checkToken, getUserById +→ Processes: LoginFlow (step 2/5), TokenRefresh (step 1/3) +``` + +## Example: "How does payment processing work?" + +``` +1. READ gitnexus://repo/my-app/context → 918 symbols, 45 processes +2. gitnexus_query({query: "payment processing"}) + → CheckoutFlow: processPayment → validateCard → chargeStripe + → RefundFlow: initiateRefund → calculateRefund → processRefund +3. gitnexus_context({name: "processPayment"}) + → Incoming: checkoutHandler, webhookHandler + → Outgoing: validateCard, chargeStripe, saveTransaction +4. Read src/payments/processor.ts for implementation details +``` diff --git a/.claude/skills/gitnexus/gitnexus-guide/SKILL.md b/.claude/skills/gitnexus/gitnexus-guide/SKILL.md new file mode 100644 index 0000000..937ac73 --- /dev/null +++ b/.claude/skills/gitnexus/gitnexus-guide/SKILL.md @@ -0,0 +1,64 @@ +--- +name: gitnexus-guide +description: "Use when the user asks about GitNexus itself — available tools, how to query the knowledge graph, MCP resources, graph schema, or workflow reference. Examples: \"What GitNexus tools are available?\", \"How do I use GitNexus?\"" +--- + +# GitNexus Guide + +Quick reference for all GitNexus MCP tools, resources, and the knowledge graph schema. + +## Always Start Here + +For any task involving code understanding, debugging, impact analysis, or refactoring: + +1. **Read `gitnexus://repo/{name}/context`** — codebase overview + check index freshness +2. **Match your task to a skill below** and **read that skill file** +3. **Follow the skill's workflow and checklist** + +> If step 1 warns the index is stale, run `npx gitnexus analyze` in the terminal first. + +## Skills + +| Task | Skill to read | +| -------------------------------------------- | ------------------- | +| Understand architecture / "How does X work?" | `gitnexus-exploring` | +| Blast radius / "What breaks if I change X?" | `gitnexus-impact-analysis` | +| Trace bugs / "Why is X failing?" | `gitnexus-debugging` | +| Rename / extract / split / refactor | `gitnexus-refactoring` | +| Tools, resources, schema reference | `gitnexus-guide` (this file) | +| Index, status, clean, wiki CLI commands | `gitnexus-cli` | + +## Tools Reference + +| Tool | What it gives you | +| ---------------- | ------------------------------------------------------------------------ | +| `query` | Process-grouped code intelligence — execution flows related to a concept | +| `context` | 360-degree symbol view — categorized refs, processes it participates in | +| `impact` | Symbol blast radius — what breaks at depth 1/2/3 with confidence | +| `detect_changes` | Git-diff impact — what do your current changes affect | +| `rename` | Multi-file coordinated rename with confidence-tagged edits | +| `cypher` | Raw graph queries (read `gitnexus://repo/{name}/schema` first) | +| `list_repos` | Discover indexed repos | + +## Resources Reference + +Lightweight reads (~100-500 tokens) for navigation: + +| Resource | Content | +| ---------------------------------------------- | ----------------------------------------- | +| `gitnexus://repo/{name}/context` | Stats, staleness check | +| `gitnexus://repo/{name}/clusters` | All functional areas with cohesion scores | +| `gitnexus://repo/{name}/cluster/{clusterName}` | Area members | +| `gitnexus://repo/{name}/processes` | All execution flows | +| `gitnexus://repo/{name}/process/{processName}` | Step-by-step trace | +| `gitnexus://repo/{name}/schema` | Graph schema for Cypher | + +## Graph Schema + +**Nodes:** File, Function, Class, Interface, Method, Community, Process +**Edges (via CodeRelation.type):** CALLS, IMPORTS, EXTENDS, IMPLEMENTS, DEFINES, MEMBER_OF, STEP_IN_PROCESS + +```cypher +MATCH (caller)-[:CodeRelation {type: 'CALLS'}]->(f:Function {name: "myFunc"}) +RETURN caller.name, caller.filePath +``` diff --git a/.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md b/.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md new file mode 100644 index 0000000..e19af28 --- /dev/null +++ b/.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md @@ -0,0 +1,97 @@ +--- +name: gitnexus-impact-analysis +description: "Use when the user wants to know what will break if they change something, or needs safety analysis before editing code. Examples: \"Is it safe to change X?\", \"What depends on this?\", \"What will break?\"" +--- + +# Impact Analysis with GitNexus + +## When to Use + +- "Is it safe to change this function?" +- "What will break if I modify X?" +- "Show me the blast radius" +- "Who uses this code?" +- Before making non-trivial code changes +- Before committing — to understand what your changes affect + +## Workflow + +``` +1. gitnexus_impact({target: "X", direction: "upstream"}) → What depends on this +2. READ gitnexus://repo/{name}/processes → Check affected execution flows +3. gitnexus_detect_changes() → Map current git changes to affected flows +4. Assess risk and report to user +``` + +> If "Index is stale" → run `npx gitnexus analyze` in terminal. + +## Checklist + +``` +- [ ] gitnexus_impact({target, direction: "upstream"}) to find dependents +- [ ] Review d=1 items first (these WILL BREAK) +- [ ] Check high-confidence (>0.8) dependencies +- [ ] READ processes to check affected execution flows +- [ ] gitnexus_detect_changes() for pre-commit check +- [ ] Assess risk level and report to user +``` + +## Understanding Output + +| Depth | Risk Level | Meaning | +| ----- | ---------------- | ------------------------ | +| d=1 | **WILL BREAK** | Direct callers/importers | +| d=2 | LIKELY AFFECTED | Indirect dependencies | +| d=3 | MAY NEED TESTING | Transitive effects | + +## Risk Assessment + +| Affected | Risk | +| ------------------------------ | -------- | +| <5 symbols, few processes | LOW | +| 5-15 symbols, 2-5 processes | MEDIUM | +| >15 symbols or many processes | HIGH | +| Critical path (auth, payments) | CRITICAL | + +## Tools + +**gitnexus_impact** — the primary tool for symbol blast radius: + +``` +gitnexus_impact({ + target: "validateUser", + direction: "upstream", + minConfidence: 0.8, + maxDepth: 3 +}) + +→ d=1 (WILL BREAK): + - loginHandler (src/auth/login.ts:42) [CALLS, 100%] + - apiMiddleware (src/api/middleware.ts:15) [CALLS, 100%] + +→ d=2 (LIKELY AFFECTED): + - authRouter (src/routes/auth.ts:22) [CALLS, 95%] +``` + +**gitnexus_detect_changes** — git-diff based impact analysis: + +``` +gitnexus_detect_changes({scope: "staged"}) + +→ Changed: 5 symbols in 3 files +→ Affected: LoginFlow, TokenRefresh, APIMiddlewarePipeline +→ Risk: MEDIUM +``` + +## Example: "What breaks if I change validateUser?" + +``` +1. gitnexus_impact({target: "validateUser", direction: "upstream"}) + → d=1: loginHandler, apiMiddleware (WILL BREAK) + → d=2: authRouter, sessionManager (LIKELY AFFECTED) + +2. READ gitnexus://repo/my-app/processes + → LoginFlow and TokenRefresh touch validateUser + +3. Risk: 2 direct callers, 2 processes = MEDIUM +``` diff --git a/.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md b/.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md new file mode 100644 index 0000000..f48cc01 --- /dev/null +++ b/.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md @@ -0,0 +1,121 @@ +--- +name: gitnexus-refactoring +description: "Use when the user wants to rename, extract, split, move, or restructure code safely. Examples: \"Rename this function\", \"Extract this into a module\", \"Refactor this class\", \"Move this to a separate file\"" +--- + +# Refactoring with GitNexus + +## When to Use + +- "Rename this function safely" +- "Extract this into a module" +- "Split this service" +- "Move this to a new file" +- Any task involving renaming, extracting, splitting, or restructuring code + +## Workflow + +``` +1. gitnexus_impact({target: "X", direction: "upstream"}) → Map all dependents +2. gitnexus_query({query: "X"}) → Find execution flows involving X +3. gitnexus_context({name: "X"}) → See all incoming/outgoing refs +4. Plan update order: interfaces → implementations → callers → tests +``` + +> If "Index is stale" → run `npx gitnexus analyze` in terminal. + +## Checklists + +### Rename Symbol + +``` +- [ ] gitnexus_rename({symbol_name: "oldName", new_name: "newName", dry_run: true}) — preview all edits +- [ ] Review graph edits (high confidence) and ast_search edits (review carefully) +- [ ] If satisfied: gitnexus_rename({..., dry_run: false}) — apply edits +- [ ] gitnexus_detect_changes() — verify only expected files changed +- [ ] Run tests for affected processes +``` + +### Extract Module + +``` +- [ ] gitnexus_context({name: target}) — see all incoming/outgoing refs +- [ ] gitnexus_impact({target, direction: "upstream"}) — find all external callers +- [ ] Define new module interface +- [ ] Extract code, update imports +- [ ] gitnexus_detect_changes() — verify affected scope +- [ ] Run tests for affected processes +``` + +### Split Function/Service + +``` +- [ ] gitnexus_context({name: target}) — understand all callees +- [ ] Group callees by responsibility +- [ ] gitnexus_impact({target, direction: "upstream"}) — map callers to update +- [ ] Create new functions/services +- [ ] Update callers +- [ ] gitnexus_detect_changes() — verify affected scope +- [ ] Run tests for affected processes +``` + +## Tools + +**gitnexus_rename** — automated multi-file rename: + +``` +gitnexus_rename({symbol_name: "validateUser", new_name: "authenticateUser", dry_run: true}) +→ 12 edits across 8 files +→ 10 graph edits (high confidence), 2 ast_search edits (review) +→ Changes: [{file_path, edits: [{line, old_text, new_text, confidence}]}] +``` + +**gitnexus_impact** — map all dependents first: + +``` +gitnexus_impact({target: "validateUser", direction: "upstream"}) +→ d=1: loginHandler, apiMiddleware, testUtils +→ Affected Processes: LoginFlow, TokenRefresh +``` + +**gitnexus_detect_changes** — verify your changes after refactoring: + +``` +gitnexus_detect_changes({scope: "all"}) +→ Changed: 8 files, 12 symbols +→ Affected processes: LoginFlow, TokenRefresh +→ Risk: MEDIUM +``` + +**gitnexus_cypher** — custom reference queries: + +```cypher +MATCH (caller)-[:CodeRelation {type: 'CALLS'}]->(f:Function {name: "validateUser"}) +RETURN caller.name, caller.filePath ORDER BY caller.filePath +``` + +## Risk Rules + +| Risk Factor | Mitigation | +| ------------------- | ----------------------------------------- | +| Many callers (>5) | Use gitnexus_rename for automated updates | +| Cross-area refs | Use detect_changes after to verify scope | +| String/dynamic refs | gitnexus_query to find them | +| External/public API | Version and deprecate properly | + +## Example: Rename `validateUser` to `authenticateUser` + +``` +1. gitnexus_rename({symbol_name: "validateUser", new_name: "authenticateUser", dry_run: true}) + → 12 edits: 10 graph (safe), 2 ast_search (review) + → Files: validator.ts, login.ts, middleware.ts, config.json... + +2. Review ast_search edits (config.json: dynamic reference!) + +3. gitnexus_rename({symbol_name: "validateUser", new_name: "authenticateUser", dry_run: false}) + → Applied 12 edits across 8 files + +4. gitnexus_detect_changes({scope: "all"}) + → Affected: LoginFlow, TokenRefresh + → Risk: MEDIUM — run tests for these flows +``` diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c7739d2 --- /dev/null +++ b/.env.example @@ -0,0 +1,20 @@ +ELEVENLABS_AGENT_ID=agent_your_public_or_secured_agent_id +ELEVENLABS_API_KEY=your_elevenlabs_api_key +OPENROUTER_API_KEY=your_openrouter_api_key +OPENROUTER_MODEL=openrouter/free +GROQ_API_KEY=your_groq_api_key +GROQ_MODEL=llama-3.1-8b-instant +GEMINI_API_KEY=your_gemini_api_key +GEMINI_MODEL=gemini-2.5-flash-lite + +# Supabase CMS / directory data layer +NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co +NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key +SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key + +# Product analytics and heatmapping +# Keep disabled until the official project IDs are configured. +NEXT_PUBLIC_ANALYTICS_ENABLED=false +NEXT_PUBLIC_POSTHOG_KEY=phc_your_posthog_project_key +NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com +NEXT_PUBLIC_CLARITY_PROJECT_ID=your_microsoft_clarity_project_id diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..7a20a9d --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,64 @@ +name: Deploy 9Ruby Home + +on: + push: + branches: [main] + +jobs: + build-and-deploy: + name: Build & Deploy + runs-on: ubuntu-latest + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + steps: + - uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Type check and build + run: npm run build + + - name: Check Vercel credentials + id: vercel-secrets + run: | + if [ -n "$VERCEL_TOKEN" ] && [ -n "$VERCEL_ORG_ID" ] && [ -n "$VERCEL_PROJECT_ID" ]; then + echo "configured=true" >> "$GITHUB_OUTPUT" + else + echo "configured=false" >> "$GITHUB_OUTPUT" + echo "Vercel deployment skipped because VERCEL_TOKEN, VERCEL_ORG_ID, or VERCEL_PROJECT_ID is not configured in GitHub Secrets." + fi + + - name: Install Vercel CLI + if: steps.vercel-secrets.outputs.configured == 'true' + run: npm install -g vercel + + - name: Pull Vercel environment + if: steps.vercel-secrets.outputs.configured == 'true' + run: vercel pull --yes --environment=production --token="$VERCEL_TOKEN" + + - name: Deploy to Vercel Production + if: steps.vercel-secrets.outputs.configured == 'true' + run: vercel deploy --prod --token="$VERCEL_TOKEN" + + notify: + name: Notification + needs: build-and-deploy + runs-on: ubuntu-latest + if: always() + steps: + - name: Send deployment notification + run: | + if [ "${{ needs.build-and-deploy.result }}" == "success" ]; then + echo "Deployment workflow successful. If Vercel secrets are not configured, production deploy is handled manually/Vercel-side." + else + echo "Deployment workflow failed: 9Ruby Home deployment encountered an error." + fi diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml new file mode 100644 index 0000000..f3aa7cf --- /dev/null +++ b/.github/workflows/lighthouse.yml @@ -0,0 +1,42 @@ +name: Lighthouse Audit + +on: + schedule: + - cron: '0 6 * * 1' # Every Monday at 6:00 AM UTC + workflow_dispatch: # Allow manual trigger + +jobs: + lighthouse: + name: Lighthouse CI Audit + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install Lighthouse CI + run: npm install -g @lhci/cli + + - name: Run Lighthouse audit + env: + LHCI_SITE_URL: ${{ vars.SITE_URL || 'https://9ruby.com' }} + run: | + lhci autorun \ + --collect.url="$LHCI_SITE_URL" \ + --collect.numberOfRuns=3 \ + --assert.preset=lighthouse:no-pwa \ + --assert.assertions.categories:performance=["error", {"minScore": 0.8}] \ + --assert.assertions.categories:accessibility=["error", {"minScore": 0.8}] \ + --assert.assertions.categories:seo=["error", {"minScore": 0.8}] \ + --assert.assertions.categories:best-practices=["error", {"minScore": 0.8}] \ + --upload.target=temporary-public-storage + + - name: Report results + if: always() + run: | + echo "Lighthouse audit complete." + echo "Minimum threshold: 80 for Performance, Accessibility, SEO, and Best Practices." + echo "Results uploaded to temporary public storage - check job logs for the URL." diff --git a/.gitignore b/.gitignore index 9c8a03f..187d447 100644 --- a/.gitignore +++ b/.gitignore @@ -28,16 +28,30 @@ npm-debug.log* yarn-debug.log* yarn-error.log* +*.log .pnpm-debug.log* +.codex-screens/ +.codex-dev-*.log # env files (can opt-in for committing if needed) .env* +!.env.example # vercel .vercel +# generated/local analysis +.gitnexus +.hermes/ +graphify-out/ + +# local runtime lead captures +/data/audit-intake/ +/data/blog-events/ +/data/blog-subscribers/ +/data/income-leads/ +/data/revenue-score/ + # typescript *.tsbuildinfo next-env.d.ts - -.vercel diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 0000000..8a5846e --- /dev/null +++ b/.vercelignore @@ -0,0 +1,6 @@ +.env +.env.local +.env.development +.env.production +.env.example +next-*.log diff --git a/AGENTS.md b/AGENTS.md index 8bd0e39..20284c6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,3 +3,47 @@ This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. + + +# GitNexus — Code Intelligence + +This project is indexed by GitNexus as **9ruby-site** (2306 symbols, 3512 relationships, 113 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. + +> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. + +## Always Do + +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. + +## Never Do + +- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. +- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. + +## Resources + +| Resource | Use for | +|----------|---------| +| `gitnexus://repo/9ruby-site/context` | Codebase overview, check index freshness | +| `gitnexus://repo/9ruby-site/clusters` | All functional areas | +| `gitnexus://repo/9ruby-site/processes` | All execution flows | +| `gitnexus://repo/9ruby-site/process/{name}` | Step-by-step execution trace | + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | + + diff --git a/CLAUDE.md b/CLAUDE.md index 43c994c..5989357 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1 +1,45 @@ @AGENTS.md + + +# GitNexus — Code Intelligence + +This project is indexed by GitNexus as **9ruby-site** (2306 symbols, 3512 relationships, 113 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. + +> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. + +## Always Do + +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. + +## Never Do + +- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. +- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. + +## Resources + +| Resource | Use for | +|----------|---------| +| `gitnexus://repo/9ruby-site/context` | Codebase overview, check index freshness | +| `gitnexus://repo/9ruby-site/clusters` | All functional areas | +| `gitnexus://repo/9ruby-site/processes` | All execution flows | +| `gitnexus://repo/9ruby-site/process/{name}` | Step-by-step execution trace | + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | + + diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..443b60f --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,172 @@ +--- +version: alpha +name: 9Ruby Official +description: Dark, monochrome, editorial AI studio system for 9Ruby.com. +colors: + primary: "#FFFFFF" + secondary: "#AAAAAA" + tertiary: "#7A7A7A" + neutral: "#080808" + surface: "#101010" + surfaceSolid: "#161616" + border: "#2A2A2A" + accent: "#FFFFFF" +typography: + display: + fontFamily: Manrope + fontSize: 6rem + fontWeight: 950 + lineHeight: 0.93 + letterSpacing: "-0.075em" + h1: + fontFamily: Manrope + fontSize: 4.5rem + fontWeight: 950 + lineHeight: 0.94 + letterSpacing: "-0.07em" + h2: + fontFamily: Manrope + fontSize: 3rem + fontWeight: 900 + lineHeight: 0.98 + letterSpacing: "-0.06em" + body-md: + fontFamily: Manrope + fontSize: 1rem + fontWeight: 400 + lineHeight: 1.6 + letterSpacing: "-0.012em" + label: + fontFamily: Manrope + fontSize: 0.6875rem + fontWeight: 800 + lineHeight: 1 + letterSpacing: "0.12em" +rounded: + none: 0px + sm: 6px + md: 10px + full: 999px +spacing: + sectionY: 96px + sectionYMobile: 64px + pageX: 32px + pageXMobile: 24px + maxWidth: 1200px +components: + page-shell: + backgroundColor: "{colors.neutral}" + textColor: "{colors.primary}" + card-default: + backgroundColor: "{colors.surface}" + textColor: "{colors.primary}" + rounded: "{rounded.none}" + padding: 24px + card-muted: + backgroundColor: "{colors.surfaceSolid}" + textColor: "{colors.secondary}" + rounded: "{rounded.none}" + padding: 24px + label-muted: + backgroundColor: "{colors.neutral}" + textColor: "{colors.tertiary}" + rounded: "{rounded.none}" + padding: 8px + border-sample: + backgroundColor: "{colors.border}" + textColor: "{colors.accent}" + rounded: "{rounded.none}" + padding: 8px + button-primary: + backgroundColor: "{colors.primary}" + textColor: "#000000" + rounded: "{rounded.full}" + padding: 12px + button-secondary: + backgroundColor: "{colors.neutral}" + textColor: "{colors.primary}" + rounded: "{rounded.full}" + padding: 12px +--- + +## Overview + +9Ruby.com uses one official visual system: dark monochrome, sharp editorial spacing, oversized uppercase headlines, thin borders, and restrained motion. + +The site should feel like a premium AI studio and revenue systems company, not a collection of unrelated experiments. Every page cleanup must preserve this system. + +## Colors + +- **Background (#080808):** Official page background. Use this instead of random light gray or different black values. +- **Surface (#101010 / #161616):** Cards, panels, mobile menus, and elevated blocks. +- **Text (#FFFFFF):** Main text and high-emphasis actions. +- **Muted text (#AAAAAA / #7A7A7A):** Captions, descriptions, secondary navigation. +- **Accent (#FFFFFF):** The official accent is white. Do not introduce random bright colors unless a specific product page requires it. +- **Border (#2A2A2A):** Thin, low-contrast dividers. Prefer `rgba(255,255,255,0.12)` in code. + +## Typography + +Use Manrope as the official brand face through `var(--font-brand), var(--font-geist-sans), system-ui, sans-serif`. + +Headlines are uppercase, heavy, tight, and editorial. Body copy is compact and practical. + +Use Arabic micro-labels only as brand accents, not as large competing content blocks. + +## Layout + +Use one page rhythm: + +- Fixed 72px navbar. +- Breadcrumb band under navbar for inner pages. +- Max content width around 1200px. +- Horizontal padding: 24px mobile, 32px desktop. +- Section padding: 64px mobile, 96px desktop. +- Cards use grid systems, not random scattered layouts. +- Hero sections must make the first buyer action obvious. + +## Elevation & Depth + +Keep depth subtle: + +- Thin borders. +- Very dark surfaces. +- Minimal glow/grain. +- No colorful glassmorphism unless it is already part of an approved 9Ruby component. + +## Shapes + +9Ruby uses mostly square/editorial panels with occasional rounded-pill CTAs. + +- Cards: square or very small radius. +- Buttons: full pill radius. +- Badges: square outline or compact pill depending on context. + +## Components + +Official repeated components: + +- `Navbar` for all public pages. +- `Breadcrumb` for inner pages. +- `PageHeader` for directory-style pages. +- `Footer` for all public pages. +- `RevenueAuditOffer`, `ProductizedOfferLadder`, and `NicheRevenuePage` for money pages. + +When cleaning page by page, prefer extracting repeated styles into these components instead of creating one-off page systems. + +## Do's and Don'ts + +Do: + +- Keep the site dark and monochrome. +- Keep navigation buyer-first. +- Use consistent card grids and spacing. +- Keep one primary CTA per page. +- Preserve the current premium 9Ruby look. + +Don't: + +- Add light gray pages unless the full brand direction changes. +- Mix many layout systems on one route. +- Add new random categories to the navbar. +- Add colorful gradients, neon accents, emojis, or unrelated icon styles. +- Rebuild the site from scratch when a page can be aligned to the official system. diff --git a/README.md b/README.md index e215bc4..8e75c17 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,49 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# 9ruby.com -## Getting Started +> Corporate website for [Nine Ruby Management FZ-LLC](https://www.9ruby.com). + +## Overview + +The official 9Ruby corporate website featuring 3D shader gradients, Three.js visuals, and a modern landing experience. Showcases the company's products, services, and brand identity. -First, run the development server: +## Tech Stack + +- **Framework:** Next.js 16 (App Router) +- **3D:** Three.js, React Three Fiber, ShaderGradient +- **Styling:** Tailwind CSS 4 +- **Language:** TypeScript 5 + +## Getting Started ```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev +npm install +npm run dev # http://localhost:3000 ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +## Environment -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. +Copy `.env.example` to `.env.local` for local-only secrets. -## Learn More +- `OPENROUTER_API_KEY` uses OpenRouter first, defaulting to the free `openrouter/free` router. +- `GROQ_API_KEY` is the second provider, defaulting to `llama-3.1-8b-instant`. +- `GEMINI_API_KEY` is the third provider, defaulting to `gemini-2.5-flash-lite`. +- Without an AI provider key, the homepage uses local deterministic copy. -To learn more about Next.js, take a look at the following resources: +## Project Structure -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +``` +src/ +├── app/ # Next.js App Router pages +├── components/ # React components (3D scenes, sections) +public/ +├── fonts/ # Custom typefaces +└── images/ # Brand assets +``` -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! +## Deployment -## Deploy on Vercel +Deployed to Vercel. Pushes to `main` trigger auto-deploy. -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. +## License -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +Proprietary — Nine Ruby Management FZ-LLC diff --git a/check-eco.mjs b/check-eco.mjs new file mode 100644 index 0000000..af72310 --- /dev/null +++ b/check-eco.mjs @@ -0,0 +1,9 @@ +import { chromium } from 'playwright'; +const browser = await chromium.launch(); +const page = await browser.newPage(); +await page.setViewportSize({ width: 1280, height: 900 }); +await page.goto('https://home.9ruby.com/ecosystem', { waitUntil: 'networkidle' }); +await page.screenshot({ path: 'eco-check.png', fullPage: false }); +const imgs = await page.evaluate(() => Array.from(document.querySelectorAll('img')).map(e => e.src)); +console.log('img srcs:', JSON.stringify(imgs)); +await browser.close(); diff --git a/components.json b/components.json new file mode 100644 index 0000000..2a42785 --- /dev/null +++ b/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "radix-nova", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/designs/9ruby-antigravity/assets/css/extracted.css b/designs/9ruby-antigravity/assets/css/extracted.css new file mode 100644 index 0000000..f4dab06 --- /dev/null +++ b/designs/9ruby-antigravity/assets/css/extracted.css @@ -0,0 +1 @@ +html{font-size:62.5%;box-sizing:border-box;height:-webkit-fill-available}*,::after,::before{box-sizing:inherit}body{font-family:sf pro text,sf pro icons,helvetica neue,helvetica,arial,sans-serif;font-size:1.6rem;line-height:1.65;word-break:break-word;font-kerning:auto;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;hyphens:auto;height:100vh;height:-webkit-fill-available;max-height:100vh;max-height:-webkit-fill-available;margin:0}::selection{background:#79ffe1}::-moz-selection{background:#79ffe1}a{cursor:pointer;color:#0070f3;text-decoration:none;transition:all .2s ease;border-bottom:1px solid #0000}a:hover{border-bottom:1px solid #0070f3}ul{padding:0;margin-left:1.5em;list-style-type:none}li{margin-bottom:10px}ul li:before{content:'\02013'}li:before{display:inline-block;color:#ccc;position:absolute;margin-left:-18px;transition:color .2s ease}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;font-size:.92em}code:after,code:before{content:'`'}.container{display:flex;justify-content:center;flex-direction:column;min-height:100%}main{max-width:80rem;padding:4rem 6rem;margin:auto}ul{margin-bottom:32px}.error-title{font-size:2rem;padding-left:22px;line-height:1.5;margin-bottom:24px}.error-title-guilty{border-left:2px solid #ed367f}.error-title-innocent{border-left:2px solid #59b89c}@media(max-width:500px){.owner-error{display:none}}main p{color:#333}.devinfo-container{border:1px solid #ddd;border-radius:4px;padding:2rem;display:flex;flex-direction:column;margin-bottom:32px}.error-code{margin:0;font-size:1.6rem;color:#000;margin-bottom:1.6rem}.devinfo-line{color:#333}.devinfo-line code,code,li{color:#000}.devinfo-line:not(:last-child){margin-bottom:8px}.docs-link,.contact-link{font-weight:500}header,footer,footer a{display:flex;justify-content:center;align-items:center}header,footer{min-height:100px;height:100px}header{border-bottom:1px solid #eaeaea}header h1{font-size:1.8rem;margin:0;font-weight:500}header p{font-size:1.3rem;margin:0;font-weight:500}.header-item{display:flex;padding:0 2rem;margin:2rem 0;text-decoration:line-through;color:#999}.header-item.active{color:#ff0080;text-decoration:none}.header-item.first{border-right:1px solid #eaeaea}.header-item-content{display:flex;flex-direction:column}.header-item-icon{margin-right:1rem;margin-top:.6rem}footer{border-top:1px solid #eaeaea}footer a{color:#000}footer a:hover{border-bottom-color:#0000}footer svg{margin-left:.8rem}.note{padding:8pt 16pt;border-radius:5px;border:1px solid #0070f3;font-size:14px;line-height:1.8;color:#0070f3}@media(max-width:500px){.devinfo-container .devinfo-line code{margin-top:.4rem}.devinfo-container .devinfo-line:not(:last-child){margin-bottom:1.6rem}.devinfo-container{margin-bottom:0}header{flex-direction:column;height:auto;min-height:auto;align-items:flex-start}.header-item.first{border-right:none;margin-bottom:0}main{padding:1rem 2rem}body{font-size:1.4rem;line-height:1.55}footer{display:none}.note{margin-top:16px}} \ No newline at end of file diff --git a/designs/9ruby-antigravity/index.html b/designs/9ruby-antigravity/index.html new file mode 100644 index 0000000..c9c696c --- /dev/null +++ b/designs/9ruby-antigravity/index.html @@ -0,0 +1,13 @@ + + + + +404: NOT_FOUND + + +404: NOT_FOUND

404: NOT_FOUND +Code: DEPLOYMENT_NOT_FOUND +ID: bom1::fmjtr-1775627406897-3b179a7d2fbc

This deployment cannot be found. For more information and troubleshooting, see our documentation.
\ No newline at end of file diff --git a/designs/9ruby-antigravity/metadata.json b/designs/9ruby-antigravity/metadata.json new file mode 100644 index 0000000..5c48dbe --- /dev/null +++ b/designs/9ruby-antigravity/metadata.json @@ -0,0 +1,10 @@ +{ + "source_url": "https://9ruby.com", + "title": "404: NOT_FOUND", + "viewport": { + "width": 1920, + "height": 1080 + }, + "assets_downloaded": 0, + "captured_resources": 0 +} \ No newline at end of file diff --git a/designs/9ruby-antigravity/reference.png b/designs/9ruby-antigravity/reference.png new file mode 100644 index 0000000..a6c711f Binary files /dev/null and b/designs/9ruby-antigravity/reference.png differ diff --git a/designs/screenshots/9ruby-check.png b/designs/screenshots/9ruby-check.png new file mode 100644 index 0000000..35fe57d Binary files /dev/null and b/designs/screenshots/9ruby-check.png differ diff --git a/designs/screenshots/9ruby-final.png b/designs/screenshots/9ruby-final.png new file mode 100644 index 0000000..233dc4c Binary files /dev/null and b/designs/screenshots/9ruby-final.png differ diff --git a/designs/screenshots/9ruby-full.png b/designs/screenshots/9ruby-full.png new file mode 100644 index 0000000..31348dc Binary files /dev/null and b/designs/screenshots/9ruby-full.png differ diff --git a/designs/screenshots/check-cases.png b/designs/screenshots/check-cases.png new file mode 100644 index 0000000..ce7eb24 Binary files /dev/null and b/designs/screenshots/check-cases.png differ diff --git a/designs/screenshots/check-ecosystem.png b/designs/screenshots/check-ecosystem.png new file mode 100644 index 0000000..ac5a533 Binary files /dev/null and b/designs/screenshots/check-ecosystem.png differ diff --git a/designs/screenshots/check-home.png b/designs/screenshots/check-home.png new file mode 100644 index 0000000..9c498b6 Binary files /dev/null and b/designs/screenshots/check-home.png differ diff --git a/designs/screenshots/check-universe.png b/designs/screenshots/check-universe.png new file mode 100644 index 0000000..4d41880 Binary files /dev/null and b/designs/screenshots/check-universe.png differ diff --git a/designs/screenshots/eco-cards.png b/designs/screenshots/eco-cards.png new file mode 100644 index 0000000..ac5a533 Binary files /dev/null and b/designs/screenshots/eco-cards.png differ diff --git a/designs/screenshots/eco-cards2.png b/designs/screenshots/eco-cards2.png new file mode 100644 index 0000000..8a395cf Binary files /dev/null and b/designs/screenshots/eco-cards2.png differ diff --git a/designs/screenshots/eco-check.png b/designs/screenshots/eco-check.png new file mode 100644 index 0000000..40085a2 Binary files /dev/null and b/designs/screenshots/eco-check.png differ diff --git a/designs/screenshots/eco-check2.png b/designs/screenshots/eco-check2.png new file mode 100644 index 0000000..ac5a533 Binary files /dev/null and b/designs/screenshots/eco-check2.png differ diff --git a/designs/screenshots/eco-registry.png b/designs/screenshots/eco-registry.png new file mode 100644 index 0000000..3f8b80c Binary files /dev/null and b/designs/screenshots/eco-registry.png differ diff --git a/designs/screenshots/gold-dark.png b/designs/screenshots/gold-dark.png new file mode 100644 index 0000000..6983d8f Binary files /dev/null and b/designs/screenshots/gold-dark.png differ diff --git a/designs/screenshots/gold-light.png b/designs/screenshots/gold-light.png new file mode 100644 index 0000000..6bbc539 Binary files /dev/null and b/designs/screenshots/gold-light.png differ diff --git a/designs/screenshots/redesign-before-cases.png b/designs/screenshots/redesign-before-cases.png new file mode 100644 index 0000000..4480b39 Binary files /dev/null and b/designs/screenshots/redesign-before-cases.png differ diff --git a/designs/screenshots/redesign-before-home.png b/designs/screenshots/redesign-before-home.png new file mode 100644 index 0000000..94f84b2 Binary files /dev/null and b/designs/screenshots/redesign-before-home.png differ diff --git a/designs/screenshots/redesign-before-pricing.png b/designs/screenshots/redesign-before-pricing.png new file mode 100644 index 0000000..74da3bd Binary files /dev/null and b/designs/screenshots/redesign-before-pricing.png differ diff --git a/designs/screenshots/redesign-before-services.png b/designs/screenshots/redesign-before-services.png new file mode 100644 index 0000000..3ab1121 Binary files /dev/null and b/designs/screenshots/redesign-before-services.png differ diff --git a/designs/screenshots/redesign-dark.png b/designs/screenshots/redesign-dark.png new file mode 100644 index 0000000..f10f9aa Binary files /dev/null and b/designs/screenshots/redesign-dark.png differ diff --git a/designs/screenshots/redesign-light.png b/designs/screenshots/redesign-light.png new file mode 100644 index 0000000..90d5b4f Binary files /dev/null and b/designs/screenshots/redesign-light.png differ diff --git a/designs/screenshots/redesign-services.png b/designs/screenshots/redesign-services.png new file mode 100644 index 0000000..0c8fad2 Binary files /dev/null and b/designs/screenshots/redesign-services.png differ diff --git a/designs/screenshots/universe-final.png b/designs/screenshots/universe-final.png new file mode 100644 index 0000000..2cc2c1d Binary files /dev/null and b/designs/screenshots/universe-final.png differ diff --git a/docs/ai/PLG_HUB_INFRASTRUCTURE.md b/docs/ai/PLG_HUB_INFRASTRUCTURE.md new file mode 100644 index 0000000..43d7f33 --- /dev/null +++ b/docs/ai/PLG_HUB_INFRASTRUCTURE.md @@ -0,0 +1,28 @@ +# 9Ruby PLG Hub Infrastructure + +Date: 2026-05-27 + +## Direction Captured + +9Ruby is moving toward a product-led growth and media hub model: AI tool directory, free utilities, wiki/docs, news, and services as the soft upsell. The current visual site should stay intact until the page architecture is approved. + +## Installed Prerequisites + +- Supabase client support was already present; `@supabase/ssr` and the Supabase CLI are now installed for the CMS/data layer. +- PostHog and Microsoft Clarity are installed for analytics, heatmaps, session replay, and search/intent tracking. +- `pdfjs-dist`, `@ffmpeg/ffmpeg`, and `@ffmpeg/util` are installed for future browser-based PDF/media utilities. + +## Non-Visual Runtime Setup + +- `src/instrumentation-client.ts` initializes PostHog and Microsoft Clarity only when `NEXT_PUBLIC_ANALYTICS_ENABLED=true` and the relevant project IDs are present. +- `.env.example` documents the required Supabase, PostHog, and Clarity variables without storing secrets. +- `supabase/config.toml` exposes the future `plg` schema locally. +- `supabase/migrations/20260527000000_plg_hub_foundation.sql` creates the first data model for tools, categories, news, wiki guides, comparisons, service offers, search events, and intent events. + +## Still Needed Before Production Activation + +- Create or link the official Supabase project under the 9Ruby organization. +- Add real Supabase URL, anon key, and service role key in Vercel/project environment variables. +- Create the official PostHog and Microsoft Clarity projects, then add their public IDs to Vercel/project environment variables. +- Decide consent behavior before enabling tracking on production traffic. +- Apply the Supabase migration to the official project after reviewing the schema. diff --git a/docs/ai/PUBLIC_ECOSYSTEM_INVENTORY.md b/docs/ai/PUBLIC_ECOSYSTEM_INVENTORY.md new file mode 100644 index 0000000..7745b9c --- /dev/null +++ b/docs/ai/PUBLIC_ECOSYSTEM_INVENTORY.md @@ -0,0 +1,70 @@ +# Public Ecosystem Inventory + +Date: 2026-05-10 + +This is the working list for consolidating public 9Ruby, IX Ruby, Ruby, template, tool, and product work into `9ruby.com`. + +## Source Of Truth + +| Item | Path | Domains | Decision | +|---|---|---|---| +| 9Ruby Home | `C:/Users/mrvis/Projects/9ruby-home` | `9ruby.com`, `www.9ruby.com`, `home.9ruby.com`, `domains.9ruby.com` | Keep. Single public website. | + +## Product Hubs + +| Item | Path | Domains | Public Role | Money Model | +|---|---|---|---|---| +| 9Ruby AI | `C:/Users/mrvis/Projects/kimi-9ruby-v0` | `ai.9ruby.com` | Product hub for AI workspace and assistants. | Freemium or paid plans. | +| Nine Builder | `C:/Users/mrvis/Projects/nine-builder` | `builder.9ruby.com`, `nine-builder.vercel.app` | Retired standalone app; useful builder concept moved into official 9Ruby products and managed builds. | Productized setup service or future embedded demo. | +| 9Ruby IDE | `C:/Users/mrvis/Projects/ruby-ide` | none | Developer product, not primary public marketing yet. | Paid/pro developer tool later. | +| 9Ruby UI | `C:/Users/mrvis/Projects/9ruby-ui` | none | Internal/shared design system. | Internal; public docs later only if useful. | +| RubyGrid | `C:/Users/mrvis/OneDrive/Documents/New project/rubygrid` | `grid.9ruby.com` | Agent-grid or template/product candidate. | Needs review. | + +## Services And Agency + +| Item | Path | Domains | Public Role | Money Model | +|---|---|---|---|---| +| IX Ruby Agency | `C:/Users/mrvis/Projects/ix-ruby-agency` | `v0-agency.9ruby.com`, `agency.vercel.app` | Archive/source for service copy and proof. | Migrate into service pages. | +| IX Ruby Premium | `C:/Users/mrvis/Projects/ix-ruby-premium` | `ix.9ruby.com` | Premium/high-ticket service layer. | Paid consulting packages. | +| Ruby Bloom Landing | `C:/Users/mrvis/Projects/ruby-bloom-landing` | `ruby.9ruby.com` | Visual source/landing experiment. | Extract design ideas or archive. | +| Hypersonic 9Ruby | `C:/Users/mrvis/Projects/hypersonic-9ruby` | `hypersonic.9ruby.com` | Template or landing-page example. | Paid/free template candidate. | + +## Templates + +| Item | Path | Domains | Public Role | Money Model | +|---|---|---|---|---| +| Framer Template Vault | `C:/Users/mrvis/Projects/framer-template-vault` | `templates.9ruby.com` | Template catalog source. | Free templates plus premium templates. | +| v0 Template Library | `C:/Users/mrvis/OneDrive/Documents/New project/v0-template-library` | `launchgrid.9ruby.com`, `nightops.9ruby.com`, `monocore.9ruby.com`, `accessnine.9ruby.com`, `queuespark.9ruby.com`, `palettelab.9ruby.com`, `forgestack.9ruby.com`, `badgelive.9ruby.com` | Source for template pages and demos. | Free starters, paid kits, lead capture. | +| AI Website Cloner Template | `C:/Users/mrvis/Projects/ai-website-cloner-template` | none | Internal/template generation workflow. | Internal tool or paid setup service. | + +## Tools And Internal Systems + +| Item | Path | Domains | Public Role | Money Model | +|---|---|---|---|---| +| CPanel Ruby OS | `C:/Users/mrvis/Projects/cpanel` | `cpanel.9ruby.com` | Internal dashboard. Publicly describe only as admin capability. | Internal, not public access. | +| RUBY Platform | `C:/Users/mrvis/Projects/platform` | none | Internal runtime/platform. Publicly describe benefits only. | Internal infrastructure. | +| Agency OS Builder | `C:/Users/mrvis/Projects/agency-os-builder` | none | Internal operations builder. | Internal or paid operations setup later. | +| Ruby Automation OS | `C:/Users/mrvis/Projects/ruby-automation-os` | none | Internal operating system. Publicly package as service capability only. | Internal; paid automation services. | + +## Case Studies + +| Item | Path | Domains | Public Role | Money Model | +|---|---|---|---|---| +| NOVAVOX | `C:/Users/mrvis/Projects/novavox-working` | `novavox.in`, `v0-novavox.9ruby.com` | Client/proof case study if approved. | Proof for paid media/platform builds. | +| Laura | `C:/Users/mrvis/Projects/luna` | `laura.9ruby.com`, `luna.9ruby.com` | Template or case study candidate. | Template/service candidate. | + +## Archive + +| Item | Path | Domains | Decision | +|---|---|---|---| +| 9Ruby Core Prototype | `C:/Users/mrvis/Projects/9ruby-core` | none | Archive. Not live website source. | + +## Review Questions + +1. Should `ai.9ruby.com` stay as a separate app, or should 9Ruby Home own the landing/pricing and link into the app? +2. `builder.9ruby.com` should not stay separate. It is consolidated into the official products page; keep the domain safe with a blank/noindex holder. +3. Should `templates.9ruby.com` remain a subdomain, or should templates move under `/templates` on the main site? +4. Should `ix.9ruby.com` remain a premium sub-brand, or should it become a pricing tier inside 9Ruby Home? +5. Should `cpanel.9ruby.com` be private-only behind auth, with no public marketing page? +6. Which demo/template domains from the v0 library should stay live, redirect, or become cards under `/templates`? +7. Which client projects are safe to show as case studies? diff --git a/docs/ai/SINGLE_SOURCE_STRATEGY.md b/docs/ai/SINGLE_SOURCE_STRATEGY.md new file mode 100644 index 0000000..679a973 --- /dev/null +++ b/docs/ai/SINGLE_SOURCE_STRATEGY.md @@ -0,0 +1,95 @@ +# 9Ruby Single Source Strategy + +Date: 2026-05-10 + +## Decision + +`C:/Users/mrvis/Projects/9ruby-home` is the single source of truth for the public `9ruby.com` website. + +This site is the public front door for 9Ruby as an agency and company. Clients, prospects, search visitors, and tool users should land here to understand services, pricing, templates, tools, products, and the public ecosystem. + +## Public Positioning + +9Ruby is a front-facing agency and product ecosystem. + +The site should feel like a company website with useful products, not a private project archive. Public pages should explain what a visitor can buy, use, download, request, or learn. + +## Include + +- Agency services: AI agents, websites, voice systems, automation, SEO, design, apps, dashboards, and support. +- Free tools: SEO checker, QR generator, JSON formatter, meta generator, color palette, and future lightweight utilities. +- Templates: free starter templates, paid premium templates, Framer-style website kits, v0 template intake results, and reusable client-ready assets. +- Products: 9Ruby AI, Nine Builder, Domains, Voice Agents, Templates, Tools, Apps, and selected public ecosystem entries. +- Proof: polished case studies, public demos, anonymized outcomes, and client-safe results. +- Pricing: clear service packages, template pricing, tool access tiers, and custom quote paths. +- Lead capture: contact, quote, domain quote, AI start links, template CTAs, and service request paths. + +## Exclude + +- Private client files, internal notes, raw worklogs, credentials, tokens, private dashboards, and unfinished operational systems. +- Internal agent infrastructure unless it is packaged as a public product benefit. +- Experimental websites that create brand confusion unless they are migrated into a product, template, tool, or case-study page. +- Multiple competing `9ruby.com` homepages. + +## Consolidation Rules + +- `9ruby.com` and `www.9ruby.com` point to this repo and this public website. +- Subdomains can exist, but the main site must explain them and route users clearly. +- Every old 9Ruby or IX Ruby variation should become one of: + - A public service page. + - A product page. + - A free or paid template. + - A free tool. + - A paid tool. + - A case study. + - An internal/private archive. +- Do not copy private/internal UI directly into public pages. Convert it into client-facing language and offers. + +## Free vs Paid Rules + +Free: +- Small utilities that create trust and traffic. +- Starter templates that advertise quality. +- Educational docs and guides. +- Public demos that do not require private data. + +Paid: +- Done-for-you services. +- Premium templates and full website kits. +- AI agents, voice agents, automation setup, dashboards, and integrations. +- Business operations setup, domain services, SEO packages, and custom software. +- Anything requiring support, hosting, ongoing maintenance, or private client implementation. + +## Open Inventory Questions + +Use these when reviewing older projects and domains: + +1. Is this public-facing, client-safe, and useful to a visitor? +2. Is it a service, tool, template, product, case study, or private archive? +3. Should it be free, paid, lead-capture, or internal-only? +4. Does it strengthen the 9Ruby agency story? +5. Does it confuse the brand if left on a separate domain? +6. Can the feature be represented as a page first before deeper integration? + +## Current Known Inputs + +- `C:/Users/mrvis/Projects/9ruby-home`: live public website source. +- `C:/Users/mrvis/Projects/9ruby-core`: older non-live 9Ruby core prototype. +- `C:/Users/mrvis/Projects/ix-ruby-agency`: older agency site source. +- `C:/Users/mrvis/Projects/ix-ruby-premium`: premium IX Ruby layer. +- `C:/Users/mrvis/Projects/kimi-9ruby-v0`: 9Ruby AI product. +- `C:/Users/mrvis/Projects/nine-builder`: builder product. +- `C:/Users/mrvis/Projects/framer-template-vault`: template catalog source. +- `C:/Users/mrvis/OneDrive/Documents/New project/v0-template-library`: v0 template intake source. +- `C:/Users/mrvis/Projects/cpanel`: internal control panel. +- `C:/Users/mrvis/Projects/platform`: internal RUBY platform/runtime. + +## Immediate Next Build Order + +1. Fix health: lint errors, middleware-to-proxy warning, and source-of-truth registry drift. +2. Create a public ecosystem inventory page or data file. +3. Review old 9Ruby/IX Ruby domains and assign each to service, tool, template, product, case study, or archive. +4. Expand Templates into free and paid sections. +5. Expand Tools into free utilities and paid setup services. +6. Add pricing/package structure for agency services. +7. Add redirects or clear links from confusing older domains after approval. diff --git a/docs/ai/TOOLS_V1.md b/docs/ai/TOOLS_V1.md new file mode 100644 index 0000000..8418951 --- /dev/null +++ b/docs/ai/TOOLS_V1.md @@ -0,0 +1,47 @@ +# 9Ruby Tools V1 + +## Direction + +- `9ruby.com/tools` is the public no-login toolbox. +- All tools are free in v1. +- Reports and generated files are export-only. +- No account storage, database writes, checkout, or model API calls are used. +- Monetization happens through `Fix this for me` service CTAs. + +## Tool Routes + +- `/tools/seo-checker` +- `/tools/color-palette` +- `/tools/meta-generator` +- `/tools/image-compressor` +- `/tools/json-formatter` +- `/tools/qr-generator` +- `/tools/font-pairing` +- `/tools/website-speed-test` +- `/tools/hashtag-generator` +- `/tools/privacy-policy-generator` +- `/tools/ai-copywriter` +- `/tools/favicon-generator` + +## CTA Contract + +Every tool should link service intent to: + +```txt +/contact?source=tool&tool= +``` + +Examples: + +```txt +/contact?source=tool&tool=seo-checker +/contact?source=tool&tool=image-compressor +``` + +## Source Files + +- Tool metadata: `src/lib/tools.ts` +- Toolbox index: `src/app/tools/page.tsx` +- Dynamic local tools: `src/app/tools/[slug]/page.tsx` +- Client tool runner: `src/components/tools/DynamicToolRunner.tsx` +- Shared service CTA: `src/components/tools/ToolServiceCta.tsx` diff --git a/docs/ai/source-reports/9ruby-Website Launch Strategy.txt b/docs/ai/source-reports/9ruby-Website Launch Strategy.txt new file mode 100644 index 0000000..1de6134 --- /dev/null +++ b/docs/ai/source-reports/9ruby-Website Launch Strategy.txt @@ -0,0 +1,179 @@ +9Ruby Website Audit & Structural Improvement Plan +1. Executive summary +9Ruby is positioned as a premium AI‑enabled design agency offering websites, AI agents, voice systems and automation for service businesses. The existing site presents polished design and strong productized services, but the conversion path depends heavily on a Free Landing Page Preview concept, and the navigation is oriented around services rather than the broader ecosystem. The company’s goal is to transform the site into an “umbrella” destination for AI tools, tech information, best‑of lists and resources while still upselling 9Ruby’s services. +Key observations from the current site: +Homepage – The hero highlights “Websites · AI agents · automation” but the call‑to‑action uses “Request preview,” positioning the first step as a preview rather than a real website launch. The “Choose the first move” section offers three routes: an audit, a free preview and an AI system[1]. Deeper sections list services, service paths, work examples, process, free tools and templates. The page already hints that 9Ruby is an ecosystem, but this is not obvious at the top of the page[2]. +Services & pricing – Productized offers (free preview, $49 audit, homepage fix, landing‑page builds, AI receptionists, etc.) are well structured[3]. However, the free preview emphasises “see a first concept before committing,” which conflicts with the new philosophy of giving businesses a real site for free. +Solutions – Vertical‑specific packages (clinics, real estate, local services, agencies, hospitality, growing teams) show that 9Ruby understands different buyer journeys[4]. +Tools & directory – The Tools page lists over 400 AI utilities across categories with staff picks, trending tools and queued builds[5]. The Directory page is a wiki‑like index of tools, guides, repositories and models[6]. This structure can serve as the foundation for a large AI knowledge hub but needs better surface exposure from the homepage and stronger cross‑linking with blog posts and services. +Blog & guides – The blog is organised by growth systems (AI lead systems, marketing automation, agent operations, etc.) with ~13 articles[7]. Posts provide high‑quality content but could be surfaced more prominently. There is no dedicated “AI news” section. +Overall, the site is polished and comprehensive, but it can be re‑oriented to (1) offer a free website launch as the first step rather than a “preview,” (2) build a true AI tools and information hub, and (3) link those resources back to 9Ruby’s services for monetization. The following sections outline detailed recommendations. +2. Navigation & site architecture +2.1 Top‑level navigation +Current navigation – The top menu includes Work, Services, Solutions, Pricing and Resources with a small “Free Preview” button. These items prioritise the agency services over the growing ecosystem of tools and knowledge. +Proposed navigation – Reorganise the navigation into two clusters: +Create & build +Launch Free Website (primary CTA button) +Services (sub‑menu: Websites, Agents, Voice Systems, Automation, Portals, Growth) +each sub‑menu item should link to the corresponding service page. +emphasise “start free → grow later.” +Pricing +Work / Case Studies +Learn & explore +Tools – link to the AI tools directory with search/filter by category, free/premium tags, trending lists, staff picks and new releases. +Guides & Blog – include AI news, technical guides and case studies. +sub‑menu: AI News, Guides/Playbooks, Blog, Tutorials. +highlight categories such as “Open‑source AI tools,” “Local models,” “Automation stack,” etc. +Directory – index of tools, models, repositories and templates. +Templates – link to the template gallery. +Include Contact and About links in the footer along with legal pages. This separation clearly differentiates between commercial services and free resources, encouraging visitors to explore the AI content hub without feeling like they are on a pure agency site. +2.2 Improved header CTA +Replace the small “Request preview” CTA with a more confident Launch Free Website button. The hero should clearly state that a real website can be launched for free, with an optional domain connection and paid upgrades only when needed. This aligns with the new philosophy and removes the “preview” connotation. +2.3 Footer and site map +The footer currently repeats offers and resources. Expand it to include new sections (Tools, AI News, Guides) and a “Get Help” link where businesses can contact 9Ruby to implement any tool or workflow they discover. Add a sitemap page for better SEO. +3. Homepage overhaul +3.1 Hero section +Current – The hero features “RUBY®” with sub‑text “Editorial websites and practical AI systems for service businesses” and CTAs “View work” and “Request preview.” +Proposed – Use the hero to deliver the free website offer and highlight the ecosystem: +Headline: “Launch a Real Website for Free. Build Your AI System When You’re Ready.” +Sub‑text: Explain that 9Ruby designs and hosts a professional, mobile‑ready website at no cost; businesses can connect their own domain; and paid services only apply when they need custom features or automation. +Primary CTA: “Launch Free Website.” +Secondary CTA: “Explore AI Tools” – leads to the tools directory. +Include a micro‑bar underneath showing trust points: free hosted site, public link, mobile‑first design, optional upgrades[8]. +3.2 Choose your first move +Retain the “Choose the first move” section but rename items to match the new offer: +Free Website Launch – for businesses without a site or with an outdated site, offering a real website launch instead of a preview. +$49 Website + AI Audit – keep the audit path for existing sites, emphasising quick wins and automation opportunities[9]. +AI System Scoping – for businesses ready to explore voice agents, portals and automation. Link to the Solutions page. +3.3 Ecosystem summary +After the first‑move section, briefly introduce the AI ecosystem so visitors know the site is more than a service agency: +One Public Operating Map: 9Ruby combines websites, agents, voice flows, lead capture and automation into a single stack. Start free with a website; explore tools, guides, and models; build when ready[2]. +Provide a set of icons/links for Tools, Guides/Blog, Models, Templates and AI Workspace. This encourages exploration and improves internal linking. +3.4 Services snapshot +Summarise the core capability map from the Services page: Websites & CMS, Apps & Portals, AI & Voice Systems, Growth Systems[10]. Use brief descriptions and “Learn more” links to the relevant service pages. For SEO, ensure each service snapshot uses relevant keywords (e.g., “AI receptionist,” “lead capture automation,” “client portal”). +3.5 Tools & templates teasers +Move the tools teaser higher on the page and emphasize that 9Ruby offers over 400 curated AI utilities[5]. Add a “Popular categories” list (AI, Image, Text, SEO, Developer, Marketing, etc.) and highlight trending tools or new releases. For templates, show a carousel of popular website designs with “Customise this template” links. +3.6 Blog & AI news teaser +Introduce a section titled Insights & AI News. Feature the latest articles or guides (e.g., “How to Turn a Small Business Website Into a Daily Lead Engine”[11]) and a dedicated call‑out for AI News. This signals that 9Ruby is a thought leader and encourages frequent visits. +3.7 Use cases and proof +Retain the use cases section but link each industry example to the relevant Solutions page (Clinics, Real Estate, Local Services, Agencies, Consultants)[12]. In the client proof section, add case study excerpts from the blog to build credibility. +3.8 Footer call‑to‑action +End the homepage with a simple statement: “Start with a free website. Grow into AI agents, automation and custom business tools when you’re ready.” Provide two buttons: “Launch Free Website” and “Browse Tools.” +4. Services & pricing improvements +4.1 Rename “Free Landing Page Preview” to “Free Website Launch” +On the Services and Pricing pages, change all references to Free Landing Page Preview to Free Website Launch. Clarify that the free offer produces a fully functional single‑page website hosted on 9Ruby’s subdomain with a clean design and CTA. This aligns with the new positioning. +4.2 Clarify deliverables & upgrade paths +In each service card, list exactly what is delivered (e.g., page build, copywriting, mobile optimisation, lead capture) and what upgrades are available (extra pages, booking systems, CRM integration, AI agents, voice flows). Use bullet points for scannability. Emphasise that clients are not locked into monthly retainers; they can pay for additional features as needed[13]. +4.3 Add AI tool implementation as a service +Introduce a new productised offer: AI Tool Setup & Customisation. Many visitors will explore the tools directory; some may need help deploying or customising open‑source tools (e.g., self‑hosted Llama models, summarisation dashboards, automation scripts). Offer tiered setup packages: free DIY guide, paid installation, and premium integration with CRM/workflows. This provides a clear monetisation path tied directly to the tools hub. +4.4 Integrate vertical solutions +On the Solutions page, maintain the industry‑specific packages but link them to relevant tools, guides and case studies. For example, the Clinics solution could link to a guide on “AI receptionists for clinics” and to specific tools like booking forms and voice agents. This interlinking helps SEO and encourages deeper exploration[14]. +5. Tools & directory enhancements +5.1 Surface the tools hub in the primary navigation +Add Tools as a top‑level menu item. Visitors should be able to access the tools directory directly from the header, not just through a section on the homepage. +5.2 Improve filtering and categorisation +The existing directory already lists 443 tools across categories such as AI, PDF, Image, SEO, Developer, Marketing, etc.[5]. Enhance this by: +Free vs. Premium filters – allow users to filter tools by pricing model (free, freemium, paid). +Use‑case tags – tag tools by task (e.g., summarisation, chatbots, voice, design, analytics). Add a filter for “Business size” (individual, startup, enterprise). +Release timeline – highlight “new tools” and “trending tools” sections separately. Use tags such as “New in May 2026” or “Trending this week.” +Rating & reviews – allow users to up‑vote tools or leave brief reviews (optional, moderated), to create community feedback. This fosters engagement and helps surface the best tools. +5.3 Dedicated tool pages with upsell paths +Each tool page (e.g., AI Social Post Creator) should include: +A clear description, features list, limitations and pricing model. +Example output or screenshots. +“Difficulty / complexity” label (Beginner, Intermediate, Technical). +Installation or usage instructions – if the tool is downloadable or self‑hosted, provide step‑by‑step guides; if it’s a SaaS tool, link to the provider. For open‑source repos, embed GitHub links and CLI commands. +A call‑to‑action: “Need help implementing this tool? 9Ruby can install and customise it for your business.” Link to the new AI Tool Setup & Customisation service. +Links to related guides, models, or services to create a network of interlinked content. +5.4 Invite submissions and content contributions +Add a small link or form where users can suggest new AI tools to be added to the directory. This encourages community contributions and keeps the catalog fresh. +5.5 Analytics and personalisation +Implement click‑tracking and heat‑mapping (e.g., via Hotjar, Mixpanel) on the tools directory to see which categories and tools attract the most traffic. Use this data to prioritise new tools and surface relevant services. Consider adding a simple “bookmark” or “save for later” feature tied to a free account to build a mailing list for future marketing. +5.6 Comparison engine (future enhancement) +Plan for a tool comparison feature where visitors can select multiple tools and compare price, features, complexity and integration ease in a single view. This differentiates 9Ruby’s directory from other lists. +6. Guides, blog & AI news +6.1 Create an AI News section +Add a dedicated page to aggregate AI news, model updates and product launches. Summarise announcements from sources like OpenAI, Google, Anthropic and research labs. Update it weekly with brief commentary and link to deeper guides when relevant. Use categories (e.g., Model Releases, Regulations, Industry Use‑Cases) and allow RSS subscription. +6.2 Expand guides & tutorials +Develop detailed guides on topics such as: +Choosing the right AI model (cloud vs. local, multimodal vs. text only, cost vs. performance). +How to set up a local LLM – step‑by‑step instructions for running models like Llama 3 on personal hardware. +Building a chat agent – how to design prompts, handle conversations and integrate with a website. +Automating lead capture – design patterns for forms, scheduling, WhatsApp routing and follow‑up. +Cross‑link these guides to relevant tools and to the Services page where 9Ruby can implement the workflows. For example, a guide on voice agents should link to the “AI & Voice Systems” service[15]. +6.3 Enhance blog discoverability +The blog currently lists deep articles but is hidden behind the Resources menu. Surface the latest blog posts on the homepage and within relevant service pages. Use internal linking: each blog post should link to related tools, models and services, and vice versa. Include “related articles” widgets at the bottom of posts to keep users exploring. +6.4 Editorial calendar & SEO +Plan a consistent publishing cadence (e.g., one blog post and one news summary per week). Target keywords such as “best AI tools for small business,” “AI agent setup,” “local LLM deployment,” and vertical‑specific searches. Use structured data (Article schema) on blog and news pages to improve search visibility. +7. Directory, models, repos & templates +7.1 Models explorer +The Directory has a placeholder for “AI model explorer”[16]. Build this section into a practical comparison tool for cloud APIs (OpenAI, Anthropic, Google Gemini, Cohere), local models (Llama, Mistral, Gemma), and domain‑specific models (vision, audio, video). Include metrics such as cost per token, context length, API latency, open‑source licence, etc. Provide decision guides and examples. Link to relevant services (e.g., “Need help choosing a model? We can scope it for you”). +7.2 Repos & workflows +Curate GitHub repositories that are useful for building AI systems. For each repo, provide a summary of what it does, complexity level, installation steps and commercial use considerations (licence). Add “Learn more” links to guides or blog posts that show how to deploy the repo. Offer a paid service to implement the workflow in a client’s environment. +7.3 Templates library +Continue offering templates for websites and landing pages. Provide filtering (industry, aesthetic style, conversion goal) and preview images. Add “Live preview” and “Request customisation” CTAs. For SEO, create separate pages per template with unique titles and copy. +8. Technical & SEO improvements +8.1 On‑page SEO +Meta titles & descriptions – Ensure every page has a unique, concise meta title and description containing relevant keywords (e.g., “Free AI website launch | 9Ruby” for the launch page). Avoid duplicate titles across blog posts and tools. +Heading hierarchy – Use one H1 per page and organise subsections with H2/H3. For example, the homepage currently uses multiple H1s (“RUBY®,” “AI AGENTS THAT QUALIFY…”) which can confuse search engines. Consolidate the hero’s heading and use H2s for subsequent sections. +Image alt tags – Provide descriptive alt text for all images (case studies, tool icons, sample posters) to improve accessibility and SEO. +Internal linking – Link between related pages (tools to guides, blog posts to services, solutions to models). This distributes page authority and helps search engines crawl deeper into the site. +Schema markup – Add structured data for products (service packages), articles (blog posts), and organisation details. Use FAQ schema on pricing and launch pages. +8.2 Site performance +Optimise images (WebP, lazy loading) and compress assets. Large sample images on tool pages should be served via a CDN with responsive sizes. +Use Next.js built‑in image optimisation and prefetching to improve LCP (largest contentful paint). +Leverage Edge functions or serverless caching for heavy API calls on interactive tools. Ensure tools built with serverless functions are rate‑limited to avoid slow page loads. +8.3 Accessibility & internationalisation +Maintain multi‑language support (English + Arabic) by using proper lang attributes and ensuring translation parity across pages. +Use high‑contrast colours and focus states for interactive elements. +Provide keyboard navigation for forms and modals. +9. Data & analytics +9.1 Heat maps and user behaviour +Integrate tools like Hotjar or Microsoft Clarity to monitor click maps, scroll depth and user flows on the homepage, tools pages and pricing pages. Use insights to reposition CTAs, reorder sections and improve conversion rates. +9.2 Conversion funnel tracking +Set up events in Google Analytics or a self‑hosted alternative to track: +Free website launch requests (form submissions) +Tool usage (opens, downloads, completions) +Blog reads and newsletter sign‑ups +Service inquiries (clicks on service CTAs) +Use funnel analysis to identify drop‑off points and test improvements (A/B testing with different messaging or layouts). +9.3 Lead capture & email marketing +Offer optional sign‑ups to save tools, receive AI news or download guide PDFs. Collect email addresses ethically (double opt‑in) and segment lists by interest (websites, tools, AI news). Use automated sequences to upsell audits, AI agents and custom builds. +10. Security & privacy considerations +When integrating third‑party AI tools or allowing user input (e.g., AI Social Post Creator), display clear privacy notices about data use and processing. Avoid storing user inputs long term without explicit consent. +For open‑source tool pages, indicate whether the tool runs locally or calls external APIs, and provide guidance on API key security. +Ensure GDPR/CCPA compliance for analytics and email sign‑ups, including cookie consent banners and data deletion policies. +11. Roadmap & implementation plan +Phase 1 – Positioning & navigation (0–2 weeks) +Update the hero and call‑to‑action on the homepage to “Launch a Real Website for Free.” +Rename the “Free Landing Page Preview” page to /free‑website‑launch and update content to reflect the free launch model. +Reorganise the main navigation into “Create & Build” and “Learn & Explore” clusters; add Tools and Guides links. +Update all service cards and pricing tiers to align with the new free launch language. +Implement meta title, description and H1 updates on top pages. +Phase 2 – Ecosystem integration (2–6 weeks) +Elevate the Tools and Directory pages: improve filters (free/premium tags, task categories), add trending & new sections, and include CTAs to 9Ruby’s services on each tool page. +Launch the AI News section with weekly curated posts. +Expand the Guides section with at least three new deep‑dive articles (e.g., local model setup, building chat agents, lead capture automation). +Create dedicated pages for Models Explorer and curated Repos & Workflows. +Add forms for visitors to suggest tools and request implementation help. +Integrate analytics, heat mapping and conversion tracking. +Phase 3 – Community & personalisation (6–12 weeks) +Introduce user accounts (optional) for bookmarking tools and receiving personalised recommendations. +Implement rating/review functionality on tool pages (moderated to prevent spam). +Build a comparison engine that lets visitors select and compare multiple tools. +Explore partnerships with AI tool vendors to offer exclusive deals or API credits, generating affiliate revenue. +Regularly update AI News and tool lists, using analytics to prioritise content. +12. Conclusion +9Ruby has the foundation to become a comprehensive AI ecosystem while remaining a premium service provider. By repositioning the entry offer as a free website launch, restructuring navigation to emphasise both creating and learning, and expanding the Tools, Guides, News and Directory sections, the site can attract a broader audience of AI enthusiasts and service business owners. Clear internal linking, compelling CTAs, and new service paths (such as AI tool implementation) will convert visitors into paying clients without sounding needy. With improved SEO, analytics and community features, 9Ruby can become the go‑to destination for discovering AI tools and implementing them within professional systems. +[1] [2] [8] [9] [10] [12] [15] 9Ruby — AI agents, websites, and voice systems +https://www.9ruby.com/ +[3] [13] AI Agency Services | 9Ruby | 9Ruby +https://www.9ruby.com/services +[4] [14] AI Solutions by Business Type | 9Ruby | 9Ruby +https://www.9ruby.com/solutions +[5] AI Tools & Utilities | 9Ruby | 9Ruby +https://www.9ruby.com/tools +[6] [16] 9Ruby Index — AI tools, guides, repos, models, and workflows | 9Ruby +https://www.9ruby.com/directory +[7] [11] Blog | 9Ruby | 9Ruby +https://www.9ruby.com/blog diff --git a/docs/ai/source-reports/yes Go ahead and search other and check every web....txt b/docs/ai/source-reports/yes Go ahead and search other and check every web....txt new file mode 100644 index 0000000..d389376 --- /dev/null +++ b/docs/ai/source-reports/yes Go ahead and search other and check every web....txt @@ -0,0 +1,52 @@ +This is the exact blueprint to take 9Ruby from an agency site to an elite, product-led AI hub (think Futurepedia meets There's An AI For That, but with a built-in agency backend). +Since you are running on Vercel, Supabase, and PostHog, you have the absolute best modern stack to execute this efficiently and for practically zero cost on the infrastructure side. +Here is the master plan for your UI, architecture, database, and SEO to make 9Ruby dominate. +1. Global UI & Layout Architecture +To handle massive amounts of data without looking cluttered, we will use a Sidebar + Main Content layout (like Stripe or high-end SaaS dashboards). You mentioned using clean, minimal icons (like Lucide React)—this is perfect for the sidebar. +The App Store & Directory Structure +Separate your directories clearly so users know exactly what they are looking at: +The Hub (Homepage): A massive search bar ("What do you want to automate today?") surrounded by trending categories. +AI Tools Directory: For SaaS products (ChatGPT, Midjourney, Vapi). +App Store (Free Utilities): Your in-house, white-labeled mini-apps (PDF tools, JSON formatters). +Open-Source Repos: A wiki-style section for local models and GitHub setups. +Page-by-Page Layout Map +Page Type +Layout & Key Elements +Category Page +Grid layout. Filters on top (Free, Freemium, Paid). Sort by (Trending, Newest). +Single Tool Page +Tool Name, Pricing Tag, "Visit Site" button. Below: Description, Pros/Cons, and an embedded YouTube review. +App Store (In-House) +Card layout. "Launch App" button. A subtle upsell: "Need this integrated into your CRM? Hire 9Ruby." +AI News / Blog +Feed style. "TL;DR" summary bullet points at the top of every article for scannability. +2. The Database Schema (Supabase) +To scale to thousands of tools and apps without breaking a sweat, your relational database needs to be pristine. +Key insight: By linking Categories to both Tools (external SaaS) and Apps (your internal utilities), you can dynamically query Supabase to show "Related Free Apps" on every external tool page. +3. The SEO & AEO (Answer Engine Optimization) Blueprint +Google search is changing. People are using Perplexity, ChatGPT, and AI Overviews. You must optimize for AEO (Answer Engine Optimization). Answer engines don't read "fluff"; they read structured data and semantic HTML. +AEO Architecture (How to feed the AI bots): +The "TL;DR" Block: At the top of every single Tool Page and Blog Post, include a
with 3 bullet points summarizing the page. AI bots scrape this first. +Semantic HTML: Do not use
for everything. Use
for blog posts,