内容
<p align="center">
<a href="https://upstep.dev">
<img src="logo.png" width="112" alt="Upstep logo" />
</a>
</p>
<h1 align="center">Upstep</h1>
<p align="center">
<strong>自动化的反馈流程。</strong><br />
在您的产品中收集反馈,让用户投票,在流动的面板上进行分类整理,<br />
并为您的编码代理提供直接的访问权限,以便其了解用户需求。
</p>
<p align="center">
<a href="https://upstep.dev"><strong>在线产品</strong></a>
·
<a href="DOCUMENTATION.md"><strong>文档</strong></a>
·
<a href="#quick-start"><strong>自托管</strong></a>
·
<a href="CONTRIBUTING.md"><strong>贡献</strong></a>
</p>
<p align="center">
<img alt="AGPL licensed server" src="https://img.shields.io/badge/server-AGPL--3.0-E05A33?style=flat-square" />
<img alt="MIT licensed SDKs" src="https://img.shields.io/badge/SDKs-MIT-2F302E?style=flat-square" />
<img alt="Next.js 15" src="https://img.shields.io/badge/Next.js-15-2F302E?style=flat-square&logo=nextdotjs&logoColor=white" />
<img alt="PostgreSQL" src="https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square&logo=postgresql&logoColor=white" />
<img alt="Model Context Protocol" src="https://img.shields.io/badge/MCP-ready-E05A33?style=flat-square" />
<img alt="Docker ready" src="https://img.shields.io/badge/Docker-ready-2496ED?style=flat-square&logo=docker&logoColor=white" />
</p>
<p align="center">
<img src="docs/images/upstep-hero.png" alt="Upstep feedback board and embedded feedback widget" width="100%" />
</p>
## 端到端的反馈流程
大多数反馈工具仅限于收集想法。Upstep 连接整个流程:
用户看到的小部件、团队使用的面板、您分享的公开路线图,<br />
以及您的代理可以操作的 MCP 工具。
| | |
| --- | --- |
| **嵌入式反馈** | 将原生小部件嵌入到 Web、React、React Native 或 Flutter 应用中,无需将用户引导至另一个门户。 |
| **自动优先级的投票** | 识别和匿名投票,去除重复项,将请求转化为有序的待办事项列表。 |
| **流动的分类整理面板** | 使用自定义面板、状态、标签、审核、内部任务和已完成项的视图,而不会被过滤器淹没。 |
| **可操作的代理** | Claude Code、Codex、Cursor、Windsurf、Copilot 或任何 MCP 客户端都可以读取、创建、更新和评论项目范围的工作。 |
| **用户可信的路线图** | 发布重要的工作,同时保留开发者和代理任务的私密性。 |
| **默认自托管** | 运行相同的 Next.js 和 PostgreSQL 堆栈。无需 Redis。 |
## 为人类和代理而设计
Upstep 的 MCP 服务器是应用程序的一部分 — 而不是独立的 sidecar。 私有的、项目范围的密钥允许代理在编辑器中分类反馈, 而可发布的 SDK 密钥保持安全,可嵌入客户端应用程序。
<p align="center">
<img src="docs/images/upstep-mcp.png" alt="Upstep MCP workflow with coding agents" width="100%" />
</p>
```bash
# Claude Code
claude mcp add --transport http upstep https://upstep.dev/api/mcp \
--header "Authorization: Bearer YOUR_MCP_KEY"
# Codex CLI
export UPSTEP_MCP_KEY="YOUR_MCP_KEY"
codex mcp add upstep --url https://upstep.dev/api/mcp \
--bearer-token-env-var UPSTEP_MCP_KEY
```
## 两行代码即可集成反馈
```bash
npm install @upstep/js
```
```tsx
import { FeedbackWidget, UpstepProvider } from "@upstep/js/react";
export function App() {
return (
<UpstepProvider apiKey="upstep_pk_your_publishable_key">
<YourProduct />
<FeedbackWidget />
</UpstepProvider>
);
}
```
相同的反馈流程适用于纯 JavaScript、script 标签、React Native 和 Flutter。参见 [完整的 SDK 指南](DOCUMENTATION.md#sdks)。
## 工作原理
```mermaid
flowchart LR
U[您的用户] --> SDK[Web 和移动 SDK]
SDK --> API[公开的反馈 API]
T[您的团队] --> DASH[仪表板和面板]
A[编码代理] --> MCP[项目范围的 MCP]
API --> CORE[Upstep 应用程序]
DASH --> CORE
MCP --> CORE
CORE --> DB[(PostgreSQL)]
CORE --> OUT[电子邮件 · Slack · Discord · Webhooks]
```
所有内容都在一个可部署的应用程序中运行,具备持久的 PostgreSQL 支持的速率限制和通知重试。
## 快速开始
您需要 Docker 和 Compose,以及 GitHub 或 Google OAuth 应用程序。
```bash
git clone https://github.com/TheBugEater/upstep.git
cd upstep
cp apps/web/.env.example apps/web/.env
docker compose up --build
```
将数据库、身份验证密钥和 OAuth 凭证添加到 `apps/web/.env`,然后打开 [http://localhost:3000](http://localhost:3000)。 对于 GitHub OAuth,请使用此本地回调 URL:
```text
http://localhost:3000/api/auth/callback/github
```
Compose 堆栈启动 PostgreSQL,应用提交的 Prisma 迁移, 启动 Upstep,并处理持久的通知重试。生产容器公开 `GET /api/health` 并遵循平台的 `PORT`。
### 本地开发
```bash
corepack enable
pnpm install
cp apps/web/.env.example apps/web/.env
docker compose up -d postgres
pnpm --filter @upstep/web exec prisma migrate deploy
pnpm dev
```
```bash
pnpm test
pnpm type-check
pnpm build
```
## 凭证分离
| 凭证 | 所属位置 | 访问权限 |
| --- | --- | --- |
| `upstep_pk_…` | 浏览器和移动 SDK | 可发布;仅限公共反馈 API 访问 |
| `upstep_mcp_…` | 密钥存储和 MCP 客户端 | 私有;项目范围的读写访问 |
私有 MCP 密钥仅返回一次,并存储为 SHA-256 摘要。 永远不要将可发布的 SDK 密钥用作私有数据的授权边界。 在公开生产实例之前,请阅读完整的安全策略 [安全策略](SECURITY.md)。
## 仓库映射
```text
apps/web/ Next.js 仪表板、API、MCP 和营销网站
packages/sdk-web/ @upstep/js
packages/sdk-react-native/ @upstep/react-native
packages/sdk-flutter/ upstep_flutter
packages/types/ @upstep/types
```
| 资源 | 您将找到的内容 |
| --- | --- |
| [文档](DOCUMENTATION.md) | 设置、环境变量、SDK、REST API、数据模型、计费和仪表板行为 |
| [贡献](CONTRIBUTING.md) | 开发工作流、迁移、测试和拉取请求 |
| [安全](SECURITY.md) | 漏洞报告和凭证模型 |
| [行为准则](CODE_OF_CONDUCT.md) | 社区期望 |
| [许可](LICENSING.md) | AGPL 服务器和 MIT SDK 边界 |
| [商标政策](TRADEMARKS.md) | Upstep 名称和徽标的规则 |
## 部署和运维
`railway.toml` 配置托管部署,但任何可以运行 Node.js 容器和 PostgreSQL 的平台都可以托管 Upstep。 在每次发布之前应用 `prisma migrate deploy`,每分钟调用 `POST /api/internal/notifications`,并定期测试数据库还原。
自托管实例在 `NEXT_PUBLIC_ONRAMP_API_KEY` 为空时不会发送 Upstep 产品分析数据,这是默认值。
## 许可
服务器应用程序根据 [AGPL-3.0-only](LICENSE) 许可。独立分发的 SDK 和共享类型包根据 MIT 许可。Upstep 名称和徽标受 [商标政策](TRADEMARKS.md) 管辖。
<p align="center">
为构建者而建,他们更愿意交付产品,而不是管理另一个反馈工具。
</p>