דלגו לתוכן

Projects, Surfaces, and Portfolios

תוכן זה אינו זמין עדיין בשפה שלך.

Agent Analytics uses one hierarchy for product-system understanding:

Portfolio → Projects → Surfaces

Start with this model before you choose an install path, create extra projects, or ask an agent to read analytics across a company account.

Portfolio connects separate projects, and each project contains its own surfaces.

A portfolio is the broader product or company growth system. It connects related projects so your agent can reason about shared milestones, project roles, surface roles, shared goals, and cross-project identity when configured within intentionally grouped portfolio projects.

A portfolio does not collapse everything into one analytics blob. Each project still keeps its own local truth: activation, retention, lifecycle, releases, experiments, and goals remain project-local; portfolio-level questions compare or relate that local truth instead of replacing it.

A project is the unit of product learning. It owns the events, activation goal, retention behavior, lifecycle, releases, experiments, and local readouts for one product or product loop.

Create a separate project when something has its own learning loop or needs its own activation, retention, lifecycle, release, experiment, or local-goal readout.

A surface is a place where users encounter or use a project. Surfaces live inside projects.

A project can have many surfaces, such as:

  • app pages
  • marketing pages
  • docs
  • blog or content pages
  • pricing pages
  • signup and onboarding flows
  • local preview URLs
  • preview deployments
  • mobile clients
  • launch pages
  • subdomains

Do not create a separate project just because a product has multiple surfaces. Keep surfaces together when they serve the same product learning loop.

App, docs, pricing, mobile, localhost, and preview URLs shown as surfaces inside one project.

A domain, subdomain, localhost address, preview deployment, or URL is an address for a surface. It is not the product model by itself.

For example, app.example.com, docs.example.com, www.example.com/pricing, a mobile deep link, and localhost:3000 can all point at surfaces. The question is not “which domain is this?” The question is “which project does this surface belong to?”

Imagine one company with a SaaS product and three related growth properties. In Agent Analytics, that can be modeled as one portfolio with several projects inside it:

PortfolioProjectExample surfacesWhy it is a project
ExampleCo growth portfolioMain SaaSApp, marketing site, docs, pricing, onboarding, local previewIt owns the core product activation, retention, releases, and experiments.
ExampleCo growth portfolioFree ROI calculatorCalculator page, results page, lead capture, embed, preview URLIt has its own acquisition loop, completion goal, lead handoff, and experiment readout.
ExampleCo growth portfolioNewsletter/content siteArticles, archive, signup page, referral page, product handoff pagesIt has its own content growth loop and local goals. Native email-service-provider opens/clicks are not assumed unless you explicitly send those events.
ExampleCo growth portfolioMobile companioniOS app, Android app, app landing page, deep links, beta previewIt may have its own lifecycle, release cadence, retention behavior, and product readout.

The portfolio connects these projects because they are part of one product-system story. The projects remain separate because each has its own learning loop.

Do not split a product into separate projects just because it uses multiple subdomains. Subdomains are deployment and routing details first. They should remain surfaces inside one project by default when they support the same product learning loop.

For example, keep these as surfaces of the same Main SaaS project when they share the SaaS activation, retention, lifecycle, releases, experiments, and readout:

  • app.example.com for the product app
  • docs.example.com for product education and activation support
  • blog.example.com for content that feeds the same product funnel
  • www.example.com or marketing.example.com for marketing, pricing, signup, and onboarding

The question is not “does this have its own subdomain?” The question is “does this need its own product-learning container?”

When something is a surface instead of a project

Section titled “When something is a surface instead of a project”

Keep something as a surface inside an existing project when it serves the same product learning loop and should be read with that project’s local truth.

Common examples:

  • App, docs, blog, marketing, pricing, signup, and onboarding subdomains that all support the same SaaS activation and conversion loop.
  • A small calculator, checklist, or feature page on the main marketing site that feeds the same signup funnel and does not need its own local readout.
  • A mobile app that is simply another client for the same product, with the same activation and retention definitions as the web app.
  • A newsletter signup page, article archive, referral page, or product handoff surface that is part of the same product funnel.
  • A localhost URL or preview deployment used only to set up, test, or QA tracking for the intended project.

Surfaces can be permanent, temporary, public, private, web, mobile, or local. They still live inside projects.

When a surface should become a separate project

Section titled “When a surface should become a separate project”

Create a separate project when the work needs its own product-learning container.

Good signals include:

  • a distinct activation goal
  • a distinct retention pattern
  • its own lifecycle
  • its own release cadence
  • separate experiments or readouts
  • a local goal that should not be averaged into the main product
  • a separate acquisition loop, such as a free tool or newsletter/content site
  • a mobile companion that behaves like a product, not just a client surface

If one or more of those signals materially changes how the team should read the product, promote the surface to its own project and connect it to related projects through a portfolio when the broader product system should be understood together.

A highlighted surface is promoted into a separate project, with both projects connected by a portfolio.

Treat a mobile app as a surface when it is another way to use the same product and shares the same activation, retention, lifecycle, and product readout as the web app. For example, an iOS client and Android client can be surfaces of the Main SaaS project when they are client entry points for the same account workflow.

Treat a mobile app as its own project when it has its own activation, retention behavior, lifecycle, release cadence, experiments, or local goals. A mobile companion with app-specific onboarding, push-notification retention, beta cohorts, store releases, and mobile-specific readouts should usually be its own project inside the portfolio.

Treat a free tool as a surface when it is a small part of the main product funnel. A calculator section on a pricing page can stay inside the Main SaaS project when the only goal is to help users continue to signup.

Treat a free tool as its own project when the team needs to measure the tool as a product loop: tool starts, completions, result views, lead captures, embeds, referrals, handoffs to the paid product, and tool-specific experiments. In that case, connect the Free Tool project to the Main SaaS project through a portfolio instead of merging their local goals.

Newsletter/content site: surface or project

Section titled “Newsletter/content site: surface or project”

Treat newsletter/content pages as surfaces when they support the same product loop: a newsletter signup page, article archive, referral page, or product handoff surface can live inside the Main SaaS project when the readout is the main product funnel.

Treat a newsletter/content site as its own project when it has its own content growth loop, acquisition goals, referral mechanics, publication cadence, experiments, or local readout. Track the web and event surfaces you instrument, such as signup pages, archive pages, referral pages, and product handoff pages. Agent Analytics does not automatically track native email-service-provider opens or clicks unless you explicitly send those events.

Treat localhost, local network addresses, branch previews, staging links, and deploy-preview URLs as setup or testing surfaces. They help you install, verify, and QA tracking for the intended project, but they are not canonical project identities.

Do not create a new canonical project for every preview URL. If a preview URL is ambiguous, ask which project and surface it is testing, then map the setup work back to that project.

Use a portfolio when related projects need to be understood together without losing project-local truth.

In the CLI/API reference, identity portfolios define the membership and lookup boundary, and portfolio context stores interpretation notes. This guide uses portfolio as the product-system model those features support.

A portfolio can help your agent answer questions like:

  • Which project is driving the best handoff into the main SaaS product?
  • Did a shared launch milestone affect multiple projects?
  • Which surface roles belong to acquisition, activation, education, or retention?
  • How do intentionally grouped projects relate when cross-project identity is configured?

Portfolio-level reasoning should stay intentional. Agent Analytics should not imply that identity automatically merges across every project in an account. Cross-project identity is a portfolio capability only when configured and only within the projects you intentionally group together.

Before setup or analytics reads, the user or agent should classify the target in this order:

  1. Name the broader system. Is this one product, or a company growth system with related projects that should be connected by a portfolio?
  2. Find the project-local learning loop. Which product owns the activation, retention, lifecycle, releases, experiments, and local goals?
  3. Check whether the target is only a surface. Is it an app, docs, blog, marketing page, mobile client, free-tool page, newsletter signup page, archive, referral page, product handoff surface, localhost URL, preview deployment, or subdomain that supports that same project?
  4. Promote only when needed. Does it have its own activation, retention, lifecycle, release cadence, local goal, acquisition loop, experiment plan, or readout? If yes, make it a separate project.
  5. Connect related projects intentionally. If separate projects belong to one company or product-system story, put them in a portfolio. Do not use the portfolio to overwrite each project’s local truth.
  6. Handle identity carefully. Cross-project identity is available only within intentionally grouped portfolio projects when configured. Do not assume automatic identity merging across every project in an account.
  7. Map URLs last. Which domain, subdomain, path, mobile deep link, local address, or deployment URL currently points to the surface?

If a URL is ambiguous, ask which project and surface it belongs to. Do not treat the raw domain as the project identity, and do not fail just because a URL is local, temporary, or different from the primary setup URL.