Changelog
What shipped recently
We update Narcove roughly every week. Some weeks bring a new feature. Some weeks bring a fix. Most weeks bring both. Here's what landed, in reverse-chronological order. We don't list every internal commit — this is the "what changed for users" view.
- Feature
Export cards as a markdown doc — ready to feed your AI
An "Export" button on every project. Pick "Only bugs", "Only features", or any other type — get a clean markdown file with each card's title, status, priority, opener, assignee, description, comments threaded in order, and any folded-in subtasks. Drop it straight into Claude, ChatGPT, or your model of choice with "look at these and propose fixes". No more copy-pasting cards one at a time.
- Feature
Card types — bug, feature, task, question, chore — with icons
Mark any card with a type from the drawer. A small coloured icon appears next to the title on the board chip so you can scan the column and see at a glance what's a bug versus what's a feature request. Combines with the new export to filter exactly what you want to ship to your AI.
- Feature
Drag-and-drop image upload on every card
Drop a screenshot anywhere on an open card drawer — the whole panel becomes a drop zone with a clear "drop to attach" overlay. There's also a click-to-upload button and an empty-state drop area in the Attachments section. PNG, JPG, GIF, WebP, up to 8 MB each. Magic-byte MIME validation server-side so renamed file extensions don't sneak through.
- Feature
@-mentions in card comments
Card comments now have the same @-mention typeahead the Wardroom uses — type @ and pick a teammate or share invitee. Notification delivery for these mentions is the next piece of work (today they're visible in the comment, not yet pushed to the mentioned person's bell).
- Feature
Fold related cards into a master to consolidate bugs
When a tester opens five cards that are all the same bug, open the master card's Breakdown section and click "Fold in existing cards". Pick the others from a searchable, checkbox list (each row shows the card's current section) and merge them in one click. They disappear from the board and live as subtasks under the master so the fix tracks against one card. Completed cards are filtered out of the list automatically.
- Improvement
Columns auto-sort by priority — drag is for status, not order
Inside any column, cards now sort by priority (urgent → high → medium → low) then oldest first. Bump a card's priority and it floats. Drag-between-columns still moves status; drag-within-column no longer matters. The Ashore (done) column flips the rule: most recently completed at the top so the freshest "shipped" surfaces first.
- Improvement
Cards show who opened them; recent comments pulse
Every card chip now shows a small avatar for whoever opened it (when different from the assignee), and external submitters get a subtle accent ring so portal-raised cards are spotted instantly. When a comment lands in the last 24 hours, the chip's comment icon pulses gently — fresh conversation surfaces without you having to open the card.
- Improvement
Filter the board by what you opened
The filter popover now has "Created by me" alongside "Assigned to me". Useful when you raised a bunch of cards as a tester or client and just want to see your own pile without the assignee noise.
- Improvement
Profile photo upload + multi-workspace switcher
Two long-overdue settings additions. A "Your profile" panel at the top of Settings lets you upload a photo (PNG/JPG/GIF/WebP, 4 MB) — your face appears on cards you create, comments you post, and beside your name across the workspace. And the sidebar workspace tile is now an actual switcher — if you're in more than one workspace, you flip between them in one click instead of being stuck on the first one you joined.
- Infra
Admin force-reload override for stuck clients
A server-side flag that makes every stale-bundle client auto-reload on their next poll instead of seeing a dismissable toast. For incidents and non-technical teammates who can't be asked to hard-refresh. Off by default; flipped on for the duration of an incident with a single env var.
- Feature
Ask the Captain — project-scoped AI assistant
A new chat surface inside every project, keyed in the project header. Ask things like "what's at risk this week?", "which cards are adrift and why?", "summarise what's shipped this month." The Captain reads the project's actual state — recent cards, the Tide log, current adrift list, retainer status — and answers grounded in that snapshot. Read-only in v1 (the Captain answers, you act). Per-(project, user) thread persists across sessions. Routed through the AI cost middleware with per-user rate limit and cost tracking like every other AI feature.
- Improvement
View as client — one-click portal preview from the project header
When a public portal is enabled, the project header now shows a "View as client" link that opens the portal in a new tab — anonymous, exactly as a client sees it. No more digging into the share dialog or pasting the URL by hand.
- Feature
Sign in with Google + GitHub
OAuth wired end-to-end. Existing email accounts auto-link when the OAuth email matches. Same login page, two extra buttons.
- Feature
Public portals can be invite-only
Per share, choose "Public — anyone with the link" or "Invite only." Invite-only portals require a one-click magic link emailed to addresses on the share's allow-list — no password, no signup. Existing portals stay public until owners flip them; new portals default to invite-only.
- FixInfra
Per-IP submission throttle on public portals
Layered under the workspace daily card cap: 5 submissions per IP per portal per rolling hour. Stops a single bad actor from burning a workspace's daily quota with junk submissions. Returns a clean 429 with retry_after in seconds.
- Feature
Forgot password flow
"Forgot?" link on the sign-in form. Enter your email, get a one-click recovery link, set a new password, you're back in. All Supabase auth emails (signup, magic link, recovery, change-email, reauth) now route through Resend with branded HTML and nautical subject lines.
- Improvement
Branded transactional emails
Every email Narcove sends — portal magic links, submission confirmations, workspace invites, all auth flows — now uses the same Saltwater Pop palette as the app. React Email templates, single shared layout, sent through Resend. Subjects pick up the maritime vocabulary: "Welcome aboard", "Your sign-in line", "Cast a new line", "Your request reached the harbour."
- Fix
Tutorial state moved to your account
The intro tutorial used to re-trigger every time you signed in on a fresh browser or incognito session — localStorage was the only store and it didn't survive logout. Now persisted to your profile, so dismissing it once means dismissed everywhere.
- ImprovementInfra
Display layer reads concepts.ts everywhere
Maritime vocabulary (Harbour, Open Water, In Tow, Underway, At Anchor, Ashore) was in a single config file but the UI was rendering raw column names from the DB. Now every surface — board headers, card drawer, Gantt rows, public portal, my-tasks — reads from concepts.ts with legacy-name fallback. Adrift cards now have a coral pill visible across all those surfaces.
- Fix
Bin icon: delete option, archive that actually works
The card drawer's bin icon used to offer Archive only — and clicking it didn't visibly do anything because the board's filter pipeline didn't exclude archived cards from the optimistic state. Both fixed: archive now hides the card immediately, and there's a destructive Delete option for permanent removal.
- Improvement
Gantt: edge handle now visible at rest
The right-edge resize handle on Gantt bars used to be a 2px transparent strip — discoverable only by accident. Now there's a subtle pill visible at rest and a bright glow on hover so the affordance reads "stretch the deadline" vs the bar body's "move the whole task."
- Feature
Calendar sync — Google, Outlook, Apple, anywhere
Subscribe to any calendar that publishes an ICS feed and your meetings automatically subtract from your available hours. Provider-agnostic by design — Google Calendar, Outlook / Microsoft 365, Apple iCloud, Fastmail, Proton, and anything else with an ICS URL. Read-only — we never write to your calendar. Refreshes every 30 minutes. The Gantt now shows meeting time as hatched stripes on each assignee's row so you see why work routes around them.
- Feature
Time off + per-project hour caps
Manual time-off entries (annual leave, sickness, recurring focus blocks) and per-project hour caps. The scheduler now subtracts both from each editor's capacity before placing work. Studio-wide capacity view shows hours used vs cap, with coral cells when an editor is over-allocated.
- Feature
Stripe billing scaffolding + AI usage caps
Workspace tier persists on workspaces.tier; checkout, customer portal, and webhook routes wired up. AI usage is metered per-seat per-month (Pro: 200 estimations + 50 plan runs; Team: 600 + 200) with a meter on the billing page. Past the cap, AI features 429 cleanly until reset.
- Feature
Branded portals + custom domain
Team workspaces can serve their portal at portal.your-domain.com via CNAME. Logo, accent colour, and brand name configurable in share settings. Hide the "Powered by Narcove" footer for full white-label.
- Improvement
Plan-with-AI: diff before apply
Plan-with-AI now returns a proposal — each suggested dependency is a checkbox. Untick what you disagree with, click Apply, only then do we touch the schedule. The DAG trigger refuses cycles either way.
- Feature
Per-user forward-pull on the Tide cascade
When a card moves to a done column, the assignee's next-ready card now pulls into the freed slot. Forward-pull was already happening in CPM space; this commit makes it actually persist via the cascade route. Emits a Tide log entry with kind "pulled_forward" for the public portal.
- Feature
Target vs projection bars on the Chart
Each card on the Chart now renders twice. The solid bar is the target — the date you committed to. The hatched overlay is the current projection — where the schedule actually puts it. The gap between them is the size and direction of your slip or your gain. Tooltip surfaces "X after target."
- Feature
"Tracking ahead/behind" summary on public portals
The public client portal now shows a single-card summary at the top: "Tracking three days ahead — projected for May 16, target May 20." Tone-tinted (success/coral/accent), with a four-hour fuzz for "On track." Replaces the status email entirely.
- Feature
The Tide log shipped to public portals
Every projection change now writes a row with a plain-language reason — "pulled forward 4 hours because copy review finished early." Reasons are generated by Claude Haiku 4.5 in batches of 12. The log appears under the kanban on the public portal and replaces the weekly status update.
- FeatureInfra
PWA shell installable
Narcove can now be installed as a PWA on desktop and Android. The web manifest, service worker, and offline shell all shipped. iOS install works but the bottom-nav UX still needs polish (parked for v2 of the mobile shell).
- Feature
UK bank holidays in scheduler and Chart
The Tide cascade now skips UK bank holidays by default. The Chart stripes them so the gap is visible. Other regions are configurable in workspace settings. The 2026 list is up to date through December.
- Improvement
Click-to-zoom on Chart axis dates
Click any axis tick on the Chart to jump straight to a day-level zoom of that day. Combined with cursor-anchored Ctrl+scroll zoom, the Chart now handles hour, day, week, and month views with the same muscle memory.
- Improvement
Splash effect on card drop
Drop a card into a column and a quick water-ripple animation fires under it. Pure CSS, respects prefers-reduced-motion. A small but charming bit of feedback that earned its line of code.
- Improvement
Animated water on login and onboarding
The login page now has a subtle animated water effect across the bottom. Same on the onboarding flow. Sets the maritime tone before the user's seen the kanban.
- FeatureFix
Plan-with-AI cycle-safe
Plan-with-AI's suggested dependency graph is now checked against the database trigger before applying. Cycles are refused at the database level. You can't accidentally apply a graph that loops, even with bad AI output.
- Infra
Concepts config + state vocabulary
Internal: maritime state vocabulary (Harbour, Open Water, Underway, In Tow, At Anchor, Ashore, Adrift) is now in a single concepts config. Display layer + Gantt refactor to read from it lands in a separate task. Foundation work.
Want updates by email?
We send a short note when something material ships — once or twice a month, no marketing fluff.