Releases

The latest updates and improvements to Simple Product.

Small fixes that remove a couple of "do it in the app" moments.

Your agent can change a board's stages

Agents could create boards and move cards but couldn't touch the stages. If a workflow needed a stage the board didn't have, Claude had to ask you to add it. Now it can do it itself. Ask for something like "add a Next stage after Backlog on the Linear ideas board" or "set up a board with Agent ready, Doing, PR and Done".

Over MCP, your agent can:

  • create a stage at the end, or after or before another one
  • rename a stage
  • reorder a board's stages
  • delete a stage

A board can also be created with its stages in one step. Skills get the same abilities, so a skill can set up the board it works on.

Deleting a stage over MCP works exactly like deleting a column in the app: its cards go with it, and both can be restored together from Settings → Deleted items. Your agent checks with you first, and it can move the cards to another stage instead if you'd rather keep them. If you rename a stage that a skill listens for, your agent tells you which skills to update.

Find a card by its number when linking

Type 652 or #652 in any link picker and card #652 comes up first. That covers linking from a card, a doc, a person, an org or a project. Each card in the list shows its number too.

Restore brings back only what you deleted

Restoring a column or a board used to bring back every deleted card in it, including ones you'd deleted on their own beforehand. Now it brings back only what was deleted along with it, and the rest stay in Deleted items. A restored column goes back to where it was on the board.

Deleted items also shows card numbers now, so "#611 Linear issue 21" is easy to tell apart from the card you're looking for.

Moving from another tool shouldn't mean starting from scratch. Export your work as a CSV, drop it in, and it shows up as a board you recognize.

A new board that looks like the old one

Go to Boards → New board ▾ → Import from CSV (or use the button on an empty Boards page) and drop the file. A few seconds later you see what will be created:

  • a board name, suggested from what's in the file, which you can change
  • your old stages, in workflow order, with how many cards go in each

Click Import and you're on the board. Every row is a card in its stage. Its title and description come over as they were, and everything else (priority, assignee, labels, epic, estimate, dates) goes at the bottom of the description. Nothing is left behind.

Or add to a board you already have

From a board, New card ▾ → Import from CSV adds the cards there. If the file's stages don't match the board's, you see both options with the counts for each:

  • Use this board's stages: each card goes to the closest one, so "In Progress" lands in Doing.
  • Add the file's stages too: stages you don't have, like "In Review", are added where they fall in the workflow.

Or ask your agent

The same import works over MCP. Tell Claude something like "import the CSV I just exported into Simple Product". It tells you what it will create and checks with you first. For anything more particular, like leaving some rows out or reshaping fields, your agent can do it. Developers can also use POST /api/v1/imports.

Imported cards don't set off your skills or notifications, so moving in is quiet. If an import isn't what you wanted, delete the board and try again.

Narrated feedback lets people record themselves using your app and talking through what they see, and turns it into feedback your team and your coding agent can act on. Since it launched, early customers have been recording a lot, and telling us what got in their way. This round is all theirs.

Pause a recording

The recording bar now has a Pause button, so you can gather your thoughts without stopping. Nothing is recorded while paused, neither your voice nor what the cursor does, and the pause isn't part of the recording.

Move the recording bar out of the way

The bar used to sit at the bottom of the screen and cover whatever was underneath. Now you can drag it by its grip, or any empty space, and it snaps to the nearest corner or the middle of the top or bottom edge. It remembers where you left it next time.

If you build with our SDK, you can choose where it starts, or keep it fixed:

sp.feedback.record({ position: "bottom-right" });
sp.feedback.record({ position: "top-center", movable: false });

Recordings show up the moment you send them

As soon as you send a recording, it appears in your feedback as "⏳ Processing…" and fills in when it's written up. So you, and your coding agent, can see it's there and on its way, instead of grabbing an older piece of feedback in the meantime. Skills that act on new feedback wait for the finished version, so they never act on a placeholder.

Nothing gets lost

  • Long recordings work. Recordings over about 7 minutes could fail to turn into feedback. They work now, and if the write-up ever fails for any reason, you still get a feedback doc with everything that was said.
  • Every point makes it in. A long recording could drop some of the issues raised. It now fits more, and says so if anything didn't fit, pointing you to the full narration.

Recordings understand what you did

Scrolling a table sideways, or dragging a card to another stage, now shows up in the feedback as exactly that, instead of looking like scrolling up and down the page.

Getting it

Everything is live in Simple Product now. To get pause and the movable bar in your own app, update the SDK:

npm install @simple-product/sdk@latest

The rest needs no update. See the narrated feedback docs for everything else.

Smaller things

  • We only ask how likely you are to recommend Simple Product once every few months now, not every time you send feedback.

Keep a Slack thread updated on a card

Ask Simple Product in any Slack thread to keep it updated on a card:

@Simple Product keep this thread updated on card 648

From then on, every time the card changes stage, a short update is posted in that thread, and a ✅ message when it's done. It's made for customer channels: the update says what moved and where, so customers following along don't need access to Simple Product. Say "stop updating this thread on 648" to turn it off. How it works.

Reorder stages in the table view

You can now drag stage groups up and down in a board's table view. Hover a stage header, grab the handle, and drop it where you want it. The board view uses the same order, so its columns move too.

Faster public docs and releases on your website

If you show your Simple Product releases or docs on your own site, loading all of them at once slows the page down. Every release has to be fetched and rendered before anyone sees anything, and a changelog only gets longer. Our own changelog took 0.6–1.3 seconds to load for exactly that reason.

The public API now pages through them, so your site only loads what people actually read:

  • Pass limit (up to 100) for the newest page, then meta.nextCursor as cursor for older ones, until meta.hasMore is false. Calls without a cursor work exactly as before.
  • Responses can be cached: they send Cache-Control and an ETag, so your CDN and your visitors' browsers can reuse them.
  • Each release now includes its slug, so you can link to a page for every release.

The setup guide your coding agent reads, and the releases docs, now show the fast way to build a changelog in Next.js, React, Vue, plain HTML, Node or Python: the newest page first, cached, with "Load more" for the rest.

The SDK works from any site or desktop app

The Simple Product SDK can now identify users and track events from any website, and from desktop apps built with Tauri or Electron. Before, those calls only worked from some setups.

Our own changelog

simpleproduct.dev/releases now loads the newest 10 releases with "Load more", built exactly the way the guide describes. It went from 0.6–1.3 seconds to about 0.2–0.3 seconds, 3–4 times faster. And each release now has its own page.

What shipped

People can now give feedback by recording themselves using your app and talking. They press record, click around, and say what's confusing, broken, or great, the way they would on a call. Simple Product turns it into feedback your team, and your coding agent, can act on.

The hard part of spoken feedback is "this button" and "that thing over there." Simple Product works out what they meant. While they talk, it notes what their cursor is on, then matches their words to it. The feedback names the actual element and where it lives in your app.

What you get

Each recording becomes one feedback doc, linked to the person who recorded it:

  • An overview of what they covered
  • Each issue they raised, with their own words, a plain summary, and the elements it's about, including text you can search your codebase for to find them
  • Anything they typed in the optional note after recording
  • The full narration, with what the cursor did along the way

Like all feedback, it lands in your workspace, where your skills can triage it into cards.

Mic only, never the screen

  • We never record the screen. No video and no screenshots: just the microphone, plus which elements the cursor rested on or clicked.
  • The audio is deleted as soon as it's transcribed. Only the text is kept. Our transcription provider doesn't keep it or train on it.
  • Form field values are never captured, and emails and long numbers are scrubbed from what they say.
  • Add data-sp-mask to anything sensitive, and its text is left out entirely.

Add it to your app

It's in the Simple Product SDK, version 0.2.0 and later:

npm install @simple-product/sdk@latest

There are two ways to use it:

  • Our UI: sp.feedback.record() shows a small recording bar, then a review step where people can add a note, send, or discard. Restyle it with CSS variables to match your app.
  • Your own UI: sp.feedback.recorder() gives you start, stop and send, with no UI of ours, so you can build whatever fits.

It works in desktop apps built on web views too, like Tauri and Electron, with one extra step for microphone permission.

Recordings can be up to 10 minutes, and transcription and analysis count toward your workspace's credits.

The full guide, including styling and desktop setup, is at simpleproduct.dev/docs/narrated-feedback.

Try it in Simple Product

It's in Simple Product itself too: open Share Feedback and choose "Or record yourself talking through it." Tell us what you think. Out loud, ideally.

What shipped

Simple Product can now listen for feedback in your Slack channels. Turn it on in a shared customer channel, a #feedback channel, or anywhere customers talk to you. When someone asks for a feature, reports a bug, or says what they love, it's saved to your workspace automatically. Nobody has to remember to copy and paste it.

Casual conversation is ignored. Only product feedback is saved.

How it works

  1. Connect the Simple Product Slack integration in Settings → Integrations. If you already have it connected, disconnect and reconnect it to pick up the new permissions.
  2. Invite the bot to a channel: /invite @Simple Product
  3. Run /sp listen in that channel.
  4. Simple Product checks for new messages every 10 minutes and saves anything that's feedback.

Each piece of feedback is credited to the person who wrote it. Simple Product matches them to a person in your workspace by their Slack email, or creates one if there's no match. Each entry links back to the original Slack message.

Run /sp unlisten to stop, or /sp listening to see which channels are on. You can also ask the agent: "@Simple Product start listening for feedback in #customers."

Out in the open

Listening shouldn't be a surprise to anyone in the channel. When you turn it on, the bot posts a short notice in the channel saying it's listening for product feedback. Everyone in the channel sees it before their messages are captured.

When a message is saved as feedback, the bot reacts to it with 📝, so the person who wrote it knows it was heard.

Getting set up

  • New to Slack + Simple Product? Go to Settings → Integrations → Add to Slack.
  • Already connected? Disconnect and reconnect Slack from Settings → Integrations so Simple Product can add the 📝 reaction. Listening works without reconnecting, but you won't get the reactions.

The full guide, including exactly what Simple Product can and can't see, is at simpleproduct.dev/docs/slack.

Card numbers

Every card now has a permanent sequential number — displayed as #1, #2, etc. — making it easy to reference specific cards in conversations, commit messages, or when talking to an AI.

Numbers appear on kanban cards, in list view, grouped view, and the card detail panel.

Why

"IDs for cards so I can quickly and easily refer to a card by its ID when interacting with an LLM."

We initially hesitated (felt too old-school), but the use case is real: when you're working with an AI agent or discussing cards in Slack, saying "look at #47" is faster than pasting a title, or asking the agent to search for it. The number is the identifier, not a workflow artifact.

How it works

  • Numbers are workspace-scoped — each workspace has its own sequence starting at 1, assigned by creation order.
  • Numbers are permanent — deleting a card doesn't recycle its number. Gaps are fine; stability matters more. Plus soft-deleted cards can come back, that would be a whole mess.
  • The # is display-only — the stored value is just the integer, so we can add prefixes (board name, workspace slug) later if needed without changing the underlying data.
  • All existing cards were backfilled so there's no gap between old and new cards.

Let us know what you think. Does it help? How can we make it better?

A week of making boards more flexible and the whole app snappier.

Grouped view

Boards now have a third view mode alongside kanban and table: grouped. Cards are organized under collapsible stage headers, so you can scan a full board without the horizontal scroll of kanban or the flat list of table view.

  • Drag cards to reorder within a stage or between stages
  • Collapse sections you don't need to see
  • Hover a stage header to add a card directly into that stage
  • Add new stages from the bottom of the list
  • View preference is remembered per board

The toggle is in the view switcher next to kanban and table.

Faster boards and lists

  • Optimistic card moves. Dragging a card between stages now updates instantly instead of waiting for the server round-trip.
  • Virtualized tables. Large lists (docs, feedback, releases, people, orgs) only render the rows in view. Boards with 100+ cards in table or grouped view stay smooth.
  • Slimmer queries. List pages now fetch only the fields they display instead of full documents, cutting payload sizes across docs, feedback, releases and skills.
  • Skeleton loading. Every list page shows a shimmer skeleton while data loads instead of a blank screen or a flash of empty state.

Tidier nav

The sidebar now reads: Boards, Docs, Feedback, Releases, Customers, Skills, Analytics, SP3K. Projects and GSD are removed from the nav and command palette while we evaluate whether to bring them back in a different form.

Restore deleted items

Deleted boards, cards, docs, feedback, releases, skills, people, and orgs are now recoverable from Settings → Deleted items.

What's new

  • Browse deleted items by type — each category has its own tab, so you only load what you're looking at
  • Restore brings an item back exactly as it was. Restoring a board also restores all its stages and cards
  • Permanently delete removes an item for good (owner/admin only)
  • Items are kept for 30 days before automatic purge

Good to know

  • Cards deleted as part of a board don't show under Cards — restore the board to get them back
  • Restoring a skill brings back the doc but not its automation wiring — re-automate it intentionally
  • Published docs come back published

Cleaner card details and consistent patterns

We redesigned the card detail slideout to be simpler and more focused, then took the patterns that worked and applied them across the app.

A better card detail experience

The card slideout got a ground-up rework. The title now wraps naturally instead of cutting off, and editing it feels like typing — not clicking into a special mode. Card metadata (creator, dates) moved into an info icon in the header, keeping the focus on what matters: the description and comments.

The biggest quality-of-life change is auto-save. Start typing in the description and it saves automatically — you'll see a quick "Saving..." → "Saved" confirmation right inside the text area. No more worrying about whether you clicked the right button.

Comments that read like a conversation

Comments now flow chronologically, oldest to newest, so threads read naturally from top to bottom. The comment input sits right after the last comment, ready to go — no empty state getting in the way. We also simplified the metadata on each comment down to just the author name and timestamp, removing visual clutter that wasn't adding much.

Consistent patterns everywhere

Changes we liked on cards, we brought to docs too:

  • Titles on docs now use the same auto-sizing, always-editable textarea — long titles wrap instead of truncating
  • Save indicators across the app use the same simple pattern: "Saving..." then "Saved" with a checkmark
  • Dates everywhere now show actual timestamps instead of relative times like "5 minutes ago." Today's items show the time, yesterday says "Yesterday," and older items show the date. They never go stale in an open tab.

Under the hood

We added two new sections to our internal style guide: Dates & Timestamps documenting the absolute date pattern, and Performance establishing that speed is a UX feature — every millisecond of latency is a design decision, not an afterthought.