Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/beatgeo-branded-acceptance.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"@workspace/web": patch
---

Unify BeatGeo branding and setup navigation, simplify answer evidence, and redirect closed local registration safely to sign-in.
Unify BeatGEO branding and setup navigation, simplify answer evidence, and redirect closed local registration safely to sign-in.
2 changes: 1 addition & 1 deletion .changeset/beatgeo-mvp.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
"@workspace/deployment": patch
---

Present the self-hosted product as BeatGeo, remove inherited commercial and default tracking destinations, and retain legacy encrypted credentials.
Present the self-hosted product as BeatGEO, remove inherited commercial and default tracking destinations, and retain legacy encrypted credentials.
12 changes: 12 additions & 0 deletions .changeset/beatgeo-product-name.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
"@workspace/web": patch
"@workspace/config": patch
"@workspace/og": patch
"@workspace/ui": patch
"@workspace/deployment": patch
"@workspace/lib": patch
"@workspace/api-spec": patch
"@beatapi/geo-cli": patch
---

Use BeatGEO consistently across the product, setup, reports, and public documentation.
2 changes: 1 addition & 1 deletion .changeset/support-chat-in-header.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"@workspace/web": patch
---

Support chat on BeatGeo Cloud now opens from a button in the header instead of a floating bubble that covered page controls.
Support chat on BeatGEO Cloud now opens from a button in the header instead of a floating bubble that covered page controls.
2 changes: 1 addition & 1 deletion .claude/skills/add-changeset/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ List only the packages affected. Default to `patch` unless the user asks for a d
- Plain text — no headers, bold, italics, or newlines inside the description. Inline `code` with single backticks and links are fine when genuinely useful.
- End every sentence with a full stop.
- Past tense for what the PR did: "Added", "Fixed", "Changed".
- Present tense for BeatGeo's behavior: "BeatGeo now supports…", "{feature} now…".
- Present tense for BeatGEO's behavior: "BeatGEO now supports…", "{feature} now…".

Check existing files in `.changeset/` or recent `CHANGELOG.md` entries for examples.
4 changes: 2 additions & 2 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "beatgeo",
"owner": {
"name": "BeatGeo"
"name": "BeatGEO"
},
"metadata": {
"description": "Official BeatGeo plugins for Cursor"
"description": "Official BeatGEO plugins for Cursor"
},
"plugins": [
{
Expand Down
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# Sponsorship is not configured for BeatGeo.
# Sponsorship is not configured for BeatGEO.
2 changes: 1 addition & 1 deletion .github/blog-agent/discover.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const DEFAULT_LOOKBACK_DAYS = 7;
const DEFAULT_MAX_CANDIDATES = 60;
const REQUEST_TIMEOUT_MS = 30_000;
const OXYLABS_TIMEOUT_MS = 180_000;
const USER_AGENT = "BeatGeo editorial research bot (+https://github.com/BeatAPI/BeatGeo)";
const USER_AGENT = "BeatGEO editorial research bot (+https://github.com/BeatAPI/BeatGEO)";

const NEWS_QUERIES = [
'"answer engine optimization" OR "generative engine optimization"',
Expand Down
2 changes: 1 addition & 1 deletion .github/contributors.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# BeatGeo does not require the upstream CLA. Contributor history is preserved in Git.
# BeatGEO does not require the upstream CLA. Contributor history is preserved in Git.
2 changes: 1 addition & 1 deletion .github/upstream-workflows/daily-blog-draft.yaml.disabled
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
id-token: write
pull-requests: write
steps:
- name: Checkout BeatGeo
- name: Checkout BeatGEO
uses: actions/checkout@v7
with:
fetch-depth: 1
Expand Down
2 changes: 1 addition & 1 deletion .github/upstream-workflows/e2e.yaml.disabled
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ jobs:
STRIPE_SECRET_KEY: sk_test_ci
STRIPE_WEBHOOK_SECRET: whsec_ci
RESEND_API_KEY: re_ci
RESEND_FROM_EMAIL: BeatGeo <ci@example.com>
RESEND_FROM_EMAIL: BeatGEO <ci@example.com>
GOOGLE_CLIENT_ID: ci
GOOGLE_CLIENT_SECRET: ci
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Check BeatGeo
name: Check BeatGEO
on:
push:
branches: [main]
Expand Down
2 changes: 1 addition & 1 deletion .hey-api/readme/auth.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Get an API key from the BeatGeo dashboard, under **Organization Settings → API Keys**.
Get an API key from the BeatGEO dashboard, under **Organization Settings → API Keys**.

{{body}}
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# BeatGeo fork notes
# BeatGEO fork notes

This is BeatAPI's independent BeatGeo product based on the MIT-licensed Elmo codebase. Product naming is BeatGeo; GitHub is BeatAPI/BeatGeo. Preserve upstream copyright and attribution. `apps/browser-lab` is the local real-browser experiment; `.beat-geo`, legacy `.open-profound`, and all credentials/raw account evidence must remain untracked. Do not activate upstream publishing, content automation or deployment workflows. Distinguish real UI observations from API simulations and unfinished runs from missing mentions.
This is BeatAPI's independent BeatGEO product based on the MIT-licensed Elmo codebase. Product naming is BeatGEO; GitHub is BeatAPI/BeatGEO. Preserve upstream copyright and attribution. `apps/browser-lab` is the local real-browser experiment; `.beat-geo`, legacy `.open-profound`, and all credentials/raw account evidence must remain untracked. Do not activate upstream publishing, content automation or deployment workflows. Distinguish real UI observations from API simulations and unfinished runs from missing mentions.

The upstream contributor instructions below continue to apply to the inherited workspace.

# AGENTS.md

## What this is

BeatGeo is an open-source AI visibility platform (Answer Engine Optimization): it tracks how AI answer engines like ChatGPT, Claude, Perplexity, Gemini, and Google AI Overviews mention, cite, and describe brands. It is a **pnpm + Turborepo monorepo** on **Node.js 24** (enforced via `engines`), **TypeScript**, and **PostgreSQL**.
BeatGEO is an open-source AI visibility platform (Answer Engine Optimization): it tracks how AI answer engines like ChatGPT, Claude, Perplexity, Gemini, and Google AI Overviews mention, cite, and describe brands. It is a **pnpm + Turborepo monorepo** on **Node.js 24** (enforced via `engines`), **TypeScript**, and **PostgreSQL**.

- `apps/web` — product dashboard (TanStack Start + Vite, port 3000)
- `apps/worker` — pg-boss background jobs (AI evaluations, citation tracking, reports)
Expand Down
6 changes: 3 additions & 3 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
cff-version: 1.2.0
message: "Please cite BeatGeo and acknowledge the upstream projects in THIRD_PARTY_NOTICES.md."
title: "BeatGeo"
message: "Please cite BeatGEO and acknowledge the upstream projects in THIRD_PARTY_NOTICES.md."
title: "BeatGEO"
type: software
authors:
- name: "BeatAPI"
repository-code: "https://github.com/BeatAPI/BeatGeo"
repository-code: "https://github.com/BeatAPI/BeatGEO"
license: MIT
2 changes: 1 addition & 1 deletion CLA.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Contributions

BeatGeo uses the MIT license. See CONTRIBUTING.md and THIRD_PARTY_NOTICES.md. No separate upstream contributor agreement is required.
BeatGEO uses the MIT license. See CONTRIBUTING.md and THIRD_PARTY_NOTICES.md. No separate upstream contributor agreement is required.
4 changes: 2 additions & 2 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Our Pledge

We as contributors and maintainers pledge to make participation in the BeatGeo project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
We as contributors and maintainers pledge to make participation in the BeatGEO project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

## Our Standards

Expand All @@ -24,7 +24,7 @@ Examples of unacceptable behavior:

## Enforcement

The BeatGeo repository maintainers are responsible for enforcing this Code of Conduct. Maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, issues, and other contributions that are not aligned with this Code of Conduct, and may **warn, temporarily ban, or permanently ban** any contributor for behaviors they deem inappropriate, threatening, offensive, or harmful.
The BeatGEO repository maintainers are responsible for enforcing this Code of Conduct. Maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, issues, and other contributions that are not aligned with this Code of Conduct, and may **warn, temporarily ban, or permanently ban** any contributor for behaviors they deem inappropriate, threatening, offensive, or harmful.

## Reporting

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Contributing to BeatGeo
# Contributing to BeatGEO

Use a branch and pull request against main. Follow AGENTS.md, retain third-party notices, and keep credentials or raw customer/browser evidence out of Git. Use Node.js 24 and pnpm 12.4.1. Run lint and affected tests; distinguish mocked checks from real provider validation.

Expand Down
2 changes: 1 addition & 1 deletion LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
MIT License

Copyright (c) 2026 Blue Whale Software, LLC
Copyright (c) 2026 BeatAPI contributors (BeatGeo modifications)
Copyright (c) 2026 BeatAPI contributors (BeatGEO modifications)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# BeatGeo
# BeatGEO

**Open-source AI visibility monitoring and optimization, by [BeatAPI](https://beatapi.io).**

Expand Down Expand Up @@ -26,7 +26,7 @@ flowchart TD
K --> G
```

[![BeatGeo 产品蓝图:12 个步骤、输入输出和复用模块](docs/product/flow.png)](docs/product/flow.html)
[![BeatGEO 产品蓝图:12 个步骤、输入输出和复用模块](docs/product/flow.png)](docs/product/flow.html)

下载仓库后,用浏览器打开 [交互蓝图](docs/product/flow.html),可点击步骤、切换 BeatAPI / AI 图片业务、查看指标和搜索功能。图中数字为合成示例。

Expand All @@ -35,20 +35,20 @@ flowchart TD
需要 **Git、Node.js 24、pnpm 12.4.1、Docker 和 Chrome**。BeatBrowser 固定版本已作为依赖带入,无需另外克隆或安装全局 CLI。

```sh
git clone https://github.com/BeatAPI/BeatGeo.git
cd BeatGeo
git clone https://github.com/BeatAPI/BeatGEO.git
cd BeatGEO
node scripts/local-doctor.mjs
pnpm local:setup
pnpm local:start
```

### Fork 和团队试用

Fork 本仓库会保留 BeatBrowser 的固定版本依赖,**不会自动创建一个 BeatBrowser 仓库的 fork**。`pnpm local:setup` 从 GitHub 下载锁定的 BeatBrowser 源码,并把扩展准备到 `.beat-geo/extension`。使用者只需克隆 BeatGeo;首次安装需要联网,Chrome 扩展和网站登录需手动完成。
Fork 本仓库会保留 BeatBrowser 的固定版本依赖,**不会自动创建一个 BeatBrowser 仓库的 fork**。`pnpm local:setup` 从 GitHub 下载锁定的 BeatBrowser 源码,并把扩展准备到 `.beat-geo/extension`。使用者只需克隆 BeatGEO;首次安装需要联网,Chrome 扩展和网站登录需手动完成。

```mermaid
flowchart LR
A[Fork 或克隆 BeatGeo] --> B[local:setup]
A[Fork 或克隆 BeatGEO] --> B[local:setup]
B --> C[安装锁定的 BeatBrowser]
B --> D[创建本机独立 PostgreSQL]
C --> E[Chrome 加载扩展并登录目标网站]
Expand All @@ -57,7 +57,7 @@ flowchart LR
F --> G
```

团队成员各自在本机安装时,账号、数据库、API Key 和 Chrome 登录态相互独立,不会共享维护者的数据。已有 BeatBrowser 的成员可复用连接,不要同时启用两份扩展;如需本次的任务清理功能,请使用本仓库依赖的扩展版本。修改 BeatBrowser 源码的开发者才需要另外 fork 它,再显式更新 BeatGeo 的依赖和锁文件;依赖不会自动追踪主分支。
团队成员各自在本机安装时,账号、数据库、API Key 和 Chrome 登录态相互独立,不会共享维护者的数据。已有 BeatBrowser 的成员可复用连接,不要同时启用两份扩展;如需本次的任务清理功能,请使用本仓库依赖的扩展版本。修改 BeatBrowser 源码的开发者才需要另外 fork 它,再显式更新 BeatGEO 的依赖和锁文件;依赖不会自动追踪主分支。

打开 **http://localhost:3140/setup**,注册本地管理员,然后按页面完成:

Expand All @@ -68,7 +68,7 @@ flowchart LR

[完整用户流程:安装、账号、Key、浏览器、费用和持续运行](docs/beat-geo/getting-started.md)。

`local:setup` 创建专用 PostgreSQL 容器和卷(loopback 55440)、独立随机密钥及两个忽略提交的环境文件。不会复用网站数据库;已有配置会拒绝覆盖。自动安装中断后可运行 `pnpm local:setup --resume`,它只接受未改动的自动配置。`local:start` 同时运行网页(3140)、采集服务(4319)和 worker;关闭终端即停止调度。已被其他 Agent 使用的 BeatBrowser bridge 不会随 BeatGeo 退出。
`local:setup` 创建专用 PostgreSQL 容器和卷(loopback 55440)、独立随机密钥及两个忽略提交的环境文件。不会复用网站数据库;已有配置会拒绝覆盖。自动安装中断后可运行 `pnpm local:setup --resume`,它只接受未改动的自动配置。`local:start` 同时运行网页(3140)、采集服务(4319)和 worker;关闭终端即停止调度。已被其他 Agent 使用的 BeatBrowser bridge 不会随 BeatGEO 退出。

Chrome 连接成功不等于每个网站已登录。任务在独立 TaskSpace 中执行,无法创建时明确报错,不回退到日常标签页。首次采集也会显示超时、需要登录和连接失败,失败不计作零曝光。网站账号自身限制仍然适用。

Expand Down Expand Up @@ -117,7 +117,7 @@ pnpm browser:lab
## One product system

```text
BeatGeo UI / API / MCP
BeatGEO UI / API / MCP
└─ 品牌、问题、证据、行动与报告 / PostgreSQL
└─ pg-boss 统一业务队列
├─ BeatBrowser:网页观测与引用
Expand All @@ -135,7 +135,7 @@ BeatGeo UI / API / MCP
## Privacy and independence

- 没有上游默认遥测项目、广告账号或客服项目;分析服务仅由操作者显式配置启用。
- 产品使用 BeatGeo 品牌,无上游购买入口、客户评价或评分背书。原营销站入口停用,历史商业文案不属于本项目承诺。
- 产品使用 BeatGEO 品牌,无上游购买入口、客户评价或评分背书。原营销站入口停用,历史商业文案不属于本项目承诺。
- cookies 不导出。证据默认位于 gitignored `.beat-geo/runs/`;没有新目录时可兼容读取已有 `.open-profound/runs/`,不自动搬迁或删除。
- 本地服务只绑定 loopback,校验 Host/Origin 和提交令牌;不要通过公网隧道暴露。
- 密钥兼容旧配置,改名不重置数据库或加密密钥。[隐私与迁移](docs/privacy.md)
Expand All @@ -155,4 +155,4 @@ pnpm test

MIT。见 [LICENSE.md](LICENSE.md)、[第三方声明](THIRD_PARTY_NOTICES.md)。

基于 Elmo 的开源产品基础修改,保留原作者版权和历史。GeoScore、oneglanse、niubigeo、Ansvisor 等为研究及模块评估参考,不代表本版已经复制其全部代码。BeatGeo 与 Profound 无隶属关系。
基于 Elmo 的开源产品基础修改,保留原作者版权和历史。GeoScore、oneglanse、niubigeo、Ansvisor 等为研究及模块评估参考,不代表本版已经复制其全部代码。BeatGEO 与 Profound 无隶属关系。
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Supported Versions

We apply security fixes only to the **latest released version** of BeatGeo. If
We apply security fixes only to the **latest released version** of BeatGEO. If
you are running an older version, please upgrade before reporting an issue.

## Reporting a Vulnerability
Expand Down
2 changes: 1 addition & 1 deletion THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Third-party notices

BeatGeo is maintained by BeatAPI and incorporates the MIT-licensed Elmo codebase at `2f68b9199a236a4c3d1b5753cbf24f3f2bf088a1`, copyright 2026 Blue Whale Software, LLC. The original notice remains in LICENSE.md and Git history. BeatAPI additions are also provided under MIT.
BeatGEO is maintained by BeatAPI and incorporates the MIT-licensed Elmo codebase at `2f68b9199a236a4c3d1b5753cbf24f3f2bf088a1`, copyright 2026 Blue Whale Software, LLC. The original notice remains in LICENSE.md and Git history. BeatAPI additions are also provided under MIT.

Inherited statistics include share-of-voice and citation-stability calculations. The local metrics module reuses the same answer-level share-of-voice ratio.

Expand Down
4 changes: 2 additions & 2 deletions apps/browser-lab/core.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ async function openRunPage(config, run, transport, useSpaces) {
await transport("spaces", {
action: "open",
url: ENGINES[config.engine].url,
label: `BeatGeo · ${ENGINES[config.engine].name}`,
label: `BeatGEO · ${ENGINES[config.engine].name}`,
profileId: config.profileId || process.env.BEAT_BROWSER_PROFILE_ID || undefined,
}),
);
Expand All @@ -205,7 +205,7 @@ async function openRunPage(config, run, transport, useSpaces) {
const opened = await transport("tabs", {
action: "new",
url: ENGINES[config.engine].url,
label: `BeatGeo · ${ENGINES[config.engine].name}`,
label: `BeatGEO · ${ENGINES[config.engine].name}`,
});
const match = opened.match(/(?:tab\s*)?\[(\d+)\]/i);
if (!match) throw new Error("Browser did not return a tab ID.");
Expand Down
Loading
Loading