Captain's log

ShipLog — Changelog

The latest updates and improvements.

RSS Feed
New

Two new ways to shape the widget: slide-out panel, and feedback only

Both are options you pass when you initialise the widget, and both are off by default — if you change nothing, nothing changes.

You will find snippets with your own project slug already filled in under Settings → Widget embed code.

A slide-out panel

The porthole has always been a floating card above the trigger. That is the right shape for a quick “leave a note” gesture, but not if your feedback board is somewhere people actually spend time.

Pass display: 'slideout' and the panel anchors to the side of the screen at full height instead:

<script>
  ShipLog.init({ projectSlug: 'yourapp', display: 'slideout' })
</script>

More room for the list, and it reads as part of your product rather than a widget bolted onto it. It enters from whichever side position puts your trigger on.

It overlays your page rather than pushing your content aside. That is deliberate: pushing content means reaching into your page’s layout, and the widget runs in a shadow root specifically so it can never do that to you.

Feedback only, no What’s New tab

If you have not started publishing a changelog, the widget’s second tab is an empty room with your name on the door. It advertises a feature you are not using to the people you least want to confuse.

Pass feedbackOnly: true and the widget runs as a feedback box alone:

<script>
  ShipLog.init({ projectSlug: 'yourapp', feedbackOnly: true })
</script>

The tab bar disappears — with one tab there is nothing to choose between — and the unread dot stops appearing on your trigger. The widget also stops requesting your changelog entirely, so it is one fewer round trip on every page load.

Your changelog page and its RSS feed are untouched. This changes the widget and nothing else, so drop the option whenever you start publishing.

And a fix everyone gets

Building the slide-out turned up something that had been wrong the whole time.

The panel’s open animation was replaying on every internal update — each time feedback loaded, each vote, each submission. As a small popup nudging ten pixels, it was a flicker most people would never consciously notice. As a full-height panel it was unmissable: the thing would throw itself off the screen and slide back while you were reading it.

The animation now plays once, when the panel opens, and stays put after that. If your widget felt subtly twitchy before, that was this.

Both were asked for

The slide-out and the feedback-only option were each filed on our own board by founders running ShipLog in their apps. Thanks for both — they were good calls.

New

Keep finished work out of your widget

The widget panel is small and sorts by votes. Shipped work tends to be the most-voted work, so over time the porthole fills up with things you already did — and the requests you actually want are pushed below the fold.

You can now keep it clear automatically.

Turning it on

Settings → Widget behaviour → “Hide finished items from the widget.”

It is off by default, and turning it on changes nothing about how you work: anything you mark completed or closed simply drops out of the widget from then on. There is no per-item step and nothing to remember.

Your public board keeps everything

This affects the widget only. Your board at shiplog.ca/p/your-slug still shows completed and closed items, with their statuses, exactly as before.

That split is deliberate. Someone opening the widget inside your app wants to add or vote on what is still open. Someone visiting your board wants to see what you have been doing — which is the whole point of having one.

If you leave it off

Nothing changes. Your widget shows what it shows today.

This was the most-requested open item on our own board, from a founder whose widget had filled up with shipped work. Thanks for filing it.

New

Remove the ShipLog footer, and know when your feedback arrived

Two changes to the widget.

The widget now confirms a submission

Until now, submitting feedback through the widget told you nothing. The form cleared, the list reloaded, and that was it. If you were moderating submissions it was worse than unhelpful — your item was held for review, so it correctly did not appear, and there was nothing on screen to say why. People assumed it had failed and sent it again.

The widget now says what happened. If you moderate, it says the feedback is waiting for review. If you do not, it confirms the feedback was added. The message clears when the panel is reopened, so it never lingers as a stale note about something submitted ten minutes ago.

Captain plans can remove “Powered by ShipLog”

This was listed on the Captain plan as planned rather than included. It is now built.

Add hideBranding when you initialise the widget:

<script src="https://app.shiplog.ca/widget/shiplog-widget.js"></script>
<script>
  ShipLog.init({ projectSlug: 'yourapp', hideBranding: true })
</script>

You will find the snippet, with your own project slug filled in, under Settings → Widget embed code.

Two things worth being clear about:

  • This is a Captain feature. On the free plan the footer stays. The option is checked against your plan on our side, so adding it to a free project has no effect rather than breaking anything.
  • Your public board footer is separate and still shows. Only the widget’s footer is removed. If you want the board’s removed too, email hello@shiplog.ca — we would rather hear the demand than guess.

Custom domains remain listed as planned on the Captain plan, because they genuinely are not built yet.

Fixed

You can now see and change what is hidden

When we shipped the review queue, we told you that rejecting a submission does not delete it and that a misclick is recoverable. That was true of your data and not true of the product: once an item left the queue there was no screen that could reach it again. If you rejected something by accident, it stayed hidden.

That is fixed, and the fix is a bit larger than the original claim.

Every item now shows whether it is public

Your Feedback list has a Visibility column: Public, Waiting or Hidden, colour-coded so a hidden item cannot be mistaken for a live one at a glance. Before this, an item you had rejected sat in the list looking exactly like every other row.

And you can change it, in both directions

The column is a control, not a label. Set an item to:

  • Public — visible on your board and in the widget
  • Hidden — off every public surface, still in your data
  • Waiting — back into the review queue

That includes bringing back something you rejected, which is the case that did not work before. The same control is on the individual feedback page, with a line explaining what each state means.

A visibility filter

There is a new filter next to the status and category ones, so you can pull up everything hidden or everything waiting instead of scanning the list.

It stays available if you turn moderation off

The Visibility column and filter appear when your project is moderating, and also whenever an item is still waiting or hidden from a time when it was. Otherwise switching moderation off would strand those items with nothing on screen that could reach them.

Held items can no longer be voted on

Separately: it was possible to vote on a submission that was still waiting for review if you knew its ID, and the response confirmed the item existed. Held items are now genuinely invisible rather than simply unlisted.

If your project does not use moderation, nothing here changes anything for you.

New

Review submissions before they reach your board

Until now, anything submitted to your public board or widget was visible the moment it was written. If someone posted something abusive, your only option was to delete it after it had already been seen.

You can now hold new submissions until you have looked at them.

Turning it on

Settings → Moderation → “Review submissions before they appear.”

It is off by default and nothing changes until you turn it on. Everything already on your board stays exactly where it is.

What happens once it is on

New feedback from your public board and your widget goes into a review queue instead of straight to the board. Held submissions are invisible to everyone but you — not on the public board, not in the widget, not in your RSS feed.

You will find them under Feedback, in a “Waiting for review” panel at the top of the page, with Approve and Reject on each one. Approving publishes the item. Rejecting hides it for good.

The person who submitted it is told their feedback is waiting for review, so they know it arrived and do not post it again.

Details worth knowing

  • Rejecting does not delete anything. The submission stays in your database and out of every public view, so a misclick is recoverable.
  • Rejected items do not count against your plan’s feedback limit. Spam you turned away should not eat the quota you are paying for. Items still waiting for review do count — they are real submissions you have not looked at yet.
  • Your own submissions are never held. Anything you create through the API or the MCP server goes straight to the board. You are the one doing the approving, so there is nothing to approve.
  • You keep seeing everything. Your admin board, the API and the MCP server all show held items alongside the rest. Only the public surfaces filter them out.

What this does not do yet

This is the review queue itself. Approving from a Discord channel, which is how this was originally asked for, is not part of it — for now, approvals happen in ShipLog. Automatic screening of harmful content is also not included; every held submission is one you read yourself.

If you leave moderation off, nothing about your board changes.

New

Every colour in the widget is now yours to set

If your app is dark, the feedback widget used to be the one white rectangle on the screen. Only your brand colour was adjustable — the panel, text, borders and inputs were fixed light. Because the widget renders in a shadow root, your own CSS could not reach in and fix it either.

That is no longer the case. Every colour in the panel is now yours.

How to use it

Pass a theme when you initialise the widget:

<script src="https://app.shiplog.ca/widget/shiplog-widget.js"></script>
<script>
  ShipLog.init({
    projectSlug: 'yourapp',
    theme: {
      primaryColor: '#8b5cf6',
      background: '#0f1420',
      surface: '#171d2b',
      text: '#f3f4f6',
      textMuted: '#a6adbb',
      border: '#252c3b',
      inputBorder: '#333c4e',
      divider: '#1e2432'
    }
  })
</script>

Set as few or as many as you like. Anything you leave out keeps its current value, so you can change just the background and the text and stop there.

There are sixteen colours in total, covering the panel, surfaces, four levels of text, borders, dividers, inline code, the unread dot and error messages. The full list, with what each one touches, is in Settings → Widget embed code → All colour options.

Worth knowing

  • Colours you set here override the brand colour in your project settings. That means one project can run different themes on different sites.
  • Status badges keep their own colours. Planned, shipped and closed are meant to read the same everywhere, so they stay legible on light and dark alike.
  • Use six-digit hex. Shorthand like #fff mostly works, but the subtle tints behind a voted button and a focused input need the full form.

If you have not touched your theme

Nothing changes. Every colour falls back to exactly what it was, so existing embeds render the same as they did yesterday. No action needed.

The widget is now 6.7 KB gzipped, up from 6.2 KB, and still has no dependencies.

Thanks to the founder who reported this — it was blocking them from shipping, and it was a fair thing to be blocked by.

Improved

Your public board and changelog are now built to be found

Your /p/ pages were reachable on three hostnames — shiplog.ca, www.shiplog.ca and app.shiplog.ca — all serving identical bytes with no canonical tag. Search engines treat that as duplicate content and pick a winner themselves. This release fixes that and adds the markup search engines and AI assistants actually read.

What changed on your pages

  • One canonical URL. Your board and changelog now declare https://shiplog.ca/p/your-slug as the single real address, whichever hostname a crawler arrives on.
  • Structured data on your changelog. Each published entry is now marked up as a BlogPosting with its title, body, category and publish date, and every entry has its own anchor link. This is the format Google uses for Article results and the one ChatGPT, Claude and Perplexity extract most reliably.
  • Your RSS feed is discoverable. The feed at /p/your-slug/changelog.xml always existed but nothing in the page pointed to it. Browsers and feed readers can now find it automatically.
  • Clearer headings. Your board heading reads “Your Project — Feedback” instead of just your project name, so the two pages are distinguishable in search results.
  • Pages load a little faster. The widget script is deferred, so it no longer holds up page load.

Quiet boards stay out of the index

A board with fewer than three items now returns noindex until it fills up. Empty boards all share one template, so a batch of them looks like duplicate thin content — which drags down every board on the domain, including yours. The “Powered by ShipLog” link still passes through, and your board starts being indexed the moment it has three items. Your changelog is indexed as soon as it has one published entry.

We also stopped app.shiplog.ca from inviting crawlers into a second copy of the whole site.

And a correction

Our comparison page said Sleekplan’s free tier had “hard usage caps.” That was wrong: Sleekplan’s free plan takes unlimited feedback items, unlimited tracked users and unlimited subscribers — more generous than our 50-item free cap. The page says so now. Its actual limits are a single admin seat, 500 emails a month, and no API or MCP until $13/mo.

We also re-checked every competitor claim on that page against the vendors’ own billing documentation and corrected Upvoty’s first-year cost from $180 to about $162. If a comparison page is going to be worth reading, it has to be right even when that costs us the line.

Nothing changes in how feedback is submitted or voted on — no action needed.

Improved

Faster pages, share cards and the legal basics

A quality pass across the marketing site:

  • Faster pages. Fonts now load from shiplog.ca instead of Google Fonts — one less third-party request on every page.
  • Share cards. Links to shiplog.ca shared on X, Slack or LinkedIn now show a proper preview card instead of a bare URL.
  • Readable by AI agents. The site ships llms.txt and pricing.md — machine-readable summaries of what ShipLog does and costs, plus a sitemap and structured data. If an AI agent is evaluating feedback tools for you, it can read ours without scraping.
  • The legal basics. Real privacy and terms pages, written in plain language. The footer links now go somewhere.

Nothing changes in the product itself — no action needed.

New

Compare ShipLog to Canny, Sleekplan and Upvoty

There’s a new comparison page at shiplog.ca/compare: entry prices, free tiers, feature gates and MCP access for all four tools, side by side.

Every claim was checked against the vendors’ live pricing pages on July 13, 2026, and the page says when a competitor is the better pick — because sometimes one is. If you spot something stale, email hello@shiplog.ca and we’ll fix it.

The short version: all four tools do feedback, roadmaps and changelogs. The differences are what’s gated, what your bill does as you grow, and whether your AI agent gets a seat. ShipLog is the only one with MCP on the free plan.

Improved

A fresh look for your public board and changelog

Your public feedback board and changelog got a redesign.

What changed

  • A navy masthead with your project name, and tabs to move between the board and the changelog — the two pages now link to each other
  • Status filters are one-tap chips instead of a dropdown
  • Clearer status badges with color dots, and each item shows when it was submitted
  • Changelog posts are properly formatted: lists, code blocks and quotes now render the way you wrote them

Your brand color still drives votes, buttons and highlights — it just gained hover states.

Nothing changes in how feedback is submitted or voted on, and no action is needed on your side.

New

Connect AI agents to your project over MCP

ShipLog now runs a remote MCP server at https://shiplog.ca/mcp. Claude Code, Claude Desktop, Cursor and any other MCP client can read and act on your feedback and changelog from inside a coding session. Included on every plan, free tier included.

Connecting

Create an API key in Settings → API keys, put it in an environment variable, then:

export SHIPLOG_API_KEY=sl_live_YOUR_KEY

claude mcp add --transport http shiplog https://shiplog.ca/mcp \
  --header 'Authorization: Bearer ${SHIPLOG_API_KEY}'

The single quotes matter: the key is expanded from your environment at runtime, so it never lands in shell history or config files.

What agents can do

Seven tools: get a feedback summary (“what should I build next?”), list and search feedback, file feedback, move items through statuses, and list or write changelog entries.

The loop this enables: your agent checks the top-voted request, you ship it, the agent marks it completed and publishes the changelog entry — without leaving the editor. This entry was published that way.

Scoping and limits

Every key resolves to exactly one project and every tool call is scoped to it. Tool output omits feedback authors’ email addresses, so no user PII ends up in agent contexts. Requests share the API’s 120 req/min per-project rate limit.

Full setup instructions are on the new AI agents page in your dashboard.

Improved

One plan: Captain — $9/mo or $90/yr

We collapsed our pricing tiers into a single all-inclusive plan.

Captain is $9/mo or $90/yr per project and includes everything: unlimited feedback items, the embeddable widget, the public roadmap, the changelog, API access and the MCP server. No feature gates, no “available on Pro” footnotes.

The free plan stays free forever: public feedback board with voting, roadmap and changelog, up to 50 feedback items. Enough to run a real product until feedback volume tells you it’s working.

If you were on Starter, you now have everything Pro had at the same price. Nobody pays more than before.

Also fixed: a crash when opening projects created under the old plan names.

New

A REST API for your feedback and changelog

You can now work with your ShipLog project programmatically. The API covers the core loop: read feedback, file feedback, move items through statuses and read your changelog.

What’s available

  • GET /api/v1/feedback — list feedback, filterable by status and category, sorted by votes or date
  • POST /api/v1/feedback — file a feedback item
  • PATCH /api/v1/feedback/:id — update an item’s status (open → planned → in progress → completed)
  • GET /api/v1/changelog — list your changelog entries

How auth works

Create an API key in Settings → API keys and send it as a Bearer token. Each key is scoped to exactly one project — no project IDs in URLs, no way to reach another project’s data. Keys are shown once at creation and can be revoked any time.

Requests are rate limited to 120 per minute per project. Responses are plain JSON with a consistent error shape, so scripts and agents can handle failures predictably.

New

ShipLog is Live — One Tool for Feedback, Roadmaps, and Changelogs

After experimenting with a lot of feedback tools, and feeling disappointed we are product to release, ShipLog is now live and ready for indie SaaS founders.

If you’re tired of feedback scattered across email, Twitter DMs, support tickets, and Slack messages — and you just want one simple place to collect signals, show your roadmap, and ship updates — this is for you.

What’s Included at Launch

Free Plan (Forever)

  • Public feedback board with voting
  • Up to 50 feedback items
  • Captain’s log (changelog) to announce what you ship

Starter Plan ($9/mo per project)

  • Unlimited feedback items
  • Embeddable widget (the “porthole”) for in-app feedback
  • Basic customization to match your brand

Coming Soon: Pro Plan ($29/mo)

  • API access
  • Custom domain
  • Remove ShipLog branding

Why We Built This

We’re solo founders too. We got tired of tools built for enterprise teams with budgets that start at $79/month. We wanted something that:

  • Does one thing really well (feedback → roadmap → changelog)
  • Doesn’t require a credit card to try
  • Actually fits an indie budget
  • Loads fast and feels good to use

So we built it. With Elixir, Phoenix LiveView, and a lot of coffee.