teem is live
teem is one widget in your product and one inbox for your team. It holds the three things a shipping product needs, so you stop running a support tool, a feedback board and a changelog page that never speak to each other.
What it holds
- Support
- A visitor opens the widget and writes to you. The conversation lands in your inbox and in your Slack channel, and whichever one you answer from, the reply appears in the widget. Assign it to a teammate, resolve it when it is done.
- Feedback
- The same widget carries a board. Visitors post requests, vote on the ones already there, and see where each one stands. Your team triages from the dashboard and sets the status.
- Changelog
- Write an entry and link the requests it ships. Publishing flips every linked request from
opento shipped. - Help Center
- Topics and articles you write in Markdown, ordered the way you want them read, searchable from inside the widget.
The loop that closes
Canny holds the requests, Crisp holds the conversations, and the changelog is a page nobody remembers to write. Nothing connects them, so the person who asked for a thing never finds out it shipped.
teem connects them. A published entry emails everyone who voted for the requests it links, with the entry and their request in it. Nobody on your team has to remember who asked.
Installing takes one paste
Open Install in the dashboard and copy the prompt into your AI coding agent:
Install teem in this app.
Read https://teem.so/install.md and follow it.
Organization key: pk_your_organization_key
Identify users with a signed hash: HMAC_SHA256(user.id, private_key), computed server side.
The private key is in this organization's teem settings. It never ships to the browser.
teem ships as a hosted script. Do not write a widget.
Your agent reads the hosted doc, adds one <script> tag to your layout and identifies the signed-in user. There is no SDK for your framework because there is no framework in the widget.1
The prompt is a convenience. The tag it adds is one line, and you can paste that yourself:
<script src="https://teem.so/t.js" data-organization="pk_your_organization_key" defer></script>
Your public pages
Every organization gets three, live from the day you sign up:
| Page | URL |
|---|---|
| Feedback board | teem.so/b/your-org |
| Changelog | teem.so/b/your-org/changelog |
| Help Center | teem.so/b/your-org/help |
Point a custom domain at your board and it answers on your own hostname instead.
Your agent can run all of it
Anything the dashboard does, a personal token does over REST:
curl https://teem.so/api/v1/posts \
-H "Authorization: Bearer teem_pat_your_token"
Or over MCP, which is how this entry was written:
claude mcp add --transport http teem https://teem.so/mcp \
--header "Authorization: Bearer teem_pat_your_token"
Your agent gets tools to read the inbox, reply to a visitor, triage the board, write an article and publish a release, without anyone opening teem. The full surface is at teem.so/api.md and the install doc is at teem.so/install.md.
Getting set up
- Create your organization
- Paste the install prompt into your coding agent
- Open your app and send yourself a message through the widget
- Connect Slack so the inbox reaches you where you already are
- Mint a token and hand it to your agent
- Write your first request, then ship it
That is v1. There is no issue-tracker integration yet, and that is deliberate: the loop should work end to end inside one product before it reaches into another. Everything above is live today.
-
The widget is vanilla JavaScript inside a shadow root. It cannot collide with your styles or your bundler, and because it is served from teem.so, a fix reaches every install at once instead of waiting for anyone to upgrade a package. ↩