@growthub/cli 0.7.9 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/worker-kits/creative-strategist-v1/SKILL.md +95 -0
- package/assets/worker-kits/creative-strategist-v1/bundles/creative-strategist-v1.json +12 -2
- package/assets/worker-kits/creative-strategist-v1/helpers/README.md +29 -0
- package/assets/worker-kits/creative-strategist-v1/helpers/extract-muse-frames.sh +81 -0
- package/assets/worker-kits/creative-strategist-v1/helpers/grep-hooks.sh +62 -0
- package/assets/worker-kits/creative-strategist-v1/kit.json +20 -2
- package/assets/worker-kits/creative-strategist-v1/skills/README.md +23 -0
- package/assets/worker-kits/creative-strategist-v1/skills/frame-analysis/SKILL.md +88 -0
- package/assets/worker-kits/creative-strategist-v1/templates/project.md +48 -0
- package/assets/worker-kits/creative-strategist-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/.env.example +53 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/QUICKSTART.md +98 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/.env.example +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/README.md +36 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/settings/integrations/route.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/workspace/route.js +27 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/globals.css +237 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/layout.jsx +14 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/page.jsx +165 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/settings/integrations/page.jsx +134 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/auth/index.js +21 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/env.js +28 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/index.js +178 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/payments/index.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/index.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/postgres.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/provider-managed.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/qstash-kv.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/integrations.js +185 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/portal.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/next.config.js +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package-lock.json +976 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package.json +17 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/postcss.config.mjs +3 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/vercel.json +5 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/NEW-CLIENT.md +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/growthub/brand-kit.md +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/bundles/growthub-agency-portal-starter-v1.json +65 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/adapter-contracts.md +79 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/fork-sync-integration.md +32 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/governed-workspace-primitives.md +182 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/starter-kit-overview.md +30 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vercel-serverless-deployment.md +46 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vite-ui-shell-guide.md +24 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/portal-brief-sample.md +44 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/workspace-sample.md +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/README.md +11 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/kit-standard.md +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/helpers/README.md +49 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +156 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/output/README.md +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/output-standards.md +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/runtime-assumptions.md +15 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/check-deps.sh +20 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/verify-env.mjs +92 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/skills/README.md +55 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/skills.md +133 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/index.html +12 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package-lock.json +1677 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package.json +20 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/serve.mjs +42 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/App.jsx +162 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/app.css +138 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/main.jsx +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/vite.config.js +8 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/agent-contract.md +9 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/client-onboarding-plan.md +56 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-handoff.md +61 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-plan.md +22 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/portal-brief.md +65 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/project.md +55 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/supabase-setup-plan.md +26 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/workspace-brief.md +11 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/validation-checklist.md +32 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/workers/agency-portal-operator/CLAUDE.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +9 -2
- package/assets/worker-kits/growthub-ai-website-cloner-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/SKILL.md +122 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/bundles/growthub-custom-workspace-starter-v1.json +14 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/governed-workspace-primitives.md +182 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/README.md +44 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +16 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/skills/README.md +55 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/project.md +55 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/workers/custom-workspace-operator/CLAUDE.md +24 -2
- package/assets/worker-kits/growthub-email-marketing-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-email-marketing-v1/bundles/growthub-email-marketing-v1.json +9 -2
- package/assets/worker-kits/growthub-email-marketing-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-email-marketing-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-email-marketing-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-email-marketing-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-email-marketing-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-email-marketing-v1/workers/email-marketing-strategist/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-geo-seo-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-geo-seo-v1/bundles/growthub-geo-seo-v1.json +12 -3
- package/assets/worker-kits/growthub-geo-seo-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-geo-seo-v1/kit.json +23 -5
- package/assets/worker-kits/growthub-geo-seo-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-geo-seo-v1/workers/geo-seo-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/bundles/growthub-hyperframes-studio-v1.json +6 -1
- package/assets/worker-kits/growthub-hyperframes-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-hyperframes-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/workers/hyperframes-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/bundles/growthub-marketing-skills-v1.json +12 -3
- package/assets/worker-kits/growthub-marketing-skills-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +23 -5
- package/assets/worker-kits/growthub-marketing-skills-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/workers/marketing-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/bundles/growthub-open-higgsfield-studio-v1.json +9 -2
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/workers/open-higgsfield-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +9 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-postiz-social-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-postiz-social-v1/bundles/growthub-postiz-social-v1.json +9 -2
- package/assets/worker-kits/growthub-postiz-social-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-postiz-social-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +9 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/bundles/growthub-video-use-studio-v1.json +6 -1
- package/assets/worker-kits/growthub-video-use-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-video-use-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/workers/video-use-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-zernio-social-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-zernio-social-v1/bundles/growthub-zernio-social-v1.json +9 -2
- package/assets/worker-kits/growthub-zernio-social-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-zernio-social-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-zernio-social-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-zernio-social-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-zernio-social-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-zernio-social-v1/workers/zernio-social-operator/CLAUDE.md +22 -0
- package/dist/index.js +970 -241
- package/package.json +2 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "growthub-agency-portal-starter-studio",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"preview": "vite preview",
|
|
10
|
+
"serve": "node serve.mjs"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"react": "^18.3.1",
|
|
14
|
+
"react-dom": "^18.3.1"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@vitejs/plugin-react": "^4.3.1",
|
|
18
|
+
"vite": "^5.4.2"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Minimal static server for the built Vite shell.
|
|
3
|
+
// Usage: node serve.mjs [--port 5180]
|
|
4
|
+
import http from "node:http";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const DIST = path.resolve(__dirname, "dist");
|
|
11
|
+
const PORT = Number(process.env.PORT ?? 5180);
|
|
12
|
+
|
|
13
|
+
const mime = {
|
|
14
|
+
".html": "text/html; charset=utf-8",
|
|
15
|
+
".js": "application/javascript; charset=utf-8",
|
|
16
|
+
".css": "text/css; charset=utf-8",
|
|
17
|
+
".svg": "image/svg+xml",
|
|
18
|
+
".json": "application/json; charset=utf-8",
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function serve(req, res) {
|
|
22
|
+
const url = decodeURIComponent(req.url?.split("?")[0] ?? "/");
|
|
23
|
+
const file = url === "/" ? "/index.html" : url;
|
|
24
|
+
const full = path.resolve(DIST, "." + file);
|
|
25
|
+
if (!full.startsWith(DIST)) { res.statusCode = 403; res.end("Forbidden"); return; }
|
|
26
|
+
fs.readFile(full, (err, buf) => {
|
|
27
|
+
if (err) {
|
|
28
|
+
// SPA fallback
|
|
29
|
+
fs.readFile(path.resolve(DIST, "index.html"), (err2, fallback) => {
|
|
30
|
+
if (err2) { res.statusCode = 404; res.end("Not found"); return; }
|
|
31
|
+
res.setHeader("Content-Type", mime[".html"]); res.end(fallback);
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
res.setHeader("Content-Type", mime[path.extname(full)] ?? "application/octet-stream");
|
|
36
|
+
res.end(buf);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
http.createServer(serve).listen(PORT, () => {
|
|
41
|
+
console.log(`[starter-studio] serving ${DIST} on http://localhost:${PORT}`);
|
|
42
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
const capabilities = [
|
|
4
|
+
["Dashboard", "Live agency snapshot", "Revenue, client health, overdue work, and next actions."],
|
|
5
|
+
["Clients", "Profiles and onboarding", "Client records, notes, KPIs, lifecycle state, and contacts."],
|
|
6
|
+
["Pipeline", "Opportunities", "Lead stages, potential value, won/lost state, and follow-up ownership."],
|
|
7
|
+
["Reports", "Performance reviews", "Ad and campaign reporting through pluggable reporting adapters."],
|
|
8
|
+
["Client Results", "Windsor reporting", "Blended Meta, Shopify, GA4, and Google Sheets-backed results."],
|
|
9
|
+
["Settings", "Workspace control", "Branding, adapter selections, deployment metadata, and user preferences."],
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
const adapters = [
|
|
13
|
+
["Persistence", "Postgres-compatible adapter boundary, not bound to one vendor."],
|
|
14
|
+
["Auth", "Local workspace auth or Growthub hosted bridge authority."],
|
|
15
|
+
["Payments", "Replaceable billing adapter for Stripe or explicit project needs."],
|
|
16
|
+
["Integrations", "Growthub MCP bridge, BYO API tokens, and Windsor data pipelines."],
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const quickActions = ["Client onboarding", "Publish report", "Sync Windsor data", "Review open tasks"];
|
|
20
|
+
|
|
21
|
+
export default function App() {
|
|
22
|
+
return (
|
|
23
|
+
<main className="shell">
|
|
24
|
+
<aside className="sidebar">
|
|
25
|
+
<div className="brand">
|
|
26
|
+
<span className="brand-mark">GH</span>
|
|
27
|
+
<span>Agency Portal</span>
|
|
28
|
+
</div>
|
|
29
|
+
<nav className="nav">
|
|
30
|
+
{capabilities.map(([label]) => (
|
|
31
|
+
<a key={label} href={`#${label.toLowerCase().replaceAll(" ", "-")}`}>{label}</a>
|
|
32
|
+
))}
|
|
33
|
+
<a href="#integrations">Integrations</a>
|
|
34
|
+
</nav>
|
|
35
|
+
<div className="sidebar-footer">
|
|
36
|
+
<span className="status-dot" />
|
|
37
|
+
Local Vite shell
|
|
38
|
+
</div>
|
|
39
|
+
</aside>
|
|
40
|
+
|
|
41
|
+
<section className="main">
|
|
42
|
+
<div className="utility-bar">
|
|
43
|
+
<div>
|
|
44
|
+
<strong>Growthub Agency Portal Starter</strong>
|
|
45
|
+
<span>Local-first Vite shell with Vercel app parity and governed worker-kit primitives.</span>
|
|
46
|
+
</div>
|
|
47
|
+
<div className="utility-actions">
|
|
48
|
+
<a href="#integrations">Open integrations</a>
|
|
49
|
+
<span className="pill">worker kit v1</span>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<header className="page-heading">
|
|
54
|
+
<span className="eyebrow">Agency operating system</span>
|
|
55
|
+
<h1>Client work, reporting, and integrations in one governed shell.</h1>
|
|
56
|
+
<p>
|
|
57
|
+
This starter keeps the copied prototype as product direction while the worker kit owns the
|
|
58
|
+
composable adapter model, local Vite workflow, and clean Vercel deployment path.
|
|
59
|
+
</p>
|
|
60
|
+
</header>
|
|
61
|
+
|
|
62
|
+
<section className="hero-grid">
|
|
63
|
+
<article className="hero-card primary">
|
|
64
|
+
<span>Monthly revenue</span>
|
|
65
|
+
<strong>$84.2k</strong>
|
|
66
|
+
<p>MRR, retainers, won pipeline, and invoice state are ready to bind to any supported database adapter.</p>
|
|
67
|
+
</article>
|
|
68
|
+
<article className="hero-card">
|
|
69
|
+
<span>MCP connections</span>
|
|
70
|
+
<strong>9 active</strong>
|
|
71
|
+
<p>Growthub bridge connections can hydrate user-linked providers without hardcoded API sprawl.</p>
|
|
72
|
+
</article>
|
|
73
|
+
<article className="hero-card">
|
|
74
|
+
<span>Windsor data</span>
|
|
75
|
+
<strong>4 sources</strong>
|
|
76
|
+
<p>Meta, Shopify, GA4, and Sheets-backed blended data are modeled as data pipeline objects.</p>
|
|
77
|
+
</article>
|
|
78
|
+
</section>
|
|
79
|
+
|
|
80
|
+
<section className="ops-strip">
|
|
81
|
+
<article>
|
|
82
|
+
<span>01</span>
|
|
83
|
+
<strong>Local Vite</strong>
|
|
84
|
+
<p>Fast local UI loop for the bundled starter.</p>
|
|
85
|
+
</article>
|
|
86
|
+
<article>
|
|
87
|
+
<span>02</span>
|
|
88
|
+
<strong>Vercel app</strong>
|
|
89
|
+
<p>Serverless app route parity for cloud deploy.</p>
|
|
90
|
+
</article>
|
|
91
|
+
<article>
|
|
92
|
+
<span>03</span>
|
|
93
|
+
<strong>Growthub bridge</strong>
|
|
94
|
+
<p>Optional hosted authority for MCP accounts.</p>
|
|
95
|
+
</article>
|
|
96
|
+
<article>
|
|
97
|
+
<span>04</span>
|
|
98
|
+
<strong>BYO keys</strong>
|
|
99
|
+
<p>Explicit credential setup stays composable.</p>
|
|
100
|
+
</article>
|
|
101
|
+
</section>
|
|
102
|
+
|
|
103
|
+
<section className="grid">
|
|
104
|
+
{capabilities.map(([label, metric, description]) => (
|
|
105
|
+
<article className="card" id={label.toLowerCase().replaceAll(" ", "-")} key={label}>
|
|
106
|
+
<span>{metric}</span>
|
|
107
|
+
<h3>{label}</h3>
|
|
108
|
+
<p>{description}</p>
|
|
109
|
+
</article>
|
|
110
|
+
))}
|
|
111
|
+
</section>
|
|
112
|
+
|
|
113
|
+
<section className="adapter">
|
|
114
|
+
{adapters.map(([title, body]) => (
|
|
115
|
+
<article className="card" key={title}>
|
|
116
|
+
<h3>{title}</h3>
|
|
117
|
+
<p>{body}</p>
|
|
118
|
+
</article>
|
|
119
|
+
))}
|
|
120
|
+
</section>
|
|
121
|
+
|
|
122
|
+
<section className="setup-grid" id="integrations" aria-label="Integration setup paths">
|
|
123
|
+
<article>
|
|
124
|
+
<span>Growthub Bridge</span>
|
|
125
|
+
<strong>MCP account authority</strong>
|
|
126
|
+
<p>Use hosted Growthub auth to resolve the user account's available linked connections.</p>
|
|
127
|
+
</article>
|
|
128
|
+
<article>
|
|
129
|
+
<span>BYO Credentials</span>
|
|
130
|
+
<strong>Thin provider adapters</strong>
|
|
131
|
+
<p>Accept explicit API tokens without coupling the kit to one data store or integration vendor.</p>
|
|
132
|
+
</article>
|
|
133
|
+
<article>
|
|
134
|
+
<span>Windsor AI</span>
|
|
135
|
+
<strong>Data pipeline object</strong>
|
|
136
|
+
<p>Model Windsor, Google Sheets blends, GA4, Shopify, and Meta as reporting data sources.</p>
|
|
137
|
+
</article>
|
|
138
|
+
</section>
|
|
139
|
+
|
|
140
|
+
<section className="results-panel">
|
|
141
|
+
<div>
|
|
142
|
+
<span className="eyebrow">Client results</span>
|
|
143
|
+
<h2>Windsor AI is a first-class data source path.</h2>
|
|
144
|
+
<p>
|
|
145
|
+
The kit models Windsor alongside Growthub bridge and BYO tokens, so reporting can use
|
|
146
|
+
blended Sheets pipelines without coupling the worker kit to one database or vendor.
|
|
147
|
+
</p>
|
|
148
|
+
</div>
|
|
149
|
+
<div className="results-metrics">
|
|
150
|
+
<div><strong>Meta</strong><span>Ads and social source</span></div>
|
|
151
|
+
<div><strong>Shopify</strong><span>Commerce source</span></div>
|
|
152
|
+
<div><strong>GA4</strong><span>Analytics source</span></div>
|
|
153
|
+
</div>
|
|
154
|
+
</section>
|
|
155
|
+
</section>
|
|
156
|
+
|
|
157
|
+
<div className="quick-actions" aria-label="Quick actions">
|
|
158
|
+
{quickActions.map((action) => <button key={action}>{action}</button>)}
|
|
159
|
+
</div>
|
|
160
|
+
</main>
|
|
161
|
+
);
|
|
162
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: dark;
|
|
3
|
+
--bg: #080b12;
|
|
4
|
+
--sidebar: #0d1118;
|
|
5
|
+
--panel: #111827;
|
|
6
|
+
--ink: #f7fafc;
|
|
7
|
+
--muted: #93a3b8;
|
|
8
|
+
--line: #223047;
|
|
9
|
+
--accent: #38bdf8;
|
|
10
|
+
--good: #22c55e;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
* { box-sizing: border-box; }
|
|
14
|
+
html { scroll-behavior: smooth; }
|
|
15
|
+
body {
|
|
16
|
+
margin: 0;
|
|
17
|
+
background: var(--bg);
|
|
18
|
+
color: var(--ink);
|
|
19
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
20
|
+
}
|
|
21
|
+
a { color: inherit; }
|
|
22
|
+
.shell {
|
|
23
|
+
min-height: 100vh;
|
|
24
|
+
display: grid;
|
|
25
|
+
grid-template-columns: 232px minmax(0, 1fr);
|
|
26
|
+
background: radial-gradient(circle at top right, rgba(56, 189, 248, 0.12), transparent 360px), var(--bg);
|
|
27
|
+
}
|
|
28
|
+
.sidebar {
|
|
29
|
+
position: sticky;
|
|
30
|
+
top: 0;
|
|
31
|
+
height: 100vh;
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
gap: 22px;
|
|
35
|
+
background: rgba(13, 17, 24, 0.96);
|
|
36
|
+
border-right: 1px solid var(--line);
|
|
37
|
+
padding: 22px 16px;
|
|
38
|
+
}
|
|
39
|
+
.brand { display: flex; align-items: center; gap: 10px; font-weight: 800; }
|
|
40
|
+
.brand-mark {
|
|
41
|
+
width: 34px;
|
|
42
|
+
height: 34px;
|
|
43
|
+
display: grid;
|
|
44
|
+
place-items: center;
|
|
45
|
+
border-radius: 8px;
|
|
46
|
+
background: var(--accent);
|
|
47
|
+
color: #06111d;
|
|
48
|
+
font-size: 13px;
|
|
49
|
+
font-weight: 900;
|
|
50
|
+
}
|
|
51
|
+
.nav { display: grid; gap: 5px; }
|
|
52
|
+
.nav a {
|
|
53
|
+
color: #c6d1e1;
|
|
54
|
+
text-decoration: none;
|
|
55
|
+
padding: 9px 10px;
|
|
56
|
+
border-radius: 7px;
|
|
57
|
+
font-size: 14px;
|
|
58
|
+
}
|
|
59
|
+
.nav a:hover { background: #172133; color: white; }
|
|
60
|
+
.sidebar-footer { margin-top: auto; display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 13px; }
|
|
61
|
+
.status-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--good); box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.12); }
|
|
62
|
+
.main { width: min(100%, 1180px); padding: 30px; }
|
|
63
|
+
.utility-bar {
|
|
64
|
+
display: flex;
|
|
65
|
+
justify-content: space-between;
|
|
66
|
+
gap: 16px;
|
|
67
|
+
align-items: center;
|
|
68
|
+
margin-bottom: 20px;
|
|
69
|
+
padding: 12px 14px;
|
|
70
|
+
border: 1px solid var(--line);
|
|
71
|
+
border-radius: 8px;
|
|
72
|
+
background: rgba(17, 24, 39, 0.82);
|
|
73
|
+
}
|
|
74
|
+
.utility-bar strong { display: block; font-size: 14px; }
|
|
75
|
+
.utility-bar span, .page-heading p, .card p, .hero-card p, .ops-strip p, .results-panel p { color: var(--muted); line-height: 1.5; }
|
|
76
|
+
.utility-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
|
|
77
|
+
.utility-actions a, .pill {
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
min-height: 28px;
|
|
81
|
+
border: 1px solid var(--line);
|
|
82
|
+
border-radius: 999px;
|
|
83
|
+
padding: 5px 10px;
|
|
84
|
+
background: #0c1320;
|
|
85
|
+
color: #c9d7e8;
|
|
86
|
+
text-decoration: none;
|
|
87
|
+
font-size: 12px;
|
|
88
|
+
}
|
|
89
|
+
.page-heading { margin-bottom: 22px; }
|
|
90
|
+
.page-heading h1 { margin: 4px 0 8px; font-size: clamp(32px, 5vw, 58px); line-height: 0.98; letter-spacing: 0; }
|
|
91
|
+
.page-heading p { max-width: 780px; margin: 0; }
|
|
92
|
+
.eyebrow { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.12em; }
|
|
93
|
+
.hero-grid { display: grid; grid-template-columns: 1.2fr 0.9fr 0.9fr; gap: 14px; margin-bottom: 16px; }
|
|
94
|
+
.hero-card, .card, .results-panel {
|
|
95
|
+
border: 1px solid var(--line);
|
|
96
|
+
border-radius: 8px;
|
|
97
|
+
background: rgba(17, 24, 39, 0.9);
|
|
98
|
+
}
|
|
99
|
+
.hero-card { min-height: 188px; padding: 18px; }
|
|
100
|
+
.hero-card.primary { background: linear-gradient(135deg, rgba(56, 189, 248, 0.18), rgba(17, 24, 39, 0.95)); }
|
|
101
|
+
.hero-card span, .card span, .ops-strip span { color: var(--accent); font-size: 12px; font-weight: 800; text-transform: uppercase; }
|
|
102
|
+
.hero-card strong { display: block; margin-top: 10px; font-size: 34px; line-height: 1; }
|
|
103
|
+
.ops-strip, .setup-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; }
|
|
104
|
+
.setup-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 18px; }
|
|
105
|
+
.ops-strip article, .setup-grid article { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(13, 20, 32, 0.88); }
|
|
106
|
+
.ops-strip strong, .setup-grid strong { display: block; margin: 7px 0; font-size: 14px; }
|
|
107
|
+
.grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
|
|
108
|
+
.card { min-height: 138px; padding: 16px; }
|
|
109
|
+
.card h3 { margin: 7px 0 8px; font-size: 15px; }
|
|
110
|
+
.adapter { margin-top: 18px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
|
|
111
|
+
.adapter .card { min-height: auto; }
|
|
112
|
+
.results-panel { margin-top: 18px; padding: 18px; display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
|
|
113
|
+
.results-panel h2 { margin: 0 0 8px; }
|
|
114
|
+
.results-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
|
|
115
|
+
.results-metrics span { display: block; color: var(--muted); font-size: 12px; }
|
|
116
|
+
.quick-actions { position: fixed; right: 20px; bottom: 20px; display: grid; gap: 8px; width: 190px; }
|
|
117
|
+
.quick-actions button {
|
|
118
|
+
border: 1px solid var(--line);
|
|
119
|
+
border-radius: 8px;
|
|
120
|
+
padding: 10px 12px;
|
|
121
|
+
background: #0d1420;
|
|
122
|
+
color: var(--ink);
|
|
123
|
+
text-align: left;
|
|
124
|
+
font: inherit;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@media (max-width: 1020px) {
|
|
128
|
+
.shell { grid-template-columns: 1fr; }
|
|
129
|
+
.sidebar { position: static; height: auto; }
|
|
130
|
+
.hero-grid, .grid, .adapter, .ops-strip, .setup-grid, .results-panel, .results-metrics { grid-template-columns: 1fr; }
|
|
131
|
+
.quick-actions { position: static; width: auto; margin: 20px 30px; }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@media (max-width: 720px) {
|
|
135
|
+
.main { padding: 20px; }
|
|
136
|
+
.utility-bar { display: block; }
|
|
137
|
+
.utility-actions { margin-top: 10px; }
|
|
138
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Agent Contract — Template
|
|
2
|
+
|
|
3
|
+
Used when layering a custom agent on top of this workspace. Keep this narrow — the Self-Healing Fork Sync Agent enforces the broader contract; this template is for workspace-specific rules.
|
|
4
|
+
|
|
5
|
+
- Agent ID:
|
|
6
|
+
- Scope (which files it may read / write):
|
|
7
|
+
- Tools it may invoke:
|
|
8
|
+
- Escalation policy (when to pause for user confirmation):
|
|
9
|
+
- Trace requirements (which events must be appended):
|
package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/client-onboarding-plan.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Client Onboarding Plan
|
|
2
|
+
|
|
3
|
+
Client:
|
|
4
|
+
Portal project:
|
|
5
|
+
Primary operator:
|
|
6
|
+
|
|
7
|
+
## Step 1 — Fork And Validate
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
growthub kit download growthub-agency-portal-starter-v1 --out ./agency-portal-workspace --yes
|
|
11
|
+
growthub kit fork register ./agency-portal-workspace/growthub-agent-worker-kit-agency-portal-starter-v1
|
|
12
|
+
growthub kit fork status <fork-id>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Step 2 — Local Setup
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
bash setup/check-deps.sh
|
|
19
|
+
node setup/verify-env.mjs
|
|
20
|
+
cd studio && npm install && npm run build
|
|
21
|
+
cd ../apps/agency-portal && npm install && npm run build
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Step 3 — Integration Authority
|
|
25
|
+
|
|
26
|
+
Choose one:
|
|
27
|
+
|
|
28
|
+
- `growthub-bridge`: use hosted Growthub GH app MCP connections.
|
|
29
|
+
- `byo-api-key`: configure `AGENCY_PORTAL_BYO_CONNECTIONS_JSON` and named provider env vars.
|
|
30
|
+
- `static`: use starter catalog only for local planning.
|
|
31
|
+
|
|
32
|
+
## Step 4 — Data Pipeline Objects
|
|
33
|
+
|
|
34
|
+
- Windsor AI:
|
|
35
|
+
- Google Sheets blended data:
|
|
36
|
+
- Google Analytics:
|
|
37
|
+
- Shopify:
|
|
38
|
+
- Meta Facebook/Instagram:
|
|
39
|
+
|
|
40
|
+
## Step 5 — MCP Connection Integrations
|
|
41
|
+
|
|
42
|
+
- Asana:
|
|
43
|
+
- Slack:
|
|
44
|
+
- GoHighLevel:
|
|
45
|
+
- Google Drive:
|
|
46
|
+
- Notion:
|
|
47
|
+
|
|
48
|
+
## Step 6 — Vercel + GitHub
|
|
49
|
+
|
|
50
|
+
- GitHub repo:
|
|
51
|
+
- Vercel project:
|
|
52
|
+
- Root directory: `apps/agency-portal`
|
|
53
|
+
- Build command: `npm run build`
|
|
54
|
+
- Required env copied:
|
|
55
|
+
- Preview URL:
|
|
56
|
+
- Production URL:
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Deployment Handoff
|
|
2
|
+
|
|
3
|
+
Client:
|
|
4
|
+
Project:
|
|
5
|
+
Fork id:
|
|
6
|
+
GitHub repo:
|
|
7
|
+
Vercel project:
|
|
8
|
+
|
|
9
|
+
## Validated Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
node setup/verify-env.mjs
|
|
13
|
+
cd studio && npm run build
|
|
14
|
+
cd apps/agency-portal && npm run build
|
|
15
|
+
growthub kit fork status <fork-id>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Vercel Settings
|
|
19
|
+
|
|
20
|
+
- Root directory: `apps/agency-portal`
|
|
21
|
+
- Install command: `npm install`
|
|
22
|
+
- Build command: `npm run build`
|
|
23
|
+
- Framework preset: Next.js
|
|
24
|
+
|
|
25
|
+
## Environment
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
AGENCY_PORTAL_DEPLOY_TARGET=vercel
|
|
29
|
+
AGENCY_PORTAL_DATA_ADAPTER=
|
|
30
|
+
AGENCY_PORTAL_AUTH_ADAPTER=
|
|
31
|
+
AGENCY_PORTAL_PAYMENT_ADAPTER=
|
|
32
|
+
AGENCY_PORTAL_REPORTING_ADAPTER=
|
|
33
|
+
AGENCY_PORTAL_INTEGRATION_ADAPTER=
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Growthub bridge env, if used:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
GROWTHUB_BRIDGE_BASE_URL=
|
|
40
|
+
GROWTHUB_BRIDGE_INTEGRATIONS_PATH=/api/mcp/accounts
|
|
41
|
+
GROWTHUB_BRIDGE_ACCESS_TOKEN=<set in Vercel only>
|
|
42
|
+
GROWTHUB_BRIDGE_USER_ID=<set when the selected bridge endpoint requires explicit user scoping>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
BYO env, if used:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
AGENCY_PORTAL_BYO_CONNECTIONS_JSON=<set in Vercel only>
|
|
49
|
+
WINDSOR_API_KEY=<set in Vercel only when BYO Windsor is used>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Integration Validation
|
|
53
|
+
|
|
54
|
+
- `/settings/integrations` loaded:
|
|
55
|
+
- Data pipeline objects connected:
|
|
56
|
+
- MCP connection integrations connected:
|
|
57
|
+
- Active badges match Growthub bridge or BYO metadata:
|
|
58
|
+
|
|
59
|
+
## Handoff Notes
|
|
60
|
+
|
|
61
|
+
Record any remaining manual steps, provider-side OAuth actions, or client account permissions.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Deployment Plan — Template
|
|
2
|
+
|
|
3
|
+
A deployment plan is the final artifact of a workspace run. It must be:
|
|
4
|
+
|
|
5
|
+
1. Human-reviewable (Markdown prose).
|
|
6
|
+
2. Machine-executable (the JSON plan block below must be shape-compatible with the bundle descriptor).
|
|
7
|
+
|
|
8
|
+
## Human summary
|
|
9
|
+
|
|
10
|
+
Describe the plan in 3–5 sentences.
|
|
11
|
+
|
|
12
|
+
## Machine plan
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"kit": "growthub-agency-portal-starter-v1",
|
|
17
|
+
"forkId": "<filled at runtime>",
|
|
18
|
+
"actions": [
|
|
19
|
+
{ "type": "deploy", "target": "<env>" }
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Portal Brief
|
|
2
|
+
|
|
3
|
+
Client:
|
|
4
|
+
Project slug:
|
|
5
|
+
Owner:
|
|
6
|
+
Date:
|
|
7
|
+
|
|
8
|
+
## Desired Outcome
|
|
9
|
+
|
|
10
|
+
Describe the agency portal outcome in plain language.
|
|
11
|
+
|
|
12
|
+
## Runtime Surfaces
|
|
13
|
+
|
|
14
|
+
- Local-first operator shell: `studio/`
|
|
15
|
+
- Vercel app payload: `apps/agency-portal/`
|
|
16
|
+
- Vercel root directory: `apps/agency-portal`
|
|
17
|
+
|
|
18
|
+
## Adapter Decisions
|
|
19
|
+
|
|
20
|
+
- `AGENCY_PORTAL_DATA_ADAPTER`:
|
|
21
|
+
- `AGENCY_PORTAL_AUTH_ADAPTER`:
|
|
22
|
+
- `AGENCY_PORTAL_PAYMENT_ADAPTER`:
|
|
23
|
+
- `AGENCY_PORTAL_REPORTING_ADAPTER`:
|
|
24
|
+
- `AGENCY_PORTAL_INTEGRATION_ADAPTER`:
|
|
25
|
+
|
|
26
|
+
## Data Pipeline Objects
|
|
27
|
+
|
|
28
|
+
Mark each as `connected`, `available`, or `not used`.
|
|
29
|
+
|
|
30
|
+
- Windsor AI:
|
|
31
|
+
- Google Sheets blended data:
|
|
32
|
+
- Google Analytics:
|
|
33
|
+
- Shopify:
|
|
34
|
+
- Meta Facebook/Instagram:
|
|
35
|
+
|
|
36
|
+
## MCP Connection Integrations
|
|
37
|
+
|
|
38
|
+
Mark each as `connected`, `available`, or `not used`.
|
|
39
|
+
|
|
40
|
+
- Asana:
|
|
41
|
+
- Slack:
|
|
42
|
+
- GoHighLevel:
|
|
43
|
+
- Google Drive:
|
|
44
|
+
- Notion:
|
|
45
|
+
|
|
46
|
+
## Growthub Bridge Or BYO Setup
|
|
47
|
+
|
|
48
|
+
Bridge fields:
|
|
49
|
+
|
|
50
|
+
- `GROWTHUB_BRIDGE_BASE_URL`:
|
|
51
|
+
- `GROWTHUB_BRIDGE_INTEGRATIONS_PATH`:
|
|
52
|
+
- `GROWTHUB_BRIDGE_ACCESS_TOKEN`: set in env, never written here
|
|
53
|
+
|
|
54
|
+
BYO fields:
|
|
55
|
+
|
|
56
|
+
- `AGENCY_PORTAL_BYO_CONNECTIONS_JSON`: set in env, never write raw secrets here
|
|
57
|
+
- Named provider env vars:
|
|
58
|
+
|
|
59
|
+
## Acceptance Criteria
|
|
60
|
+
|
|
61
|
+
- Local Vite shell builds.
|
|
62
|
+
- Next/Vercel app builds.
|
|
63
|
+
- `/settings/integrations` renders a dedicated sidebar page.
|
|
64
|
+
- Active bridge/BYO connection rows show as connected.
|
|
65
|
+
- Deployment handoff is complete.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
# .growthub-fork/project.md — session memory primitive (v1)
|
|
3
|
+
#
|
|
4
|
+
# This file is written by `growthub starter init` / `import-repo` / `import-skill`
|
|
5
|
+
# (and by `growthub skills session init` inside an existing fork). It is the
|
|
6
|
+
# human-readable continuity surface across agent sessions — it sits alongside
|
|
7
|
+
# the machine-readable `trace.jsonl` without duplicating it.
|
|
8
|
+
#
|
|
9
|
+
# Rules:
|
|
10
|
+
# - Append-only. Never delete a dated entry; cross it out instead.
|
|
11
|
+
# - Every material change to the fork gets a paragraph here AND a typed event
|
|
12
|
+
# in `.growthub-fork/trace.jsonl`. The two are kept in sync.
|
|
13
|
+
# - Approvals, rejections, and self-eval outcomes all land here.
|
|
14
|
+
#
|
|
15
|
+
# Replaceable tokens (seeded at init time):
|
|
16
|
+
# {{KIT_ID}} {{FORK_ID}} {{STARTED_AT}} {{SOURCE}} {{SOURCE_REF}}
|
|
17
|
+
|
|
18
|
+
kitId: "{{KIT_ID}}"
|
|
19
|
+
forkId: "{{FORK_ID}}"
|
|
20
|
+
startedAt: "{{STARTED_AT}}"
|
|
21
|
+
source: "{{SOURCE}}"
|
|
22
|
+
sourceRef: "{{SOURCE_REF}}"
|
|
23
|
+
skillManifestVersion: 1
|
|
24
|
+
approvals: []
|
|
25
|
+
selfEvalHistory: []
|
|
26
|
+
subSkillRuns: []
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Project journal — fork `{{FORK_ID}}`
|
|
30
|
+
|
|
31
|
+
Baseline primitive: `{{KIT_ID}}`. Seeded at `{{STARTED_AT}}` from `{{SOURCE}}` (`{{SOURCE_REF}}`).
|
|
32
|
+
|
|
33
|
+
This is your cross-session continuity surface. Return here at the start of every session; append to it at the end of every session and at every self-eval boundary.
|
|
34
|
+
|
|
35
|
+
## How to use this file
|
|
36
|
+
|
|
37
|
+
1. **Session start.** Read the last 3 entries in the "Session log" below + tail 20 events in `.growthub-fork/trace.jsonl`. State what you plan to do.
|
|
38
|
+
2. **Material change.** Record the change as a dated bullet in "Session log" (what, why, outcome). Simultaneously append a typed event to `trace.jsonl` via the Fork Sync Agent — never bypass.
|
|
39
|
+
3. **Approval boundary.** Add a row to `approvals` in the frontmatter above (include the operator's decision verbatim).
|
|
40
|
+
4. **Self-eval boundary.** Append to `selfEvalHistory` in the frontmatter: `attempt`, `criteria`, `outcome`, `notes`. Enforce `maxRetries: 3` from the active skill's frontmatter.
|
|
41
|
+
5. **Sub-skill spawn.** Append to `subSkillRuns` in the frontmatter: `subSkill`, `startedAt`, `result`.
|
|
42
|
+
|
|
43
|
+
## Session log
|
|
44
|
+
|
|
45
|
+
<!-- Append entries below, newest at the bottom. Format:
|
|
46
|
+
|
|
47
|
+
### {{YYYY-MM-DD HH:mm UTC}} · {{skill-slug}}
|
|
48
|
+
- **Plan.** What you intend to do this session.
|
|
49
|
+
- **Changes.** What you actually did (material changes only; each must correspond to a trace event).
|
|
50
|
+
- **Outcome.** Pass / fail / parked. Reference the self-eval criteria you checked.
|
|
51
|
+
- **Next.** What the next session should pick up.
|
|
52
|
+
|
|
53
|
+
-->
|
|
54
|
+
|
|
55
|
+
_No sessions recorded yet. This block is populated as the fork is operated._
|