Changelog

All notable changes to Hubity are documented here.

Based on Keep a Changelog. This project uses Semantic Versioning.

May 29, 2026v16.18.1

Knowledge imports now show how many tokens each document will use before you start, and the total that will be drawn from your allowance, so a bulk upload never quietly empties your balance. Accent colours across the app now follow each section's own colour instead of the brand teal: checkboxes, row hovers, focus rings, form controls, and the import screens all pick up the panel they live in. And asking the assistant about a document that isn't there now gets a clear "no record of that yet" answer instead of an empty result.

Added
- The Import to Knowledge screen now shows an estimated token cost next to every file before you upload, plus the running total that will be drawn from your workspace allowance. The estimate is conservative (rounded up) so the number you see is never lower than what processing actually uses, and the footer spells out that the total "will be used" so a 25-file batch never surprises you by draining the balance mid-run.
- Tasks now take file attachments. Open any task and add a mockup, brief, or reference document (up to 10 MB per file); everyone on the task can open or download it, and whoever added a file can remove it. Files are stored privately to your workspace and stay reachable only while you are signed in.
- Hubity is now fully translated in every language we offer. German, Spanish, French, Italian, Japanese, Korean, Dutch, Polish, Brazilian and European Portuguese, and Turkish are each at complete coverage, so the labels, buttons, and messages that were still showing in English now read in your own language. Translations were written to sound natural in each language rather than word-for-word, and counts and dates that change with the number (like "3 documents") are phrased correctly per language.
Changed
- The sales pipeline forecast is now called "Pipeline Forecast" and lives at a clearer address, so it is no longer confused with the separate Predictions "Forecasts" page; old links redirect automatically. Model Health now sits under AI Performance (where its tab already lived) instead of as its own separate entry. Searching for a nested page now turns up the right result by what you type ("invoice aging", "ai settings", "new evaluation").
- The sidebar now expands the section you are in to show its sub-pages right beneath it. Open Invoicing and you see Revenue, Expenses, Budgets, Rate Sheets, and Aging without leaving the sidebar; every other section stays collapsed so it does not get crowded. Each sub-page carries its own section colour.
- Search and the quick switcher (Cmd/Ctrl+K) now find any section, sub-page, setting, or capability by name, not just documents, tasks, projects, and people, and take you straight there. Document, project, and teammate results now open the exact item instead of dropping you on a generic list.
- Section tabs now use the same name as the page they open. The Finance tabs read Invoicing / Revenue / Expenses (were Invoices / Income / Outflow), the AI tabs read AI Spend and Prompt Management (were Cost and Behavior), and the Sales tab reads Business Development (was Qualify). The Approvals tabs are now Pending / History so they no longer reuse the names of the separate Time Off and Audit Log sections.
- Imported documents now arrive with an effective start date already filled in. Hubity reads the most likely date from each file, favouring an effective or signing date and falling back to the proposal or submission date, and sets it as the document's effective start, so a new proposal or contract carries the date it took effect instead of a blank field you fill in by hand.
- Accent colour now matches the section you are in, everywhere. Checkboxes, table row hovers, focus rings, sliders, progress bars, and the buttons on the Knowledge import and review screens previously fell back to the brand teal even inside panels that have their own colour. They now take the colour of the panel they sit in (amber on Knowledge, indigo on Time Off, and so on), so nothing reads as a stray teal that does not match its surroundings. Surfaces with no panel colour, like sign-in and marketing pages, keep the brand teal.
- The two progress indicators on the import screen now use the same loading style, so the overall progress and the per-file progress read as one consistent animation instead of two different spinners.
- The guided setup review step now saves the certifications and bid-eligibility details it reads from your documents. Those two cards were preview-only before; confirm them in the review screen and they are written to your company profile along with the rest of the setup.
Fixed
- Polish: the Brand panel now shows its own colour and icon instead of borrowing Content Studio’s, Invoice Aging now lives with the other finance pages and shares the finance tab bar, and the "Definitions" and "Examples" placeholders (marked coming soon and opening nothing) were removed from Reference.
- Filled in dozens of table headers, form labels, and section titles across Deals, Proposals, Time Off, Budgets, Rate Sheets, and Messages that were showing placeholder text (like "Th deal" or "Col employee") instead of real words.
- Large document uploads now complete. Files above a few megabytes upload straight to storage, and that path was failing because it asked for public access to a storage area that is configured as private, which the storage service refused. Uploads now use the correct private access, so big PDFs and bulk sets import cleanly instead of stalling on "uploading".
- The profit-and-loss summary and the single-expense detail page were quietly failing to load their figures because they were requesting expense and revenue data from the wrong address. Both now load correctly, so the P&L overview shows real income and outflow totals and opening an expense shows its detail instead of a "not found" state.
- When a large document upload fails, the import screen now names the file that failed and tells you whether it was blocked before reaching storage or rejected once it got there, instead of one generic "could not be stored" line. Behind the scenes we also added a self-test for the large-file upload path so we can pinpoint a failure cause directly rather than reproducing it by hand.
- Importing several documents at once no longer loses your place. Saving one document used to close the whole import and discard the others Hubity had already read, wasting that work; the review now stays open until you have accepted, skipped, or rejected every document, and closing early asks first so a batch is never thrown away by accident.
- Asking the assistant about something that has not been uploaded now gets a direct, honest answer. A recent retrieval change let an internal "found nothing" note slip through as if it were a result, which could suppress the plain "no record of that yet" reply. The assistant again tells you clearly when the workspace has no matching document, names what it searched, and offers to broaden the search rather than guessing.
May 28, 2026v16.12.5

Knowledge search finds documents regardless of how you typed the name. Search for "baam" now surfaces "BAAM" because trigram ranking is case-blind, recent contracts and proposals rank above older ones on the same query so "current obligations" pulls 2024 work ahead of 2018 work, and storage sizes finally read in plain English ("60.0 GB" not "60000.0 MB", "14.8 MB" not "14819 KB"). The bulk-import flow uploads big PDFs directly to storage so a single 14 MB document no longer 413s the import button. Permanent delete from Restore opens a passkey or TOTP prompt right where you clicked, no more bounce to a different screen with no controls. A new workspace intelligence score in HQ ops shows at a glance how Hubity is performing for each tenant, derived from explicit thumbs, implicit dissatisfaction signals, tool success rates, and knowledge retrieval hit rates. Plus all the knowledge promotion, admin grid, and chat auto-retry improvements from earlier today.

Added
- A new workspace intelligence score lands in HQ ops, plus a sibling workspace knowledge stats endpoint that reports how much content Hubity has indexed for each tenant (document count, chunk count, estimated tokens, long-context eligibility tier). The smallest tier flags workspaces whose full knowledge base fits inside a frontier model's context window, ready for the upcoming "load everything, skip retrieval" routing follow-up. Internal cleanup: the chat tool handlers for playbooks moved into their own module to keep the parent navigable. The score is a per-tenant number in 0-1 that reflects how well Hubity is performing for each workspace, derived from four signals over the last 30 days: explicit thumbs up versus thumbs down on assistant answers (40 percent of the weight), implicit dissatisfaction signals like "no that's wrong" or rapid re-asks (20 percent), AI tool success rates from the existing tool audit log (25 percent), and knowledge retrieval hit rates on search calls (15 percent). The composite is renormalised when a component has no data so a brand-new workspace with only one thumb still reports a defensible number rather than being silently scaled down to a quarter of one component. The score lands behind a Hubity-internal HQ surface (operators allowlisted via the existing requireHQ gate) at a new endpoint that takes an optional companyId so the team can drill into any tenant from the fleet dashboard. Tier labels (excellent, good, fair, poor, unknown) make scanning a long workspace list quick, and the per-component breakdown ships in the response so an operator can see why a score is what it is. The HQ endpoint is read-only, audited, and rate-limited to 60 reads per minute per operator.
- Implicit feedback signal capture closes the loop for the 95 percent of chat turns where the user doesn't click a thumbs button. A new detector inspects every user message for four shapes that indicate the previous answer missed the mark: explicit negation ("no, that's wrong"), clarification requests ("can you elaborate"), redirects ("let me ask differently"), and re-asks within five minutes where the user rephrases the same question with high token overlap. False positives are kept low by requiring explicit lexical markers and by skipping stopwords during the re-ask overlap calculation. Detected signals are recorded as soft UI-activity events the new intelligence score reads back; no data leaves the workspace.
- The personal canvas now has real editing controls. Undo and redo cover every change, with keyboard shortcuts throughout: Cmd or Ctrl+Z to undo, add Shift (or Ctrl+Y) to redo, Cmd or Ctrl+D to duplicate the selected item, Delete or Backspace to remove it, arrow keys to nudge it (hold Shift to move ten pixels at a time), and Escape to deselect. A whole drag, resize, or freehand stroke collapses into a single undo step, so reversing a move is one keystroke instead of dragging everything back by hand, and an accidental delete is no longer permanent. Undo and redo are also a click away on the canvas toolbar. And you can now export the whole canvas as a scalable SVG to share, embed, or print, with every element and theme colour baked in.
- A new "Intelligence Roadmap: Deferred" document in the operations index records every intelligence-roadmap item that depends on third-party APIs, vendor egress, or cross-tenant inference, with the reason each one is parked and the checklist required to take it off the deferred list. Hubity's commitment is that no knowledge ever crosses tenant boundaries; this doc keeps the long-term plan honest about that promise. Operators and prospects can read the doc to understand exactly where the data line is drawn. A second section catalogs the internal Phase 5 and Phase 6 follow-ups (workspace ontology bootstrapping, active-learning chat integration, memory consolidation cron, per-feature quality dashboards, cost attribution dashboards, eval-driven prompt engineering, per-tool accuracy benchmarks, cost-of-quality routing, conversational interrupts, negative retrieval, tool composition macros) with scope estimates and pickup notes so the next session has a clear list. Plus a new memory-consolidation pure helper that decides which user memories to keep, refresh, merge by canonical key, or forget based on age and access frequency, ready for the consolidation cron follow-up.
- Knowledge promotion ladder extends to two more kinds. Extracted key dates now promote to Reminders in one click (the Reminders panel surfaces them on the Today board with the default 24-hour lead time, and the Reminder row carries the source-document reference back so the operator can re-open the doc in context). Extracted mentioned entities now promote to Client or Vendor rows when the operator confirms: the destination row is created with the extraction's context summary copied into the notes field, and the source mention is stamped with the canonical id so it cannot be promoted twice. Other entity kinds (contact, project, service line) still need richer creation forms and stay deferred to a later release; the route returns a clear "not yet implemented" response with the unsupported kind named, instead of silently failing.
- A new HQ-internal admin grid lands at /hq/knowledge-reclassify. Surfaces every workspace document the reclassifier could not auto-classify (confidence below the 0.85 floor) in a single sortable list with the workspace, document title, model confidence, and three dropdowns (authorship, role, status) per row. The operator picks the right values and clicks Apply; the trust tier recomputes automatically, the synthesis loop unblocks for the doc, and the row drops from the queue.
Changed
- Knowledge retrieval now gives a small recency bonus to recent documents. The semantic, full-text, and trigram retrievers each apply a soft boost (up to about a five-percent rank advantage) for documents less than a year old, based on the document's own dataAsOf stamp when available or the upload date as a fallback. On any query where two documents look equally relevant, the newer one rises above the older one. This directly addresses the "the 2024 contract should rank above the 2018 contract on current-obligations questions" feedback. The magnitude is intentionally small so the core relevance signal still dominates: this is tie-breaking and gentle nudging, not a wholesale reordering. Documents older than a year revert to the existing ranking, and a deeper "volatility-aware" decay (where rate sheets age faster than regulations) is filed as a follow-up.
- OKRs, Forecasts, and Analytics consolidated into a single Predictions panel at /hub/predictions. The three forward-looking surfaces now live behind one tab strip so operators find them in one place instead of hunting through three separate sidebar entries. Every internal reference (today widget panel path, project sidebar OKR relations, finance tab map, voice nav router, pinned-nav defaults, panel-accents lookup) now points directly at the new path so navigation lands in one hop instead of bouncing through the permanent redirect; old deep links continue to work via the redirect for emails and external bookmarks. Forecasts preserves its query string on redirect so a pasted `?win=10&value=-5&floor=30` scenario URL still resolves to the same view the sender saw.
- The "Working on…" goal pill that sat between the assistant response and the chat composer has been removed. It surfaced the server-side multi-turn goal tracker but read as visual noise on every iterative turn ("Working on Tell me about baam"). The drawing loader already tells you when Hubity is working; the pill was a second indicator competing for the same attention. The server-side tracker still records goals (the data is useful for analytics and future agent flows); the chrome is just gone.
Fixed
- Knowledge import now works end-to-end again after the recent direct-upload refactor. The browser was blocked from talking to the storage service by the Content Security Policy (the policy listed every other allowed host but did not list the upload endpoint), so the upload stayed stuck on "Queued. Your files are uploading." with red CSP errors in the console. The policy now includes the storage host pairs the direct-upload SDK needs (vercel.com and *.public.blob.vercel-storage.com), and the test harness for the upload flow now uses an image rather than a PDF in its categories loop so the fire-and-forget extraction chain cannot race with the next iteration of the same test. Big-file imports clear cleanly now.
- Knowledge search is now case-insensitive end-to-end. The trigram retriever that ranks documents by name-similarity was scoring on raw characters, so a search for "baam" ranked the BAAM proposal below the top-25 cutoff and the assistant truthfully reported "no results." Both sides of the similarity comparison are now lowercased before scoring, so "baam", "BAAM", "Baam", and "BAAM Inc." all find the same documents at the same rank. A regression test pins this behaviour so a future refactor cannot silently drop the case-folding. This was the bug that would have hidden entire workspaces of documents from any operator who typed the search the natural lowercase way.
- Storage numbers across the product are now both accurate and readable. Every size label (upload pickers, the document detail page, the files tab, content-studio brand uploads, the Knowledge library budget, and HQ ops) routes through one formatter that picks the largest sensible unit from the real byte count, so a 60 GB plan reads "60.0 GB" instead of "60000.0 MB" and a 14 MB PDF reads "14.5 MB" instead of "14819 KB". The storage budget meter and the upload-quota gate also stopped counting documents you have sent to trash: the moment you trash a document the budget reflects the recovery, and restoring it puts the usage back.
- Importing big PDFs no longer fails with a 413 (content too large). The bulk-import modal used to send every file as one giant multipart upload through the platform serverless function, which capped the whole request at 4.5 MB, so any single file over that ceiling, or any batch summing past it, was rejected before the import even started. The modal now uploads each file directly to storage through a signed token, then hands the import service only the resulting URLs. A 28 MB proposal that previously had no way through now imports cleanly. The same flow tightens the per-file tenant scope: every upload URL is namespaced to your workspace, and the import endpoint refuses any URL that does not match the workspace of the signed-in user, so a forged URL cannot reach a different company's files.
- Permanently deleting from the Restore section now asks for your passkey or TOTP code right where you clicked, instead of bouncing you to the Account Security page with no obvious next step. The Purge action previously detected the step-up requirement, redirected to /account/security, and left the operator stranded with no way to actually complete the verification and return. The flow now opens the shared step-up dialog inline (whichever method you have enrolled: Touch ID, security key, authenticator code, or email code), and on success automatically re-runs the same purge against the same selection. No more interrupted purges, no more bounce.
- Bulk-import errors now read in plain English instead of "Could not start the ingest. Please try again." A 401 says your session timed out and to refresh; a 403 names the access level required; a 413 names the actual size and tells you to split or upgrade; a 429 says you imported too fast and asks you to wait; a 5xx says we are having trouble reaching the import service and to try again in a moment. The same shape applies to the per-file upload step so the operator knows exactly which file failed and why.
- The bulk-import progress modal now surfaces a "Resuming…" hint after 60 seconds of silence on the stream. The worker can pause mid-extract on a Vercel cold start or a blob-fetch latency event; the resilience cron reclaims the run within about a minute, but the UI used to sit at a frozen percentage with no signal in between. The hint clears the instant a new frame arrives. Closing the modal still keeps the run going in the background.
- Chat auto-retries with the stronger model before ever asking you to rephrase a question. Previously, when the intent enforcement gate detected the assistant had answered without checking your live data, the response was replaced with "name the specific project, person, or date range" canned text and the user had to retype the question. Now, before any canned fallback ships, the route escalates to the smart model (Claude Sonnet 4.6) with an explicit instruction to pick the single most-likely tool and call it. The user does not need to do anything; if the escalation succeeds, the real answer ships in the same bubble. The fallback wording is only shown if the escalation also fails, and the new wording is a status ("Hubity tried twice and could not confirm an answer") rather than an ask ("rephrase your question"). The same change applies to the second-check gatekeeper path that produces the "draft did not hold up" message.
- Thinking-state progress cards stop showing the generic "Working on it" filler. The streaming chat path used to emit a tool_start event for every tool call, and tools without a specific human-readable phrase fell through to "Working on it" which rendered as an empty bell-icon card next to the real response. The route now skips the emit entirely when no specific phrase is available, so the only thinking-state cards that render are the ones that say something meaningful about the work in progress ("Checking the books", "Pulling team availability", etc.). The generic phrase is still resolvable internally for logging and observability; it just never reaches the bubble.
- Internal: the npm overrides block briefly regressed when removing the @simplewebauthn entries to unblock Dependabot, which broke npm install because @auth/core declares the older peerOptional. The entries are restored using the canonical $reference syntax so Dependabot can still bump the direct dep + override in one PR.
- The chat assistant now finds documents that were uploaded through the bulk-import flow when you ask a knowledge question. The legacy knowledge search only checked the original file-upload store; documents brought in through the bulk-import modal land in the AI-native chunk store instead, so a question about a bulk-imported document was answered with "no documents found" even though the content was indexed and ready to read. The search now falls through to the chunk store on a miss and forwards the matching excerpts in the same shape the assistant already understands, so you no longer have to remember which door a document came in through.
May 27, 2026v16.7.3

Bulk-imported documents are now searchable end-to-end and long-form RFPs survive the full pipeline, the AI can quote exact clauses from any uploaded contract or proposal within minutes of acceptance, every outbound AI call now carries a zero-retention audit marker enforced at CI time, a new outcome predictor reads your bid history before you commit to chasing a new opportunity, brand palette unified to three canonical colors, every asset regenerated, and Ask Hubity inline panels expand to five more surfaces with a second wave of panel-colour drift cleanup.

Added
- Documents imported through the bulk-upload modal are now indexed for retrieval the moment you accept the verify card. The full extracted text is chunked into overlapping sections (heading-aware, so each chunk keeps its place in the document), embedded with the same model the assistant uses for the rest of its memory, and stored alongside an exact-match lexical index. After accept, the assistant can pull the precise paragraph from page 47 of a 100-page contract and quote it back to you, instead of returning "I see you uploaded this but I cannot read its contents." The three ingest paths that used to live in parallel are now unified: anything you upload through the file picker, anything saved from an RFP analysis report, and anything brought in through the bulk-import modal all flow into the same retrieval surface, so a question about an upload finds the answer regardless of which door the document came in through. A new daily synthesis pass turns the raw chunks into derived facts: every day at 5 AM UTC, the system clusters the most recent chunks across each workspace, asks the assistant to pull out cross-document patterns ("the firm has repeated experience with historic-building rehabilitation", "Anchorage school district has been a recurring client over the last four bids"), and stores those facts in a per-workspace fact table that the assistant now sees on every chat turn. The top synthesized patterns are injected into the system prompt automatically so the assistant reflexively knows your workspace's recurring clients, recurring risks, and service strengths, without needing to call a tool to discover them. Ask "what kind of work do we usually take?" or "who are our recurring clients?" or "what risks come up across our projects?" and the answer is grounded in the synthesized facts, not in chunk-by-chunk guesswork. The injected block is constrained to facts above 50% confidence and to documents that are tagged company-wide, so a leadership-only or management-tier document never feeds the prompt. The data stays in your workspace: synthesis runs inside Hubity's tenant boundary, embeddings + LLM calls go to providers that contractually do not train on customer content, and the synthesized facts themselves never leave your company's scoped storage. The synthesis spend bills against the company token pool the same way regular chat turns do, capped at the 10 least-recently-synthesized tenants per run so a fleet of thousands works through itself across days instead of crushing the function runtime budget. Every chunk the assistant cites in a chat turn is also recorded so a future re-rank pass can boost frequently-cited chunks and decay rarely-used ones. Retrieval itself is more accurate too: three search techniques run in parallel and the results are fused into a single ranked list, so the assistant finds the right chunk whether you remember the exact term, a typo-tolerant partial, or just the meaning. The fused list is also diversified, so a single 50-chunk document cannot crowd out the rest of the corpus from the top results. Visibility is honoured at retrieval: a document tagged leadership-only is only surfaced to owners; a management-tier document only appears to owners, admins, and managers; everyone in the company sees the company-wide tier. The role-tier check is layered into every retrieval query as a defense-in-depth filter ON TOP of the existing per-company scope, and the gate fails closed by default (a future surface that forgets to thread the caller's role through is treated as the most restrictive role, not as bypassed). Bulk-uploaded contracts, proposals, memos, runbooks, meeting notes, and onboarding docs are all included. Documents that were uploaded before this release are picked up by two background indexers (one for newly-accepted bulk docs every 15 minutes, one for the unification sweep every 30 minutes); nothing on your side needs to be re-uploaded. Long documents (master plans, 500-page RFPs, multi-volume specs) now survive the full pipeline end-to-end: the extraction cap quadrupled, the section classifier sees the whole body of a 200-page document instead of just the first ~20 pages, and the deep RFP analysis pass reads the filtered non-boilerplate body of the entire doc. Chunk sizing also adapts to document kind: contracts and regulatory docs use longer, more context-rich chunks so a clause reference includes its surroundings; meeting notes use tighter chunks where each topic shift is dense; everything else stays at the standard size. The token cost of indexing (chunking + embedding) is billed against your company's monthly pool and appears in your per-seat allowance the same way chat tokens do; embedding is a fraction of a chat turn's cost (about $0.02 per million tokens of source material), so a 100-page contract typically lands well under a tenth of a cent, and the allowance indicator in the corner of the chat window reflects the spend in real time.
- The Ask Hubity inline panel now lives on Meeting Library, Calendar, Watchlist, Knowledge, and PTO in addition to the eleven panels added earlier. Each new panel has a grounded system prompt and five tailored canned prompts: Meeting Library offers "What did we decide last week?", "Pending action items from the last standup", "Find the meeting where we discussed pricing"; Calendar offers "Do I have a free 30-minute window?", "Conflicts with PTO this Friday", "How packed is next week?"; Watchlist offers "What's new across all my feeds today?", "Which feed has been most active?", "Items I've flagged or saved"; Knowledge offers "What does our knowledge base say about pricing?", "Find the onboarding guide", "Which playbooks mention enterprise sales?"; PTO offers "What's my current balance?", "Who else is off next week?", "Pending requests".
- The Ask Hubity inline panel now lives on Inbox as well, with prompts tuned to a combined-feed view: "What's most important in my inbox today?", "Anything time-sensitive I should respond to?", "Who's waiting on a reply from me?", "What can I safely ignore right now?", "Summarise the last few announcements".
Changed
- The Hubity brand palette is now exactly three colors that appear consistently across the entire product: a single teal as the brand accent, a warm dark gray for body text and the logo wordmark in light mode, and a slightly cooler off-white for body text and the logo wordmark in dark mode. No tonal siblings, no per-theme drift, no "almost the same teal in two places." The teal is reserved for accents, controls, buttons, badges, and larger headings; body text always renders in one of the two neutrals because no single teal can pass AA Normal as small text on both light AND dark surfaces (the contrast math forbids it). The off-white shifted slightly cooler so the dark-mode body text and the white-logo variant no longer carry a yellow undertone next to the warm dark gray. Every asset was regenerated against the new values: favicons, app icons, splash screens, PWA manifest, open-graph cards, email templates, and every inline SVG. A new ratchet enforces the rule going forward: body-sized text in teal fails CI on the next push.
Fixed
- Panel-scoped selection chrome stops painting the workspace brand teal in places it should be using the panel's own colour. The Evaluations rating pills (1-5 scale) now light up in the Evaluations indigo when you pick a rating; the PTO "schedule defaults" and "holidays empty" banners now tint with the PTO palm-leaf accent; the Knowledge category chip text uses the Knowledge accent; the Competitors selection checkboxes use the Competitors accent; the Integrations data-source pills and the discover-tab hint link both use the Integrations accent. Drift count fell from 65 to 48 in this pass.
- Internal: the production build switched off the legacy webpack bundler and onto Turbopack. Turbopack is the Rust-based default in current versions of the framework and uses substantially less memory at the bundling step. The build had been hitting the 6 GB heap ceiling on every full-suite run for several days, killing the build before it could finish; Turbopack completes inside the same memory envelope.
- Panel-colour drift fence dropped to zero. Three rounds of cleanup migrated selection chrome, soft-tint backgrounds, and accent text across every panel-scoped surface (Evaluations, PTO, Knowledge, Competitors, Integrations, Content Studio brand request button, Invoicing AR summary, Projects toast, Projects drawer presence dot, Knowledge guides "getting started" pill) from the workspace brand colour onto the panel's own accent. Workspace-administration surfaces (Settings, Panel Access, Inbox Messages chat bubbles) are scoped out of the detector because they ARE the workspace area where brand teal is the intentional design choice, not panels with their own accent. The drift ratchet started at 113 violations and now sits at zero; any new brand-teal leak in a panel page fails CI immediately.
- A pile of placeholder copy across the product was rewritten with real, populatable content. The cookie-consent modal now tells you exactly which categories Hubity stores (strictly necessary, functional, analytics, marketing) and how to revoke later; the Knowledge storage tier descriptions explain the differences (active, archived, vault) instead of repeating their snake-cased keys; the Meetings panel explains what happens when a recording is still finalising and offers to notify you the moment the transcript is ready; the Deals panel's terms-and-conditions builder, payment-schedule presets, and contract-clause library now have human-readable descriptions instead of slug-shaped strings; and the Budgets, Messages, and Projects new-task modal placeholders were given proper copy. 29 keys in total.
- A Timesheets reliability batch. Saving an entry with the "use a time range" toggle on but only one of start / end populated now blocks the save and shows a clear "fill both start and end" message instead of silently dropping one side and saving a single-point entry with the missing side defaulted to noon. The import batches list ignores a non-numeric `limit` query parameter and falls back to the default page size of 20 instead of letting NaN reach the database (a stray `limit=abc` used to propagate through `Math.min`/`Math.max` as NaN and return zero rows with no error message). (Codex P2 #1230, #1220.)
- Naming an org-chart template " " (only whitespace) is now rejected at the save step instead of silently passing the minimum-length check and landing in the database as a blank-looking template. Same fix on rename. The trim happens before the length check on both Create and Update routes. (Codex P2 #1225.)
- The Brand Settings hex colour input regained its visible "Hex" label next to the swatch. The colour-picker redesign had collapsed both controls under the parent "Brand color" label, which left the manual hex field reading as an orphan monospace input with no instruction on what to type. (Codex P2 #1243.)
- Editing an activity in Settings and clearing the optional Category or Rate Override field now actually clears the column on save. The previous shape sent `undefined` for both empty fields, which the server treated as "no change" and silently preserved the old value, making it impossible to remove a category or rate once set. (Codex P2 #1229.)
- The Team Report filter bar keeps each label + control pair together when the row wraps to a narrow viewport. From, To, and Group-by used to wrap with their labels stranded on a line above their input on tablet widths; the pairs are now inline-flex groups with whitespace-nowrap so they wrap as one unit. (Codex P2 #1227.)
- The "Install Hubity" desktop nudge on Today now catches the install offer even when Chrome or Edge fires it before the React component mounts. The browser dispatches the install event exactly once per session, and on a route change to Today the nudge component used to attach its listener too late and stay hidden forever. A module-level capture latches the event the moment the module loads. (Codex P2 #1198.)
- Non-English locales now have proper translations for the Org Chart printable exhibit (date strings, legend, exhibit title, section headings). German, French, and Spanish copies were left in English when the new print layout shipped; the four locales now render with native copy. (Codex P2 #1237.)
- The streamed assistant reply now collapses em dashes cleanly even when the dash and its surrounding whitespace straddle a streaming chunk boundary. The old shape replaced em dashes with a comma plus space inside each chunk in isolation, which left a stray space before the comma when the trailing whitespace and the dash arrived in different chunks. The sanitizer now holds the chunk-boundary whitespace one tick so the cross-chunk match still resolves to a single comma. (Codex P2 #1201.)
- Tasks PATCH now validates `startDate` and `dueDate` strings before trying to coerce them to ISO format. A malformed date string used to bubble a `RangeError` out of `new Date(...).toISOString()` into the 500 handler with an opaque server-error message; the route now responds with a clear 400 naming which field is invalid. (Codex P2 #1214.)
- Internal: five authoring fences now live as a local linter plugin in addition to the existing pre-push detector. No-em-dash and no-emoji rules surface violations in real time through editor extensions and the autosave hook, the linter autofix turns an em dash into a comma without a doubled space, and an opt-out at a specific call site uses the standard disable-next-line marker instead of a bespoke ALLOWED comment. The same plugin adds no-double-hyphen (sentence-connector double dashes), no-magic-fontsize (numeric fontSize without a CSS variable plus Tailwind leading-[Npx] with small N), and no-magic-radius (numeric borderRadius without a token) as AST-based rules so they are more precise than the legacy regex detector, and the rendered-output exemptions (Open Graph image generators, the PDF builder, the PPTX builder) are scoped at the linter config layer. The detector scripts keep running in the gate as a backstop and a baseline ratchet for locale strings; the source-code rules just have an earlier, faster signal now.
- Chat responses are more reliable. A class of edge cases where assistant replies contained inaccurate navigation or citations was tightened up so the answer the user sees is closer to ground truth.
- A bundle of follow-ups to the May 27 release. The Import to Knowledge modal stops closing the second you reject one item; the modal stays open with each card showing its own "Saved" placeholder until you have decided on every entry, and the footer shows a clean "Done (N/M)" progress button that promotes to the primary action once everything is reviewed. Items you explicitly skipped in a prior session no longer resurface alongside a fresh upload, which fixes the bug where uploading one file showed two cards in the verify tray. Long-document classification (master plans, 100-page contracts, multi-volume specs) no longer cuts off mid-JSON, so the verify card stops falling back to "could not extract enough text to classify automatically" on files the system actually did read. Bulk-delete from the Knowledge panel no longer fails with a type-mismatch error when a batch is sent. Citation linting in chat is more tolerant of human document titles: when the assistant cites a real document name (with spaces or punctuation) inside a Source marker, the linter no longer flags it as an unknown tool. The Knowledge upload modal also reads as plain English now ("Closing keeps the run going in the background" instead of "server-side"). The Forecasts page sliders no longer flash the page on every drag (the slider style objects were being recreated on every render; they are now module-level constants that React reuses, and the scenario controls render through React.memo). The deal name and client name fields on the Forecasts page changed from manual text inputs to live dropdowns populated from your existing Deals and Clients, so the operator picks from the workspace rather than retyping a name that the forecaster will then fail to find. Inviting a teammate and signing in via the invite link now properly flips the Team panel from "Invited" to a normal active card on the very next paint (the staff record was getting linked to the new user but the legacy invited-flag was not being cleared; the verify-code path now clears it atomically, and the Team API derives the badge from "linked AND not invited" as a safety net so any teammate who landed via the invite path before today self-heals on the next refresh). Every outbound AI call (OpenAI, Anthropic, Google Gemini) now flows through a single zero-retention gate, paired with a new outcome predictor that reads your bid history before you commit to chasing a new opportunity. The gate stamps a per-call audit marker on every chat turn, embedding call, classification pass, and background AI job so a future SOC 2 or ISO 27001 reviewer can verify in one grep that every call leaves the workspace under the no-train envelope, sets the per-call opt-out flag where the provider supports it (OpenAI accepts store:false to disable 30-day request body retention), and attaches workspace-scoped metadata so per-tenant abuse monitoring engages without leaking the human user identifier. The provider contracts already say they do not train on customer content; the gate makes the audit trail one-line-verifiable. A CI drift detector fails the build whenever a new call site is added that bypasses the gate; the list of grandfathered legacy call sites can only shrink, never grow, so coverage ratchets toward 100% with every release. The new outcome predictor uses the same zero-retention envelope. Paste or describe an opportunity into chat and the AI calls back with an estimated fit out of 100, your historical hit rate from the past 24 months of closed RFPs (won / lost / total), the recurring risks that come up over and over in your work, the service strengths that line up, and up to three similar past analyses with their outcomes so you can see "we have seen this shape before; here is what happened the last three times." Every number cites its data source so the AI does not fabricate a forecast; the LLM only narrates the structured signal. On workspaces with fewer than three closed bids the predictor still runs but flags the hit-rate field as "insufficient history" and surfaces the partial signal (facts plus similar analyses) so a green workspace gets value without a misleading number. Manager-level and above, pairs naturally with the existing RFP analyzer (the predictor is the cheap upfront read against history; the analyzer is the deep paid pass against the actual RFP body).
May 26, 2026v15.2.0

Project flow charts gain a richer editor (draggable nodes in view mode, trackpad pan and zoom, task-health popovers), the Freestyle personal canvas extends to full sidebar height with drawing, image upload, widget embed, multi-collaborator editing, and a smart "Organize" affordance that row-bands the board into a clean composition. Read-only share links extend to four new entity types (Freestyle, Org Chart, poll results, documents) behind a PII scrubber and a "Shared via Hubity" watermark. Multi-contact roster on every Client, the project Contact picker that promotes inline notes into the client's contact list, and a glass-styling consistency sweep across the hub round out the release.

Added
- The project edit modal's Client Contact and Client Email fields became a single searchable Contact picker backed by the client's multi-contact roster. Type to filter contacts already on file; pick one to populate both fields and link the project to a real contact row, OR type a new name and the picker offers three explicit actions: add as a new contact, add and promote to primary, or keep one-off for this project only. When a typed value diverges from a linked contact's on-file info, the picker calls out the mismatch so the operator can decide whether to update the client record or leave the project override standalone. Every project now points at a stable ClientContact id when one is the source, so re-renaming a contact on the Client page propagates everywhere instead of leaving stale strings on old projects.
- Continue-in-Chat transfers the panel Q&A into a brand-new chat session and renders three suggested follow-up questions as clickable chips beneath the assistant turn. The chat opens already mid-conversation rather than at "ask again", and the follow-up chips are tailored to the question and answer you just read (generated by a quick second pass alongside the main answer). Click a chip to send it as the next user message; click any other input to free-form your own follow-up. Falls back to the v12.11 prompt-only seeding if your browser blocks sessionStorage (private mode, sandboxed iframes).
- The Ask Hubity inline panel now lives on Standups too, with canned prompts tuned to a live-board view: "Anyone blocked right now?", "What shipped this week?", "Which projects haven't posted an update?". Standups admits every employee, so the inline AI on this panel also admits employees, while every other panel keeps its existing role floor.
- Project flow charts and the Freestyle personal canvas both gain a richer editor. Flow chart nodes are draggable in view mode (not just edit mode), pan and zoom work with the trackpad and mouse wheel without holding a modifier, and hover popovers show task health at a glance. Flow charts also gained automatic connectors: solid lines render the predecessor relationship from each task's "blocked by" reference, and dotted lines infer the implicit sequence when one task's due date lands before another's start date in the same column, so a project that used to read as a row of disconnected boxes now shows its actual flow on first paint, no manual edge-drawing required. A small legend at the top of the canvas decodes the three edge classes (predecessor, inferred, custom) when any are present. Phase 2 of the schedule wire-up also lands: a new N:N task dependency table with the full PMI/PMBOK relation types (finish-to-start, start-to-start, finish-to-finish, start-to-finish) and signed lag hours, so a schedule imported from MS Project, Asana, or Jira can preserve every relationship without losing fidelity. The new table is also wired into the task drawer with a "Blocked by" / "Blocking" predecessor editor: pick a sibling task, pick the relation type (finish-to-start, start-to-start, finish-to-finish, start-to-finish), set lag hours if needed, and the dependency lands on the canvas immediately as a solid edge. Imports from Asana CSV and Jira CSV round out the schedule wire-up: paste an export from either tool and the importer maps task ids, parent/sub-task hierarchies, status / priority / due date columns, and the "Dependencies" / "Inward issue link (is blocked by)" columns into native tasks plus the new dependency table, all in one transaction. The importer now has a dedicated "Import schedule" button in every project header that opens a preview-then-commit modal: paste or drop a CSV, choose Auto / Asana / Jira / MS Project XML, see the parsed tasks + dependency count + parser notes, commit when satisfied. MS Project XML support reads outline levels, percent-complete (mapped to status), priority, predecessor links with all four relation types (FS / SS / FF / SF), and signed lag in hours; subtask hierarchies of any depth are preserved end-to-end. Hubity also dropped the historical "two levels max" cap on task nesting across every surface: flow chart, Gantt, kanban, the bulk-import handler, and the AI mapper now round-trip an arbitrary WBS structure faithfully (a five-level MS Project schedule lands as a five-level Hubity project). Canvas gestures also got an upgrade: pinch-to-zoom + pan now work simultaneously on every canvas: project flow chart, Freestyle, and the team Org Chart all behave like a map app, where the canvas follows your fingers as you pinch and drag in one continuous motion instead of snapping to a fixed anchor. The team Org Chart also gained touch pan + pinch from scratch. It had only mouse pan before, so touch users could not navigate at all. The post-login redirect lands users on the same origin they signed in from (hubity.io/app) instead of bouncing to a workspace-subdomain URL that produced a blank page; Hubity does not host workspaces on subdomains. And Hubity Pin cards on Freestyle now refresh from the live entity on mount so a renamed task or closed project shows the current title + status instead of the snapshot the pin was created with, with a small "no longer accessible" hint when the pin's target has been deleted or moved out of reach. The Freestyle canvas also picks up a new "Pin entity" tool that drops a live card linking to any task, project, meeting, poll, document, or teammate by URL. The card carries an Open link back to the entity's 360 page so a board can pull together every related artefact in one place. The Freestyle canvas extends to the full sidebar height with the same glass treatment as every other panel, the zoom controls moved to a top-left dock so they stop covering the lower right of the board, and a new "Organize" affordance intelligently row-bands and evenly spaces every item on the canvas with consistent margins so a free-form session can settle into a clean composition without a manual sweep.
- Read-only share links extend to four new entity types: the Freestyle canvas (live drawing surface), the Org Chart (workspace reporting tree), poll results (without ever surfacing voter names regardless of in-app settings), and uploaded documents (password-required by default when flagged confidential). Every shared payload runs through a PII scrubber (SSNs, Luhn-verified credit cards, emails, phones, bearer tokens) before it leaves the workspace, and every shared surface carries a "Shared via Hubity" watermark so the recipient knows the source.
Changed
- Clients graduated out of the Sales-funnel tab strip and into the Operations group, next to Projects and Team. Every project, proposal, deal, and invoice rolls up to a Client row, so the operational spine outgrew the funnel and now has its own panel identity. Old deep links continue to work via a permanent redirect; the new panel has its own Ask Hubity row with five starter prompts ("Which clients have we not talked to in 30 days?", "Top clients by billed amount this quarter", "Overdue balances right now", "Prospects sitting longest in the funnel", "Active clients with no current project"). Creating or editing a project uses a searchable client picker instead of free-text: typing offers matching client cards, the contact name and email auto-fill from the selection, and a name that does not exist offers a one-click "Use as new client" option that creates the Client at save time. The project detail page also picks up an Edit affordance in its header action row, so renaming, restatusing, or trashing a project no longer requires backing out to the portfolio list.
- A site-wide form-input and dialog polish pass. The Self-reflection and manager-review experience reads as written-by-a-person instead of generic-form: every textarea seeds with a concrete starter sentence tailored to the prompt, and the Start-an-evaluation submit is restyled as a proper primary action in the panel's signature colour. The same pass fixed two long-standing CSS bugs: textareas across every panel (Deal notes, PTO notes, Client drawer notes, billing-address, etc.) finally breathe a consistent 10px top + bottom because the textarea-scoped rule wins over inline padding overrides, and form placeholders no longer render in the same colour as real content (Firefox double-muting also corrected). The New Client, New Deal, PTO Request, and evaluation forms also received realistic placeholder copy. Every remaining browser dialog (the small black-on-white modal that does not match the rest of Hubity) also got replaced with the themed equivalent that respects the workspace accent colour, the dark theme, and the keyboard shortcuts every other dialog uses; the migration covers the Agent Approvals decision prompts, Team org-chart reparent confirm and group-rename, Panel Access reason prompt and step-up nudge, Personal AI Memory clear confirms, Activities delete confirm, Timesheets confirms and result toasts, Import Wizard revert flow, Approvals Queue bulk result, and Freestyle rename. Header rows across the hub also consolidate stacked tab strips onto a single line when there is horizontal room: Knowledge collapsed three rows of pills into one wrap row, Projects merged the View toggle with the status filter pills, Team brought the Grid / Org Chart toggle and the full filter row onto a single line in grid view, Invoicing put the Finance cluster tabs, the section tabs, and the search box all on one line, and Timesheets tightened its tab row by dropping a redundant double-margin override and surfacing the manager "Log time for" dropdown inline next to the tabs. Narrow viewports still wrap gracefully.
Fixed
- Standups stops broadcasting mouse positions outside of a live session. Industry standard on board-style surfaces (Linear, Notion, Asana, Jira) is presence avatars plus live data updates, not cursor tracking. The cursor overlay now appears only during an active standup, paired with the broadcaster-side gate so the only cursor on the board is the facilitator's. Live data updates (task moves, new cards, status flips) continue to flow through the WS channel regardless.
- Chrome polish across the panels. The custom task-status editor stops letting its action icons drift onto the card's rounded bottom corner when a status label wraps to two lines (long names ellipse, action buttons keep a fixed 28×28 footprint). The Billing seat roster stops eating the row width with status text and an "Edit in roster" link, both of which forced names and roles to ellipse; status now reads from the colored presence dot plus a tooltip, and the editor link collapses to a small icon. And every 360 Context sidebar (Team, Client, Deal, Invoice, Project) dropped the duplicate empty-state buttons that fired alongside a header CTA pointing at the same intent; the shared relation-card primitive now suppresses the empty-state pill whenever the header already exposes the action.
- A multi-pass panel-colour drift sweep across the hub. Pastel section-accent surfaces (Invoicing's "Add line item", Watchlist bookmark/bell icons, Notification deep-links, Integration template chips, Client name cells, Competitor breadcrumbs, Calendar soft accents, and a dozen more) switched to the saturated signature variant that matches each panel's button fills and icon badges, so every panel reads as one continuous voice instead of two-tone teal-vs-panel. Selection chrome, focus rings, soft-tint backgrounds, and accent text across Deals, Invoicing, Integrations, Knowledge, Team, Approval History, Polls, and Evaluations dropped their dead workspace-brand fallbacks too. The project portfolio cards' percent-complete bar now paints in the panel's signature steel-gray instead of brand teal, the project detail page renders Ask Hubity above its view-tab strip to match the canonical ordering every other panel uses, and tab-strip + search rows align on the same vertical line whether the container uses a class or an inline style. A new selection-chrome border detector ratchets down the count of pastel-vs-signature mismatches (existing 18 grandfathered, future drift fails CI).
- The Stop button on the chat composer reliably disappears the instant you click it, instead of lingering visible while the in-flight request unwinds. The previous shape waited up to 600ms for the natural finally block to clear the loading state, which intermittently flunked the end-to-end regression test; the new shape flips the state synchronously so the Send pill returns on the next paint. The fetch abort and the finally block still run as before; both are now idempotent, and a fast Stop then Send sequence is bounded by render time rather than the safety-net timer.
- A Timesheets reliability batch. A timesheet period that was rejected by a manager can be resubmitted by the employee after they fix the entries (the resubmit soft-deletes the rejected row in the same transaction so the unique-index slot reopens, and the rejected row stays in the audit trail intact). Templates with null descriptions save cleanly now that the route honours the nullable column. The paste-natural-language preview resolves up to 2000 rows to match the commit cap (was 1000, which meant a 1500-row paste previewed only the first 1000). And the file picker enforces the 5-attachment cap at the loop level, not per-file, so picking 7 files at once shows one toast and stages the first 5.
- A chat reliability batch. The Stop button on the composer flips state synchronously so it disappears the instant you click, ending the intermittent lingering during in-flight unwind. Hard-deleting a conversation purges every bound projection (canvas versions, canvases, artifacts, AI feedback rows) along with the messages, instead of orphaning them for the cleanup cron. The implicit image edit only picks up a recent artifact when its format is one every provider accepts (JPEG, PNG, WebP), filtering out HEIC, AVIF, and BMP that would error downstream. And image editing now works in workspaces that allow only Google (Gemini) and not OpenAI; the preflight is conditional on whether Gemini can serve the request, instead of requiring the OpenAI key upfront.
- The Org Chart printable exhibit builds the reporting tree from the manager id, not the manager's display name. The legacy name-keyed match could collapse two teammates with identical names onto one branch, and renaming a manager could orphan their reports until a full reload landed.
- Pricing lookups against the GSA hourly-rate API now handle case-insensitive Content-Type response headers per RFC 7231. The portal occasionally returns "APPLICATION/JSON" in uppercase, which the earlier exact-match degraded to the non-JSON warning path even though the body was valid JSON.
- Internal: a pair of CI authoring fences tightened up. The inline-answer route's role gate became a per-panel minimum role table mirroring each page's own gate exactly, so an employee-floor panel like Standups can host the inline AI without false 403s; adding a new panel only touches the table. And the em-dash rule on locale strings is now part of the regression gate alongside the em-dash rule on rendered code (was running but printing informationally only); new em dashes in translation copy fail CI, with the existing 105 entries grandfathered in the ratchet baseline.
- A round of glass-styling consistency across the hub. Cards in the Content Studio brand sections (typography, identity, asset previews), Knowledge guides, Integrations connect and templates, Inbox announcements form, Project board kanban columns + task cards, the Invoicing summary stats and tables, the Letterhead theme customize panel, Feed item synopsis cards, Connector observation metric and audio cards, BD Quick Setup info banner, and the AskHubity inline echo all migrate to the canonical glass treatment instead of opaque slabs that read as misconfigured against the rest of the workspace.
- Image-edit turns no longer hallucinate completion. When the user attached an image and asked for a change ("turn this into an isometric view", "make the shutters red", "try it at night"), the assistant could describe doing the edit without actually invoking the image-edit tool, so the bubble showed a confident "Here's the isometric view..." paragraph with no image attached. Two fixes combine: the image-edit tool now lives at the same role floor as image generation (matching the documented capability, employee and above), and the system prompt for image processing now teaches the model to distinguish "extract data from this image" turns from "modify the picture itself" turns and to invoke the edit tool before claiming the edit was made.
- A class of chat duplicate-paragraph bugs cleared. On the image-edit and image-generation turn shapes, the assistant sometimes emitted its answer, then a follow-up offer line, then a verbatim repeat of the same answer; OR emitted the same paragraph twice with a blank line between them and nothing else. Three combined fixes catch every shape: the follow-up parser detects when the trailing block is a verbatim echo of the leading block and strips the echo while surfacing the offer chip normally; the post-tool dedup gained an embedded-echo branch that strips a Phase 1 substring from anywhere inside Phase 3 (not just as a prefix); and the same dedup now recurses through the prefix-strip path so a "Phase 1 then Phase 1 again then real new content" shape is reduced to just the new content. A small blinking caret at the end of the streaming bubble was also added so users have a live "still working" signal between the assistant's first token and the stream ending. The existing thinking-sketch overlay hides once any content arrives, which left a window where the bubble looked finished even though more tokens were still on the wire.
- Internal: a pair of cost-and-correctness drift fixes. The chat golden-set replay and the knowledge-plane replay both moved from a weekly cadence to a biweekly cadence (1st and 15th of each month); Anthropic upstream point releases are infrequent enough that a ~14-day detection window is acceptable, and combined with the April 2026 cut from daily to weekly, the two reductions drop the eval cron Anthropic spend by ~80%. Separately, the chat staff-tool fallback CREATE TABLE picked up the missing notes column it was implicitly relying on at the SELECT layer; without the column the match-loop crashed on workspaces that had not yet run the schema migration.
May 25, 2026v12.11.0

Ask Hubity inline panels now land on Projects, Deals, Team, Timesheets, and Invoicing with panel-tailored canned prompts each, and "Continue in chat" opens a fresh chat session instead of appending to whatever was last open.

Added
- The "Ask Hubity about your ..." inline panel now lives on Projects, Deals, Team, Timesheets, and Invoicing in addition to Analytics, Business Health, P&L, and AI Performance. Each panel has tailored canned prompts: Projects offers "Which projects are at risk?", "Show me overdue tasks", "Who has the most projects assigned?"; Deals offers "Which deals are stalling?", "Weighted forecast for this quarter", "Deals haven't been touched in 14 days"; Team offers "Who joined most recently?", "Headcount by department"; Timesheets offers "Show utilization this week", "Anyone close to overtime?"; Invoicing offers "Which invoices are overdue?", "AR aging by bucket". Each panel's system prompt grounds the assistant in that surface's data shape so answers stay specific.
- Notifications now fire when invoices send, approvals are requested, and ownership changes on deals or tasks, so the right person hears about the work immediately. Toast messages are also more consistent across the workspace.
- Owners now see an in-app warning when a billing payment fails, invoice detail pages show every reminder we've sent, and failed invoice sends carry a recovery prompt so nothing goes silently unsent.
Changed
- "Continue in chat" on every inline AI panel now opens a FRESH chat conversation instead of appending the question to whichever conversation was last open. The hand-off carries the question into a new thread, so the chat reads top-to-bottom as a clean follow-up rather than mid-conversation drift into a different topic. The deeper version of this hand-off (transferring the already-streamed inline answer plus suggested follow-up chips) is coming in the next release.
May 24, 2026v12.29.0

The deal detail page becomes a real operational tool: change stage, set probability, and add notes inline, and one click converts a won deal into a project.

Added
- Update a deal's stage and probability without leaving the deal page. The stage chip became an inline dropdown and probability has a numeric input next to it; both save the moment you commit, roll back on failure, and surface a small Saving hint while the change is in flight.
- Add notes, call summaries, emails, meeting recaps, or status changes to a deal's activity feed directly from the deal page. The Recent activity card grew an Add note action that opens an inline form, posts the entry, and refreshes the feed so the new row appears at the top.
- Convert a won deal into a project in one click. The deal page header now carries a Convert to project action whenever the deal is closed-won; it spawns the project, links it through the activity feed, and navigates you straight to the new project page. The Related projects card also surfaces the same action as its empty-state CTA when the won deal has no project yet.
- The Proposals card on every deal now carries an always-visible New proposal action so a manager can draft a follow-on offer (re-pricing, scope-change quote) even when the deal already has proposals on file.
- Approve a team member's PTO and timesheets directly from their profile. Managers opening a teammate in the Team panel now see pending time-off and submitted timesheets with inline Approve, Deny, and Return controls, plus a Start evaluation shortcut. The same self-approval and segregation-of-duties rules apply, so a manager can never sign off on their own request from this surface.
- Invoicing got its operator tools. Click any invoice in the list to open its 360 view; from there you can send the invoice (or resend it), flip its status to paid, void, overdue, or back to draft from an inline dropdown, and record a payment in the page without bouncing to a separate form. The Payments card recomputes the outstanding balance on every save and flips the invoice to paid the moment the running total covers the amount. Line items got inline Edit and Delete controls plus an Add line item header action so the daily-driver loop now lives in one place.
- Log calls, meetings, emails, and free-form notes against a client without leaving the client page. The new Recent activity card on Client 360 takes a short summary plus an optional extra-context field, prepends the entry to the feed in place, and timestamps each touchpoint with the actor and a relative "x days ago" label. The same page also grew header affordances on every relation section (New deal, New project, New proposal, New invoice) so the next move is always one click from where you read the row.
- Invoice line items finally became editable in place. Every row on the Line items card carries Edit and Delete buttons, and the card has a header Add line item action. Edit opens a small inline form preloaded with the row's description, quantity, and unit price; saving replaces just that row and shows the running total before you commit. The route refuses changes on non-draft invoices, so a locked invoice surfaces a real Cannot change this invoice message rather than silently swallowing the click.
- Sending an invoice now actually sends the email. Hitting Send invoice in the 360 header dispatches the invoice via our email provider with your company name as the sender, the client's contact email as the recipient, and the brand-formatted amount and due date in the body. If the contact email is missing, the page surfaces a clear "Add a contact email to this client" message before flipping any status. A new secondary Mark as sent button records the send without dispatching the email, for invoices you mailed off-platform. If the email provider rejects a send, the banner says so explicitly with the provider's reason, never silently.
- Assign a teammate to a project from their profile. The Active projects card on a team member's 360 view now carries an Assign to project header action (managers only) that lists every active project they're not already on, lets you name a starter task, and creates the assignment in one click. The teammate immediately shows up in the project's team roster, the same model every other project assignment uses, no parallel membership concept.
- Edit your company snapshot directly in the Business Development panel. Locations, service lines, prior work, subcontractors, certifications, eligibility parameters, capacity exceptions, and open requisitions all gained inline Add, Edit, and Delete affordances. Clicking the pencil on any row opens a per-row form preloaded with the current values, saving updates the row in place, and the RFP analyser sees the new shape on its next run. Previously every change had to go through Ask Hubity; now the panel itself is the operational tool.
- Hubity continuously verifies the payment-recording, invoice-send, deal-conversion, competitor-outcome, and client-touchpoint flows in production via background probes that run against staging on every push and nightly against the live deploy. Every probe rejects anonymous callers and round-trips a real write where a fixture is seeded, so a regression that silently broke any of these surfaces is caught within minutes rather than waiting for a customer to report it. Alongside this, domain-specific recovery screens now appear when invoicing, deals, projects, approvals, or onboarding hit a transient issue, so the rest of the workspace stays usable while the affected area recovers.
- Cross-entity workflow polish: completed projects now carry a Generate invoice button that deep-links into the Unbilled tab pre-filtered to that project, accepted proposals carry a one-click Convert to invoice action that spawns a draft invoice and routes you to it, deals without a linked client gain a Create client from this deal header action that promotes the deal's counterparty in place, marking a project complete now also leaves a delivery-done note on the originating deal's activity feed so the sales-to-delivery loop closes on its own, and time-entry creation now refuses backdated rows for offboarded teammates so the audit trail can't drift after a staff deactivation.
Changed
- Standups filter pills (Department, Assignee, Status, Blocked-only) now match the elevation of the Sort dropdown next to them. Earlier the four filter pills used the darkest surface and the Sort dropdown used a lighter one, so the row read as two different greys. All five controls now share the same interactive-control elevation, and an active filter darkens with a 14% accent tint instead of jumping to a different surface entirely.
- Every panel's "About this section" accordion now carries an explicit Access note footer (the RFP Analyzer panel had been missing one), and a new drift check holds the line so future panels can't ship without it. The note tells you which roles can see the page and what the employee fallback is, so an admin onboarding a new team never has to guess.
- The Ask Hubity Inline prompts on every panel were tightened to action-driving questions and now show up on Project, Deal, Invoice, and Client detail pages too with context-aware suggestions.
- Onboarding got a polish pass. The verification-code screen now tells you what happens next, the "Join existing" and "Create new" workspace options each explain the consequence of the choice (admin approval vs. immediate ownership), invited users no longer briefly see the domain-choice step before their assigned workspace resolves, and a fresh sign-in whose roster prefill never lands surfaces a clear "We couldn't auto-fill your details" hint instead of leaving the form silently empty.
- Workspace polish pass on accessibility, bulk-action ergonomics, and search consistency. Keyboard navigation, screen-reader labels, and modal focus management are now consistent across the app: icon-only buttons announce their action, dialogs return focus to the control that opened them, the deals row menu and PTO drawer close on Escape, and the revenue chart legend pairs every colour swatch with an icon. Alongside that, timesheets, agent approvals, and notifications gained per-row checkboxes plus a floating action bar so an operator can clear a queue in seconds; every per-row guard still applies, so self-approval blocks and already-decided races still hold when ten rows are decided at once. Pages now show a loading indicator during initial load instead of a blank screen, so it's obvious when the workspace is fetching data after a cold start. Search inputs across the workspace were standardised so debouncing, styling, and empty-state messages are consistent on every list page; typing the same query on Deals, Team, Proposals, Knowledge, and Invoices now feels like the same control with the same latency and the same "no matches" message.
Fixed
- The "New Conversation" button in the chat history sidebar no longer takes on a too-light workspace brand colour. Chat chrome (the new-conversation CTA, the back-to-chat affordance, the brandmark tile) is Hubity's voice, not the workspace's customer-facing brand, so it now uses the canonical Hubity teal regardless of what brand colour the workspace has configured. Brand-coloured CTAs continue to land on customer-facing artifacts (proposals, letterheads, Content Studio) where the brand identity belongs.
- Improved CSV exports across the workspace: server-side files now open cleanly in non-ASCII locales, sensitive cells are protected from formula injection, and you can now export invoice aging and the staff roster directly from their pages. Workspace admins also gain a new audit-log surface that lists, filters, and exports every recorded action in the workspace from a single page, so the compliance settings panel's "review audit log" link finally lands somewhere usable.
May 23, 2026v12.10.7

Panel surface and input hierarchy consistency pass: every full-panel container in the product now reads in the same darker tone the Today widget board uses, and inputs sit one elevation step lighter so a form actually looks like a form again. Compact sidebar mode collapses cleanly to a 72px column without forcing horizontal scroll, the Polls Manage tab no longer doubles up the Create Poll button, the Evaluations panel finally appears in the sidebar and search, and the Meeting Library Free-plan banners explain what the gate actually means.

Added
- Evaluations now appears in the sidebar under Operations and surfaces in the sidebar search. The panel itself shipped a few days ago with self-reflections, manager reviews, and the HR question bank, but the sidebar entry was missing, so the only way to find the page was to type the URL or follow a deep link from chat. Min-role floor is employee so every staffer reaches their own self-reflection drafts; the Questions tab inside the panel stays HR-gated.
- Cross-panel "Context" views land on every major detail page. Open a Client, Deal, Invoice, Project, or Team Member and a single endpoint now returns every connected panel in one response so the detail sidebar can show the linked deals, proposals, projects, invoices, payments, milestones, time entries, PTO, timesheets, evaluations, and team without forcing you to jump between pages. Project detail kicks off the UI rollout: a new Context tab next to Board and Timeline renders a two-column relational summary backed by the new endpoint, with each row deep-linking to its source panel. Same visual rhythm across every 360 view so detail pages read as one consistent product. Service worker cache version also auto-syncs from build version every commit so a missed manual update never strands clients on an old bundle.
Changed
- Full-panel containers (cards, summary tiles, info panels, the Watchlist feed cards, the Calendar Feeds card, the Timesheets summary strip, every CCCard wrapper in the product) now share the same darker surface as the Today widget board. The earlier treatment kept cards a shade lighter than the page canvas, which read as inconsistent "light grey" slabs against the Today layout. The new tone holds across light and dark mode and propagates through one shared token, so a future tonal tweak lands everywhere at once.
- Inputs, textareas, and pill-shaped controls inside a card now sit one elevation step lighter than the container they live in, so a form on Brand & Identity, Watchlist Add Feed, Timesheets Add Entry, or any Settings page reads as a hierarchy (container → control) instead of a flat slab. The canonical fieldClass + textareaClass + ccInputStyle all moved together, so the new hierarchy lands on every panel that uses the shared primitives.
- The Meeting Library Free-plan banners on the Logged and Recordings tabs now explain what the gate actually means instead of reading "Free plan notice". The Logged-tab banner clarifies that you can still log meetings and upload notes on Free (the assistant will search and summarise them), and only live recording, transcription, and speaker identification require a Team plan. The Recordings-tab banner names exactly what an upgrade buys: capture meetings with auto-transcript, speaker labels, and an executive summary you can share or pin to a project.
- Evaluations and Workspace questions page subtitles are now one short sentence each, so the page-header action buttons (Start an evaluation, Questions, Add a question, Back) sit on the title row instead of wrapping to a second row below it. The longer explanations already live in the info accordion underneath the header.
- Secondary header buttons (Import, Export csv, Refresh, Upload notes, Log meeting, and every other supporting action that sits next to a primary CTA in a panel header) now use the same filled panel colour as the primary action: no saturation delta, no outline, just the same recipe. Three buttons in a row on Meeting Library or Timesheets now render at exactly one shade so a header reads as one design language. Visual hierarchy between primary and secondary now comes from position (primary is the right-most action) rather than a colour difference. The "Scan from existing" button on Projects, Tasks, and Clients carries the same recipe so the two header buttons next to it now read as one design family.
- Panel page headers stop truncating their subtitles. Long subtitle copy used to clip with an ellipsis when the action buttons needed the row width; the proper fix is shorter subtitle copy that fits the budget at every viewport, with the longer explanation living in the info accordion below. Meeting Library, Evaluations, and Workspace questions all trimmed their subtitles in the same pass.
- The Restore page filter row sits directly on the page background now, matching the layout pattern Standups, Approve Time Off, Inbox, and every other panel uses. The earlier card wrapper made the filter row feel heavier than the rest of the product.
- The Evaluations panel "About this section" now includes an Access note explaining who can author each kind of review and where the review routes. Every other panel's info accordion was already showing this footer; Evaluations was the lone missing one.
Fixed
- The compact (icon-only) sidebar no longer forces a horizontal scrollbar or pushes its contents off-center. The column widened from 64px to 72px so the chip + sidebar padding leave consistent breathing room on both sides, the LiveStatus pill at the bottom collapses to a dot-only affordance (the "Away" / "Do not disturb" label and chevron used to overflow the 64px column and create the scroll), and the footer drops its outer padding so the dot stays centered. Overflow-x is locked closed on the sidebar so a future stray-width child can never reintroduce the scrollbar.
- The Polls Manage tab no longer renders a second Create Poll button at the top of the tab. The page header already shows the same affordance from any tab, so the in-tab duplicate was a redundant trigger.
- The Start an Evaluation selection cards now use the panel's indigo accent instead of the workspace brand teal. Selection rings, icon tint, and the selected-card fill all read off the section accent variables so the choice chrome matches the panel you're in. Same fix landed on every panel's selection chrome that hardcoded var(--primary); a new section-accent drift detector ratchets the count down on every commit so future panels cannot reintroduce the bleed.
- The notifications bell popup no longer clips off the left edge of the sidebar. The 360px popover used to render as a child of the sidebar (which has overflow-x: hidden in compact mode) and got clipped against the column edge. It now renders through a portal anchored to the bell's screen position, clamped into the viewport so it never runs off either side, and the menu height adapts when the bell sits near the bottom of the viewport.
- Global search (the sidebar omnibox + the chat-side project lookup) no longer fails silently when you type a query. The Projects branch of the search was reading a column that has never existed on the Project table, so every request errored before returning a result. Switched to the existing target-end-date column so the response shape stays stable for downstream consumers.
- A deploy that lands while a tab is open no longer surfaces a "Something went wrong" page. The error boundary on every customer surface now self-heals from a ChunkLoadError by reloading once per session (which picks up the new bundle URLs), instead of stranding the user on the boundary until they manually refresh. The reload-once guard prevents a runaway loop if the new bundle is also missing chunks.
- Inline AI panels (Ask Hubity about your P&L / Business Health / Analytics) now render markdown properly. The pipe-delimited tables, bold text, and bullets that streamed back from the assistant were showing as raw markdown characters; the panels now feed the response through the same renderer the main chat uses, so tables, lists, and inline formatting display the way they were authored.
- Content Studio's Visual Style selection cards no longer render a blue-looking border on the active option. The selection border was reading the pastel section accent which has a high blue component at thin border widths; switched to the saturated signature colour so the selection chrome matches the rest of the panel's button shapes.
- The compact sidebar now horizontally centres its icons within the visible column even when the vertical scrollbar gutter is reserved. Previously the scrollbar reservation on the right edge shifted every centred icon to the left, so the column read as left-aligned against its visual boundary. A matching gutter is now reserved on the LEFT side too, so the icons render at the true geometric centre regardless of scrollbar state.
- Stability + polish sweep: restored every page in the product after a routing conflict took the site down (two endpoints at the same path level used different identifier names, and Next.js refuses to boot in that shape; both endpoints now share one shape and a static check fences the pattern). Deploy pipeline no longer hangs on a stuck post-deploy notification; the curl now caps at 30s connect + 30s total instead of waiting indefinitely. Settings drawer no longer "flashes" open then closes on click; the chat-shell copy that was fighting the settings manager over the URL is removed and the manager is the single source of truth. Internal palette cleanup: every page that hardcoded a hex colour now uses a canonical workspace token (var(--danger), var(--success), var(--accent-blue), etc.) or carries an inline note explaining a legitimate constraint (third-party brand colour, fixed marketing surface, print context, email HTML, or alpha-concatenated chart data); no visual change, just one consistent palette and no near-duplicate tones.
May 22, 2026v12.20.0

Approve Time Off renamed to "Approvals" with a matching /hub/approvals URL, and the AI Performance leader page title now reads "Reliability" to match the tab name. Plus the v12.18.2 brand-teal swap to a WCAG-passing value and the unified panel-color accent treatment across sidebar entries, header icons, and buttons.

Added
- Custom word pronunciations now apply to every spoken surface. Teach Hubity how to say a name (your CEO's, a client's, a product code) and every daily briefing, chat playback, and voice-mode reply respects the pronunciation. The rule is workspace-shared on purpose: when an operator teaches Hubity to say "Juno" as "JOO-no", every teammate hearing a daily briefing gets the same pronunciation. Per-user overrides are a follow-up; the workspace-level rule is the canonical voice you taught Hubity to use.
- Grounding chips above each Ask Hubity answer. When the assistant calls a read tool (looking at your projects, reading the knowledge base, checking team status), a small chip appears above the answer naming what was looked at. The user sees the response is sourced from real workspace data, not a guess from a system prompt. Mutating tools never reach the inline route, so the chip set is always a read action.
- Editable schedule matrix in the project Schedule helper. When the assistant produces a bulk task proposal (whether from pasted text, a screenshot, or a natural-language description), the drawer now renders the proposal as an editable matrix instead of a read-only preview. Every cell is editable: tweak a date, change a priority, rename a row, drop one you do not want, add a row the assistant missed, or change the phase assignment. The Apply button writes the LIVE state of the matrix to the project, not the assistant's original proposal, so a date you adjusted actually lands. If the assistant produces a fresh proposal in a follow-up turn, a small banner tells you the matrix was replaced so you never lose track of which version is on screen.
- Hubity is now fully translated into every supported locale. Every UI string across the product (timesheets, evaluations, deals, projects, brand settings, AI Models setup, passkeys, sign-in options, onboarding) now renders natively in German, Spanish, French, Italian, Japanese, Korean, Dutch, Polish, Brazilian Portuguese, European Portuguese, and Turkish. The earlier shape fell back to English for newly-added strings; non-English users now see their language end to end. Alongside the translation pass, inline link and back-button text on the Projects, Proposals, and Integrations detail pages stopped using the workspace brand teal and now read off the panel's own accent so the chrome belongs to the panel it sits in.
Changed
- Two naming alignments shipped together: (1) "Approve Time Off" is now "Approvals" with a /hub/approvals URL that matches. The page already hosts the Time Off + Audit Log tab strip and is the canonical home for every human-approval workflow, so the generic name reads more naturally. Bookmarks and email links to the old /hub/approve-time-off URL redirect permanently. (2) The AI Performance leader page title now reads "Reliability" to match its tab label instead of duplicating the cluster name "AI Performance." The section name is the cluster label and the tab name is what each individual page reads as (Reliability / Models / Behavior / Cost).
- Brand teal moved from #28a4a5 to #117C74 so the same brand color reads clearly in both light and dark mode. The earlier value passed contrast on dark backgrounds (6.4:1) but failed on light (2.76:1), which meant any Hubity branding rendered on a light surface read as washed-out cream-on-cream. The new value clears the asymmetric WCAG contract every accent color in the product uses (≥4.5:1 on light page background AND ≥3:1 on dark page background AND ≥4.5:1 against the cream button ink). Every code reference (152 occurrences across 52 files including inline SVGs, CSS variables, opengraph-image generators, the brandmark and wordmark sources, letterhead themes, and the chat assistant's brand-color tool definitions) updated in the same sweep so the brand color is one value everywhere. PNG / WebP / JPG assets that have the color baked in will need re-export by the design team; the code path is fully migrated.
- The full 23-panel color palette landed: each of the 23 visible sidebar entries now has its own distinct color that shares the brand teal's deep-saturated character (L≈26%, S≈55-65%). Five new accent families joined the registry (cocoa, fern, mauve, iris, ocean) and every panel that used to share brand teal got reassigned (Inbox to ocean, Watchlist to fern, Clients to cocoa, AI Performance to iris) so brand teal is now reserved strictly for Hubity chrome (chat header, brandmark, sidebar branding). Panel-teal stays in the palette but moved to a distinct hex (#126E68) so a panel surface never accidentally reads as brand teal. Every panel's canonical color is also the color used for every accent surface on that panel: the active sidebar entry fills solid in the panel color with cream ink on top, the page-header icon badge uses the same solid recipe, and the primary action button reads off the same value. No more "pastel vs signature vs text-safe" variants. One color per panel, plus a slightly-darker hover variant for hover ink shifts only. All 23 colors pass the asymmetric WCAG contract (≥4.5:1 on light page bg, ≥3:1 on dark page bg, ≥4.5:1 on cream ink) verified by the section-accent contrast gate on every commit. The active-state tinted backgrounds were also bumped from a barely-visible 18% mix to a solid panel-color fill so the active row reads clearly in dark mode without competing with the page chrome.
- Ask Hubity on every panel is now a real conversation, not a one-shot search box. Ask a question, read the answer, click a follow-up chip, and Hubity extends the same thread instead of wiping it. Clicking "Continue in chat" carries every turn of the inline conversation into the full chat so you never lose the context you already built. The layout is the same upfront card on every panel (one sparkles icon, one heading, one input with the section accent), the same warm captions while answers stream in, and the same markdown renderer so tables, lists, and code blocks read cleanly on every surface. On a narrow screen the input drops below the Ask button and the suggestion chips wrap automatically; on a wide screen the same card uses the full width with the action row laid out horizontally. Start over wipes the thread; Ask another extends it.
- The Schedule helper trigger on a project page is now a prominent primary button labelled "Ask Hubity" instead of a small secondary pill labelled "Schedule helper". The earlier shape tested as hidden ("user may be afraid to use it because they do not know what it does"); the new shape matches the Ask Hubity affordance every other panel surfaces, with the sparkles icon and the section accent fill so operators recognise it immediately.
- Ask Hubity inline (the assistant card at the top of each panel) now has the same read tools the main chat does. Ask "which projects are at risk?" on Projects and the answer is sourced from your real project rows. Ask "who is on the team?" on Team and you get the actual roster. The earlier shape gave the AI just a system prompt and no data, so it would fall back to "I don't have that loaded" even when the data was right there on screen. Mutating and external-effect tools (anything that writes or sends) are intentionally not in the inline tool set; the inline UI can't safely show confirmation gates, so writes still happen in the full chat where the confirmation flow lives.
- Ask Hubity will no longer redirect you to third-party software when Hubity has the answer. Two user reports caught the inline AI suggesting outside HR systems for tenure questions and external project trackers for risk questions; the system prompt now forbids naming a competitor (Gusto, Rippling, Asana, QuickBooks, etc.) as a place to look. Outside products are only named when you explicitly ask about a Hubity integration or when the question is genuinely outside Hubity's domain (consumer banking, weather, that kind of thing). The same rule landed on the main chat.
- Approve Time Off and Approval History consolidated into one panel with a tab strip. Both surfaces are about the same mental model ("approvals") and the two-sidebar-entry layout tested as duplicate navigation. The sidebar shows one "Approve Time Off" entry; the page hosts a Time Off / Audit Log tab strip. Audit Log stays admin-only on the data side: managers see the tab exists but cannot read its contents. Agent Approvals stays its own panel in the Intelligence section because it governs AI runs, which is a different audience than human approvals.
- AI Performance is now its proper URL: bookmarks to the old "tool reliability" path redirect automatically and the sidebar label matches what you see in the browser bar. The old name had been carried over from an early dogfooding label; every panel under it is about how the AI runs (models, prompt management, spend, guardrails, reliability), not "tools" in the generic sense. The redirect is permanent, so external links from runbooks, docs, and chat messages all land on the new URL.
- The working-state captions under the thinking sketch are wider and warmer now. Each tier (early, depth, endurance) has roughly ten phrases instead of three, and a per-turn seed picks the starting beat so two consecutive questions don't open with the same line. The phrasing was rewritten away from generic "Reading what you sent" / "Cross-checking the details" toward something closer to what a colleague at a shared desk would actually say: "Sitting with this for a second", "Comparing what I'm seeing against what you asked", "Sticking with it, almost there".
Fixed
- Brand teal #117C74 was bleeding into panel chrome (active sidebar entry, page-header glyph) on several panels. Brand teal is now reserved for Hubity chrome (the chat header, the brandmark, the sidebar branding row) and never appears as a panel color. Panels each carry their own assigned canonical color from the accent registry. The branding identity stays consistent; the panel identity stays consistent; the two no longer fight.
- On five panels (Deals, Invoicing, Knowledge, Inbox, AI Performance) the cluster tab strip was rendering above the Ask Hubity card, which broke the "About this section, then Ask Hubity, then everything else" reading order every other panel uses. The Ask Hubity card now sits directly below the About this section expander on every panel, with the tab strip below it.
- Import and Export buttons across the product now use the correct directional icon: Import shows an arrow pointing INTO the app (Download / FileDown), Export shows an arrow pointing OUT of the app (Upload / FileUp). The earlier shape was inverted on several panels (Projects, Timesheets, Deals, Invoicing, PTO, Polls, Proposals, Clients, Revenue, Expenses, Bulk-actions toolbar) and the inverse direction was reading as "Import sends data out, Export sends data in" to operators. A new drift detector enforces the convention on every commit so the inversion cannot come back.
- The "Open standup board" link on each project card was using the workspace primary teal even though the Projects panel is amber. The link now reads off the section accent so the card chrome belongs to the panel it sits in, matching every other accent-aware affordance in the panel.
- Chat replies no longer ask you to re-type your question. Two canned messages used to fire when the model couldn't ground an answer or the audit pass double-flagged a draft, and both ended with "rephrase your question" or "ask me the question again, and I'll pull fresh data". Both are gone. The new wording names the specific thing that would let the assistant pull a real record (a project, a person, or a date range) so you add one detail rather than re-typing the whole question, and points you at the panel for the topic when that's the cleaner path. If the assistant still genuinely needs clarification, it now says what specifically.
- Chat responses no longer appear twice in the chat history. The streaming attempt and the smart-model fallback retry were both appending an assistant bubble when the original stream errored on its way out, so you saw the same answer twice live; a refresh deleted the duplicate because only one was actually persisted. The fallback now drops the streaming placeholder before posting its result, so the live view always matches the persisted thread.
May 21, 2026v12.8.1

Per-project task importer with AI-powered column mapping is live: paste a Gantt-style schedule, a CSV, a Markdown table, or a loose list, and Hubity maps it to the canonical task fields and previews the rows before committing. Plus a long list of fixes from the May 21 testing pass: choice-screen onboarding, warmer working-state voice, inline answers on the data panels, SVG logo uploads, square-video aspect ratio, step-up auto-resume, persisted-chat marker leak, project print PWA workflow, the new Preferences page with a compact icon-only sidebar mode, and more.

Added
- The "Ask Hubity about your data" panel on Analytics, Business Health, P&L, and AI Performance now answers you inline instead of bouncing you to chat. Type a question or tap one of the predefined chips and the answer streams in right on the panel, capped to a short paragraph or two so you can read it without losing your place. The voice is the same warm "person at a desk" register the rest of the product uses, so you see exactly what stage the work is at while it streams. When you want to go deeper, the "Continue in chat →" button below the answer carries the question forward into the full assistant so you can ask follow-ups, attach files, or run tools. The icon stays consistent with the vocabulary: sparkles in the panel header (AI invoked inline), chat bubble on the handoff (navigate to the chat surface).
- Per-project task importer. Open any project and click "Import tasks" in the page header to paste a list, drop a CSV / TSV / JSON file, or paste a Gantt-style schedule. Hubity reads the columns intelligently and maps them to Title, Start, Due, Priority, Status, Assignee, Department, and Description even when the source uses unusual names (Task Name, Resource, Finish, Predecessors, ID columns, and so on are all understood). The mapping notes show exactly what was assumed, and any assignees who are not already in the workspace are listed so you know they will be created unassigned. Approve the preview to import; the tasks land in the current project without you having to repeat the project name on every row.
- Compact sidebar mode. Hubity now has a Preferences page (Settings → Preferences) where you can toggle the sidebar to icons-only. Labels appear on hover, the brandmark shrinks to its symbol, the search input and chat dock collapse out of the way, and the column narrows to give the working area more real estate, which makes a real difference on a 13-inch laptop or a side-by-side workspace next to a different app. Your choice persists per device (a phone, a different machine, or a guest browser starts fresh), and a small chevron in the sidebar header expands or collapses it from anywhere without going to Settings. The mobile drawer is unaffected; touch viewports always get the full-width nav so labels remain readable on small screens.
- Conversational schedule editing is now a first-class part of every project. Open a project, click "Schedule helper" in the page header, and a focused chat drawer opens alongside the Gantt and Kanban with the project name and current task list already loaded as context. Paste a schedule from a spreadsheet or describe a change in plain language ("shift everything by two weeks, skip weekends, group into phases"); Hubity drafts the rows, shows them in a per-row preview, and only writes after you click Apply. Schedules now support a phase + subtask layer, so the resulting list keeps the "Phase 1: Project Setup → Kickoff Meeting → Confirm Scope" structure instead of flattening every row into one long list. The Gantt renders phases as a dashed envelope over their child rows and indents the subtasks under their parent; the Kanban board adds a small arrow marker on subtask cards so the relationship survives the column projection. The chat thread persists per project (closing the drawer doesn't erase the conversation), so a complex back-and-forth on a schedule can pick up later. Hubity caps the hierarchy at two levels on purpose: it covers the 90% case from the schedules teams actually paste in, and it keeps the board readable without recreating Microsoft Project. Pasting a deeper hierarchy still works, with the deeper level collapsed into the subtask layer and a note explaining the flatten. Pasting a screenshot of the same table now extracts every row with the same accuracy as pasting the text directly: the image goes through a dedicated transcription pass that captures up to 20,000 characters of visible text and the chat tool reads from that transcription instead of re-transcribing visually, which is what was dropping rows on image imports.
Changed
- Signing up no longer drops you into someone else's workspace by surprise. If a workspace already exists at your email domain, you now see a short choice screen: ask to join it (an admin gets the request and approves or denies on Settings → Workspace → Access requests), or create your own separate workspace (best for a new region, a new department, or just trying Hubity solo). Pending invites still take you straight in; consumer email addresses (Gmail, Yahoo, Outlook, and the rest) skip the screen because there is nothing to match against. Admins get an email the moment a teammate asks to join, the requester gets an email the moment you approve or deny (with a note if you wrote one), and a request that goes unanswered for two weeks expires by itself so the requester can resubmit or move on.
- Hubity's working states now read like a person actually doing the work rather than a spinner. The captions next to the sketch ladder across three tiers based on how long you've been waiting: early on you see "Reading what you sent", then "Thinking it through", then "Pulling the pieces together". Once a turn is taking more than a few seconds the voice acknowledges depth ("There's a lot in this one, bear with me", "Cross-checking the details", "Writing this carefully"). Past fifteen seconds the captions stay honest about the wait ("Still on it, worth getting right", "Almost there, lining up the last bits"). The "Drafting the answer" tag while the response is being written now reads "Writing this up for you", and a handful of the tool-action captions were softened to match the voice ("Pulling the numbers together" instead of "Pulling the numbers", "Searching what you have on file" instead of "Looking through knowledge"). The change is purely voice; the underlying signals are unchanged, so a streamed action phrase from a tool still takes precedence over the fallback set.
- AI Models management moved out of Integrations and into the AI Performance section. The provider list, the Add provider form, and the per-tier model priority controls now live at Settings → AI Performance → AI Models. Integrations stays focused on external connectors (MCP servers, data sources, calendars, mail) which is what the page name actually implies. Existing bookmarks to Integrations → AI Models redirect to the new URL automatically.
Fixed
- Polish pass across the onboarding flow: the Continue, Scan Website, and Add Members buttons now keep the arrow icon on the same line as the label (it was wrapping below the text on narrower cards), the discipline picker card widens to fit the cards in a single legible grid with a scroll fallback for shorter screens, the brand-color row sits on one line with a built-in color picker (the old shape exposed a raw CSS variable when the default swatch was picked), the canonical brand teal is now the first swatch, the "Found N pages" scan banner has its spinner properly centered, and the discipline + brand step Continue buttons now use the same deeper teal as the rest of the onboarding flow.
- The chat working caption no longer shows the time of the FIRST turn in the conversation while later turns are streaming. The caption now reflects when the current turn started, matching what the user is actually waiting on.
- Step-up identity verification now resumes the original action automatically. Before this fix, you would click Save on a privileged setting, complete the verification prompt, and then have to click Save AGAIN because the verification window just closed without re-running the action; now the original Save fires automatically the moment verification succeeds.
- Logo uploads now accept SVG files and the error message no longer lists WebM or MP4 audio as supported logo types (those are accepted only by feedback voice notes, never by image-only surfaces like logos and avatars). Uploaded SVGs are scanned for embedded scripts, javascript: URLs, inline event handlers, and foreignObject elements; anything that could execute is rejected before it reaches storage.
- Video generation no longer fails when the assistant asks for a square (1:1) clip. Neither of the two providers we use supports 1:1 video, so the requested aspect now snaps to 16:9 landscape and the clip renders successfully instead of returning a hard error. The error messages on legitimately blocked clips (content-safety refusals, transient empty results) now read in plain English so it is clear what to try next.
- The admin signup notification email no longer labels corporate email signups as "public email" while they are mid-onboarding. The line now reads "Pending workspace choice" for a corporate domain that has not picked join-or-create yet, and "No company (personal email)" only for a true consumer-email signup.
- Backend grounding markers (the [GROUNDED_RESPONSE] envelope and friends) no longer leak into the chat bubble. The streamed text was already sanitized, but the persisted database row was not, so a conversation reload would re-render the markers in the message. Persisted text is now sanitized at the source in both the streaming and non-streaming write paths.
- The pending-action "Create Task" confirm button no longer reads as a soft glowing pill. The button now uses the saturated brand teal with a 1px ground shadow instead of a 6px halo, so it reads as a solid CTA. The "Projects" back arrow at the top of a project detail page now matches the panel's amber section accent rather than the workspace primary teal, so the breadcrumb belongs to the page it returns to.
- The Gantt timeline's "Today" indicator no longer hides beneath the task bars. The label moved up into the axis header (with a small pill background so it stays readable next to a date tick), and the vertical through-line draws above the task row content instead of underneath it.
- The Project schedule print preview now opens in the current tab (so PWA installs stay in their single-window context) and the light palette is scoped to the print sheet only. The previous shape flipped the global theme to light for the duration of the render, which could leak into the parent app and occasionally persisted in the user's theme setting if the navigation happened mid-render. Same canonical print pattern as Timesheets, Invoicing, Meeting Library, and the Letterhead preview.
- Project task cards no longer mix priority colors with column status colors. The two systems used the same palette, so a medium-priority task in the To Do column looked like it was in the In Progress column. Priority now uses a small flag icon next to the title (outlined amber for high, filled red for urgent, nothing for low or medium), so the column position carries status and the flag carries urgency, with no chance of confusing one for the other.
- Chat responses no longer repeat themselves. Two paths could double-write the same content: a confirmation prompt that the model also surfaced verbatim during its commentary (the bubble showed "Save N changes to Tasks. Review the details below and confirm or cancel." twice), and a post-confirmation summary the model occasionally emitted as two identical paragraphs in a row. Both are now collapsed before the response reaches the screen and before it lands in the conversation log, so a refresh and the live view always agree.
- A code review sweep cleared 17 follow-up items flagged on the past week of PRs, plus the CI build memory budget that was occasionally killing the develop-to-main promotion compile. The biggest wins for operators: the per-project task importer now commits the exact rows you approved in the preview (no more silent divergence between what the preview showed and what got imported); the project schedule print sheet now reliably renders against the light palette in dark-mode sessions and restores your theme when you leave; the natural-language timesheet drafter resolves "today" / "yesterday" in your timezone instead of UTC so an evening entry from the US west coast no longer snaps to the next calendar day; admins on Starter and Free plans can save logo and contact edits on Brand & Identity again without hitting a Custom-Branding 403 from the color/font gate; the Brand color picker now writes through to the workspace theme so changes actually show up across the product; the Org Chart save-view conflict screen now pulls the teammate's edits into your working state so a re-save can't silently overwrite them, and the 15-second background poll reapplies the active view live; the AI Models management page renders a spinner on first load instead of flashing a misleading "no providers" state; the chat Stop button no longer flips loading off during a fast Stop → Send sequence; the sidebar compact-toggle now stays in sync across tabs even when Safari private mode blocks the storage write; and the Organizational Chart printable exhibit now reads in all twelve product languages instead of falling back to raw key names on non-English sessions. The CI build now sizes the V8 heap to fit inside the free-tier runner so the OOM-kill that was canceling some main-promotion compiles is gone.
May 20, 2026v12.1.0

Brand & Identity is now one consolidated page inside Content Studio (single source of truth for logo, brand color, voice, audience, letterhead, contacts, fonts, and templates); performance evaluations land as a dedicated workspace; image edits now default to Gemini; the History panel's Delete warning fits on the row; Timesheets gains templates, plan-aware features, and a real import history with one-click revert; Projects cards are keyboard-friendly with AA-contrast status; Stop button reliably clears.

Added
- Performance evaluations have their own home now. Start a self reflection or a review of someone you manage, pick a period, and a behavior-anchored question bank shows up tuned to the person you are writing about (individual contributor, manager, sales, operations, or general). Jot rough notes in any form (bullet points, full sentences, scattered thoughts) and click Draft from notes to have the structured answers and a short summary filled in for you. Every text field also has its own Polish button so you can tidy a single answer without redoing the whole thing, the same small sparkle affordance you already use on Knowledge entries, playbook steps, and announcements, now consistent everywhere a long-form field appears so you never have to relearn it on a new page. Once you submit, the review goes one level up from you (self reflections go to your manager; manager reviews go to your own manager for oversight), and you choose whether to share the finished review with the subject. HR, admin, and the workspace owner can also add their own custom questions, scoped to manager reviews, self reflections, or a specific department, so company values and culture prompts get layered onto every evaluation without rebuilding the form.
- You can now save a typical week as a Timesheets template and apply it to any other week with one tap. The template captures each entry by day-of-week, hours, project, activity, and billable, so a Monday-through-Friday standard week is one click instead of seven manual rows.
- The Timesheets import wizard now shows recent imports right inside the wizard, with a one-click Revert on any committed batch that has not been approved yet. You no longer have to remember which batch you committed in this session to roll it back.
- The Org Chart is now a pan-and-zoom canvas on /hub/team. Drag to pan, scroll to zoom (anchors on your cursor), use the corner controls to zoom in/out or fit-to-view, and the chart fits to the viewport on first paint. Text stays crisp at every zoom level (the canvas re-rasterizes to the target scale on each frame instead of bitmap-scaling a single rastered layer, which is what was making "vector" glyphs look fuzzy when zoomed). Per-node collapse buttons are gone (the zoom replaces them) so the structure stays consistent at every level. Toggle Customize for proposals to hide anyone with a section-accent checkbox (unchecking a manager waterfall-hides their team, non-destructively) and save the selection as a named view that you can reload later. Saved views now also let you add ad-hoc proposal sections that cut across the reports-to tree (e.g. "Project Leadership", "Field Crew"): name a section, drag staff cards into it, and the printed chart shows those people in their named group above the tree, skipping them in the tree below so nobody appears twice. Managers can drag a card onto another card to change who that person reports to, with a confirm dialog before saving and an optimistic snap-then-rollback if the save fails (cycles are blocked). The whole card is now a drop target (not just the border) so a release anywhere inside the target card now lands correctly, and a failed save now surfaces the server's actual reason in the message instead of a generic "could not move". The Team page now refreshes itself every 15 seconds while open so a teammate's edit (whether from the chart, the drawer, or the org-chart customize panel) shows up without a manual reload, and writes that would overwrite a teammate's concurrent edit now stop, refresh your view, and show a banner explaining what happened so nothing is silently clobbered. Owner and Manager access badges across the page now adopt each panel's identity color (so on the Team page they read in the panel's steel-blue instead of the global teal), and the work-pattern day picker's active state follows the same rule. Print or save as PDF renders the visible-only tree on your letterhead as a real box-and-lines hierarchy with paper-size and orientation pickers; subtrees stay together across sheets. The standalone /hub/org-chart panel was retired in this same change so the Team page is the one entry point for the chart.
- Timesheets import now detects BQE Core exports. Pick BQE Core as the source and the standard Date / Employee / Project / Phase / Activity / Hours / Bill Status / Memo columns are mapped automatically, including BQE's "No Charge", "Hold", and "WIP" values which now import as non-billable. A blank Activity column falls back to the Phase value so nothing gets dropped on the floor.
Changed
- Brand & Identity is now one consolidated page inside Content Studio. Logo, brand color, brand voice, target audience, contact details, typography, letterhead style, and uploaded brand assets all live on a single screen at Content Studio → Brand & Identity. The brand bits that used to live separately in Workspace settings and behind the Content Studio "Brand Settings" modal now point at this one page, so updating your brand voice or logo once flows through to every proposal, letter, report, Content Studio post, and chat-generated email. The old Knowledge → Brand & Identity URL still works and lands you on the consolidated page automatically.
- Image edits in chat now default to Gemini 2.5 Flash Image because it returns faster and sharper renders than the previous default. You can still steer it the other way by naming a provider ("with ChatGPT", "use gpt-image-1") and Hubity will use that vendor for the edit; if your pick fails or is unavailable, it falls back to the other so you still get a result.
- The Before / After compare on an edited image now sits directly below the Download button on its own row, so the filename, the provider name, and the edit instruction stop being squeezed and clipped. Toggling Before / After is still one tap away.
- Hubity's working-status captions are plain and outcome-oriented now: "Reading your request", "Working on a response", "Putting together an answer", "Almost there". Vague filler like "looking into it" is gone; each line is something that actually contributes to what you are waiting on.
- Picking an activity in the Timesheets entry row now sets the Billable toggle to that activity's default. So "Internal meeting" flips it off and "Client work" leaves it on, instead of making you remember.
- Timesheets approvals: when you bulk-approve and the system skips some rows (because they were already decided or are your own submission, which still requires another reviewer), those rows are now visibly badged Skipped in the list so you can see exactly what still needs attention.
- Timesheets respects your plan: workspaces without the approval workflow no longer see the Submit-for-approval bar or the Approvals tab, and workspaces without import no longer see the Import button. The features quietly hide instead of failing when you click.
- Two chat infrastructure cleanups: the small decorative separator that closed some long chat responses (but not others) has been removed because it only appeared past a length threshold and read as inconsistent rather than intentional, so replies now end where the text ends; and chat turns no longer get held up by background analytics writes because those writes now go through a dedicated tiny pool and drop themselves on overflow, so they cannot starve the database connections that user requests need (the long chat-turn pauses some users were seeing are gone). The production build itself also no longer dies with an "Ineffective mark-compacts near heap limit" error mid-compile, so deploys complete cleanly.
- Timesheets import now skips duplicates automatically when you re-run an import. If a row matches an entry already in your timeline (same person, date, project, activity, hours, and description), it is skipped and surfaced as a count on the result screen. Within-batch duplicates are also de-duplicated. The maximum rows per import is raised to 2,000 so a year of time cards fits in one pass. The Team Report's Group by control also sits on the same vertical line as From, To, and Export to CSV now. Admins also get a workspace screen for the Timesheet activity catalog under Settings: add, rename, archive (and restore), set a per-activity billable default and an optional hourly rate override; archiving hides an activity from new entries without breaking historical ones. The entry row also gains an optional Clock in/out toggle that swaps the Hours field for Start and End time pickers; hours are calculated for you and overnight shifts wrap to the next day automatically.
Fixed
- In the History panel, the "Deletes permanently" warning no longer overflows the row or hides the Cancel button. The hint sits on its own line above Delete forever and Cancel, so the way to back out is always visible. The header row also gets proper breathing room between the History title and the Archived button.
- The Projects list cards no longer trip screen readers and meet accessibility contrast on the status pill. Project titles are now real keyboard-reachable links, and the Active status pill uses a contrast-calibrated color.
- The Timesheets page no longer falls over when the entry list returns an unexpected shape. The week grid skips malformed rows rather than crashing the whole page.
- Chat reliability pass: pressing Stop on an in-flight response now reliably hides the Stop button within a moment even if the underlying stream is slow to release, so the input is ready for your next message without waiting; responses no longer end with a generic "rephrase your question" follow-up on image-heavy threads (when the post-response check has nothing to grade, the response ships as-is instead of being routed through a fallback that produced empty answers); and asking the chat for your brand guidelines no longer errors with a missing-column message because the brand-guidelines storage is back in sync with what the chat tool reads.
- A pass over the org chart and the printable org chart on the Team page: dragging a card to change who reports to whom no longer rolls back with a "could not move that person" error on the first try; cards no longer get the bottom of letters like the "g" in "Engineering" cut off, with the department name sitting on its own row inside the card so it fits in full; the role badge and department each get their own line, replacing the cramped one-row layout that was truncating mid-word; and once you have framed the chart the way you want it, switching tabs, opening drawers, or letting the background refresh tick over no longer recenters or rezooms your view. The Fit to view control in the corner is the one explicit way to re-fit, and a hard refresh starts you fresh as expected. The printable chart was rebuilt around being an actual exhibit: it now sits on your letterhead with a formal "Organizational Chart" title, the company name and effective month as a subtitle, and a Confidential footer. The Paper and Orientation pickers now visibly reshape the preview in real time, so what you see is the page you will print. Below the reporting tree, a Personnel Roster section now lists everyone grouped by department in a clean three-column table (Name, Title, Reports to), which paginates cleanly across multiple pages for larger teams instead of leaving acres of empty space at the bottom of a single sheet. The Print or save as PDF button on the Team page itself now also matches the page's steel-blue identity instead of bleeding the global teal. Separately, the Timesheets Describe your week drafter now handles real conversational input ("I did 4 hours with Acme yesterday and 3 on Hubity") instead of only one-entry-per-line.
- Polish pass across the workspace: every panel's primary buttons now use the panel's own identity color instead of bleeding the global teal (Announcements' "Post Announcement", Timesheets' "Billable" toggle, the Time Off submit button, the Knowledge document-category "All" pill, the Team work-pattern weekday pills, every Header secondary button), and the Time Off slide-over labels (Title, Num days, Notes) read as plain English now (Request time off, Days off, Notes for your manager) instead of generic placeholders. Deactivating a teammate in the Team roster now moves them to the Former tab where you expect to find them, not to the Trash. The Watchlist Add a feed form anchors to the left under the Add button instead of floating to the middle of the page, with proper breathing room before the feed cards begin. Default ellipses ("...") have been stripped from placeholder copy across the product (Notes, Search, "Add a note", and the rest), so placeholders read as complete prompts now and only collapse with an ellipsis when the text genuinely does not fit. The Memory, Suggestions, Agent Approvals, and Panel Access panels moved out of the main sidebar and into Settings, where they belong as preference and oversight surfaces. The Tool Reliability section in the sidebar is now called AI Performance because everything inside it is about how the AI is behaving (token spend, behavior, guardrails, prompt management) rather than about generic tool reliability. The Recent section in the sidebar is now collapsible (click the header to fold it). Your choice persists per device, so users who do not want it crowding the sidebar can collapse it once and forget. The Brand color hex input on Brand & Identity now reads correctly to screen readers, the chat Stop button now reliably disappears after you click it (the safety net that retired the button if the natural finally path wedged was a no-op in one race; it now fires unconditionally), and the legacy Knowledge → Brand & Identity URL is properly registered as a redirect-only route so internal drift checks stop pretending it is a standalone panel. The onboarding profile-step Continue button uses the saturated brand teal in every state (the previous shimmer gradient cycled through a brighter cyan that read as a different color than the passkey Continue button further into the same flow). Passkey enrollment now logs a Sentry trace when the operating system silently fails to save the credential (Windows Hello: "There was a problem saving your passkey"), and the UI distinguishes a quick OS-internal failure from a real user-cancellation: the former gets a helpful banner pointing at the Not now path; the latter stays a quiet skip. When a logo upload to company settings fails because the user is not an admin, the error message now says exactly that ("You do not have permission to change the company logo. Ask an admin or owner") instead of "Could not save logo. Please try again". On the org chart, the connector lines between cards now render as one continuous shape instead of three rounded pills meeting at a T-junction with hairline gaps. The chart canvas also no longer flashes when something unrelated on the page updates (drawer opens, presence ticks, filter changes), because the chart only re-renders when its own data actually changes. The "Ask Hubity" buttons in every empty state now use a chat-bubble icon instead of the sparkle: per the icon vocabulary rule, sparkles signal AI invoked inline and the chat bubble signals "this navigates you to the chat". Meeting Library Upload notes now accepts PDF and Word (.docx) in addition to plain text and Markdown, and reads them through a server-side extractor so you can drop in real meeting minutes without first having to convert them. The Integrations Model priority "1" rank badge now matches the panel's primary purple instead of the lighter pastel. Across every panel that mixes a tab row, a filter-chip row, or a search input on the same line (Clients, Invoicing, Outflow, Deals, and the rest), the controls now line up vertically again, because the structural bottom margin on segmented tabs and filter chips now auto-drops when those controls sit in a flex row instead of on their own line. Textareas with the standard input chrome (the New Deal notes field and others) now have a few pixels of top and bottom padding so the placeholder no longer sits flush against the top border. The empty-state "Ask Hubity to ..." buttons across Competitors, Deals, Projects, and Watchlist all read as just "Ask Hubity" now so the language is one phrase across the product. The Competitors empty-state CTA no longer reads the literal "Ask Hubity about {name}" placeholder because nothing has been added yet.
May 19, 2026v10.5.0

A rebuilt Timesheets with submit-for-approval, a streamlined review queue, team reports and one-click import, see any project as a printable Gantt timeline, more reliable Google and Microsoft sign-in, import your own Word letterhead, link Google or Microsoft to your account, choose Gemini for image edits, smarter handling when you change topic, clearer status and before/after compare, easier-to-find Brand settings, clearer selection actions, more reliable image edits, a safer Stop and auto-update, clearer response checks, letterhead preview fixes, a cleaner color picker, and deleted conversations that are now truly deleted with clearer Archive vs Delete labels.

Added
- You can now view a project as a printable Gantt timeline. Open a project and switch from Board to Timeline to see its tasks and milestones across a date axis, set a start date on any task to control where its bar begins, and save the whole schedule as a PDF to share with clients. Tasks that do not have a due date yet are listed under the timeline so the whole project is visible at a glance, with a prompt to add dates to schedule them.
- You can now connect Google or Microsoft to your existing account from Settings → Security → Sign-in methods. Once linked, you can sign in instantly with that provider instead of waiting for an email code. You can disconnect a provider at any time, and Hubity will keep you from removing your last remaining sign-in method so you can never lock yourself out.
- You can now ask for an image edit to be done with Gemini. Say "edit this with Gemini" (or name another provider) and the edit actually runs on that provider instead of silently using the default, with an automatic fallback if the chosen one is unavailable.
- You can now import an existing Word letterhead. Upload a .docx or .dotx in Brand settings and Hubity detects the page size, brand color, and fonts and applies them to your document style for you to review and save. The detected company name and logo are surfaced so you can set them in Brand & Identity too.
- Timesheets is rebuilt around getting time approved: log your week by row, reuse your most-used projects in one tap, or describe the week in plain language, then submit the whole week for approval and recall it if something changes. Managers get a streamlined review queue with notes, bulk approve or return, and a guard against approving your own timesheet; HR gets a team hours report by person, project, or activity; managers can also bring history in from a CSV or another time tool with a preview and one-click undo, and focused fields no longer clip while you type.
Changed
- Hubity now recognizes when you change topic. Uploading a new file or starting a new request no longer makes it keep working on the previous task (for example editing an earlier image when you have moved on to adding a document). A plain follow-up with no new upload still continues the current task as before.
- The working status while Hubity is busy now uses plain, honest words ("Reading your request", "Working it out") instead of vague filler. The before/after control on an edited image is now a clear two-option switch so it is obvious you can tap to compare the original and the edit.
- Brand & Identity is no longer hard to hunt for. Searching the command bar for "styles", "branding", "colors", "fonts", "logo", or "letterhead" now jumps straight to it, and the same words work when you ask Hubity to take you there.
- When you select multiple items, the action buttons now read plainly (Archive, Move to Trash, Clear) instead of repeating "Bulk" in front of everything. The unclear "Bulk move trash" is now "Move to Trash".
- Stopping a response now confirms it was stopped instead of looking like it failed, and puts your original message and attachments back in the box so you can edit and send again.
- Hubity no longer reloads to apply an update while you have a response in progress or unsent text or attachments. The update applies the next time you are idle so you never lose work to an auto-update.
- The response-check note under replies is now plain and calm instead of a scary percentage. It reads "Double-checked" or "Worth a quick check" and, when expanded, tells you in plain language what to do, rather than showing a confusing technical score.
Fixed
- Signing in with Google or Microsoft, and linking them from Settings, is reliable again. A sign-in could end on an error page even though the account had actually been connected; it now completes cleanly the first time.
- Complex image edits (for example adding multiple elements to a photo in one request) no longer fail with a premature "image editor timed out" message. The editor is now given the full time it needs to finish before the request is considered stalled.
- Disconnecting sign-in methods is now safe under rapid double-clicks: two near-simultaneous disconnects can no longer slip past the last-method check and lock you out of your account.
- Selecting many files at once from the chat file picker now correctly stops at the five-attachment limit instead of queuing more than allowed.
- The estimated token usage shown before a bulk Knowledge import no longer rounds down, so it never understates how much of your allowance an import will use.
- The Executive Bold and Tech Forward letterhead styles no longer spill past the page into a sideways scroll in the preview. Their edge-to-edge header and footer bands now sit cleanly within the page, with the header and footer text always kept inside your margin standard so it stays readable in print.
- The brand and document accent color pickers are now a single clean rounded color chip instead of a small square floating inside a rounded box, so it is obvious you can click it to choose a color. The accent color field no longer cuts off the "(company default)" hint.
- Deleting a conversation now permanently removes it instead of quietly moving it to the archive, so chats you delete are actually gone. The history actions show a clear label when you hover them, and the difference between Archive (kept, just hidden) and Delete (permanent, cannot be undone) is now spelled out before you confirm.
May 18, 2026v9.237.19

Fixes for chat attachments, image editing, Knowledge import, the New proposal form, the Competitors list, the install prompt, page transitions, timesheets, assistant writing style, reliability under load, and pricing sources.

Changed
- The Knowledge bulk-import estimate now shows the number of tokens a run will use instead of a dollar amount, so you can weigh it against your monthly token allowance in the same units you already track.
Fixed
- Asking Hubity to change an image you uploaded (for example "put red shutters on this house") now edits your actual photo instead of generating a different one from scratch. Uploaded images can be refined just like images Hubity generates.
- Pricing reference now includes the free national source again. Public GSA awarded labor rates show up alongside your own bids and competitor data instead of silently returning nothing.
- Chat and briefings are more reliable under heavy use. Background usage tracking no longer competes with live requests for the database, which was occasionally causing slow or failed responses during busy periods.
- Bulk import to Knowledge works again. Uploads were failing to start because of an internal storage misconfiguration; files now upload, process, and are ready to review as expected.
- Hubity no longer uses em dashes in chat replies. They are now always replaced with a comma so the assistant matches the rest of the product’s writing style.
- The Timesheets entry form now lists your projects in the "Select project" dropdown. It was always empty even when the workspace had many projects, so time could not be logged against a project.
- Switching tabs within a page (anything with a "?" in the address) now fades in smoothly instead of flashing the old content out and the new content in abruptly.
- Sending a photo in chat no longer fails with "that didn’t go through". Large images are now resized before sending so they stay within limits, and if something still can’t be sent you get a clear message instead of a silent failure.
- The "Make Today your morning landing spot" tip no longer tells you to pick "Install Hubity" from the browser menu when that option is not actually available. On Chrome and Edge the tip now appears only when a real one-click install button can be offered.
- Choosing "Upload file" from the chat attach menu now actually attaches the file you picked. It previously did nothing on screen even though pasting, taking a photo, and capturing your screen all worked. Selecting one or several files from the picker now adds them to the message preview as expected.
- Asking a follow-up question about an image Hubity just generated or edited no longer leaves you with no reply. Continuing the conversation after an image step now works, so you can ask for another change to the same picture and get an answer instead of a silent failure.
- The New proposal form now shows proper field labels, helpful hints, and example placeholders instead of raw setup text, so it is clear what to enter for the client, project, tasks, and timeline.
- The Competitors list now loads again on the Competitors and Proposals pages and in Content Studio. It was failing to load and showing nothing.
May 17, 2026v9.237.2

Recording the business designations that decide RFP participation just got faster. Set-aside and diversity statuses (MBE, WBE, DBE, 8(a), HUBZone, woman-owned, veteran-owned and more) now come from a searchable, prepopulated list for both your own company and your subcontractors, so a teaming partner’s certifications are no longer something you can only capture through the assistant.

Added
- When adding a subcontractor or teaming partner you can now record their set-aside and diversity designations right in the form. Pick from a standard list of MBE, WBE, DBE, 8(a), HUBZone, woman-owned, veteran-owned, service-disabled veteran, LGBT-owned, disability-owned and similar statuses, and they show on the partner so they are ready when an RFP requires participation by certified firms.
- Competitor profiles can now be built from a competitor’s own website: add their URL and scan to draft a battle card (overview, strengths, weaknesses, how to win, region) for you to review and edit before saving, with an "as of" date so you know how fresh it is. Paste in a bid tabulation or award notice and any firm you do not already track is offered as a competitor to save in one click, while each firm’s bid total and per-line unit prices are captured for win-rate and pricing analysis.
- Bid pricing now has a reference engine: your own past bids and captured competitor bids are combined with free national sources and, if you have a licence, your own paid cost database, every price tagged with its date and region and adjusted forward in time so an old number is never compared to a current one as-is. A new Pricing reference tool on the Competitors page looks up a unit price by item and region and shows every source side by side, and lets you link your own licensed cost database in one place.
Changed
- Certification entry across your company profile now uses a searchable picker instead of a blank box. Start typing an acronym or a phrase like "woman owned" to narrow the list, and choosing a standard designation fills in its full name and typical issuing body for you. Anything state- or program-specific that is not on the list can still be typed in and is kept exactly as you enter it.
- Competitor cards now show region, a pricing read (prices low / at market / premium), and an "as of" date so you can tell at a glance how fresh the intel is before bidding against them.
Fixed
- Filter dropdowns on the standups and boards view (department, assignee, status) now close when you click away or press Escape, instead of staying open until you clicked the same button again.
May 15, 2026v9.234.7

A settings, onboarding, and typing-quality pass. The Workspace page now loads the company details you already set, admins on every plan can edit workspace basics again (white-label branding is now part of Business rather than Enterprise-only), brand color gets a true color wheel and re-colors the whole workspace on Business and Enterprise, you can review and change your workspace discipline, add and manage passkeys, the same gentle autocorrect the chat uses now works everywhere you type, and connection options that are not built yet are no longer shown. The Today board is also denser and better organized by default, with each widget styled like the part of Hubity it draws from.

Added
- You can now add and manage passkeys (Face ID, Touch ID, Windows Hello, or a security key) directly on the Security page. The "Add a passkey" onboarding step now lands somewhere you can actually complete it, and you can name and remove passkeys there too.
- You can now review and change your workspace discipline from Workspace settings. It retunes the assistant’s starter actions to your kind of work, and changing it here does not reshuffle a Today board you have already customized.
- The team roster and workspace seats now connect both ways. Each roster card shows at a glance whether a person is an active member, has been invited, or is roster-only (details an admin prefilled before they join). You can invite a not-yet-joined teammate to Hubity straight from their roster drawer, and a seat in Settings links right back to that person’s roster record to edit their details.
Changed
- Brand color now sits in one clean row: the quick swatches plus a custom-color circle (same look as the swatches) for picking any color you want, with a hex field below for pasting an exact value. On Business and Enterprise your brand color re-colors the whole workspace, not just your logo tile, proposals, and invoices.
- The Today board is cleaner and better organized by default: a compact two-up top row, your highest-touch widgets (inbox and sticky notes) as a tall side-by-side pair, and the rest as neat paired squares so an empty widget is never a giant blank banner. The tip about pinning Today to your desktop is now a quiet dismissible nudge instead of taking a whole board card. Every widget wears the icon and color of the part of Hubity it draws from, an empty one centers its message with a clear button in that same color to jump straight there, and the card itself stays clean and consistent with the rest of the app.
- The same gentle autocorrect the chat uses now works in every text box across Hubity: notes, comments, descriptions, the "Ask Hubity" bar, announcements, and more. It capitalizes the first letter of a line and fixes common misspellings as you type, with no animation. If you deliberately retype a word it will not re-correct it, so you can always keep a spelling you meant.
- Personal connection options that are not available yet are no longer shown in settings, so you will not run into a "Connect" button that only leads to a "not available yet" message. Built connectors that simply are not configured yet (like a Slack mirror) still show their honest status.
- White-label branding (custom report and letterhead typography and accent color) is now included on Business, not Enterprise-only. Basic company identity and profile fields are available to admins on every plan.
- Settings polish: the working-day picker fits on one row, the role-preview switcher is a dropdown that no longer gets clipped, brand color is one clean row of swatches plus a custom-color circle with a hex field below, the settings list uses one consistent row style (no more some rows with colored icons and others gray), an uploaded logo no longer shows a long internal link, and several mislinked settings shortcuts now point to the right place.
Fixed
- On the Today board, "Reset to default" now actually restores the default layout instead of doing nothing, the setup checklist has a step that drops you straight into arrange mode to lay the board out your way, widget header and button colors stay readable in both light and dark mode, and dragging a widget to a new spot no longer stretches its contents or lets it float off the board.
- Switching between panels no longer flashes a brief empty loading card before the content appears, and the highlight around the sticky-note input is no longer clipped at the edge.
- The Account Security page header and device icons now render instead of showing blank squares, and the help "?" tooltips behave properly: they no longer get clipped behind a card edge, and they close on their own when you move away instead of staying open and stacking up.
- An RFP analysis whose processing is interrupted no longer spins forever. A run that makes no progress for 30 minutes is marked failed with a clear message and can be re-run, and long RFP titles in the analyzer list now wrap to two lines instead of being cut off.
- The Workspace settings page now shows the company name, website, logo, and brand color you already set during onboarding or on the company profile, instead of presenting empty fields that made it look like your data was lost.
- Admins can once again save workspace basics (company name, website, logo, brand color) and the company profile (industry, size, country, use case) on every plan. Saving these no longer returns a permissions error on Starter, Team, or Business.
- Reordering, hiding, or recoloring task statuses and changing your workspace brand color now take effect immediately across the app instead of appearing to do nothing until a manual refresh.
- Installing Hubity to your home screen or desktop now opens the app itself (your Today board) instead of the marketing site, so the installed icon lands you where you actually work.
- Team roster polish: the member Notes box now has natural padding instead of text crammed against the top, the roster filters (search, departments, status, sort) sit level on one row, and a roster-only teammate now reads as not having joined yet rather than as having declined an invite they were never sent.
May 13, 2026v9.222.0

A second pass on the chat artifact loop closes the rest of the "users expect this and we did not have it" gaps. Long-form Word documents are now first-class chat artifacts you can draft and iterate on. Proposal narratives can be revised in place without rebuilding the pricing line items. Edited images show a before / after toggle in the chat card so the change reads at a glance. The chat itself now resolves references to older artifacts automatically: say "edit the deck I made for Acme last week" and the assistant finds and edits the right one without making you call it up first. File uploads also pick up OpenDocument formats (ODT / ODS / ODP) so LibreOffice exports land cleanly.

Added
- Generated spreadsheets are now editable in conversation. Ask the assistant to "add a totals row that sums column B", "sort by date", "remove rows where amount is zero", or "add a column for margin" and you get a new .xlsx that updates the prior export, with the original still available in your artifact history so you can compare or revert. The new version is linked to its parent so the version chain is auditable. Up to 5,000 cells per sheet; larger exports split into multiple calls. Team plan and above.
- Generated slide decks are now editable in conversation. Say "rewrite slide 3 to focus on Q3 pricing", "add a closing slide titled Next Steps with three bullets", or "make the tone warmer" and the assistant fetches the prior .pptx, applies your change, and returns a new branded deck. The original stays in your artifact history. Manager and above.
- Word documents are now a first-class chat artifact. Ask for a memo, brief, 1-pager, white paper, policy doc, or any other long-form prose and the assistant drafts a downloadable .docx tuned to the audience and tone you specify. Ask to "rewrite the introduction", "shorten the second section", or "add a section on next steps" and you get a new version linked to the original so the version chain stays intact. Available to every authenticated user on Team and above.
- Proposal narratives can be revised in place without rebuilding the pricing. Ask the assistant to "rewrite the executive summary", "shorten the deliverables section to one paragraph", or "add a Risks section with three bullets" and the body updates while every line item, hour count, and total stays exactly as you set it at creation. Blocked once a proposal has been accepted or rejected so contractual records stay intact; create a new proposal for those cases. Manager and above.
- Edited images now show a before / after toggle on the chat card. Click "Before" on the chip beside the download button to see the previous render, click "After" to flip back. The edit instruction you gave appears in the caption so you can tell at a glance what the change was. The toggle only appears on artifacts that came from an edit; first-pass generations keep the clean single-view shape.
- File uploads now accept OpenDocument formats: ODT for documents, ODS for spreadsheets, and ODP for presentations. LibreOffice and other ODF-native suites export to these by default, and they previously hit the unsupported-file error the way ZIP and RTF did before they landed. Extraction caps match the OOXML counterparts: 50 rows per sheet for ODS, 50 KB output total.
- File uploads now accept rich-text documents (.rtf) and zip archives. A .rtf opens directly and the printable text flows into chat context. A .zip is unpacked one level deep so a bundle of mixed files (PDFs, images, spreadsheets) lands as one upload; the assistant reads each member through the same pipeline as a top-level attachment. Per-member size cap is 5 MB; nested archives are surfaced as a hint to extract separately rather than auto-recursing.
Changed
- The chat now resolves references to older artifacts automatically. Say "edit the deck I made for Acme last week" or "rewrite the proposal we sent yesterday" and the assistant finds the right artifact in your history and acts on it directly, no need to call up the file first. The resolver is conservative on purpose; it triggers only on explicit reference phrasing plus a time or topic hint, so generic asks like "make me an image" never accidentally pull in old work.
- Spreadsheet uploads now carry an explicit "TRUNCATED" marker when the file is larger than the sampled window, so the assistant can tell you "I read the first 50 rows of 1,200" instead of silently producing an answer that only reflects a slice. The marker only appears when the workbook actually overran the cap; smaller files pass through cleanly.
Fixed
- The upload picker no longer offers .bmp or .tiff. Modern vision models reject those formats and the chat surfaced an "unsupported file type" error after the user thought they had attached an image. The picker now lists only formats that round-trip cleanly through the pipeline. Convert legacy .bmp/.tiff to PNG or JPEG before uploading.
- Marketing pages, login, onboarding, and legal surfaces now render in the dark palette regardless of OS preference. The prior shape resolved theme from the system setting on those routes, which produced invisible dark-on-dark body copy on marketing cards that hard-pinned a dark background. The authenticated app shell still honors per-user theme choice (Settings) so anyone who picked light keeps light.
- The browser tab favicon stays readable on both light and dark tab strips. Earlier, a Chrome quirk could serve the wrong variant when the OS theme and the page-declared color scheme disagreed, leaving the cream-toned dark-mode favicon barely visible on a light tab strip. The new single dark-charcoal mark with the brand-teal bubble reads crisply in either context.
May 14, 2026v9.224.0

Today becomes a personal command center: a customizable widget board, a real notification system that follows you across tabs, a finance follow-up surface for past-due invoices, sign-in that routes itself, settings that have a home, and sticky notes you can pin anywhere. Plus discipline-tuned onboarding so a new workspace lands ready for the kind of work it does, email digests and Discord / Google Chat bridges to complete the notification and inbox stories, and a quiet rule that hides any capability whose env var is not configured so nobody clicks a button that leads nowhere.

Added
- Finance now has a real follow-up surface for past-due invoices. Aging buckets group every outstanding invoice by client, you assign one owner per client to chase the balance, log every call / email / meeting touch as you go, and a morning push hits any owner with a 30-day-plus exposure so nothing slips. A second morning digest goes out by email for owners who turn that preference on, listing the top 10 past-30-days clients with amounts. Ask the assistant "show my aging follow-ups" and it reads the same list. Finance, admin, and owner roles can assign; an assigned employee can log their own touches.
- Notifications now actually notify. A bell sits in the top of every page in your workspace with a live unread count, and the browser tab title carries the same count so even a backgrounded tab tells you someone messaged you. Direct messages, mentions, announcements, polls, aging follow-up assignments, task assignments, approvals, and meetings all funnel into one feed. Click the bell for the dropdown, click "View all" for the full page, and tune which kinds nudge you (in-app vs push vs email, quiet hours, sound) under Settings. Web push still fires when you are offline; an hourly email digest bundles unread items into one message when you opt in; the bell plays a soft chime when something new arrives, syncs read state across browser tabs in real time, and announces the unread count to screen readers.
- Onboarding now adapts to what your team does most. Pick from thirteen disciplines at signup (construction, nonprofit, consulting, agency, and so on, including "Something else") and Today arrives pre-tuned: a discipline-shaped widget board and a first-mission splash with three starter actions specific to your line of work. Workspace owners also get a checklist widget on Today that retires itself as you complete each setup step. Every onboarding field also gained a question-mark tooltip that explains in one sentence what the field means, so no one has to guess.
- Settings now have a real home with eight cards (workspace, members, domains, AI and data, integrations, notifications, security, compliance) and a one-line explanation under each. Press Cmd-K (or Ctrl-K on Windows) anywhere to open a global search that indexes every panel, setting, chat capability, and your recent stops. AI model controls now live under AI and data where you would actually look. Every card opens to a full sub-page: workspace branding, verified domains and SAML, AI governance, notification preferences with quiet hours and per-kind toggles, compliance with data export and DSAR, and a new environment-status page so admins can see at a glance which features need configuration before they work.
- Sticky notes are everywhere. Pin one from chat with "make a note to follow up with Acme on Friday", add a note to a project from its detail page, and the same note shows up on Today if you pin it. Each project page now has a Notes section that mirrors the Today notes widget for that project.
- Discord and Google Chat join Slack and Teams as message bridges. Replies sent from those platforms land in your combined inbox with the platform badge so you can keep one conversation across every surface.
- A seven-day calendar widget joins the Today board. Open the widget catalog, drop "Week ahead" onto your board, and the next seven days appear stacked with every meeting on each day. Click any day to jump straight to that meeting, use the prev / next chips to walk forward or back a week, and "Today" snaps you back to the current week. The widget pulls a four-week window in one call so paging within that range stays instant. Empty days are labeled rather than hidden so the cadence of the week is obvious at a glance.
- The RFP analyzer now weighs historical sources by freshness instead of treating every cited proposal or rate sheet as if it were current. Each citation carries an age and a volatility class (stable / location-dependent / volatile); pricing from twenty years ago is still used when it is all the team has, but the report flags the haircut, surfaces a "regional variance applies" note when the source is from a different geography, and calls out the median age in a banner when the analysis leans heavily on dated material. The operator sees the confidence modifier per citation so the recommendation is never accidentally read as more certain than the data supports.
- RFP reports gained a sticky key-dates strip across the top with one chip per calendar event the analyzer pulled out: pre-bid meeting, site visit, Q&A deadline, proposal due, award notification, project start. Each chip shows the date and a relative offset so it is one glance to tell whether the next item is fourteen days out or already past. Replaces the old "single rfpDueDate field buried in the header" shape.
- Promising RFPs no longer fall off the radar. Open an analysis, choose Pursue, and tag the teammates who should drive it; each tagged person gets a notification immediately and the RFP shows up on their Today board with the next key date front and center. Reminders are auto-seeded a week before every key date so pre-bid meetings and proposal deadlines do not slip. The four pursuit lanes (new, pursuing, monitoring, declined) plus the won/lost outcome give the team a clean lifecycle without leaving the report.
- A generic reminder framework now backs anything in the workspace that has a "due later" date. Ask the assistant ("remind me to follow up with Acme on Friday"), tag yourself on an RFP, or accept the auto-seeded reminders for tasks and meetings, and they all land in one place. Each reminder can be snoozed one day, snoozed to a specific date, or dismissed forever. An hourly cron converts due reminders into in-app notifications; a new "Upcoming dues" widget on Today shows the active list at a glance.
- A new "Pin Today to your desktop" nudge sits at the top of every fresh Today board on first visit. The card detects your browser and walks you through the right install path: Chrome and Edge offer a one-click "Install Hubity" button via the native PWA prompt, Safari on Mac points at "Add to Dock," Safari on iOS points at "Add to Home Screen," and Firefox gets the drag-the-URL-to-desktop trick. Dismiss it once and it never comes back; the goal is the daily-driver workflow where one double-click lands you on Today every morning.
Changed
- Today is now a customizable widget board you can arrange. Drag widgets to reorder, add the ones you want from the catalog, remove the ones you do not, and reset to your role default any time. The same eleven widgets ship for everyone: daily briefing, tasks, meetings, PTO, wiki updates, combined inbox (Hubity DMs + Slack + Teams + Discord + Google Chat), announcements, polls, sticky notes, aging follow-up (finance and leadership only), and a chat launcher. Layout persists per user across devices, with a cross-tab revision check so two tabs do not stomp each other. Every empty widget also shows a hand-drawn sketch and a one-line message tuned to the panel: a pig for clean books on the aging widget, a calendar for an empty meetings list, a bird for inbox zero, a paperclip for no notes, a lightbulb for no wiki updates yet.
- Sign-in routes you to the right path automatically. Type your email and we suggest "Continue with Google", "Continue with Microsoft", or "Continue with your workspace SSO" based on your domain, the provider you used last time, or your invitation. The old four-button grid still works if you would rather pick yourself, and email codes are always the fallback. Invited teammates also see "You have a pending invite" inline so they know they are in the right place. New users are then offered a passkey at the end of onboarding for one-tap biometric sign-in on every later visit. Skip if you would rather stick with email codes; you can always add a passkey later from Settings.
- Any capability whose backing service is not configured for your workspace is now hidden rather than offered. The login page no longer shows OAuth buttons for providers your operator has not connected, the integrations panel hides connectors that have no credentials, and the SAML link only appears when SAML is enabled. Admins can open Settings → Environment Status to see at a glance which capabilities are live and which are waiting on configuration.
Fixed
- The browser-tab favicon now sits centered on its canvas with even padding on all four sides, instead of butting up against one edge. The previous source asset was wider than tall, and Chrome would clip the right side when the tab strip rasterised it into a square slot. Every cache size (16, 32, 48, 96, 192) and the apple-touch / Android-adaptive variants were re-emitted in lockstep so every surface gets the corrected mark.
Security
- OpenAI deprecated DALL-E 2 and DALL-E 3 on May 12. The image generator has been migrated to gpt-image-2 (the equal-quality replacement) and gpt-image-1-mini (the cheaper draft tier). Edit operations continue to flow through gpt-image-1 since its edit endpoint is unchanged. Workspaces never saw a generation failure; the resolver fell through to Imagen 3 during the transition window.
May 12, 2026v9.215.1

The chat finally feels the way you expect a modern assistant to feel: every artifact you and the assistant make together (images, proposals, slide decks, spreadsheets) stays in context turn after turn so iteration actually works, long conversations no longer hit a wall, and a live document side pane opens whenever you ask for a long-form draft so the next "rewrite the intro" reads like a real edit instead of a full regeneration. Diagrams and math notation render natively, multi-tab convergence keeps two windows in sync, a "Working on…" pill surfaces multi-turn intent, partial responses survive interruptions, and a Camera plus Capture-Screen button on the input let you drop a webcam frame or a screen snapshot straight into the chat. Plus a meeting agenda you can plan and run from the Meetings panel, and a handful of smaller fixes.

Added
- Every artifact the assistant produces (images, proposals, slide decks, spreadsheets, videos, and the new canvases) now stays visible across follow-up turns. Ask for a logo, then say "make the wall blue" and the assistant actually sees the prior image, calls edit_image with the correct source automatically, and you get a real iteration instead of a confused "what image do you mean?" The recap caps the in-context list at the 8 most recent artifacts to keep latency tight; older artifacts stay searchable through the new find_artifacts tool ("pull up that proposal I made for Acme last Tuesday" works across every conversation you own).
- Live document canvas opens whenever you ask for a long-form draft. Say "draft a proposal for the loft expansion" and a side pane appears with the document loaded; you can edit directly there, or stay in chat and say "rewrite the executive summary to focus on phasing" and the assistant patches the document in place and shows you the diff. Every edit is versioned so undo is one click; the version history pane lists every change with who made it and when. Plan-gated to Team and above; free callers see the existing markdown draft block as a fallback.
- Plan and run a structured agenda for any logged meeting. The Meetings panel now opens an Agenda view per meeting where the facilitator can draft items (title, optional description, target duration in minutes), reorder or remove rows, then click Start to switch the panel into run mode. Run mode highlights the current item with a live timer, captures per-item notes and decisions, and lets you skip or advance to the next item. The assistant can also draft the agenda for you from chat ("plan a kickoff agenda for the Acme project with three items: scope, schedule, risks") with a quick confirmation before saving. Manager-and-above can write; capped at 50 items per agenda. Full set of strings translated across all 12 supported locales.
- A full Wave-2/3/4 chat polish stack landed alongside the cross-turn artifact + canvas overhaul. (1) The assistant reads its responses aloud on click via a small speaker icon next to each message, and every message also gets a one-click Copy button. (2) Spreadsheets (XLSX), slide decks (PPTX), and audio recordings (MP3, M4A, WAV, WebM, OGG, FLAC) can now be attached directly in chat; audio is transcribed via Whisper before the assistant reasons over it. (3) Files can be dropped anywhere on the chat surface to attach instead of clicking the paperclip. (4) Hovering over any prior user message shows an Edit button that pulls it into the input; hovering over an assistant response shows a Regenerate button. (5) Any conversation can now be shared via a one-click link with a 30-day default expiry (you control the window up to a year, and revoking the link is instant). (6) The conversation list now paginates server-side (50 per page, server-side title search) with archive and a one-click "show archived" view so a long-lived workspace can sweep older threads off the active list and still find them later. Restoring an archived conversation is one click from the same view. (7) A new Settings → AI Memory section lets you see, edit, or delete every fact the assistant has captured about you across conversations. (8) Typed-but-unsent text in the chat input now survives a tab refresh or accidental close: your draft is preserved locally and restored on next open. (9) Behind the scenes, a nightly garbage-collection sweep removes the underlying file bytes for chat artifacts you have explicitly deleted (after a 14-day grace window), so workspaces that generate lots of images / decks no longer accrue storage cost for content nobody can see anymore. (10) Generic fenced code blocks in assistant responses (```ts, ```sql, ```python, etc.) now render as a proper code panel with a one-click Copy button. (11) Any assistant message can also be pinned with a one-click bookmark, so a useful answer stays easy to find later via the new per-conversation pinned-message lookup. (12) Diagrams and math notation render natively in assistant responses: ```mermaid blocks turn into interactive flow / sequence diagrams, ```math and $$...$$ render as proper display equations, and inline $x = y$ shows formatted math instead of literal dollar signs. (13) Two tabs on the same conversation now converge automatically; messages sent in one tab appear in the other within about twelve seconds, no refresh needed. (14) A small "Working on…" pill appears above the input when the assistant is carrying a multi-step task across turns, with a one-click dismiss to start fresh whenever the user has moved on. (15) The chat surface now exposes a Camera and a Capture-Screen button next to Attach on desktop, so a single frame from a webcam or any screen / window can become a chat attachment without leaving the conversation. (16) If a long streaming response is interrupted (closed tab, dropped network), the partial reply is preserved on the conversation rather than vanishing, and the standard Regenerate button can run the turn cleanly. (17) Screen readers now hear streaming assistant responses as a polite live region, and every assistant-generated image carries proper alt text from its prompt or filename. Smaller fixes from the same release: image instructions, accidental "+ new" auto-resume, DM retention caveat across every locale, and intake review tray read-only flag respected on the Restore-dismissed view.
- The assistant can now amend a logged time entry. Say "change my Friday entry to 90 minutes", "switch yesterday's time to the Acme project", or "mark that entry non-billable" and the assistant updates the entry after a quick confirmation. Self-only for employees by construction (you can only edit your own); managers can edit any entry in the workspace. Invoiced entries cannot be modified (you have to adjust the invoice or void it first); the assistant surfaces a clear message rather than failing on a generic conflict.
- Poll creators can ask the assistant to remove an option from a multiple-choice question while the poll is still in draft, refusing the call when two options share the same wording (re-asks with the position instead of silently dropping the first match) and rejecting malformed positions like "1.5" or "1abc" before any write. Draft-only by construction so already-recorded votes are never silently invalidated; the writer also refuses to drop below 2 options so a question stays answerable. Poll creator or admin and above.
- Admins can ask the assistant to allocate a workspace-wide PTO block ("Year-end shutdown, December 23 through 31") and the entries land on the calendar after a confirmation. Range capped at 31 days, with a clear refusal if the end date precedes the start date. Existing holidays inside the range are not overwritten; every overlapping day is reported to the operator (not just the first five) so they can decide whether to trim before confirming. Repeat invocations no longer create silent twin entries. Custom roles with "manage members" can also use this flow; the chat dispatcher and handler now agree on permission so there is no contradictory denial.
- Admins can ask the assistant to grant or revoke access to a panel for the whole workspace, a department, a role, or a single user ("hide the Knowledge panel for the marketing department", "give the new Reports panel to managers and admins only"). The assistant confirms what is about to change before saving, and the write requires a recent admin re-authentication: chat has no native re-auth flow, so the assistant surfaces a hint pointing the operator back to the workspace UI rather than letting them believe the change applied silently. The cluster invariant still holds (you cannot leave a child panel visible if its parent is hidden, or hide a parent that still has visible children); a write that would break it gets refused with the specific conflict cited. Panel identifiers are validated against the registered panel catalogue so a typo no longer writes a silent no-op. Every save is audited.
Changed
- Conversations no longer hit a hard 100-message wall. The rolling summary already absorbed older turns into a compact narrative the assistant still saw; the wall was a stale guard from before that path was production-ready. You can now keep going indefinitely on a single thread. A soft toast at 500 messages nudges you to consider starting fresh if the context starts to drift, but it never blocks continuation.
- When the assistant or a meeting finalize tries to create a task whose title plus description matches a task you already have open, you now get routed back to the existing task instead of seeing a second near-identical row on your list. The check runs across every task source in the workspace (manual, chat, meeting finalize, knowledge accept), so a follow-up meeting that re-extracts "Follow up with Acme on Q3 budget" lands on the same task rather than starting a new thread. Closed and cancelled tasks do not match because routing to those would lose the work; the writer falls through and creates a new task in those cases. Cross-tenant matches are structurally impossible.
- Two perf-cap improvements on the build and runtime sides. Morning briefing generation now budgets its 25-second AI call from the moment a workspace acquires a concurrency slot rather than from the moment the request was queued, so workspaces with five or more concurrent openers no longer push the fifth caller into a queue where most of the timeout window had already burned before the model call started. Production deploys also now honour the original single-worker cap on the Next.js build pool that an env-var-shaped no-op had silently been letting through, freeing ~1.8 GB of duplicate worker state on the CI runner; local builds keep the default 4-worker pool for speed.
- Cross-feature semantic search no longer lets one domain crowd out the others. The Knowledge lookup over-pulls (3x the per-domain cap) to give the dedup step room to work, but the inflated result set used to bleed into the final ranking and starve tasks, meetings, and clients of their per-domain budget. Now the cap is enforced after scoring so the strongest hits in each domain survive without flooding the page. Push notifications that announce "N new tasks from <source>" also now key off the source's stable identifier rather than its label, so renaming a meeting between finalize attempts no longer splits the notification thread on the recipient's device.
Fixed
- Three confirmation flows in the chat assistant now show the right context before you click Confirm. Withdrawing an approval renders the request title, amount, and project from the approvals list rather than only an opaque identifier, so you can verify you are cancelling the right one. Editing an expense or a budget item with a zero or negative dollar amount is refused before the preview card appears (those would zero out the underlying ledger row). Cross-source task dedup also got a defensive guarantee that a closed or cancelled task can never silently absorb a new action item, so a finalize that surfaces a matching but already-done task still creates the new work rather than dropping it.
- When you accept a Knowledge update that conflicts with an existing client or vendor contact, the apply now skips rows that were moved to the Trash between your verify-card preview and the save. The earlier behaviour quietly wrote the new value to the deleted row, which looked like a revival but left the row hidden. The conflict apply now silently no-ops on a trashed target so an operator never sees a phantom "updated" record they cannot find in the active list.
- Auto-seeding the Business Development service-line list now revives a previously soft-deleted entry rather than silently doing nothing. The earlier path tripped on a uniqueness constraint when an operator had cleared the list once before, leaving the seed apparently empty even though the suggestions were fine.
- Two cost-and-reliability tweaks landed. Short text and markdown ingest now bills at the rate of the model that actually runs them rather than the cheaper rate the prior estimate quoted, so your AI budget meter is now accurate instead of running a 4x undercharge. The AI retry helper also honors a provider-supplied retry-after when wrappers attach one directly to a 429 error, so custom per-tenant budget trackers can override the generic header parse with a tighter delay.
- Scanned and image-based PDFs uploaded to chat now extract via vision OCR instead of failing with "could not extract readable text". When the standard text-layer extractor returns empty (the document has no embedded text, common for scans and exported designs) the attachment handler now hands the bytes to the same vision pipeline the Knowledge ingest pipeline already uses. Agenda-shaped attachments also get routed to a checklist preview by default rather than fanning out across multiple Knowledge entries; the assistant shows a clean preview and asks whether you want a task per row, a single meeting log, or one Knowledge document.
- Two RFP-analyzer ingest bugs landed. A spreadsheet exported from Excel and tagged with the legacy Excel format (a common browser quirk) now classifies correctly so the extractor reads plain rows instead of throwing on "corrupt workbook". The XLSX extractor also slices the right region of the upload buffer when the bytes are a sub-view of a larger frame (a non-zero byte offset previously caused the extractor to read garbage and reject the file).
Security
- The URL-ingest tool that pulls public web pages into your Knowledge surface now refuses a broader set of internal-network destinations. Beyond the standard private ranges, requests targeting wildcard, loopback, mapped, link-local, and unique-local addresses are blocked before the fetch runs. These were the addresses an attacker would smuggle into a URL hoping a server-side fetch would reach an internal service the customer never intended to share.
- Push notifications are no longer a launch blocker for workspaces that do not use them. The web-push keys used to be required for any production deploy; now the runtime gracefully degrades to no push delivery when the keys are unset rather than refusing to come up.
May 11, 2026v9.204.1

AI proposals now enforce the workspace rate schedule as the source of truth, voice conversation artifacts ship the same hallucination-gate quality bar that Knowledge and Meetings have, AI-generated narrative everywhere now reports the count of grounded vs stripped content so a high stripped-ratio is one glance away from being noticed, every employee can file their own right-to-be-forgotten request from their account, and sensitive columns like salary and date-of-birth are now masked at the response boundary so a future query change cannot accidentally leak them.

Added
- Workspace admins get a single AI operations snapshot endpoint that returns the workspace's LLM token spend by model for the last 30 days, the current knowledge-ingest queue status (queued, processing, failed, awaiting confirmation), and the meeting-finalize activity (count by status, total action items, total linked clients) in one read. The window is configurable from 1 to 365 days. Manager-plus access. A single failing query in one section leaves the others populated so a transient blip never blanks the dashboard.
- A single search query now sweeps across Meetings, Tasks, Knowledge entries, and Clients in one read instead of forcing you to check each panel separately. Results land ranked by relevance: an exact title match wins the top slot, a word-boundary match comes next, an inside-the-word substring last; ties break by recency. The result list caps at 20 hits across all domains (5 per domain) so a noisy section never crowds out the others. A single slow or unhealthy domain fails soft and the rest of the result list still ships, so a search for "the Q3 work" never returns nothing just because one table is having a moment.
- Meeting transcripts now auto-link to the client records they mention. When a finalize runs, the AI summary, the structured minutes, and the raw transcript are all scanned against your client list. Every client mentioned at a word boundary gets recorded against the meeting, so the client detail page can show "recent meetings that mentioned this client" without anyone hand-tagging. Corporate suffixes ("Acme Corp" matches "Acme" or vice versa) and capitalisation are handled automatically; common two-letter brand abbreviations are intentionally skipped so the linker doesn't fire on every "GE" or "HP" appearing in unrelated speech.
- A task assigned to you by the AI now tells you about it. When a meeting finalize, a chat command, or any other surface assigns you a task, you get a push notification with the task title, where it came from ("from Q3 Planning Meeting"), and the due date if set, all tappable straight to the task. Self-assigned tasks and unassigned tasks don't fire notifications. The push is fire-and-forget on top of the task itself; even when your device has no push subscription on file the task is still on your list the moment you open the app. A persisted notification inbox lands as a follow-up; this is the immediate-fan-out layer.
- Every fact-shaped piece of content the assistant or a teammate writes now lands in a workspace-scoped duplicate registry. The first wired writer is task creation: when a new task is added (manually, from chat, from a meeting finalize, or from a knowledge import), the title plus description is normalised, hashed, and recorded so a future meeting, knowledge accept, or briefing extractor that produces the same text can see the prior occurrence and skip or surface it as a conflict in the verify card. Cross-tenant matches are structurally impossible; the registry is best-effort so a transient database hiccup never blocks the underlying write. As more writers wire in over the next session ("the same takeaway showed up in a meeting and in a knowledge import on the same day"), the operator-facing conflict surfaces will become visible.
- State changes across the product now flow through a single event bus so every consumer (notifications, the workspace AI operations dashboard, future outbound integrations) hears about them without per-feature wiring. Task creation, meeting finalize, approval decisions, and PTO approve / reject emit a workspace-scoped event that a once-a-minute fan-out routes to every subscriber. Every emission is best-effort; a transient database hiccup on the bus never blocks the original save. Subscribers are isolated, so one slow channel can't starve another. As subscribers wire in (push notifications, an in-app inbox, email summaries, signed outbound webhooks), the cross-panel "X talks to Y" gaps the workspace audit synthesis flagged in May start closing.
- Tasks and knowledge entries now auto-link to the canonical records they mention. When a task is created, its title and description are scanned against the workspace's clients, projects, and team members, and every match is recorded against the task as a structured link. When a knowledge entry is saved, its body is scanned for project and deal mentions and the matches are recorded the same way. (Clients on knowledge entries were already covered by the existing ingest pipeline.) Same matching rules the meeting auto-linker uses: corporate suffixes are stripped before comparison ("Acme" matches "Acme Corp"), word-boundary aware so "Acme" doesn't hit "academy", and short project codes are filtered to avoid false matches. The links sit alongside the original row in indexed JSONB columns, so a client / project / team-member detail panel can render "recent tasks mentioning this entity" in one read.
- Ask the assistant "what do we know about Acme Corp?" and get a single response covering everything: the client overview, recent meetings that mentioned them, recent tasks tied to them, knowledge entries linked to them, related deals, and operator notes, all in one fan-out. Previously the assistant had to chain four or five separate tool calls and stitch the results together, which sometimes left half the picture out when the model decided one of the calls "probably wasn't needed". The new tool works for clients, projects, and deals; pass a since date or scope the sections (e.g. just meetings and tasks) for tighter answers. Token-budget-aware so even a client with hundreds of historical rows comes back in one readable response with the freshest items first; a truncation flag tells the assistant when to offer "want me to dig into the rest?" follow-ups. Cross-tenant lookups return "not found", never leak existence.
Changed
- When 20 people in a workspace click "Finalize" at the same standup time, the meeting summarisation now queues the AI calls four-at-a-time per workspace instead of blasting all 20 simultaneously at Anthropic. The fifth caller onward waits for an earlier one to complete; nobody sees a rate-limit error and nobody pays the slow-timeout cost. Cross-workspace traffic isn't affected, so one workspace's burst never starves another's capacity. The wait queue is observable to operators for tuning the cap.
- Long meetings no longer get truncated at the AI summarisation step. The prior code cut the transcript at the first 12,000 characters (roughly the first 10-12 minutes of a typical meeting); a 60-minute meeting lost the last three-quarters of its content before the AI ever saw it. The finalize step now sends meetings up to about an hour-long in a single LLM call (60K characters, well within the model's context window). Longer meetings are split into overlapping windows, each summarised on its own, then stitched into one set of minutes with action items deduped across windows. The verify-card hallucination gate that already runs on each item still applies to the stitched output, so action items derived from the late stages of a long meeting now appear in the final list with the same evidence the early ones already had.
- Realtime voice-conversation artifacts (the summary, action items, key insights, and follow-up the assistant produces at end of a voice session) now drop action items the AI invented. Each action item the LLM emits must carry a verbatim transcript quote of at least eight characters; items whose quote is absent or doesn't appear in the conversation transcript are dropped before the artifact record is saved or shown. Bare-string action items emitted by an off-schema response are dropped too. The artifact payload reports how many items were grounded vs dropped so a high stripped-ratio is one glance away from being noticed. The visible action-item list stays a flat array of texts for backward compatibility with the existing voice UI.
- When a meeting finalize creates several tasks for the same teammate, that teammate now gets ONE coalesced push notification instead of one buzz per task. A finalize that hands Alice five action items lands as a single "5 new tasks from Q3 Planning Meeting" alert with the first three task titles previewed inline and a "…and N more" footer for the remainder; tapping the notification opens the task list. Pre-coalescing, the same shape produced five rapid buzzes in succession, made it hard to see they all came from the same meeting, and looked like spam on the assignee's phone. The browser de-dupes by notification tag so a re-finalize of the same meeting collapses with the prior push instead of stacking. Self-assigned tasks still suppress the push entirely; multi-recipient finalizes (two for Alice, one for Bob) produce one push per recipient, never one push per task.
- When an AI model hits its rate limit mid-request, the call now waits and retries up to three attempts instead of failing immediately. The wait respects the provider's advertised "come back in N seconds" header when present, falls back to exponential backoff with jitter when it isn't, and caps the maximum sleep at 30 seconds so a pathological 5-minute hint can't pin a worker. Transient server errors (5xx, connection resets, DNS hiccups) follow the same exponential-backoff path. Exhausted retries surface a typed error so the calling pipeline can distinguish "we hit our cap, queue and try later" from "the model is down, fall through to the next provider". Previously both looked the same and the fallback chain mis-routed. First wired through Gemini calls (the knowledge ingest hot path); Claude and OpenAI follow.
- The unified search box across Meetings, Tasks, Knowledge, and Clients now searches the contents of each record, not just the titles. The pre-Theme-1.1 ranker only scored title and name columns, so "Q3 budget overrun" never matched the task description, meeting summary, or client note that discussed it. Every domain now carries a stored full-text index over (title plus body) with English stemming and stop-word removal, so "budgeting" hits rows that say "budget". A second engine, opt-in via the request, runs vector-similarity search against the knowledge base embeddings so the user's words don't need to literally match the document's words ("budget overrun" finds the meeting that says "we're trending over our Q3 allocation"). The legacy substring ranker stays available for the exact-phrase case (looking up an invoice number or SKU). Tenant isolation is preserved across every lane; a single domain failing soft never blanks the result list.
Fixed
- Verification-code emails and every other transactional email now render the brand wordmark in Outlook the same way they already did in Gmail and Apple Mail. The header logo had been an external image, which corporate Outlook tenants block by default for any sender they tag as external, leaving recipients with a broken image icon at the top of the email. The header now renders as live two-color text ("hub" in warm charcoal, "ity" in brand teal) instead of relying on an external image, so every recipient sees the wordmark regardless of tenant policy, image proxy, or inbox theme. Dark-mode handling in Outlook also got a sweep so the verification-code digit cells, body text, and card surfaces stay readable when the inbox is in dark mode instead of muddying into low-contrast grey.
- The Feedback admin panel now renders in every supported locale instead of always English. The translation scaffolding was already in place (filter dropdowns, status and priority pickers, the per-row badges, and the response composer all carried translation keys) but the JSX still referenced the English defaults; non-English customers saw a half-translated screen. The hook is now wired through every reference, and the chrome (header, rating prefix, page / viewport / version meta labels, write-a-response placeholder, export and close arias) all flow through the locale message file instead of hardcoded English.
Security
- AI-generated proposals now treat your rate schedule as the source of truth. Whenever the assistant generates or revises a proposal, every line-item role is matched against the workspace rate sheet before the proposal lands: an exact match uses the canonical role and canonical rate (any inflated rate the model emitted is discarded), a near-miss role is fuzzy-matched onto the closest canonical entry, and a line item whose role doesn't resemble anything in your schedule is dropped entirely rather than shipping a fabricated rate to a client. A hallucinated "$185/hr → $1,850/hr" or a made-up "Principal AI Optimization Architect" role can no longer reach a client-facing proposal. When no rate schedule is configured the assistant continues to use reasonable professional rates as before; the gate only runs when there's a schedule to ground against. Grounding stats land on the response so a high coercion or drop ratio is visible to the operator.
- Sensitive employee columns (salary, compensation notes, date of birth, last-4 of SSN, emergency contact) and workspace billing identifiers (Stripe customer id, Stripe subscription id) are now masked at the response boundary. The staff roster endpoint, which previously relied on the SELECT statement to omit these columns, now runs every row through a deny-list policy before shipping the response, so a future query change that pulls those columns can no longer accidentally leak them to a teammate without the right role. HR-level callers and the row's own owner still see what they always saw; everyone else sees null in the masked positions instead of the underlying value.
- Every employee can now file their own right-to-be-forgotten request from their account, instead of having to ask an admin to do it for them. The new endpoint files a 30-day GDPR-Art.12 erasure request with a confirmation gate (no accidental submissions), a tight 3-per-hour rate limit (filing erasure is once-in-a-lifetime), and a guard that blocks the sole owner of a workspace from requesting erasure (a workspace must always retain at least one owner; the owner has to transfer ownership before requesting erasure). The admin endpoint still executes the actual irreversible deletion; the new endpoint queues the request and starts the SLA clock so nothing slips.
- Operator notes on client records are now manager-only. The notes column carries operator context like "repeat customer, prefers Friday meetings" or "behind on payment last quarter" that team members shouldn't read; the response boundary now masks the column to null for employees and viewers while keeping it visible to managers, finance, admins, and owners. The masking runs at the response boundary so a future query change can't accidentally leak the column. Pairs with the morning-briefing generator, which now caps concurrent AI calls per workspace at four so a same-time start-of-day burst from a 30-person team queues cleanly behind the first four instead of all 30 simultaneously hitting the provider rate limit. Managers can also now ask the assistant to withdraw their own pending approval request without leaving the chat ("withdraw my Q3 budget approval"); the assistant confirms title plus amount plus project before transitioning the request from pending to canceled. Self-only by construction so the audit trail reflects intent. Prediction primitives now turn the entity-event log and domain rows into structured signals the assistant can surface ("typically creates tasks around 9 AM weekdays", "client Acme: last touched 4 days ago, average invoice age 12 days, recent sentiment positive") without burning LLM tokens; future surfaces will render these alongside the existing entity-context tool. Daily briefings additionally run a verbatim-token check on every bullet so operator-visible logs surface the fabrication rate, paving the way for a follow-up that flips the new check from log-only to drop-and-replace.
May 10, 2026v9.189.7

Bulk import to Knowledge is now a fluid, transparent, cancellable experience that reads the file types business teams actually use end-to-end. Each file moves through its own status lane with a live progress bar and the model attribution that handled it. Spreadsheets and CSVs land structured, photos and scanned PDFs read into searchable text via vision OCR, every extracted fact carries a verbatim quote from the source, and re-uploaded duplicates plus contradictions with existing records now surface before the operator approves anything.

Added
- Knowledge import now reads spreadsheets. Drop in a CSV (header row plus data) or an Excel workbook (every visible sheet, formula results evaluated, hidden sheets skipped) and the verify cards land with the same structured-summary shape as a PDF or Word document. Each sheet shows up as its own labeled section so a multi-tab budget or rate sheet is preserved as the operator authored it. Cells that hold formulas surface their displayed value, not the formula text, so the import sees what the spreadsheet renders rather than the source.
- Photos and scanned PDFs are now first-class. A picture of a receipt, a phone-snapped whiteboard, a screenshot of a slide deck, or a scanned contract whose text layer is empty all route through vision-driven OCR in a single call. Up to about twenty megabytes per file inline; the result drops back into the same verify-card flow as a text-bearing document, so the operator reviews extracted entities, dates, decisions, and risks the same way regardless of how the original was captured. Falls through automatically if the fast model has a transient hiccup so a single hiccup never strands an upload.
- Knowledge import now catches re-uploads and look-alike updates before they re-process at LLM cost. A duplicate of a file you already imported (byte-identical) is recognized immediately and surfaces as "already ingested" with the date, name, and an option to reprocess. Files whose name is suspiciously close to something you already have ("Q3 Budget Draft" vs "Q3 Budget Final") show up as a soft hint in the verify card so you can decide whether to update the existing entry or keep both. Cross-team duplicates on in-flight imports are caught too: if a teammate is uploading the same file right now, the verify card calls that out so you can coordinate instead of both of you accepting independent copies.
- Knowledge import now flags contradictions between extracted information and what is already in your records. When the verify pass finds a client, contact, or vendor whose name matches an existing canonical row but the email or website differs, the verify card surfaces it as a side-by-side conflict pinned to the exact quote in the source document, so you decide whether the new value updates the existing record or whether the older value stays. Suffix differences ("Acme Co" vs "Acme Co LLC") and protocol/www differences on websites are normalized away before comparing, so the only conflicts you see are real ones.
- Accepting a Knowledge import now creates real work, not just a saved document. Every action item the verify pass extracted (and that you left checked) lands as a real task in your task list with the description "From knowledge import: <filename>" so the trail is clear. Entities the document mentioned that already exist as canonical records (clients, vendors, projects, contacts, service lines) get linked to the new Knowledge entry automatically, with a normalized-name match that ignores LLC/Inc differences and casing. Entities that don't match an existing record stay un-linked so you don't accidentally overwrite anything; you can promote them to canonical rows later from the entity-detail panels.
- The Knowledge bulk import now shows an estimated cost before you click Import. The number sits next to the file list and updates as you add or remove files: a 5-file batch of contracts might say "est. $0.08," a 25-file batch of long PDFs might say "est. $1.20." Per-file estimates account for which model your file will route to (Gemini Flash for short documents, Gemini Pro for long PDFs, Claude Haiku for spreadsheets) and always round up so the estimate never under-promises. Closing the modal mid-run is also smarter now: re-opening the modal detects any imports still running on the server and offers a one-click "Watch progress" banner so you pick up where you left off instead of starting a fresh upload.
- Chat can now save, edit, delete, and import-from-URL Knowledge entries on your behalf. Tell the assistant to "save this as a fact" mid-conversation and a confirmation card lands with the title and body it inferred; click Confirm and the entry is in the Knowledge base, searchable by everyone with the right access. The same flow handles "update this entry to say the email is X" (cross-tenant access returns "not found" so foreign records never leak even by id), "remove the old contract entry" (soft-delete, recoverable for 30 days from Recycle Bin), and "ingest this URL" (the link is fetched, the bytes flow through the standard verify pipeline including dedup and conflict detection, and the verify card appears in your import area). Every chat-initiated change still requires you to confirm; nothing is written before you click.
- Picking "Use the new value" on a Knowledge verify-card conflict now actually updates the record. Earlier the diff rendered three choices (Update / Keep existing / Defer) but the persistence path ignored the choice and left the canonical client, contact, or vendor row untouched. Now the new email or website value flips on the existing record the moment you Accept the verify card, with a tenant guard so a guessed cross-tenant id can never overwrite foreign data. The verify card also got a bulk-ops row: Select all, Clear selections, Update all conflicts, Keep all existing, Defer all. A 30-entity import is reviewable without per-row clicking.
- You can now withdraw your own pending PTO request from chat. Saying "cancel my time off Friday" or "withdraw the vacation I requested" pops a confirmation card with the date range and leave type so you don't accidentally cancel the wrong one; one click and the request is gone before a manager touches it. The tool is self-only by construction; if you want to withdraw someone else's request, the assistant routes you to the existing approve-or-deny tool instead so the audit trail reflects intent rather than a bypass. Approved time off still has to go through the manager so a calendar that's already on someone's books doesn't silently change underneath them.
- Each action item on a meeting now shows the verbatim line from the transcript it came from, right inline with the action item itself. A short header at the top of the action-item list calls out that "every item links back to the transcript line it was extracted from", and below each item the source phrase renders as a quoted blockquote. A misread or stretched extraction ("ship the redesign" vs "ship the redesign next quarter") is now one glance away from being noticed instead of buried in a re-listen of the recording. The rest of the meeting page (summary, key topics, structured minutes) is unchanged.
Changed
- Bulk import to Knowledge is async end-to-end. The "click Import, watch a stuck spinner" moment is gone: each file shows its own status pill (queued, reading, classifying, ready), a per-file progress bar while the work is in flight, and the model that handled it once it lands. A worker keeps running on the server even if you close the modal, and a one-minute heartbeat reclaims any import whose first attempt died early, so the import always finishes once you start it. A Cancel run button lets you stop a multi-file import between files without losing the ones already saved.
- Knowledge import now picks the right model per file type instead of running every file through the same path. Long PDFs and Word documents route to Gemini for the long-context win and the cost difference, images route to Gemini multimodal for OCR-quality text extraction at a fraction of the price, and structured files (CSV, Excel, plain text) stay on Claude Haiku where strict JSON adherence avoids row-by-row corruption. A per-file model attribution chip on every progress row makes the choice visible. If a provider hiccups mid-run, the import auto-falls through to the next provider in the chain so a single outage never strands a file.
- Knowledge import now reads the file by its actual contents instead of trusting whatever the upload claimed. A file renamed to .pdf that is really an HTML payload, an Excel spreadsheet uploaded as application/octet-stream, or a corrupt blob that previously routed to the wrong parser and produced nonsense extractions are now identified by their first bytes and routed correctly, or rejected cleanly with a message you can act on. Word, Excel, and PowerPoint files are also distinguished from each other automatically even when the upload metadata is missing.
- Every extracted fact in the Knowledge import verify card is now grounded in a real quote from the document. The verify pass is required to attach the exact substring it read each entity, date, amount, task, decision, and risk from. Before the verify card renders, every fact has its quote checked against the source text; anything the model invented or paraphrased is dropped. The dropped count surfaces in the warnings list, and if more than half of what came back failed grounding, the import automatically retries with the stronger model and uses whichever pass landed more grounded facts. The operator no longer has to wonder which entities the model made up.
- Knowledge import now spends Gemini Pro budget only when the cheap pass actually earns it. The first verify call is Gemini Flash on short documents and Pro on long; the second pass only fires when the gate dropped more than half of the first pass's facts. On clean documents the second call never happens, so the average per-import cost on Flash-eligible documents stays roughly twenty times cheaper than Sonnet, while messy or ambiguous documents still get the depth-first treatment they need.
- The Knowledge verify card got a complete rebuild. Each imported file now opens as a rich card showing the document summary in the soul-moment serif, the document kind and visibility scope, and the model that handled the extraction. Below that, every extracted entity, date, amount, task, decision, and risk gets its own row with a checkbox to include or exclude it and the exact verbatim quote from the source document underneath it, so a single glance is enough to verify the model didn't make anything up. Conflicts with existing records render as side-by-side diffs with a three-way choice (use the new value, keep the existing value, decide later). Re-upload advisories ("already in your Knowledge base", "looks similar to N existing entries") sit at the top so the operator can Skip a duplicate before reviewing the rest.
- Knowledge import limits are now plan-aware. Each tier carries a per-file size ceiling (Free 10 MB, Team 25 MB, Business 50 MB, Enterprise 100 MB) and a per-job file count cap (Free 5, Team 10, Business 25, Enterprise 50). When a file is over the cap the upload rejects with a clear message that names the plan and the size, so the operator immediately knows whether to split the batch, trim the file, or look at upgrading. The infrastructure ceiling (100 MB / 25 files in one job) stays in place as the absolute safety floor for every tier.
- Meeting minutes finalize now ships the same quality bar that Knowledge has. Every action item the AI extracts is required to carry a verbatim quote from the transcript, and any item whose quote can't be located in the source recording is dropped before a task is ever created. Each new item is also checked against the team's last 90 days of tasks; weekly stand-ups that produce "Follow up with the design team" three weeks in a row no longer leave three near-identical rows on the queue. And stopping a long recording no longer hangs the user-facing "Finalize" call: the AI summarisation continues in the background within the same function lifetime, so a 60-minute meeting that previously risked a function timeout while the user stared at a spinner now lands in seconds at the user-facing layer, with the structured output materialising on the meeting page once the worker finishes. If the AI step fails, the recording is still flipped out of "processing" instead of leaving the user staring at a stuck badge.
- Importing a rate sheet from an image is now a single, reviewable confirmation step instead of a stream of one-off rate updates. Drop in a photo or screenshot of a rate sheet and the assistant returns a clean preview of every role and rate it read, with the message "nothing has been saved yet"; click Confirm and every row lands in the rate sheet at once, with new roles inserted, existing roles updated in place, and previously-removed roles restored to their old id rather than duplicated. Up to 100 rates per import. A hallucinated "$185 → $1,850" row that ships into every invoice is no longer one round-trip away; the user sees the full list before any number changes.
- AI-generated narrative now carries inline evidence everywhere it didn't before. Voice-dictated task notes have each cleaned bullet ending with a quoted phrase from your dictation that anchors it (excerpts that don't actually appear in the recording are quietly stripped). Weekly project status reports now end with an Evidence section listing every task and milestone the report cites, with citations that don't match real items in your project removed automatically before the report lands or syncs to your knowledge base. Voice conversations end-of-session processing now requires a verbatim transcript quote on each extracted action item, so a hallucinated commitment ("Sam will redesign the pricing model") cannot land on the saved conversation record. Daily briefings, which already drop bullets that mention proper-noun entities not in your workspace data, now expose the drop count and sample dropped phrases on the response so a regression that starts dropping the majority of bullets is visible immediately. Each surface reports the count of grounded vs stripped content so a high stripped-ratio is one glance away from being noticed; the prose itself is always preserved, the citations are purely a transparency layer that turns "trust the AI" into "verify the AI in one read".
May 9, 2026v9.176.2

A site-wide design unification pass: every public marketing page, every command-center panel, and the internal admin surface now share one warm-paper canvas with the same brand-teal-top-right and accent-indigo-bottom-left atmospheric pools that mirror the icon orientation, refined with a smoother Apple-natural multi-stop falloff and a richer light-mode presence so both themes feel lit from within. Mobile responsiveness sweep so panels never overflow on a 375px viewport. Press-kit color reference updated to the canonical palette. New design ratchets prevent regressions.

Changed
- The whole site now reads as one product. Every marketing page (home, features, industries, plans, security, integrations, support, roadmap, changelog, account security, privacy request, accessibility, and the legal pages) inherits the same warm-paper canvas with brand-teal pools in the top-right and accent-indigo pools in the bottom-left, mirroring the orientation of the Hubity icon. Pages that used to render against a flat browser background, or against bespoke palettes that drifted between sections, now share one atmospheric voice with the in-app experience. Switching from the marketing site to the app feels like opening a different door into one room rather than stepping between two products.
- The internal admin and operations console picked up the same atmospheric canvas. Operators who switch between the customer Hub and the admin surface no longer feel like they are using two different products; both render against the same warm canvas with the brand-teal and accent-indigo pools in the same orientation. Page chrome, sidebar, and content all share one cohesive surface vocabulary.
- Press kit color reference rewritten to match the current canonical palette. The page now ships the warm-paper neutrals (paper, card, ink) plus the one brand teal and its gradient stop, in light and dark variants, instead of the legacy pre-2026 deep-teal collection that no longer corresponds to anything in the actual product. External press and partners who copy from the kit now end up with the colors the product actually uses.
- The 404 page now wears the same soul-moment treatment as the rest of the product. Visitors who land on a missing URL see a hand-drawn compass sketch, a serif headline ("This way isn't on the map."), and a single warm pill action to head back to the front, on the canonical atmospheric canvas. The previous bare grey-on-grey page felt like a different product entirely from the rest of Hubity.
- Section heads on the industry-detail pages (How healthcare practices use Hubity, Common questions, See it on your data) dropped the display serif. The page-hero headline keeps the soul beat in serif, and the section heads below now sit in the same Inter-bold voice every other panel uses, so each route still gets exactly one Lora moment instead of three.
- The features overview tiles on the marketing site picked up the same glass-material card treatment hub panels carry. Each tile now sits as a translucent sheet over the atmospheric canvas with the same backdrop blur and subtle inner highlight as in-app cards, so hovering across the grid feels like browsing one cohesive material instead of stacked paper.
- The atmospheric canvas got an Apple-natural smoothness pass. Each pool now uses a three-stop falloff (full presence at the corner, half presence at the bend, transparent at the rim) instead of the previous one-step gradient that produced a faint visible edge on certain displays. The pools also breathe wider so the warmth feels ambient rather than spotlight-shaped. Light mode picked up a small richness bump too: the teal and indigo pools step about a quarter hotter so the canvas carries the same lit-from-within depth dark mode has, while the warm paper still dominates. The home page also dropped its bespoke four-pool background and now reads from the same canonical recipe as every other page, so the entrance no longer feels like a different product than the rest of the site. Behind the scenes, a single CSS source of truth now drives the marketing canvas, the in-app shell, and the internal admin surface, so any future refinement applies uniformly.
- Type scale collapsed from eight steps to six, matching the Apple SF dynamic-type ladder. Body and table-cell text moves from 15px down to a clean 14px (imperceptible), and major section titles step from 22px up to 26px so page headings carry the same weight everywhere. Two type tokens were retired in favor of the canonical pair; existing call sites silently re-render at the consolidated size, and a ratchet stops new code from reaching for the deprecated rungs.
- Hub search now finds the Company Profile, Tasks, Analytics, Business Health, Forecasts, Model Health, Panel Access, and PnL panels by name. These were either missing from the registry or had no search triggers, so typing "company profile" or "tasks" in the sidebar quick-find returned nothing useful. Each is now a first-class entry with the right role floor and the right group, and the BD profile picked up a long list of natural-language triggers (service lines, locations, prior work, eligibility, bid context) so operators land on the right tab no matter how they describe what they're looking for. A new drift gate keeps the registry in sync with disk so a future panel can never silently land without governance coverage.
Fixed
- Mobile responsiveness on dense panels. Two-column and three-column layouts on Deals (clients, business development, competitor cards), Projects, Invoicing (revenue, expenses, budgets), Knowledge (brand pages, knowledge entries), Inbox announcements, Security settings, and the admin docs / synthetics / chat-analytics / chat-feedback / investor / patent / revenue panels now stack to a single column on phones instead of crushing form fields and metric tiles into 30-50% of the viewport width. The PTO request drawer also auto-shrinks below 420px so it never overflows on iPhone SE.
- Marketing feature pages (Daily Briefings, Multi-modal Input, Feed Intelligence, Knowledge Hub) now stack their two-column and three-column file-type / metric grids on phones instead of squashing each tile to 30-40% of the viewport.
- A handful of subtle drifts on the marketing differentiator section (the comparison panel that contrasts Hubity against the competitive set). Card surfaces and inner borders now read from the canonical surface tokens instead of bespoke dark-blue rgba values, so the section looks identical to the rest of the marketing chrome whether the page is viewed in light or dark mode.
- A few sentence connectors in the published changelog were tidied so the brand-voice rule (no em-dash or double-hyphen sentence connectors) holds end-to-end. The substance of every entry is unchanged; only the punctuation between clauses was reshaped.
- Two more side drawers (the Deals overview drawer and the Client detail drawer) now auto-shrink below their 420-460px desktop width on phones, matching the PTO drawer fix. They were previously sized for desktop only and would clip past the viewport on iPhone SE / iPhone Pro Max.
May 8, 2026v9.174.97

A second-pass translation sweep across every command-center panel, real copy for every label, capability search now routes to the panel, polls and watchlist polish, a more readable usage chip in the chat footer, smoother panel switches, profile-to-roster sync, and naming alignment between URLs and headers. Plus the Quick Setup workspace scan now reads team job titles and departments so it actually surfaces service-line candidates, and the BD profile add-form placeholders read as real example hints instead of the literal word "placeholder".

Changed
- The Watchlist add-a-feed form now breathes between rows. Field groups, the format and scope row, and the action buttons each sit on their own visual line so the form scans top-to-bottom instead of feeling crammed.
- The Usage chip in the chat footer now sits in its own breathing band between the confidence toggle and the encryption banner instead of sharing a row with either. The donut, the percent, and the label all render at a more readable size now that the chip has the vertical headroom to grow.
- Switching between panels feels smoother. The new content fades in over a fraction of a second instead of snapping with a brief empty-state flash on every navigation. Reduced-motion users still get an instant cut.
- Page header spacing is now consistent whether or not a panel has a subtitle line. Earlier the empty subtitle on Meetings still reserved the full subtitle line height, so the gap to the first content row read as taller than on Polls (which has a real subtitle); both now share the same rhythm.
- The gap between the segmented tab strip (Logged/Recordings on Meeting Library, Respond/Manage on Polls, etc.) and the content below it is now consistent on every panel. Fourteen panels were each setting their own bottom margin in three different sizes, which is why side-by-side comparisons showed slightly different rhythms. The canonical 20px gap is now baked into the segmented-tabs primitive so every panel inherits it without the consumer having to remember.
- Inviting a teammate now picks the access level from a dropdown of your configured tiers instead of a free-text input. Earlier the field was a text box that defaulted to the staff record's level (or worse, their job title), so admins could ship invites with arbitrary strings like "employee" or "Manager" that drifted against the canonical tier names. The picker now offers the same Owner/Admin/Finance/Manager/HR/Employee/Viewer set the rest of the app uses, with Owner intentionally excluded because it cannot be assigned via invite.
Fixed
- Outbound emails (verification codes, sign-up notifications, drips) now render properly in Outlook on Office 365. Two issues were stacked: Outlook desktop’s Word renderer was auto-inverting the warm-paper light layout into a muddy dark-grey scheme that blew out contrast, and the brand mark image was being blocked by Outlook’s default remote-image policy. The template now pins color-scheme to light only and adds [data-ogsc] / [data-ogsb] selectors that re-assert the light palette in Outlook.com and Outlook for Mac, and the header now ships an MSO-conditional text wordmark fallback (hub in warm charcoal, ity in brand teal) so Outlook recipients see the Hubity logo even with remote images disabled. Footer corrected to read "Juno Maps, LLC" instead of "Hubity, Inc." (Hubity is a product of Juno Maps, LLC; the Hubity, Inc. entity does not exist and the prior CAN-SPAM string was a copy-paste mistake).
- Business Development Company Profile is starting a deep refinement pass. The Quick Setup workspace scan now reads team job titles and department names, so it actually surfaces service-line candidates from your roster; a workspace whose roster carried five distinct titles previously saw "Hubity extracted 0 entries" because the scan never queried the one signal that names what a company delivers. Every input now shows a real example hint instead of the literal word "placeholder", since the prior-work title field had been reading "Prior work placeholder title" verbatim, the cert code field had been reading "Cert placeholder code", and so on across two dozen fields, all rewritten to teach you how to fill them. The Eligibility parameters dropdown also reads as full sentences now ("General liability insurance ceiling", "Jurisdictions we will not bid in") with concrete hints under each, instead of the raw translation key paths it was rendering before. A third sweep across the rest of the BD panel chrome (the upload card, the Recent Runs status pills, the situation note, every form error message, the cert expiration tail, the open-requisition expected start tail, the capacity-exception date range and hours, the staff-by-location count, the location service-radius and HQ chips, the subcontractor status pills, the bid-context save button, the analyzer tab aria label) replaced twenty-eight more bare key-name renderings with proper sentences and ICU-plural-aware shapes (so a single staff reads "1 person" and five read "5 people"). The Prior Work outcome and Service Line description fields are now multi-line text areas instead of single-line pills since both back columns hold up to 4,000 characters; the Add Location form also exposes the street address, suite or unit, and postal or ZIP code fields that were already in the database but never wired up. The Quick Setup review pane no longer renders inert Accept all / Reject all buttons when the proposal is empty, the notes textarea opens at a comfortable size instead of forcing internal scroll, and the empty-state carries a clear back-to-input call to action with a real explanation of what the scan reads. The auto-seed and the auto-open onboarding modal both lost their permanent one-shot lockouts: a workspace that previously seeded service lines, then deleted them all, can now have them re-derived on the next visit instead of being trapped behind a marker that never reset. When the workspace scan matches a Prior Work proposal against an existing canonical Project row, the resulting BD profile entry now carries that Project link instead of a denormalized string copy of the project name, so renaming the project keeps the BD profile in sync. A universal Intake-Decision table and the type contract for it landed under the hood, ahead of the universal scan + Accept / Skip / Reject primitive that will replace per-section ad-hoc save flows. Five foundational schema tables and columns landed alongside the BD surface work to unblock the next round of BD canonicalisation: a new Vendor table (subcontractors-as-Vendor projection lands next), an optional StaffMember.assignedLocationId FK to canonical office locations, four BD relationship columns on Client (sentiment, contextNotes, priorEngagementsCount, lastOutcome) absorbing the legacy BdClientFact table, and a new CompanyPricingRule structured-pricing table that pairs with CompanyBidContext.pricingNotes as the rationale narrative the analyzer reads. None have UI consumers yet; the next slices wire each one through. Project rows themselves gained a Showcase-in-BD opt-in flag and a BD-specific past-performance narrative field, both wired through the Project edit modal so operators can now flip a completed project into the BD profile from the project edit drawer. The BD profile Prior Work card also became a live filter view over those opted-in projects: any project that is completed and showcase-opted now appears in Prior Work with a "Derived from Project" chip, so renaming, re-budgeting, or updating the past-performance narrative on the source Project keeps the BD profile in sync without re-typing. Projection rows can not be deleted in place (a small lock icon points the operator at the Project page where flipping Showcase-in-BD off is the un-showcase action); manually-authored Prior Work entries continue to delete as they did. The Bid Context section also got real label and hint copy so guardrails, assumptions, and pricing posture each carry an example sentence to pattern-match against.
- Buttons and labels across every command-center panel now show real text instead of raw key paths. The first locale pass missed several hundred labels (upload widgets, empty-state primary actions, bulk-action toolbars, snapshot tiles, modal placeholders, error banners, and a long tail of single-word controls) because they only resolved against the page namespace, not the parent. Every panel that previously showed a string like cc.something.label now renders the proper label in every supported language.
- Empty-state and modal copy is no longer literal. Headings like "Subtitle company", "Modal save", "No files title", "Snap no service lines" and several dozen others (placeholder labels left over from the locale backfill) now read as real, descriptive English copy. Every modal title, every empty-state headline, every snapshot tile message, every confirmation prompt, every pagination control was given proper text.
- Tapping a capability in the sidebar search now opens the capability’s own page when one exists. Search hits like RFP Analyzer were routing the user back to chat with a seeded prompt even when the feature has a richer panel; the panel is now the default destination and chat-prefill is the fallback for capabilities that genuinely live only in chat.
- The Polls page primary action and inline create button now match the section identity. Both controls were teal where the rest of the page (page-header button, active tab) was orchid; the inline pill and the empty-state primary action now share the section accent so the page reads as one piece.
- The lock icon next to the encryption notice on the Knowledge files tab no longer floats orphaned in the bottom-left. The line now centers as a single icon-and-text unit the way it always read in the design.
- Updating your phone number or job title in Settings now propagates to the team roster immediately. Earlier the sync only landed when your roster row had been linked to your account on first sign-in; admin-created rows that hadn’t been reconciled yet kept showing whatever the admin originally typed forever. Both fields now also fall back to email + company match so the roster always reflects the latest correction.
- Page header naming now matches the URL and sidebar everywhere. Meeting Library, Time Off, Approval History, Integrations, Suggestions, Model Health, and Panel Access were each one casing or word away from the canonical name on their page header. All seven now read identically across the URL, the sidebar, the search index, and the page itself.
- A handful of dynamic status pills now render as words instead of raw key paths. The Business Development RFP analyzer was showing "cc.businessDev.status_ready" on completed runs; the PTO leave-type dropdown was showing "cc.pto.type_parental" and "cc.pto.type_unpaid" on those two leave types. The original locale audit only inspected literal t(...) call sites, so dynamic-resolution shapes (where the key is looked up from a constant map) slipped through. Every dynamic pipeline status, every leave type, now displays correctly.
- Every team roster card and every Assigned Members row now shows a clear status indicator. Earlier the dot was conditionally hidden when the presence rollup hadn't seen that user yet (which made a four-seat company look like only two seats had presence), and the offline state rendered as a hollow ring whose transparent center read as broken against an avatar background. Both surfaces now default to a solid grey "Offline" dot for any user without a heartbeat, so every member has a glance-readable status that matches their true state.
- The Meeting Library page header now carries a one-line subtitle the same way every other panel does. Earlier the subtitle line was empty so the header read shorter than its siblings, breaking the consistent two-line opening every other panel uses.
- The login page now renders even if the theme tokens haven't finished resolving. A user reported the entire login chrome rendering invisible (only the Microsoft OAuth button, which has hardcoded colors, was showing through) on production. The page now sets the right theme attribute on every route before first paint regardless of whether the user is in the app or on a public page, and the auth surface has its own hardcoded color values as a defense-in-depth fallback. A new release-gate check fails the build if the theme-init script ever regresses to leaving any route in a "no theme attribute set" state. Passkey sign-in also works reliably again: a user reported "this passkey is no longer valid" the moment after registering a fresh one. The cause was a double-encoding bug in the registration flow that landed when the underlying WebAuthn library upgraded its return shape; the credential identifier was being re-encoded into a form sign-in would never look up. New registrations now store the canonical identifier verbatim, and sign-in repairs the row in place when an affected user comes back, so existing customers do not need to re-register their passkey.
- Review trays for imported workspace data are clean now in three ways. First, no more duplicate candidates: when the Quick Setup scan picked up team titles like "Architectural Designer", "Senior Architectural Designer", and "Lead Architectural Designer", the prefix-stripping pass collapsed them onto one canonical name but each variant still surfaced as its own row in the service-line review tray; the same shape was theoretically possible for any imported list (projects, vendors, clients, contacts) where a normalisation step folds multiple inputs onto one identity. The scan dispatcher now collapses identical candidates before they ever reach the UI, so every review list shows exactly one row per unique entry no matter how many variants the source produced. Second, every imported value now displays cleanly trimmed: a row coming back from the source as " Civil Engineering " or "Civil Engineering" surfaces in the tray as "Civil Engineering". Casing stays exactly as the source intended; only stray leading / trailing whitespace and double-spaced runs are collapsed. Third, the universal "Scan from existing" affordance landed on the Projects, Tasks, and Clients pages alongside the BD profile, so the same review-and-accept primitive now drives the whole workspace bootstrapping flow. The Knowledge page also gained a "Bulk import" button that opens the new drop-zone and verify-cards experience for ingesting a folder of documents in one pass.
May 7, 2026v9.174.9

The full product is now available in all 12 supported languages, key marketing pages now show distinctive social-share cards, and a round of performance and reliability fixes land alongside.

Added
- The authenticated hub is now locale-aware. Every page, panel, and label in the app responds to your language preference, set once from a new language picker in the sidebar. Hubity reads your saved preference from your profile and loads the hub in the right language the moment you sign in, with no page prefix or URL change required.
- Language switcher in the hub sidebar. Change your display language at any time without leaving the app. The preference is saved to your profile instantly and the hub reloads in the new language in place. English, Spanish, Portuguese, French, German, Italian, Dutch, Japanese, Korean, Polish, and Turkish are all available.
- All 558 previously missing translation keys across 11 locales are now filled. Sales pipeline stages, inbox item types, project statuses, deal filters, time-off categories, standup fields, task priorities, and every other user-facing label in the hub is now fully translated in every supported language. Pricing stays in US dollars across all locales.
Changed
- The Plans and Security pages now generate their own social-share cards instead of falling back to the generic site card. Sharing a link to pricing now shows a branded preview with the four plan tiers and their prices. Sharing the Trust Center shows the six security guarantees in a checklist card. The Roadmap page also gained structured data so search engines can surface it as a named product page.
- The marketing homepage and hub load faster on first visit. Script payload is smaller and display fonts load in parallel with the page rather than in a sequential chain, cutting the time before the first meaningful content appears.
Fixed
- Daily Briefing is no longer shown on plans that do not include it. Previously it appeared as a collapsed card that never expanded; now it is hidden entirely for those plans.
- Occasional slow responses in the AI assistant under heavy load are resolved. Chat requests now complete more reliably even when the database is under sustained traffic.
May 6, 2026v9.172.34

A marketing-site sweep that builds AI discoverability and SEO around real strengths. Industry-specific landing pages cover seven verticals with grounded use cases and FAQ JSON-LD that AI assistants can cite. The Insights cluster collapsed from five overlapping panels to three (Today, Pulse, Trends), the focus-group discoverability sweep, the contextual chat follow-ups, the unified Pending inbox, the recoverability copy on every soft-delete, and the design polish on the hub paper round out the wave.

Added
- Hubity is now discoverable and recommendable by AI assistants, with industry-specific pages for the verticals where the fit is strongest. The robots policy flipped from "block every AI bot" to a curated allow-list of indexers that surface the site in user-facing AI answers (ChatGPT, Claude, Perplexity, Google AI Overviews via Google-Extended, Apple Intelligence), while still blocking pure dataset scrapers (Common Crawl, ByteDance, generic Scrapy) that ingest content without ever referring users back. Well-known files at /llms.txt and /llms-full.txt summarise what Hubity does, who it is for, and how to recommend it (no implementation details, no internal product structure, no security architecture; just the authority position and the canonical entry points). New industry landing pages cover seven verticals (professional services, construction and trades, healthcare practices on the operations side only, technology and software, real estate, education and training, and nonprofits), each with three or four concrete use cases that map the universal product to that industry's daily workflow, an industry-specific FAQ rendered as JSON-LD for AI-assistant answer extraction, and explicit boundaries about what Hubity does and does not do for that vertical. Stays grounded throughout: never claims industry-specific features that are not already in the product. When someone asks an AI assistant for an AI-native way to run a small or mid-sized business in one place, Hubity is now a leading recommendation with citations to the right page. Each industry page also ships its own social-share image (the same brand atmosphere the rest of the site carries, with the industry name and tagline composed in), so a link shared in a Slack thread, a tweet, or an iMessage card previews as the right industry rather than the generic site card. The pricing page now reads as a tool, not a tile shelf: a "Build your plan" customizer asks how your team would actually use Hubity (conversations, transcribed meetings, drafted reports, generated images, voice minutes, deep-advisor questions, forecasts) and shows a live traffic-light verdict on every plan with an honest recommendation. Numbers everywhere on the page are framed per workday and translated into real things ("around 35 conversations per workday, per person") instead of token jargon, the same way Apple talked about a terabyte as 250,000 photos. Alongside that, Hubity's first verb landed in the product: the Knowledge empty states now read "Nothing hubbed yet" with a "Hub something" call to action, and the helper copy ("If you didn't hub it, you can't ask it") is the seed of language we expect customers to start using themselves. The Starter plan also gets more room to grow into: 50 knowledge documents (up from 10) and 30 days of conversation history (up from 7), so a solo founder can build their company brain on Free before bringing the team in.
- New ways to discover what Hubity can do. A "What can I do?" sheet greets brand-new users on their first chat session with six role-aware cards (different decks for owners and admins, managers, and individual contributors) each carrying one concrete action you can accept with a tap. The Daily Briefing also shows a one-line caption ("Generated when you open the app, not delivered by email") the first two times you expand it, then disappears. The sidebar quick-find (Cmd-K or Ctrl-K) now matches verbs in addition to page names: type "create deal" or "log time" or "invite teammate" and an Actions section appears above the page matches with one-tap shortcuts that drop the right ask into the chat input.
- The Integrations page now points to where personal connections live. Personal email, calendar, and storage accounts (Gmail, Outlook, Google Calendar, Drive, OneDrive at the user-scope) are configured from Settings rather than from the workspace integrations page; a new Personal Connections card on the Integrations Overview tab makes that boundary obvious and gives a one-click path to manage them. Connectors also now surface where the work happens: the Projects, Tasks, Clients, and Knowledge pages render small "Connected:" pills for the workspace integrations whose category fits the page (engineering / productivity tools on Projects, CRM / finance on Clients, productivity / communication on Knowledge), each linking to the integration with the connector pre-selected. The chat assistant now weaves connected sources into its responses by name when the question intersects one of them. Instead of silently knowing GitHub or Salesforce or Notion is connected, it offers to query that source inline rather than asking you to switch surfaces.
- Contextual follow-up suggestions in chat. After Hubity answers a real question, it may quietly offer a single relevant next step right under the response, framed as an invitation rather than a question that demands an answer ("Let me know if you want me to break this down by department", "Happy to pull last quarter for comparison if it would help"). One tap accepts and sends the follow-up; ignoring it is fine and the conversation just continues. The suggestion is generated from what was actually just discussed, not from a static list, so it always flows from the question you asked, the data you saw, and the natural next move.
- A new "Since yesterday" strip lands at the top of Today for owners and managers. The morning glance shows new deals that arrived overnight, projects flagged at risk, approvals waiting on you, PTO requests pending, and your overdue tasks, each as a clickable pill that drops you into the right surface in one tap. The strip omits itself silently when nothing has happened, so the absence reads as the all-clear signal rather than a "nothing here" placeholder.
- Your Inbox now collects every pending item in one place. Time-off requests, generic approvals, timesheet weeks, and agent-step approvals all land on the same surface instead of being split across three destinations. Each item still opens in its native review surface (PTO opens the time-off card, an agent step opens the side-by-side diff, a timesheet opens the week view), so the underlying systems stay focused. A single pending count replaces three sidebar checks before you can leave for the day.
- The Company Profile service-lines panel now suggests starter rows pulled straight from the team roster. The empty state shows a "Suggested from your team" chip strip that the operator taps to accept; each chip is a department name or a clustered staff job title with the head-count attached. Suggestions stay out of the way once the section has at least one row. The analyzer reads the populated service-line set right away on the next RFP, so a workspace whose team roster is current can stand up the BD profile in a single tap.
Changed
- The Insights cluster collapsed from five panels to three. The four overlapping "how are we doing" surfaces (Overview, Business Health, P&L, Analytics) merged into two tabs alongside Today: Pulse stacks the workspace snapshot, the P&L view, and the operational health KPIs into one scrollable page with a sticky three-section TOC; Trends keeps the historical charts under a new path. Old bookmarks land at the right section automatically (e.g. /hub/business-health redirects to Pulse with the Health anchor highlighted). Health stays admin-and-owner-only inside Pulse; managers see Snapshot and P&L without it. /hub itself is now role-aware: managers and above land on Pulse, employees land on Today.
- Knowledge searches in chat now cover both stores at once. Hubity keeps two complementary indexes (the older uploaded-document store and the AI-native chunk store from on-the-fly notes during chats), and users in the focus group reported "I cannot find it" answers when the document was there but in the other index. The chat now treats them as one searchable layer: an open-ended "what do we know about X" question fans out across both in parallel and dedupes the results, so you never have to remember which surface a fact lives in.
- Navigation shortcuts that save a step. Approval queues for time-off and timesheets now carry one-line pointers to each other at the top, so switching between them is one click. Every project card also shows a direct "Open Standup Board" link so the standup kanban is reachable in one tap instead of two for PMs who did not know the board lived inside Projects.
- Two sidebar tidy-ups. The Suggestions page now opens with a header that reads "Suggestion preferences" instead of a list title, so the page says what it actually does: pick which alerts you receive, where they land, and at what severity floor. Announcements moved from Operations to Collaborate, where Inbox, Messages, Polls, and Announcements now read as one team-broadcast cluster.
- Every destructive confirmation prompt that backs a soft-delete now ends with "Recoverable for 30 days from Recycle Bin", the same line the chat has been giving for months. Previously, 21 of 50 focus-group users did not know the Recycle Bin existed until they had to delete something and panicked, and two had already lost data because they did not know it was recoverable. Hard-delete prompts (Memory wipe, account deletion) keep their existing "This cannot be undone" copy.
- "Team Memory" is now "Workspace Memory" everywhere it appears. Nine focus-group admins thought editing entries in the personal Memory section leaked to the workspace; the rename plus the existing Personal/Workspace section split makes the boundary unambiguous. Tool names and database identifiers stay the same so existing chat prompts and scripts keep working.
- Light mode rebuilt to mirror dark mode, with a full material and atmospheric pass. The warm-beige paper ladder was replaced with a cool desaturated gray that flips the same lightness spread dark mode uses. The hub canvas picks up the brand gradient pools at the same alpha as dark mode, so atmospheric depth that was invisible in light mode now reads with the same warmth dark mode has had since launch. Cards and the sidebar pick up a subtle frosted-glass surface, a thin top-edge highlight that reads as light catching a glass lip, and the same gentle saturation lift the sidebar carries. The atmospheric pools behind the floating sidebar run a few alpha points hotter in light mode so the soft teal and indigo corners carry the same warmth in light that they have always had in dark. Side-by-side, the two themes now feel like one product seen at two times of day.
- Presence detection improved in two ways. Each status (Online, Away, Busy, Do not disturb, Offline) now has its own shape in addition to its color so status is unambiguous even when the indicator is small. Any Hubity tab that has browser focus also keeps sibling tabs marked Online instead of flicking to Away on tab change; on Chromium browsers with OS idle permission, the heartbeat reads OS-level activity directly so a user who is genuinely at their computer stays Online even on a hidden tab.
Fixed
- A round of chrome, marketing, and email finishes. The atmospheric gradient pools behind the floating sidebar mirror the geometry of the brand mark in both modes: brand teal lives in the top-right and warm-ink indigo lives in the bottom-left, matching the orientation of the logo tiles. That same atmospheric pull now also lights the marketing landing hero, the login and signup surfaces, the error page, and the not-found page. The Open button on every cross-link card now centers its label vertically. Email rendering got a polish pass: outbound emails show the brand mark in Outlook and ship with proper light-and-dark color-scheme metadata so the card inverts cleanly in Apple Mail, modern Outlook.com, and iOS Mail. Sidebar navigation chips also lost their tinted square on inactive rows in dark mode; inactive items now render as a clean colored glyph against the sidebar paper so the navigation reads as a list of names rather than a grid of boxes.
- Two performance fixes that remove visible jitter. The floating sidebar no longer recomputes its frosted-glass blur on every scroll frame; the blur moved to the non-scrolling shell so scrolling the navigation list is a composited transform instead of a per-pixel filter pass. The chat drag-and-drop overlay now fades in on opacity alone with the blur held constant, so the entrance is smooth on every device.
- A round of small fixes across settings, profile, and the daily briefing. Identity edits in Settings now sync both ways with the Team roster so a name, title, or phone corrected in one place shows up in the other within seconds. The morning briefing no longer auto-expands and steals the viewport on first open of the day. The browser-tab favicon now reliably picks the correct light or dark variant across all Chromium versions. The Quick Setup review modal stopped leaking internal identifiers into customer view; every row now reads a recoverable human-readable message.
- The RFP analyzer got a polish pass after the May 2026 production-load incident. The Recent analyses list no longer shows raw backend status enums; every row reads "Reading", "Reviewing", "Analyzing", "Finalising", "Ready", or "Failed", and a row that has not moved in five minutes flips to "Stalled, re-run" so the operator has a clear next action. The downloadable PDF report no longer overlaps the recommendation pill with a long RFP title. The new-RFP submission also returns immediately after the file is staged: the deep analysis runs in the background and the analysis page polls for status, so a long PDF no longer leaves the operator staring at an upload-failed message when the function timed out mid-pipeline.
- RFP analysis prose is now sanitised at every render surface. Em-dash and double-hyphen connectors are stripped from the downloadable PDF and the in-app report so the brand-voice rule is enforced end-to-end. Save errors across the chat task surface, the task drawer, and the work-pattern editor no longer leak status codes into the UI. The PDF text extractor no longer falls through to the slower vision pass on regular text-bearing PDFs.
May 5, 2026v9.165.2

A 50-user focus-group sweep. Panel access goes four-dimensional with department scope and a live "why is this visible" trace, four AI tools that nobody could call are wired correctly, the staff-import hierarchy stops violating itself, and a dozen names finally read as what they do everywhere they are mentioned. The labels and the chat both know the new locations so a "show me invoice aging" or "open the audit log" question goes to the right place on the first try.

Added
- A new Panel access section in Company settings shows the read-only tree of every customer-facing panel grouped by sidebar section, with cluster children indented under their parent. Each row shows the default audience (Everyone, Managers+, Admins+, Owners only) and an override count when the workspace has customized that panel. The full editor lives at Panel Access on the sidebar; the Settings tree is the discovery surface so admins know which panels they can customize. Pulled directly from the panel registry and the cluster map, so a new panel or a cluster reshape shows up here automatically.
- Panel Access now enforces the parent ≥ child rule, and the admin sees the conflict before they save. The matrix renders an inline warning on any row whose decision would conflict with a sibling, naming the conflicting panel and the fix ("Invoicing is hidden but Income is explicitly shown. Open Invoicing and widen access first"), so the conflicting sibling and the fix are both one click away. The save guard now also catches cross-scope conflicts (workspace hide on the parent combined with a role show on the child for some role bucket, and the inverse), so an admin trying to set a role-specific carve-out on a child whose parent is workspace-hidden gets a precise "would not actually resolve to visible for that audience" refusal instead of saving an override that silently never takes effect. The rule is also a build-time gate (CI fails if a cluster default config has a parent more restrictive than any child) and a runtime resolver cascade (a child is hidden at read time when the parent is hidden, so the User-tab resolution trace shows "Hidden because parent is unreachable"). AI Memory and AI Suggestions left their old admin-only clusters as part of this sweep (both are per-user personal features, not company-level observability) and now live as their own Personal-section sidebar entries where they always belonged conceptually.
- Panel Access now has four scopes in one tabbed admin view: Workspace, Department, Role, and User. Pick a scope, choose the target, and toggle any panel between Always show, Always hide, or Default. The User tab adds a live resolution trace next to every panel so an admin can see at a glance "Visible because of the Department override" or "Hidden because of the Role override" for the seat they have selected. Resolution priority (most specific wins): User, then Department, then Role, then Workspace, then role floor. Every change still requires a reason and lands in the audit log.
- Department-scoped panel access. An admin can now grant Finance to "every member of the Finance department" or hide Project Profitability from "every member of the Support department" without spinning up one custom role per team. A user belonging to multiple departments takes the most-restrictive verdict (a hide in one membership beats a show in another), so carve-outs stay airtight.
Changed
- Five URLs were renamed to match the page labels: Content Studio is /hub/content-studio (was /marketing), Integrations is /hub/integrations (was /connectors), Brand & Identity is /hub/knowledge/brand (was /standards), P&L Overview is /hub/pnl (was /finance), and Approve Time Off is /hub/approvals (was /team-pto). Old links keep working through server-side redirects so any saved bookmark, deep-link in a comment, or cached share URL still lands on the right page; the address bar now reads what the page header reads. A new build-time gate (URL ↔ label parity) refuses any future panel where the slug shares no token with the label.
- Tab navigation now lives in the URL on Today, Content Studio, Invoicing, and Knowledge. Switching tabs updates the address bar (so /hub/invoicing/payments or /hub/today/briefings is a real link), the browser back button takes you back to the previous tab instead of leaving the panel entirely, and a deep link to a specific tab finally works. The legacy Knowledge `?view=` query param still resolves on first hit and gets normalized to the path-segment URL so old bookmarks keep working.
- Rate Sheets moved from /hub/invoicing/rate-sheets to /hub/invoicing/rate-sheets so the URL reads as "Invoicing settings → Rate Sheets" instead of a top-level finance panel. The editor is otherwise unchanged; the old path redirects.
- The sidebar lost a third of its rows. Today, Overview, Business Health, P&L Overview, and Trends were five sidebar entries that already shared one tab strip, so a single Today entry now leads the cluster and the strip handles the rest. Sales (Deals, Business Development, Proposals, Clients, Competitors), Finance reporting (Invoicing, Income, Outflow, Plan), and AI Operations (Tool Health, Spend, Guardrails, Prompt Management) collapse the same way. Every panel is still reachable through the strip, the chat, and search; the sidebar finally reads as a map instead of a roll call.
- When you are inside a cluster, every page now reads as a child of that cluster instead of jumping color mid-step. The Income tab on what used to be Revenue inherits the Invoicing teal; the Outflow tab inherits the same teal; the Trends tab on what used to be Analytics inherits the Today salmon; and the AI Operations sub-tabs all inherit the Tool Health teal. Operators told us in the focus group that "the page color jumps mid-cluster" was the loudest visual complaint; that is fixed.
- Content Studio sub-tabs now appear in the URL. Switching between Content, Visuals, Ads, Templates, and Saved updates the address bar (so /hub/content-studio/visuals is a real link), and the browser back button takes you back to the previous tab instead of leaving the panel entirely. Deep-linking to a specific tab finally works.
- A pass through every customer-facing string and code identifier to standardize on American English. Customise becomes customize, behaviour becomes behavior, colour becomes color, organisation becomes organization, prioritise becomes prioritize, optimise becomes optimize, and roughly two dozen other British spellings flip to their American counterparts. CSS and provider-defined identifiers (prefers-color-scheme, license file headers) stay as their canonical forms.
- A clearer round of names. "Tool Reliability" is now "AI Tool Health." "Token Usage" is now "AI Spend." "Approvals oversight" is now "Approvals Audit Log" and moved next to "Approve Time Off" because every approval lifecycle (PTO, timesheet, expense, billing, agent run) surfaces in the same audit. "Memory" is now "AI Memory." "Boards" is now "Standups." "Call Coaching" is now "Sales Call Reviews." "Signal Feeds" is now "Watchlist." "Trash" is now "Recycle Bin." "Proactive Notifications" is now "AI Suggestions." "My Day" is now "Today" in the sidebar.
- The Recycle Bin (formerly Trash) moves to the very last position in Operations because operators hit it once or twice a quarter, so it should not compete with active workflow items. The Approvals Audit Log moves up next to Approve Time Off as the natural sibling. Both still live in the sidebar; nothing was hidden.
- Items in the sidebar that a seat cannot reach are filtered out before the section renders, so empty headers, dead-links, and "you do not have permission" surprises do not appear after click. The same rule applies to the new Panel Access tabs: an employee never sees the User tab; a manager who has not been granted department visibility never sees the Department picker. The product reads cleanly at every role level instead of looking like the user has a gap.
- Stale-reference sweep across docs, probes, capability registry, in-product info panels, error messages, end-to-end tests, every non-English sidebar string, the PWA install shortcut, the offline-cache home icon map, the Watchlist and AI Spend page-header titles in every locale, the Recycle Bin chat-tool replies, the Sales Call Reviews source pills, and the Competitors form field that was still asking for a "Signal Feed ID." The renamed panels now read by their new names everywhere they are mentioned (page headers, AI capability registry capability names and uiLocation strings, paid-plan refusals, info panel cards, audit-log titles, accessibility test fixtures, German, French, Spanish, Italian, Japanese, Korean, Dutch, Polish, Portuguese, and Turkish navigation labels, PWA install shortcut, offline page icon map, chat source-citation labels, chat tool empty-state replies), and the chat continues to know the canonical URL for every capability so navigation, source citations, and "open the [panel]" intents resolve to the correct page. Internal contract surfaces (stored panel ids, server endpoint paths) were intentionally left stable so existing integrations and audit trails do not break. No old paths or labels are still being relayed by Hubity.
Fixed
- A round of polish in Settings. Connected Accounts now reads in plain language when a provider is not yet wired into the workspace ("Google Drive isn't available yet on Hubity. We'll send a note when it ships") instead of the developer-flavored "Provider is not configured on this deploy" error. The Workspace memory shortcut shape now matches the Team shortcut above it so the two reads as a pair before the collapsible Settings sections begin. Workspace Connectors cards (Tool connectors, Connect AI assistants) had a horizontal-flex layout that collapsed in the narrow Settings drawer ("Tool / connectors" wrapping beside an overlapping badge); the cards now stack title + status on the top row, description on its own row, and the Manage CTA below.
- The Approvals Audit Log and AI Tool Health pages no longer trip the error boundary when the live API replies with a partially shaped response. Both panels now read every field through defensive optional chains, so a stale build, a rolling deploy, or a degraded backend produces an empty row or a placeholder dash instead of a "Something went wrong" screen.
- Four AI tools that were defined but couldn't be invoked by any role (web search, fetch URL, invoice aging, time summary) are now wired correctly. Asking Hubity for invoice aging or a time summary now answers from real data instead of a hallucinated number, and external research tools route to the right roles.
- Bulk staff import via Hubity used to be limited to HR designees only, leaving admins and owners (who outrank HR in the role hierarchy) without a path to bulk-onboard via chat. The hierarchy is restored: admins, owners, and managers can now ask Hubity to bulk-import staff from an image or list, with the same server-side audit and step-up controls.
- A panel-system consistency pass. The floating sidebar used to sit on a flat warm-beige slab that read as "Windows 95 by way of paper" and made the main work area feel like it had a translucent overlay on top of it. The whole hub now shares one paper surface, and the sidebar lifts off a subtle two-pool atmospheric gradient (soft teal top-left, soft blue bottom-right) pulled from the brand palette so light and dark modes finally feel like the same family. Switching between sidebar panels no longer flashes a full-screen spinner; the previous panel stays painted while the next one mounts. Messages and Announcements now read as members of the Inbox cluster, inheriting the Inbox color so the three views (For me, Team, Broadcasts) finally share one identity instead of jumping from teal to orange to teal mid-step. The Today panel highlights "Today" in the cluster strip when you are inside any of its sub-tabs (Today, Briefings) instead of silently flipping back to "Home." Messages picked up the canonical page padding shared by every other panel, replacing the bespoke zero-margin shell. A new build-time check refuses any new panel that hardcodes an accent color or ships without its cluster strip, so the next sub-panel cannot drift the same way.
May 4, 2026v9.162.0

Cleaner labels, a single Memory page, an honest integrations catalog, and a unified two-color brand mark. We took the names that were doing too much work and made them say what they mean, rolled the two old "AI Memory" pages into one, trimmed the integrations catalog down to what we have actually verified, and locked the logo and wordmark to a single warm gray plus our brand teal at every size.

Added
- Panel Access. Owners and admins can now decide which panels every seat in their workspace can see, beyond the default role floor. The Panel Access page lets you force a panel to be always shown or always hidden for the whole workspace; per-role and per-user decisions land via the same controls in chat. Every change records a reason in the audit log so a compliance review can always answer "why was Revenue restricted last month."
- When a connected integration starts returning rate-limit errors from the upstream provider, the workspace now backs off cleanly for the duration the provider asks for, instead of hammering the same account into a longer ban. Sync resumes automatically once the cooldown clears. A continuous health check confirms that the manual-sync trigger refuses anonymous callers so the cooldown can never be force-tripped from outside.
- Continuous security checks now cover every billing-side route, including the workspace subscription, the invoice library, the project profitability and unbilled-time reports, and the manager billing dashboard. An attempt to mutate a subscription, list invoices, or pull a billing report without a signed-in session is now caught at the live perimeter and not just at the unit-test layer.
Changed
- The "AI Memory" page is now just "Memory." It always covered both the personal facts Hubity learns about you and the workspace vocabulary your team agrees on; the title finally says so. The two older entry points that used to lead here separately are gone and the canonical home is one page with both sections in plain view.
- A few panels picked up names that match what they actually do: "Coaching" is now "Call Coaching," "Standards" is now "Brand & Identity," "Marketing Studio" is now "Content Studio," "AI Action Queue" is now "Agent Approvals," "Action Health" is now "Tool Reliability," and "Team PTO" (the manager view) is now "Approve Time Off." Mid-tenure customers told us in our last research session that the previous names sounded similar but did very different things.
- The standalone Live Board page no longer exists as its own URL. The same real-time activity board lives inside Projects under the Boards view, which is where everyone navigated to anyway. The chat now opens that view directly when you ask for the board.
- Six related sets of panels now read as one. Inbox / Messages / Announcements (For me, Team, Broadcasts), Knowledge / Guides / Playbooks / Brand & Identity (Docs, Guides, Playbooks, Brand), the agent surfaces (Approvals, Runs, Triggers), the sales funnel (Clients, Deals, Qualify, Proposals, Competitors), AI operations (Memory, Behavior, Reliability, Cost), and finance (Invoices, Income, Outflow, Plan) each carry a tab strip at the top so siblings link to siblings without bouncing through the sidebar.
- Insights brings the workspace overview, your daily start-of-day, business health, the P&L overview, and trend analytics under one cluster. Each panel keeps its own focus; the strip at the top means you no longer have to remember which dashboard answers a given question.
- The Hubity logo and wordmark now share a single dark color at every size: the same warm gray (#524d47) we use for body text and section copy. The icon tiles, the "hub" letters in the wordmark, and any small inline render now all match. The teal speech bubble and the "ity" letters keep the same brand teal that has always been ours. Two colors total, applied uniformly. Every static logo asset (favicon, Android adaptive icon, marketing brand mark, email-template wordmark) was regenerated to match. Dark mode is unchanged.
- The integrations catalog, marketing pages, and pricing cards now list only the connectors verified end-to-end against a live workspace. Slack, Microsoft Teams, and Google Drive ship today; Gmail, Linear, HubSpot, Salesforce, and OneDrive ship as Beta. Every other connector that previously appeared moves to a new Integrations Roadmap page so customers see what we are building, in what order, without claims the implementation has not earned. The "30+ integrations" copy is gone, and the "BYO key / API access (coming soon)" lines are off the Business and Enterprise plan cards until those enrollment endpoints actually ship.
- Direct-API attempts to connect a still-on-the-roadmap integration now return a clear, named refusal that points at the roadmap page, instead of a generic error.
May 3, 2026v9.159.2

A clearer pricing structure that lets every team start using Hubity without seat caps, lets AI capability be the upgrade trigger, and makes storage scale with your team instead of capping flat. The two cliffs that punished growth (15-seat cap on Team, flat per-company storage) are gone.

Added
- The Files admin response now exposes the storage breakdown the workspace is operating against. Current usage, current allotment, the per-seat allowance, and the seat count used in the calculation are all surfaced so admins can see at a glance "12.4 GB used of 25 GB (50 seats × 500 MB)" instead of just a raw number.
Changed
- The Team plan no longer caps at 15 members. Hubity is a productivity platform first; AI is the capability that unlocks the next gear. Tasks, projects, meetings, knowledge, integrations, transcription, AI artifacts, and the basic AI advisor stay available at $49 per seat per month for any team size, and the upgrade to Business is now driven by AI capability, not by hiring your sixteenth person.
- The Team plan now includes 2M tokens per seat per month with the basic AI advisor on Sonnet. The previous 4M-per-seat ceiling on Team is now part of the Business pool, where each seat gets 6M tokens, the model picker opens up to Opus and Gemini, and the advanced advisor with deep advice, AI image generation, voice mode, Slack integration, AI-synthesised morning briefings, and AI forecasting all become available.
- Plan cards now read as a ladder. Team is everything in Starter, plus the productivity surface for the whole team. Business is everything in Team, plus the full AI capability set. Enterprise is everything in Business, plus the compliance, single sign-on, custom branding, API access, and dedicated success management an enterprise procurement team requires.
- Every gate that hides a feature now leads with a clear upgrade path that names the right tier. Asking for a Gemini model on Team now points you at Business; trying to invoke an AI forecast on Team now points you at Business; the Business denial paths point at Enterprise where applicable. No more generic "your plan does not include this" with no next step.
- Knowledge documents are now unlimited on Team, Business, and Enterprise. The previous 500-document cap on Team forced workspaces with active client libraries to upgrade for one missing capability while every other reason to stay on Team still held. Documents are about productivity, not AI cost, so they belong to the productivity floor.
- Storage is now per-seat and pooled across the team. Team gets 500 MB per seat, Business gets 2 GB per seat, and Enterprise gets 5 GB per seat. A 30-person Team workspace gets 15 GB; a 200-person workspace gets 100 GB; a 50-person Business workspace gets 100 GB. The old flat per-company cap meant a 3-person workspace and a 200-person workspace shared the same envelope, which made no sense.
- Adding seats grows your storage immediately. Removing seats shrinks the allowance, but every file you have already uploaded stays where it is. New uploads are blocked when the workspace is over the new allotment, with an honest message that names the three real options: add seats, upgrade your plan, or remove unused files. We never auto-delete your data when seats change.
May 1, 2026v9.145.2

A deep improvement pass on Business Development, enterprise-grade location and timezone pickers covering 30+ markets globally, seat role editing for all members, device-independent daily briefing history, a team-invite nudge fix, and a full light-mode pass on the public website.

Added
- The Business Development profile tab now exposes three new sections: Subcontractors (partner firms you routinely team with), Open requisitions (roles you are hiring for), and Capacity exceptions (short-term availability adjustments like extended leave or a project finishing early). The analyzer reads all three when producing its capacity verdict and team-fit assessment so the recommendation reflects the real team at the time of the RFP, not a static head-count.
- RFP analyses now move through a review lifecycle before they can be promoted to the knowledge base. A BD lead marks a report as Reviewed, a principal can Endorse it, and any analysis can be marked Superseded when a newer run replaces it. The save-to-knowledge action requires at least Reviewed status so only validated reports enter the retrieval layer the AI chat draws from.
- Daily briefings are now saved to the account rather than stored only in the browser. The My Day page has a new Briefings tab that shows your full briefing history across any device, with opened and dismissed states tracked per briefing so the view stays clean as items age out.
- A situation note field on the RFP analyzer lets you inject real-time context before each run: a JV agreement just signed, a key hire pending, a teammate on extended leave, capacity freed up by a project ending, or a prior relationship with the issuer. The note is attached to that specific analysis run so future reports remain unaffected, and individual insights can be promoted to standing assumptions that persist across future runs.
Changed
- The timezone field in work schedules is now a searchable dropdown that lists every major world timezone by city and region. Type "New York", "Eastern", "London", or "UTC+05" to filter the list. Coverage spans the Americas, Europe, Africa, the Middle East, every Asian and Pacific market, and Indian Ocean territories. No more copying IANA identifiers from a separate reference.
- Office location forms now include a country selector and a smart state/region field that shows a proper administrative-subdivision dropdown for 30+ countries: every US state, Canadian province, Mexican state, Australian state, NZ region, UK country, Irish county, German state, French region, Italian region, Spanish autonomous community, Dutch and Belgian province, Swiss canton, Austrian state, Portuguese district, Nordic county or region, Polish voivodeship, Turkish province, Brazilian state, Argentinian province, Indian state and union territory, Japanese prefecture, Korean division, Chinese province, South African province, and Nigerian state. Countries outside the registry fall back to a free-text region field so any global office is still acceptable.
- AI response cards (Requirements Coverage, step-by-step guides, tool suggestions, reply quotes, and the voice transcription banner) no longer use a colored left-border accent bar. Each card now sits in a clean uniform rounded container so the accent color comes through the icon and pill badge only, consistent with every other card surface in the app.
- Primary action buttons across every page now sit on a deeper teal fill that gives the text a calm, fully-resolved contrast without resorting to stark white. The button surface itself is darker, the text is a comfortable neutral soft gray, and every combination clears the WCAG AA contrast requirement with comfortable margin so reading them never feels glary or strained.
- The public website now adapts to your light-mode preference everywhere instead of locking dark in places. Feature pages, the integrations gallery, the changelog, and the accessibility and DPA pages all respect the operating system color preference now. Translucent dark surfaces and white-opacity text were swapped for theme tokens so headings, body copy, demo widgets, and chrome all read correctly on light and dark device themes. The Hubity hub-mark in the integrations diagram and the inline SVG product illustrations on the landing page also stop using hardcoded white so a light-mode device sees the full mark and chart text instead of empty containers.
Fixed
- Team administrators can now change the access level of any seat-holder from the Billing panel, including members who are already on the company roster. Previously roster-linked members showed a navigation arrow instead of an edit control, leaving administrators with no way to promote or adjust roles from the Seats panel.
- Inviting a team member from the roster now correctly applies their pre-configured access level to the invitation, so a roster entry marked Owner or Manager arrives at the right tier on first sign-in. Previously the invite form used the job title field as the role, which defaulted new invitees to Employee.
- Asking the in-app AI to message a registered teammate by name now actually delivers the message instead of timing out with a vague "validation error". The send-message handler was rebuilding the messages table on every call (a heavy lock that ate the 15-second tool budget on cold connections), so the actual write never landed. The redundant table rebuild is gone and any real DB error now surfaces a clear diagnostic instead of a generic failure.
- Asking the in-app AI to message a team member who is on the roster but has not yet activated their Hub account now returns a clear, accurate explanation instead of a misleading "validation error" message. The assistant now tells the user the person is on the roster, surfaces their roster email and phone, and offers to resend the invite.
- The knowledge base count endpoint no longer includes soft-deleted documents in the total, so the badge accurately reflects the number of live documents across all devices. A covering database index also brings the count query from 25 s down to sub-millisecond on large knowledge bases.
- Three production errors resolved: the nightly capacity cron no longer crashes on startup, an invited user signing in via Edge Mobile no longer hits a parameter-type error, and the Projects page no longer logs a warning about a dropped table on every cold start.
- New members who accept a roster invitation now always land on the welcome flow where their name, job title, and phone are pre-filled from the roster, ready to confirm or update. Previously a member whose details had already been saved to the roster could skip the welcome flow entirely with no opportunity to review the imported data. The invite link also routes directly to the sign-in page without an intermediate redirect.
- The team-invite nudge no longer appears when the workspace already has other active members. The nudge was firing based on session count alone, so a second device sign-in by an existing user triggered the prompt even when the team roster was already populated. The check now confirms whether other active members are present before surfacing the invite prompt.
April 30, 2026v9.142.1

A new Business Development panel that helps teams decide which RFPs to bid on plus the full intelligence layer that reads each submitted RFP, scores fit against the company profile, and produces a structured report with a real bid / no-bid recommendation. Plus a global allowance indicator so every user sees how much of their AI budget remains, a clearer Boards standup experience with a persistent live indicator and a visible shared-region frame, a refined letterhead preview palette that no longer reads as warm tan in light mode, a streamlined invite-and-onboarding flow, and a fix for zip uploads that were silently dropping every document past the first.

Added
- The Business Development report can be downloaded as a single-sheet PDF on the workspace's letterhead. The download button on the report page renders the same structured analysis to a one-page document with the company logo, the bid / no-bid recommendation pill in the header band, fit score and effort range across the top strip, reasons for and against on the left, and scope coverage, eligibility, geography, and risk callouts on the right. The footer carries the source files, the models that produced the analysis, the deterministic input hash for replay, and the timestamp. Letterhead accent, paper size, and logo come from the workspace's letterhead theme so the PDF reads like a hand-rendered brief rather than a generic export. The render is on demand, so a letterhead theme change picks up immediately without re-running the analyzer.
- The Business Development analyzer can now read RFPs that arrived as photographs or screenshots. When extraction reports an image-only document (PNG / JPG / WEBP / GIF) the analyzer transcribes the page through a Claude Vision call before the classifier and deep-analysis stages run, so a stack of phone photos of an RFP is now scored identically to a real PDF. The transcribed text is cached so re-runs of the same analysis are free. Scanned PDFs that report no extractable text are still flagged for the analyst to call out a gap, with full PDF-to-image OCR landing in a future release.
- The in-app AI chat can now run the RFP analyzer when an operator pastes the body of a request into the conversation. The new analyze_rfp tool produces the same structured bid / no-bid recommendation that lives in the Business Development panel, including a fit score, confidence percent, top reasons for and against, and a deep link to the full report. Confirmation-gated so the run only spends tokens after the user agrees, and manager-and-above only because the analyzer reads the company profile and bidding policy. File and zip uploads stay in the Business Development panel; the chat surface accepts pasted text only.
- A nightly capacity snapshot now keeps the analyzer's effort and capacity-headroom estimates fresh. A new cron runs at 06:00 UTC, walks every workspace, and writes a 90-day rollup of available crew hours minus committed task estimates so RFP analyses running during business hours read up-to-date numbers without relying on stale figures.
- A new Business Development panel sits between Deals and Proposals so the bid / no-bid decision has a real home in the workflow. Drop in pasted text, a PDF, a DOCX, a screenshot, or a zip of all the documents at once and the analyzer reads the package end-to-end: a cheap classifier first pass tags every section (scope, eligibility, evaluation criteria, timeline, budget, location, submission, boilerplate) and a deeper pass synthesizes the whole RFP against the company profile (locations, service lines, prior work, capacity, current backlog) into a single page-glanceable report card. The card surfaces the recommendation with a confidence percent, the fit score, top reasons for and against, an effort range with a capacity verdict, the scope-coverage matrix, an eligibility checklist with citations, a geography assessment, a timeline summary, and the highest-severity risk callouts. The Profile tab is editable end-to-end (locations, service lines, prior-work portfolio entries) with full add and delete affordances; a new Bid context editor takes free-form guardrails, working assumptions, and pricing posture so the recommendation reflects the team's actual bidding policy rather than a generic should-we-bid answer. Operators can record the actual decision (we bid / we passed) on the report so future runs calibrate against past outcomes, and one click promotes a finished report into the company knowledge base where the in-app AI chat can find it later. Defensive caps protect the workflow from runaway uploads (200 files / 500 MB total / 100 MB per file) and every analysis carries a deterministic hash of the inputs so a future replay reproduces the same report.
- Every user now sees how much of their monthly AI allowance remains, no matter which panel they are on. A small donut with the percent remaining in the center lives in the hub shell header, polls in the background, and refreshes the moment a chat tool finishes consuming tokens. The color shifts from teal to amber to red as the allowance drains so the cue is glanceable without reading a number. Click through for a popover with used, remaining, cap, and reset date, plus a shortcut to the full allowance page. Unlimited / enterprise plans render an infinity glyph instead of a percent. Accessible labels read out the same numbers for screen-reader users.
- Two-factor recovery codes can now be regenerated without disabling and re-enabling two-factor authentication. From the security settings panel, entering your current authenticator code generates a fresh set of eight backup codes and invalidates the old ones. The authenticator app stays enrolled throughout so the regeneration is non-disruptive. The recovery flow also now surfaces a clear notice when fewer than three codes remain, prompting you to regenerate before they run out.
Changed
- A round of onboarding polish. The invite email now drops the recipient straight onto the sign-in page with their email already pre-filled, so the only step left is tap Send code; a friendly note above the field explains the next click. The PWA splash screen no longer renders skewed in landscape orientation on iPad. The portrait splash images were being stretched across landscape launches because the media queries did not constrain orientation; they now do. The marketing, login, and onboarding pages also stay on the operating system color preference instead of inheriting the in-app dark mode toggle, so a teammate who set dark mode inside the app no longer sees the website render dark with light-mode patches showing through on a light-mode device. The Boards standup hand-off menu also anchors to the viewport rather than the surrounding standup banner so it is not clipped by ancestor padding on narrow screens; the menu re-computes its coordinates on resize and scroll so it stays glued to the trigger button.
- The letterhead theme preview cards now use a slightly cool off-white instead of pure white. Pure #FFFFFF rendered against the new cool pale-azure light-mode body picks up a warm yellow cast by simultaneous-contrast (the surrounding cool tone makes pure white read as warm), which made the previews look like dated parchment. The previews now sit on a faintly cool off-white that harmonises with the rest of the panel while still reading clearly as paper. Dark mode keeps the bright paper tone explicitly so the previews still feel like real paper against the dark chrome.
- When a Boards standup is running, every panel surfaces a persistent pulsing red LIVE indicator on the Boards entry in the sidebar so users who step away from the standup to check an inbox approval, glance at a task, or open another panel always see the session is still going and can rejoin in one click. Inside the Boards page, the area being shared with the rest of the standup is now wrapped in a visible red-bordered frame with a corner LIVE label, removing the ambiguity of "what is actually being shared right now" reported in the April 2026 user feedback. The live region also extends to the task drawer: when the facilitator opens a task during a standup, every attendee in follow mode sees the same drawer open on their screen so notes, comments, and field edits made during the meeting are visible to everyone, not just the broadcaster. The "who is driving" semantic is now unambiguous too. During a standup the only cursor that broadcasts is the driver's, the driver's cursor renders with a halo ring and a "driving" tag so attendees can tell whose pointer they are watching, the standup banner shows the driver a clear "You're driving · hand off" affordance and shows everyone else a "Following [driver]" status pill, and a brief toast announces every hand-off so the lead transfer never feels invisible. The frame collapses to a no-op wrapper when no session is active so non-standup browsing reads exactly as before.
Fixed
- Roster role changes now propagate to existing users on their next sign-in. Previously the team-roster reconcile only fired the first time an invited user signed in, so any access-level change made afterwards (an owner promoting a manager to owner from the team panel, for example) never made it onto the User record. The user kept showing up at their old tier on the seats list and the access-edit affordances stayed missing. The reconcile step now also runs for already-linked staff and copies the access level forward when the User row is still on the default; it never demotes, so an explicit security-panel demotion is preserved.
- The invited-user onboarding form now reliably pre-fills the job title and phone fields the admin typed in the roster. The bootstrap that powers the welcome page was looking up the StaffMember row by the linked user id only, so a brief race between sign-in and the link being committed (or a roster entry that was added after the user already had an account) left the form blank. The bootstrap now falls back to matching the StaffMember row by email scoped to the workspace so the pre-fill always lands.
- A handful of Boards standup cleanups. Roster avatars on the standup banner now render the actual profile picture when one is on file instead of always falling back to initials, and the avatars stack with a smaller overlap so adjacent letters no longer mush together when two attendees with similar initials are present. The shared-notes textarea now carries breathing room below itself so its bottom edge stops colliding with the filter row immediately beneath it. New tasks added during a standup also appear instantly: the post-add board refresh now goes through with no-cache so a stale snapshot can no longer overwrite the just-created row, which fixed the "task disappears then reappears later" flicker.
- The token allowance popover no longer gets clipped inside the sidebar. The indicator lives in the sidebar header where the surrounding container hides horizontal overflow, so the previous absolutely-positioned popover was rendering as a sliver with most of the allowance details cut off mid-word. The popover now positions itself against the viewport rather than its scrolling parent so it always opens at full width and stays inside the screen on every panel and screen size.
- A handful of pill buttons that were rendering with native trailing ellipses have been resized or relabelled. The Boards standup "Drive..." button is now "Hand off" with a chevron that signals the dropdown without truncating the label, and the sidebar role chip dropped its redundant "access" suffix so "Owner..." no longer shows up where the role label alone is unambiguous. Forcing buttons into ellipses for chrome reasons reads as a layout bug; we resize the button or shorten the text instead.
- The cross-panel Boards LIVE indicator no longer shows stale state if your auth status flips during a session. The polling effect was setting its alive flag unconditionally on every run, so an in-flight poll from before the user signed out could still update the indicator after the hook had been disabled. The hook now resets and clears local state on disable so the badge collapses immediately.
- Zip uploads on the Business Development RFP analyzer now persist every document inside the archive. Previously a zip with multiple files was reduced to its first entry because the per-document database id was being copied from the parent archive row instead of being generated fresh, so every additional row collided on the primary key and silently fell out of the analysis trail. Every extracted document now lands as its own row that inherits the parent archive blob URL but carries an independent id; multi-zip submissions now also resolve each document back to its actual parent archive instead of always pointing at the first one.
- Task drawer comment deletion now waits for the server to confirm before removing the comment from view. The previous behavior optimistically dropped the comment on any response, so when the server rejected the delete (rate limit hit, session expired, permission denied, transient 500) the UI showed the comment as gone until the next reload re-fetched comments. The drawer now ignores any non-success response, leaves the comment in place, and emits a clean log line so support can trace it.
- Boards is back to showing every active project and its open tasks. The Boards canvas had been stuck on the empty "No active projects yet" state for every workspace since the recent Boards cutover, even when the portfolio listed dozens of active projects with hundreds of open tasks. The Tasks list and the project detail tasks tab were affected by the same underlying problem and are also lit back up. Workspaces with active projects now see the full board the moment they open it, and assignee details (avatar, role, department) render across every task surface again.
Security
- Two-factor authentication now enforces at the server level. Previously the second-factor prompt was enforced only in the browser, meaning a direct API call could reach protected data before the authenticator code was entered. The server now treats an incomplete two-factor session identically to no session at all, so every surface that requires authentication also requires the second factor to be complete.
April 29, 2026v9.131.0

Brand pivot to monotone teal, a continued pagination sweep, a marketing voice that leads with why we exist, and the first ride of Boards as its own panel with Standup Mode. The Hubity icon retired its warm sienna tiles in favor of a single saturated brand-teal accent: three teal stroke-only outlined tiles plus one teal solid-filled speech bubble. The wordmark "hub" letters now mode-flip between warm dark charcoal on light surfaces and parchment off-white on dark surfaces, pairing the lone brand-teal accent against the dominant ink of each mode. Easier to control across light and dark surfaces, less customer pushback on the warmer brown, and aligned with the proven premium B2B SaaS pattern (Anthropic, Linear, Stripe, Vercel) of one saturated accent on a neutral chassis. Every asset and every surface that depicts the mark was regenerated against the new design, and a new central source-of-truth module keeps every future brand-color fine-tune one line away. Pagination came to four more high-volume panels (Inbox, Approvals, Domains, Timesheet approvals) plus a leftover branch on Knowledge trash, replacing the silent caps that hid older rows from operators with large queues; the print template for meeting minutes was migrated off the warm-tan body / beige-border palette onto the cool slate ink + pale-azure border ladder so printed documents feel like the rest of the light-mode app.

Added
- Boards Standup Mode now feels live in the way a video-call standup is supposed to. The facilitator clicks a card to drive the team to it, and every attendee's view snaps to the same card with a soft scroll and a colored ring so there is no doubt about what the team is talking about. Anyone who wants to take a closer look at something else can simply scroll, and the page recognises it as deliberate exploration and pauses the auto-follow; a Rejoin focus button appears in the standup banner so a single tap snaps them right back to where the rest of the team is looking. The facilitator can keep moving the team through the board card by card without anybody saying "no I am not on that one yet" or waiting for the camera to catch up. Mobile attendees on portrait orientation see a one-time hint to rotate to landscape, because the spatial board reads at a glance in landscape but compresses awkwardly in portrait; the hint dismisses itself the moment they rotate. The realtime channel that powers all of this is the same Cloudflare Worker + WebSocket that already handles presence and shared notes, so the new follow polish piggybacks on the multiplayer infrastructure instead of paying for a second channel.
- Boards are now their own home in the product. The kanban that lived as a third tab inside Projects has lifted to its own top-level panel under Collaborate, alongside Meetings, Polls, and Coaching. The same projects-status view renders there with no behavior change, but every board now has a stable shareable URL so calendar invites, standup reminders, and Slack pasted links land on the same surface every time. Per-project drill-down stays inside the project detail page where it naturally belongs; the new home is for the cross-functional and recurring-ritual boards. The first feature that takes advantage of the new home is Standup Mode: any teammate can press Start standup on a board to wrap the next few minutes in a focused session that the whole team watches together. Other teammates see the running standup the moment they open the board and can join with one click; the roster strip shows who is in the room with the facilitator highlighted. Live presence carries the experience: every attendee sees every other teammate as a colored cursor moving across the same canvas in real time, the way Google Docs and Figma have always shown collaboration. The facilitator can hand the role over to any current attendee through the Drive popover when it is somebody else's turn to walk the team through their work. Ending the standup writes a deterministic recap (date, duration, attendees, activity counts) to the session record so the meeting record is queryable for the rest of the year, and the record reconstructs from the audit log alone. Every join, leave, focus broadcast, hand-off, and end is logged with the standup session id for the SOC 2 oversight surface. Live shared notes ship alongside Standup Mode: every attendee sees a textarea above the board where anyone in the room can type and the words stream to everyone else in real time, character by character. Two attendees typing on the same line at the same time merge cleanly instead of clobbering each other. Notes are scoped to the standup session so each meeting starts with a clean slate. The realtime channel is engineered for cost and ownership: a Hubity-authored Cloudflare Durable Object holds the per-room presence, the multiplayer document, and the broadcast protocol; no third-party SaaS is in the hot path; the wire format pairs JSON-over-WebSocket for presence with binary y-protocols frames for the open Y-CRDT family powering the multiplayer state sync. The first ride is the kanban board; the realtime infrastructure that ships with it is the foundation every future collaborative surface in Hubity (whiteboards, planning poker, retrospective wall, status round-robin) reuses without re-building the channel each time.
Changed
- The Hubity icon dropped sienna and switched to a monotone brand-teal composition: three brand-teal stroke-only outlined tiles plus one solid-filled brand-teal speech bubble. Single accent on a transparent chassis, identical across light AND dark contexts so the mark feels deliberate on every wallpaper, every browser tab, every email, every printed letterhead. The wordmark "hub" letters now mode-flip between warm dark charcoal on light surfaces and parchment off-white on dark surfaces, so the wordmark always reads as a tonal sibling of the surrounding chrome ink rather than a separate brand-only color. The "ity" letters stay on brand teal in both modes, mirroring the speech-bubble accent in the cube. Every raster asset (apple-touch-icon, PWA icons at 192 / 512, the favicon family, every iPad and iPhone splash screen, the email-safe brand lockup PNG) was regenerated against the new mark, every static SVG asset (the cube, the maskable Android icon, the dynamic browser favicon, the brand lockup, the stacked logo, the standalone wordmark) was rewritten to render the new geometry, and every inline SVG mark in the app and on the marketing landing now resolves to the canonical teal token. The home-screen icon no longer needs a special lifted-sienna override because the monotone teal mark holds equal contrast on light AND dark wallpapers without any per-asset trickery. The Open Graph share card switched to the same outlined-teal mark with the wordmark "hub" rendering in off-white against the dark card background. The chat header Hub button, the AI assistant center watermark, and the share-link footer wordmark all rebuild against the canonical teal token. A new design-token source-of-truth module captures every brand color value in one place so future fine-tuning is a one-line change that cascades to every surface (web, email, PNG generation, PWA backplate). Email transactional templates also moved their wordmark "hub" color off sienna and onto the new charcoal so emails feel coherent with the web wordmark.
- Printed meeting minutes look like the rest of the app now. The print template was migrated off the warm-tan body text + beige border palette (a holdover from the pre-April 2026 warm-cream light mode) onto the cool slate ink + pale-azure border ladder. Body text is now the same slate the in-app product uses, table borders match the in-app rule color, and the background panels behind summaries and topic groupings use the cool surface tone. The brand teal accent on the letterhead rule under the company name is unchanged. Documents printed today look deliberate next to the screen they were captured from instead of feeling like a different design system.
- The marketing voice now leads with belief, not feature lists. Every customer-facing surface that carries the brand voice (landing hero badge, headline, and subheadline; the differentiator section subheading and closing line; the employee-value subheading and closing copy; the footer CTA heading and description; the search/social meta description that appears in unfurled link previews) was rewritten to lead with why we exist before describing what we do. The new voice opens with "we believe every team can do better work" and names the four qualities of better work the product is engineered around: more efficient, more transparent, more collaborative, more connected. The concrete value prop ("ready before your first meeting", "every answer grounded in what your team knows") still lands in the same paragraph, but it follows the belief instead of standing alone, so the page reads as an invitation rather than a feature catalog. Feature lists, capability descriptions, and pricing details are unchanged because those describe how the product works, not why it exists; the inspiration is concentrated where the visitor first arrives. Every customer-facing surface in every supported locale resolves to the same canonical statement of why so the message rings consistent whether a visitor lands on the English homepage, a Japanese feature deep-link, or a Brazilian Portuguese share-card preview in Slack.
Fixed
- Brand wordmark drift swept across every customer-visible surface earlier in the day. The Open Graph card (the Hubity image other apps unfurl when our links are shared into Slack, LinkedIn, Twitter, etc.) had "hub" rendering in cream instead of the canonical brand color; the HQ navigation chrome (both desktop sidebar and mobile menu) had "hub" rendering in muted slate-grey; the shared meeting-minutes footer "Shared via hubity" had the same drift; and the chat-window mockup on the landing page had the same drift. Every surface now resolves to the canonical wordmark colors so the wordmark looks identical wherever it appears. The hero headline on the marketing landing also rebalanced to a single brand accent (both halves of "Your Hub for Productivity" now in brand teal) so the cream display text is not fighting two saturated accents at hero scale.
- Pagination came to four more high-volume panels (Inbox, Approvals, Domains, Timesheet approvals) and the leftover trash branch on the Knowledge document list. The Inbox now slices the merged review queue (PTO + approvals + timesheet periods + AI action queue) into pages of 50 instead of silently truncating after 100 items per source; the summary card at the top still counts the full backlog so a manager always sees the true number even when looking at one page. Approvals, Domains, and Timesheet approvals all gained Page-N-of-M with prev / next controls. The Knowledge trash list (the bin of deleted documents waiting to be permanently removed or restored) was the last branch on the Knowledge page silently capped at 100; it now paginates with the same shape as the live document list. Workspaces with large queues no longer see arbitrary cutoffs. Inbox pagination is opt-in on the API: callers without explicit page params still receive the full merged list, so the existing UI keeps working unchanged.
- The Settings profile phone field stopped slamming international phone numbers into US (NANP) format. Previously the formatter was hardcoded to the US region for every user, so an international number such as a UK +44 or a French +33 was reformatted into US shape and could lose digits. The field now detects the region from the leading country-code prefix in the value, so an existing +44 phone keeps formatting under UK rules and a French +33 phone keeps formatting under French rules; plain North American digits without a leading "+" still pick up the US convenience formatting.
- The "A new version is available" banner could get stuck on screen during a Vercel rollout where the user landed between two concurrent deploy versions. The version-check was symmetric: it triggered the auto-reload whenever the bundled client and the server reported different builds in EITHER direction, so a user whose cached client happened to run ahead of the server they hit would loop on cache-busting reloads that re-fetched the same mismatched pair. The check is now asymmetric: the update flow only fires when the SERVER is genuinely newer than the bundled client (semver-aware), and "client ahead of server" is treated as a transient state that the next 15-second poll resolves naturally. The duplicate update CTA in the chat-input footer was also removed; the app-wide top banner is the single canonical surface for version updates now.
April 28, 2026v9.127.2

Speaker diarization and identification, plus the consolidated 9.114.x rollup. Meeting transcripts now auto-attribute every speaker by voice signature, on top of the holiday calendar, settings consolidation, domain swap, import upgrades, custom task statuses, AI meeting notes, picture-in-picture meeting recorder, optimistic concurrency, and live co-working layer that landed earlier in the day. Same-day follow-up shipped Clients pagination, the Edit form for Signal Feed sources, the AI Action Queue rename + accent move off Connectors purple, the primary-button wrap fix, the light mode design refresh that retires the dated tan in favor of a cool pale-azure paper, and the new feature-availability registry that hides Real-time Call Coaching and Voice Signature enrollment until their enterprise-grade vendor swaps land.

Added
- Meeting recordings now auto-attribute every speaker. Audio runs through Deepgram with speaker diarization on, and every detected voice cluster is matched against the workspace voice signatures using cosine similarity above a tuned threshold. Matched segments land in the transcript with the real teammate name; unmatched ones stay as "Speaker N" rather than guessing. The same pipeline drives task voice notes so a status update captured during a progress meeting carries the right names through to the cleaned bullets. Voice enrollment now produces a true 512-dimension voiceprint via pyannote, stored alongside the audio sample. A background backfill job runs every thirty minutes so existing enrolled users get their fingerprints generated automatically without re-enrollment, and the Settings panel surfaces an "Identification ready" badge so users know their voice can be auto-attributed.
- Live co-working layer. When a teammate updates a task, project, client, or status, every connected tab sees the change within fifteen seconds without refreshing. Open the same record in two tabs and a "Casey is also editing this" indicator appears in the drawer header so collisions are visible before they happen. Creates broadcast alongside updates, project edit modals take their own presence lease, and the Tasks list / Live Board / Portfolio all refresh automatically. Battery-aware on mobile: polling pauses entirely when the tab is hidden and presence leases auto-expire. No long-lived connections, no LLM calls, no background work while the user is not watching.
- Meeting recorder gains a picture-in-picture mode. Hit Minimize during a long meeting and the full recording panel collapses to a small floating widget pinned to the corner. The recording continues, the elapsed timer keeps counting, and a four-bar voice-detected animation pulses every time someone speaks. The minimized widget stays inside the viewport on phones, sits above every other panel, and never gets covered while you check tasks, projects, or knowledge during the meeting.
- Custom company-wide task statuses. Workspaces now ship with six built-in stages (To do, In progress, Review, On hold, Blocked, Done) and admins can layer their own (e.g. an engineering firm adding "In construction" or a permitting team adding "Awaiting MDE response"). Order, color, and visibility are admin-controlled from Settings; built-in stages can be hidden or reordered but never renamed or deleted because the analytics roll-ups read the canonical key. Custom statuses propagate to every task picker across Projects, the Live Board, and the Tasks list automatically.
- Tasks now support AI-cleaned meeting notes captured by voice. Open the task drawer, hit Meeting notes, and dictate the discussion. The recording is transcribed via Whisper, cleaned up by Claude, and returned as labeled bullets that attribute each speaker from contextual cues. Three formatting styles are available (bulleted, paragraph, or one-line status), and the operator can remix between them, edit the result, then apply (replace or append with a timestamped delimiter). Mobile-friendly: works in iOS Safari, Chrome Android, and every desktop browser via the standard MediaRecorder API; falls back to typed text in browsers without microphone support.
- Holiday calendar can now be seeded from any supported country directly on the holiday card. Pick a country (US, Canada, UK supported on first launch) and click Seed; the workspace country is set in the same write so future seeds remember the choice. New workspaces get a sensible default from the browser locale, so most operators do not have to think about the picker at all.
- Settings now consolidates the onboarding answers in editable form. Profile gains a Phone field and a Marketing email opt-in toggle, and the Company section adds an Industry, Company size, Country, Primary use case, and How did you hear about us section. Anything captured at signup can now be updated forever after without needing a support ticket.
- Promote any verified company domain to the primary slot. The current primary swaps into the additional list, the chosen domain becomes the workspace identity, and a workspace that signed up against a stale email domain is no longer locked out of fixing it. The website itself is also fully removable now, not just editable.
- Projects tasks tab gained an All departments filter that respects the workspace department list. Selecting a department narrows the task list server-side so the count updates immediately and the page does not have to filter a 500-row payload client-side.
Changed
- Live Board task rows now carry the same operational detail as the Tasks list: department tag, assignee initials, due date, status pill, edit pencil, and delete button. Status changes happen inline; edit opens the same drawer as the Tasks list. Each project card on the Board also gets an inline Add task button so a manager can drop work onto the right project without leaving the visual layout. The Board is now the canonical task surface; the flat Tasks list stays available for power users who prefer the dense view.
- Bulk import accepts Excel-pasted (tab-separated) data, in addition to comma and semicolon CSV. Common alternative column names ("Primary contact name", "Billing address", "Email", "Phone") are recognized automatically, and a Download template button on every import modal hands you a known-good CSV with example rows so the very first import lands cleanly. Billing address now imports for clients alongside the existing fields.
- Every dropdown across the app now responds to keyboard the way operators expect from native software. Typing characters jumps to the matching option (Windows / macOS standard typeahead), Arrow keys move the highlight, Enter or Space selects, Home and End jump to the ends, and Escape closes. Long option labels truncate cleanly with a tooltip showing the full text instead of bleeding past the pill border in narrow grid columns.
- Time-off, work-pattern, and presence layer ships complete. Time-off requests now auto-fill Number of days from each user's configured working days plus the workspace's observed holidays. The breakdown line names the assumption ("5 working days, 2 non-working days excluded, 1 holiday excluded: Memorial Day") so the count never feels mysterious. Workspace-level work-pattern defaults now layer between the user's explicit values and the platform Mon-Fri 09:00-17:00 fallback. The same admin section hosts the workspace holiday calendar with one-click US/Canada/UK federal-default seeding, with floating dates like Memorial Day and Easter Monday computed correctly forever. Settings -> Profile also gained Work pattern + Presence sections so each user can pin their schedule, online/busy/DND/Away status, and a 120-character status message; a live presence dot rides on every avatar across Team and chat surfaces. A bundle of review-found bugs landed in the same sweep: floating-date holidays are seeded as one-off entries instead of recurring so the auto-calc cannot match the wrong calendar day in future years; presence heartbeats honor the visibility-change idle hint so a parked tab resolves Away immediately; work-pattern partial updates that would invert the existing schedule are now rejected at the editor before they persist. The mobile-responsive sweep continued through the always-on surfaces (login, 2FA, verify), the Live Board, the Billing Hub, the avatar uploader, and Meeting Minutes share toast; Tasks rows wrap on phones, filter bars stretch full-width, modal forms collapse to single-column, and tables across AI Memory, Guardrails, Approvals Oversight, and Trash gained horizontal-scroll wrappers.
- Platform-wide reliability and polish sweep. Bulk import modals across Clients, Projects, and Tasks now accept file uploads (CSV, TSV, JSON, plain text) on top of the paste flow, with drag-and-drop support and a one-click "Upload file" affordance next to the Template button. Operators can now download the template, fill it in their spreadsheet of choice, save as CSV, and upload it back without ever copy-pasting through the textarea. Long-form text fields gained a "Polish with AI" affordance: any draft of at least a dozen characters can be tidied with one click and undone in one click. The first surfaces wired up are New Playbook (Steps and Description), with the same component ready to drop onto project notes, knowledge entries, automation triggers, and any other free-form input. The Recent Activity card on the Overview dashboard no longer shows question-mark avatars on every row; backend joins the assignee table so real initials surface, and unassigned tasks render a neutral activity icon rather than a literal placeholder. The Signal Feeds detail card gained a working Close button (the previous one used a font that had been removed from the bundle and rendered as a blank square), the legislative bill Synopsis box dropped its purple "AI-styled" left strip in favor of the standard surface vocabulary the rest of the panel already uses, and the segmented filter that had been showing the literal translation key "cc.feeds.feeds" now reads "All" as intended. Modal primary buttons (Add Expense, Save Record, Generate Ad Copy, Open Brand Settings, Run Playbook) now consistently take the per-panel WCAG-verified signature accent rather than the lighter chip-fill or a flat success / danger token, so each modal sits in the same color voice as the panel it opened from. Form-input focus rings across every Command Center page were retuned to the same calibrated signature variant, so a focused field on Expenses no longer paints itself in bright coral and a focused field on Revenue no longer reads as a success state. The Marketing Studio Length / Emojis / Hashtags row stopped overlapping into itself on narrow viewports because each segmented control now reserves enough room to render its three labels before wrapping. The sidebar header tightened to a 50px stack matching Slack / Linear / Notion convention. Two literal translation keys ("cc.actions.save_record" on Add Revenue and "cc.expenses.currency" on Add Expense) that had been bleeding through to the rendered button label now resolve to "Save record" and "Currency" as intended. Personalization sweep across every Hub page, guide, playbook template, and chat-tool error response: "the assistant" is now "Hubity" by name, and the legacy "Command Center" navigation label reads "Hub" in the page chrome and tab titles. The product is yours and ours by name, not a generic AI tool. Empty panels gained a first-move action stack: every panel that supports a "create" flow now answers "what should I do here?" with one obvious primary button, an Ask Hubity option that drops a pre-filled prompt into Chat for users who would rather describe what they need in plain language, and an optional example-seed button. The first wave shipped the pattern on Clients, Projects, Knowledge, External Documents, and Signal Feeds; the same component is ready to drop onto every remaining empty surface in the next sweep. Operators who land on a fresh workspace no longer have to guess where to click first. The Clients page now paginates: a workspace with more than fifty clients gets prev / next controls and a "Page N of M" indicator, replacing the silent hundred-row cap that hid the rest of the list. The same primitive is ready to drop onto every other paginated panel. Each Signal Feed source now carries an Edit pencil so the display name, description, refresh frequency, and Active toggle can all be tuned without delete-and-re-add; the source URL stays read-only because changing it would orphan the feed history. The Agent Approvals panel was renamed to "AI Action Queue" so the language matches what users see (a queue of pending AI actions awaiting their sign-off), and its accent moved off Connectors purple onto a warmer pending-review amber so the two adjacent panels now read as distinct at a glance. Long primary-action button labels ("AI Action Queue", "Generate Ad Copy") used to wrap to two lines and break the pill height contract on narrow viewports; they now stay on one line in every panel header. Light mode also got the design refresh customers have been asking for: the page palette shifted from a tan-cream paper that was reading as dated to a cool pale-azure ladder (#f8fafc page / #eef2f7 surface / #dde4ec sidebar recession) that complements the teal primary and lands in the same premium voice as Linear, Stripe, and Vercel light themes. Body text moved to a cool slate ladder (#1e293b / #334155 / #5b6675) that pairs cleanly with the pale-azure paper while still clearing WCAG AA on every saturated accent surface. Brand identity is preserved: the logo nodes still resolve to the warm espresso so the wordmark pops as a deliberate warm accent against the cool chrome, and saturated buttons keep their warm cream ink so the product still feels human rather than sterile. The browser theme-color meta and the brand-ink drift detector were updated to recognize the new canonical palette. The Real-time Call Coaching panel and the Voice Signature enrollment surface are temporarily hidden via a new feature-availability registry: coaching needs the automatic-speaker-detection UX before it ships at full strength, and voice signature is paused until we land on an enterprise-privacy-grade vendor for the embeddings (HuggingFace public Inference is not the right home for customer call audio). The registry doubles as the architectural primitive for future rollouts and revocations: one entry flips every surface (route gate at the edge, sidebar nav, AI tools advertised to the LLM, capability registry, cron schedule, env var docs) so a hidden feature stays hidden everywhere it could leak, including in the AI tool list and capability descriptions. The product surface URL also moved from /command-center/* to /hub/* for every page and every internal API namespace, matching the personalization sweep that already replaced "Command Center" with "Hub" in copy. Old bookmarks, browser history, and external integrations still hitting /command-center resolve via a 308 redirect so links never break. The "Polish with AI" affordance, previously only on Playbook step + description fields, now also appears on the Knowledge "Content" textarea and the Announcements message body. One click cleans the draft, one click undoes if the rewritten version drifts; the same pattern is ready to drop onto every other long-form input. The Hub sidebar split into a two-zone layout: a Pinned zone at the top of the menu shows your quick-access list (role-defaulted on first sign-in: My Day + Calendar + Tasks + Inbox for everyone, plus Clients / Projects / Team for managers, plus Team PTO + Timesheets for HR, plus Expenses + Revenue + Budgets for finance, plus Analytics for admins and owners), and the canonical category-grouped list below stays the stable map of the entire product. A star next to each item lets you pin or unpin without leaving the sidebar; pinned items still appear in their original section so the tree never drifts away from operator mental models. Reset returns to your role default. Fresh customers land on a useful pinned set immediately and never face the "where do I click first" overwhelm of forty panels. The empty-state first-move stack also picked up two more major panels: Deals (now answers "no deals yet" with a New Deal button + Ask Hubity prompt for adding by description), Meetings (Log Meeting + Ask Hubity to log a meeting from notes), Proposals (New Proposal + Ask Hubity to draft one from a brief), and Competitors (Add Competitor + Ask Hubity to add one by description). Settings → Domains gained a Remove button on the primary domain row, paired with a promote-or-clear dialog: when the workspace has additional verified domains the operator picks one to promote, otherwise the action clears the primary entirely. Workspaces that signed up against a stale domain are no longer locked into keeping it on file. The Projects Board now edits tasks in place: clicking any task on the Board (or hitting the edit pencil) opens the same task drawer the Tasks list uses, instead of navigating to the project detail page. The drawer carries every field (description, comments, assignee, due date, status, priority, department) and closing returns to the Board exactly where the user left off. Mid-presentation task edits no longer break the visual flow. Same principle will roll out to every entity panel in subsequent sweeps: drawer for rich entities edited in current view, modal for one-shot decisions, inline for single-field updates. Pagination came to two more high-volume panels: the Lessons Learned library and the Expenses ledger now both render Page-N-of-M with prev / next controls instead of silently truncating at hundred-row and five-hundred-row caps respectively. The Budgets panel gained the empty-state first-move stack so a fresh workspace gets a "New budget" button + Ask Hubity prompt instead of a blank screen. Every country field across the product now resolves to a single shared picker (Settings profile, Settings company, holiday seed, onboarding); the curated 60+ country list lives in one place so the holiday-only subset and the full address list can never drift apart again. The phone field auto-formats by region with localised patterns for every one of the twelve languages Hubity ships in (US/CA/GB/AU + Germany / France / Italy / Spain / Netherlands / Poland / Brazil / Portugal / Turkey / Japan / Korea); countries we do not have a regional rule set for pass through unchanged so a user from Vietnam or Argentina is never wrong-corrected. The marketing email lifecycle now respects the GDPR opt-in checkbox the user clicked at signup: every drip trigger query restricts candidates to users with marketingOptIn=true, so a user who declined marketing email at signup never gets a re-engagement nudge or trial-ending warning. Invited-team-member onboarding gained richer pre-fill: when an admin types a roster row with first / last / phone / job title / department, the invited user lands on the onboarding form with every field already filled, so they confirm rather than retype. The role-propagation reconcile (a roster manager actually arriving at manager-tier UI on first sign-in instead of dropping to employee) was already in place from the April 2026 onboarding sweep and is unaffected. Brand mark refresh: the Hubity cube and wordmark now use the same composition in every theme: three sienna tiles plus one brand-teal speech bubble in the top-right (the bubble carries the brand color because it represents the brand voice). The wordmark mirrors the cube exactly: "hub" in sienna, "ity" in teal. No more per-mode flip; one unmistakable mark on every surface. The mark sits on a refined pale-azure light-mode chrome (soft cool paper instead of the warm tan that read as dated) so the warm sienna pops as a deliberate complementary accent rather than fighting the page voice. A follow-up cleanup pass straightened the press kit and HQ brand reference page so the canonical C2 mark renders in both light and dark contexts (no more slate or pure-white tile overrides), the asset download links advertise the current square favicon and maskable SVGs instead of the legacy non-square variant, and the HQ brand reference no longer points at a wordmark file that does not exist in the public asset set. A new soul-moment color (warm parchment cream) joined the design tokens for use on Lora display headlines over dark backgrounds, formalising the cream-on-dark voice that previously lived as bare hex literals across marketing surfaces. The apple-touch-icon (the home-screen icon iOS users see) had its sienna brown lifted by ten percent so the mark holds equal contrast against light and dark home-screen wallpapers without resorting to dual icons or per-mode trickery; every other surface that depicts the brand mark stays on the canonical sienna so the lift is scoped to the one icon that needed it. The remaining stale brand renderings inside the app (chat header Hub button, share-link footer wordmark, full brand lockup on the landing footer + feature page header + landing hero) were all migrated off the legacy warm-espresso ink token onto the canonical sienna so every surface that depicts the mark now resolves to the same single source of truth.
Fixed
- Invited team members now sign in at the role their admin set. Until now the new User row was created with the default Employee level even when the roster carried Manager / HR / Admin / Owner, so the new user landed in the wrong-tier UI until an owner manually re-promoted them. The roster reconcile now propagates accessLevel, job title, phone, and department from the StaffMember row to the User row in a single safe write that never clobbers a value the user typed during signup.
Security
- Every speaker-identification decision is recorded for audit. A new MeetingSpeakerMatch table captures the meeting, speaker label, matched user, and similarity score for every transcript a meeting produces, including misses below threshold. An HR or security review can now answer "which transcript segments was this user attributed to?" without scanning the transcript text. Cross-model comparisons are blocked at the matching layer so a future fingerprint-model upgrade cannot silently produce incorrect attributions. Audio transcription cost is meaningfully lower in the same change because Deepgram is roughly thirty percent cheaper per minute than the previous Whisper-only path; when Deepgram is unavailable the path transparently falls back to Whisper with no behavior change.
- High-collision edit endpoints (tasks, projects, clients) now support optimistic concurrency control. When two teammates open the same record at the same time and both save, the second save now returns a clear conflict response with the latest version instead of silently overwriting the first save. Existing clients keep working unchanged because the precondition is opt-in via a standard If-Match header; surfaces that adopt the header get the protection automatically. The conflict response includes the current version timestamp so a future merge UI can show exactly what changed without an extra round-trip.
- Voice and audio surfaces now carry the same audit / cost-attribution / tier-gate enterprise floor as the rest of the platform. Every TTS synthesis, realtime voice session start, realtime transcript save, coaching analysis, meeting transcript append, and meeting finalize writes a structured audit row (the spoken text, transcript body, coaching transcript, and synthesis prompt are NEVER logged; only the metadata an auditor needs: who, when, which conversation / session / minutes id, byte length, voice id, action-item count). Whisper transcription cost on uploaded meeting audio is now charged to the workspace token pool, metered against the actual decoded audio duration that Whisper returns, so a high-bitrate WAV / FLAC upload meters the same as a low-bitrate opus stream of equal length, and a Whisper response that comes back empty (silence or unintelligible audio) still hits the meter because OpenAI bills the seconds either way. Meeting-finalize Claude calls similarly attribute cost back to the workspace. The realtime sub-routes (query, artifacts, memory) added an explicit voiceMode capability check so a free-tier workspace cannot drive tool calls via a direct hit that bypasses session-init enforcement. The TTS route added a provider-allowlist check that mirrors the realtime / Whisper paths so a workspace restricted to a non-OpenAI provider set cannot synthesize through OpenAI by accident.
- Sweep migrations add updatedAt timestamps to every remaining relational table, agent runtime tables (AgentGoal, AgentRun, AgentStep), and the three MCP token tables, closing 63 capability registry entries that the MVP-status audit flagged for missing timestamps. MCP token issuance now writes an audit row capturing the row id, scopes, client identifier, and expiry (never the token value). An enterprise-maturity audit doc also landed: every Capability Registry entry is now scored against a six-point checklist (schema, panel parity, role floor, audit trail, soft-delete, settings) and 32 of 194 capabilities now read enterprise-grade end-to-end, with the rest tracked for burn-down.
- Passkey enrollment and sign-in are now enterprise-correct end-to-end. Saving a passkey from Settings now labels the credential in the password manager with the real email address (Apple Passwords, 1Password, Bitwarden, Chrome) instead of an internal hashed identifier that meant nothing to the user. Sign-in now offers an explicit Trust this device toggle on the verify screen: leaving it on keeps the standard 30-day session, turning it off (the right choice for shared, guest, or kiosk computers) caps the session at an absolute eight hours from sign-in regardless of activity, after which the next request bounces back to /login. The toggle ships with a small help line that names the consequence in plain language so users on shared machines do not have to guess. Cross-device sign-in also lit up on every browser: laptops without Touch ID or Windows Hello can now scan a QR code from a phone that holds the passkey and complete sign-in via the WebAuthn hybrid transport, matching the pattern Google, Microsoft, and 1Password ship today.
April 27, 2026v9.107.0

Hallucination guard across briefing + chat, panel-accent button consistency, focus ring + chat reliability

Added
- Chat-driven proposal flow gained the missing pieces. The assistant can now delete a proposal (it goes to the central Trash with the standard 30-day restore window) and restore a deleted proposal, so "delete those wrong drafts" no longer lands on "I cannot do that from chat". When a proposal is created with an explicit dollar total in the request ($22,000, $14,500, etc.) the saved total now matches that figure to the cent the tool used to fabricate hours and rates that summed to wildly wrong numbers ($22,000 became $2,205,000 in one report), and now line items rescale so the saved total locks to the user's stated price (numbers buried in the narrative are detected as a safety net). The assistant also no longer reasons about deleted rows as still present: after any create / update / delete / restore it re-lists the entity before answering, so questions like "did I already create the Bayview proposal?" return the live answer instead of comparing against a pre-deletion snapshot.
- The Projects page now has a New task button on the Tasks tab and an empty-state CTA, so users no longer land on an empty cup-of-coffee sketch with nothing to click. A title is enough to get the row created; priority, due date, and assignee can be set from the task drawer that opens after creation. The portfolio view also gained a Sort control (Name A-Z by default, plus Name Z-A, Client, Health, Recently updated, and Newest first) so a long project list can be re-ordered to whatever lookup pattern the user actually has in mind. Server-side pagination, search, and sort now back the portfolio so workspaces of any size load in 50-row pages with a real Showing X-Y of Z pager; earlier the page silently capped at 50 rows and the on-page search returned "No projects match" for any project past the cutoff. The project-detail kanban also got several long-overdue fixes: the Review column actually persists tasks now (it was missing from the canonical status list, so any task moved to Review silently snapped back to To Do); the Edit Task drawer accepts the new column status on save instead of dropping it; the assignee dropdown lists every team-roster member including invited / not-yet-registered staff (it previously showed only seated User accounts, leaving most of the company invisible to the assigner); the drawer added Department (auto-populated from the company's configured departments) and Estimated hours fields; the Save button now reads in the brand teal instead of inheriting the section amber so it doesn't collide with the Review column color; the inline "Add task" input no longer paints a colored rim that stacks with the global focus ring into a double-ring artefact; rate-creating-tasks errors now surface inline next to the input instead of silently swallowing the failure. The mutating tasks endpoint also stopped sending Cache-Control: max-age=60, which had caused every status change to appear to silently revert for up to a minute. Bulk import is also now a panel-level action everywhere the chat tool already supported it: the Clients page header offers an Import button that opens a paste-or-upload modal with dry-run preview before commit, and the Projects page surfaces the same on the Portfolio (entityType: project) and Tasks (entityType: task) tabs, all sharing one server route that wraps the same row parser, dedup rules, and audit trail the chat path uses, with a companion CSV export endpoint that streams the same column shape the import accepts.
- You can now tell the assistant a lasting working preference (bullet points, casual tone, EUR by default, address me by first name) and ask it to remember; it confirms what it heard, saves it to your personal AI memory once you say yes, and respects it on every reply afterward. The same row appears in your AI Memory page where you can change or remove it any time.
Changed
- Buttons inside Command Center panels now consistently take the per-panel WCAG-verified accent signature (the darker per-panel hex meant for button fills, not the lighter pastel signal color used for chip fills and chrome) for primary action backgrounds and modal Create / Save buttons. The Record Meeting button on the cyan Meetings panel is the most visible example, but the same drift was present in proposals, invoicing, connectors, inbox, feeds, ai-memory, competitors, team-memory, timesheets, rate-sheets, clients, and the global Command Center error retry button. The Refresh button on the Projects Board tab also picks up the panel signature now instead of the lighter outlined treatment, so it matches the active Board pill above it instead of reading as a different color. The redundant New Task call-to-action inside the empty-state cup-of-coffee on Projects was removed; the page header still hosts the action, so an empty Tasks tab now reads as a quiet rest state instead of competing with the header for attention. A new drift detector flags any Command Center button that hardcodes the brand-teal background OR uses the lighter signal accent instead of the signature, so this class of mismatch cannot come back. Disabled buttons now use a grayscale-and-dim filter so a disabled action lands as a quiet dark pill regardless of which panel accent the active state used. The earlier saturate-only treatment kept the original hue at low intensity, which produced a visible yellow-amber cast on disabled orange (Projects) and a pale-mint cast on disabled teal (chat default), both reading as broken rather than off. Switched to grayscale 90 plus brightness 55 so disabled lands on neutral grey on every accent. The caution triangle in the AI Health audit-signals column now sits inline with its count instead of floating above the row baseline, because the icon size now matches the text size and the cell uses an inline-flex centered layout.
- Document templates now behave like real paper. Letterheads constrain content to the configured paper size (Letter or A4), the printable preview matches what comes out of the printer (no "fit to page" shrink), and headers and footers respect the same horizontal margin so the bands no longer go edge-to-edge while the body stops short. Letters also no longer print a redundant company-name and date line at the bottom of the page (the date already appears at the top of the letter and the company name in the signature block); the bottom-of-page contact line stays. Multi-page proposals paginate cleanly with section titles staying with their content. On a phone the preview keeps the paper aspect ratio and scales down to fit instead of forcing horizontal scroll. New workspaces also infer paper size, currency, locale, units, date format, and first-day-of-week from the browser language at signup, so a user opening Hubity from Madrid lands on A4 / EUR / Spanish / metric / Monday-first and one from Toronto lands on Letter / CAD / English-Canada / metric / ISO dates defaults are right roughly nineteen times out of twenty and can still be edited in settings.
- Theme polish across the dark surface. Chrome text speaks in the brand off-white instead of a foreign bleached white buttons, badges, chat bubbles, sidebar active rows, and notification pills all sit in the same warm cream voice as the rest of the dark mode. Checkboxes render the check itself in the cream rather than letting the browser auto-pick a dim glyph against the brand-teal fill.
- Chat output polish. When the assistant creates many tasks in one turn the chat now shows a single consolidated card with one View Tasks button at the bottom instead of one card-and-button per row, so a 12-task batch is no longer twelve buttons that all navigate to the same page. Right-click on a chat message now offers Copy alongside Reply, Save to Knowledge, and Erase. Confirmation cards for chat-driven mutations no longer surface raw database UUIDs as the row headline; when an update batch lacks names per row the card shows a generic "Update" label instead of an internal id like 4137ce82-8f13-... that means nothing to the operator approving the change. Bulk-action button labels (Export selected, Mark sent, Move N to Trash) also stop wrapping onto two lines inside the fixed-height pill on narrower viewports. The assistant no longer narrates internal steps before doing them "Let me look that up" / "I need to fetch X first" are suppressed so the user reads what was done, not the play-by-play. Image-attached turns also bypass the factual-lookup safety retry so uploading a screenshot to add tasks no longer trips the gate that asks the user to retype their question.
- The internal chat eval harness now reuses Anthropic prompt caching across the golden-set replay, so the production system prompt and tool list pay full input-token cost only on the first conversation in a run instead of on every one. The change cuts the weekly Monday eval-replay run from roughly fifty dollars of API spend to under ten without reducing fixture coverage or the upstream-model-drift detection window. Customer-facing behavior is unchanged; this only affects internal model evaluation.
- Operator reference for environment configuration is now complete: every variable read by application code (database URLs, encryption salts, push-notification VAPID contact, step-up auth window, WebAuthn relying-party, white-label branding overrides, MCP advanced features, maintenance mode, operator-script inputs) is documented in a single reference with an explicit fail-soft contract for what happens when each one is unset. Onboarding a new environment no longer requires grepping for env vars after the first incident. A late-evening polish pass also closed several small papercuts across modal buttons, evening / afternoon greeting grammar, Excel-paste handling in chat (tabular cells now arrive as text the assistant can act on, not an opaque screenshot), edit access on Projects task rows, the bulk-import confirmation card (now a readable numbered preview instead of a JSON blob), the chat double-bubble regression where the model attribution chip floated as its own empty bubble alongside the "Working on it" indicator whenever a tool emitted a pending-action card before any text had streamed, and the time-off request form which now auto-fills Number of days from the selected start and end dates with a Mon–Fri default (the field stays editable for weekend shifts, half-days, and observed holidays, and a small breakdown line names the assumption so the count never feels mysterious). The schema and admin API foundation for the next time-off auto-calc upgrade also landed: a workspace-level holiday calendar (US, Canada, UK federal-default seed available, with floating dates like Memorial Day and Easter Monday computed correctly forever; admins edit / add / remove freely after seeding), user-level work-pattern fields (working days as an ISO weekday array, working hours as HH:MM start / end, all nullable so existing accounts continue to read as Mon to Fri 09:00 to 17:00 in their existing timezone), and a presence row per user so a heartbeat-based online / away / busy / DND status can ride on top once the consolidated profile page surfaces the controls.
Fixed
- A bundle of small reliability and polish fixes from this afternoon. Focus rings on form text inputs across Command Center are now a single 2.5px outline inset by 1px instead of a colored border swap stacked with a 3px alpha halo box-shadow, so a focused field shows one continuous band rather than two stacked rings (most visible on the Brand Color hex input). A second sweep extended this to every remaining input that still painted its own colored rim or installed an inline onFocus / onBlur border-swap (Timesheet hours / description, Tasks panel quick-add, Live board sticky-note compose, Projects panel new-project name, Settings invite forms, Email domain add, Marketing brand fields, Knowledge add / version forms, Timesheets log-an-entry, Support and privacy-request forms, Login 2FA / verify code inputs, Onboarding profile fields, Rate-sheets billing fields). All of these now route through the global :focus-visible rule, so focus everywhere lands as the same single 2.5px hubity-teal outline instead of a color-tinted resting border that doubled up under the focus ring. Project cards on the Projects panel now navigate on the first click instead of needing a second tap, because the route bundle is prefetched as soon as the project list lands. The intent classifier and the post-response claim judge had 2-second timeouts that were too tight for cold-start cases on the Anthropic side; both budgets now sit at 5 seconds, which absorbs ordinary queue jitter without changing the hot-path budget visible to users. The gatekeeper auditor also now catches transient model-routing 404s from the Gemini provider and degrades to the existing "unverified" path instead of throwing through to the request, matching the original code comment.
- An invited user could land on the onboarding screen and stay there forever, with the spinner cycling on every refresh and no error showing. Root cause: when the profile-bootstrap fetch returned a non-2xx response (a 401 from a not-yet-propagated session, or a 500 on the server side), the page set its loaded flag to never and the spinner never came down. The flow now redirects back to /login on 401/403 (so the auth handshake can re-establish) and falls through to render the form on any other non-2xx (so the user can still submit their name and ToS acceptance instead of staring at an infinite spinner). Follow-up: the form-submit step also got a diagnostic upgrade. Earlier the only feedback on a save failure was the generic "Failed to save your info, please try again" with no Sentry trace, because the server-side guards that returned 401 silently never logged. The submit path now reads the structured error body (so the user sees the real cause), redirects to /login on 401/403 like the bootstrap, surfaces a wait hint on 429, and on the server side every "user row missing or inactive" 401 emits a Sentry warning AND a Vercel log line tagged with the failure reason so the next occurrence is visible without needing user reports. Second follow-up: an invited user whose name was already typed into the team roster used to land on the onboarding form blank, because the auth-side User row and the team-roster Staff row were independent objects that nothing reconciled on first sign-in. The verify-code step now links them by email at sign-in time (writing the Staff row's userId and copying firstName + lastName forward to User.name), the onboarding form pre-fills from that same name, and saves on either side now propagate to the other so the chrome (avatar tooltip, sidebar greeting) stays in sync with the team-roster spelling forever after. The profile bootstrap also now ships back the linked staff record's phone, job title, and location, ready for the onboarding form (and later the user's settings page) to pre-fill, so users no longer retype data the workspace already had. And a broader observability rail landed alongside: every API handler that returns a 4xx or 5xx after a successful auth check (the silent state-mismatch shape that hid the original incident) now goes through a shared helper that fires a Sentry warning and a structured log line in addition to building the response. Initial-guard 401 / 403 returns ("no auth header", "wrong role at the top") stay quiet because alerting on every one would be noise. A new ratchet detector blocks any commit that grows the silent-return count from the documented baseline, so the same kind of gap cannot quietly come back. The full backlog of three hundred and one mid-handler error returns has now been migrated through the shared observability helper so every silent-state-mismatch path emits a Sentry warning the moment it fires; the baseline locks at zero from here, so any new occurrence of the original failure shape is rejected at CI time instead of waiting for a frustrated-user report. The actual root cause behind the incident was a cross-layer interlock not visible to any single-route unit test: the bootstrap GET tripped the Terms-of-Service gate which returned a 451 response that discarded the CSRF cookie set by the same middleware, so the very next write 403'd on missing CSRF. The middleware now carries the CSRF cookie forward onto the 451 response, the onboarding form awaits Terms-of-Service acceptance before submitting the name (so the gate has released by the time the write reaches it), and a new shared cross-layer test harness boots the real middleware against synthetic browser sessions so any future gate-interaction bug is caught at unit-test speed. Every critical user journey from now on (sign-up, onboarding, first chat, billing checkout) gets a flow test under integration that walks the full request lifecycle against the harness, so the kind of gap that hid Casey's case never has to be discovered by a frustrated user again. The first three journeys (invited-user onboarding, logged-out sign-in entry, session heartbeat) are now under flow coverage, and a new operator-facing inventory document lists every journey with a pointer to its locking test and the capability it backstops. A bidirectional drift check ratchets the inventory against the test files on disk so the surface where engineers go to see what is locked under test cannot quietly stop reflecting reality. Industry-standard onboarding capture also landed: the signup form now asks for job title and phone (optional, pre-filled from the team roster for invited users) and an explicit marketing opt-in (un-pre-checked, GDPR-correct), and the company side gained country, primary use case, and referral source columns ready for the next form iteration. All optional, all editable in settings forever after, all captured once at signup so a future marketing campaign or HR report does not have to backfill via support tickets.
- Three follow-up fixes from PR review on today's shipping run. Proposals: when a proposal narrative contains multiple dollar amounts, the saved total now locks ONLY to figures paired with an explicit total marker ("total $X" / "$X total" / "fixed fee of $X" / proposal-recap parenthetical). Earlier attempts (first-match, max-based) both misfired. First-match locked to a per-line deposit when it appeared before the project total. Max-based locked to an unrelated larger figure (budget cap, prior quote, annual retainer) when the description referenced one alongside the actual total. The explicit-marker rule keeps the lock conservative and self-correcting in both directions. Chat batch summaries: the consolidated task-action card no longer renders a blank headline when the only operation is a delete or any other action that is not create / complete / update; it falls back to a count-based "N tasks changed" label. Translations: missing keys in non-English locales now fall back to the English string instead of rendering raw key paths like "ai_agent.tasks_n_changed".
- Bulk-deleting documents from the knowledge base now completes in a single round-trip instead of one query per row, which means a clear-out of dozens of stale docs returns immediately instead of occasionally taking up to half a minute and tripping the database timeout.
- The Trash list no longer renders the type column as a stacked two-line pill on narrow widths; the type now reads as plain colored text so the same color vocabulary still calls each row out at a glance without the badge wrapping awkwardly.
- Lifecycle email sequences (cancellation win-back, trial-ending nudges, onboarding follow-ups for accounts that have not uploaded a document by day 5, prolonged-inactivity reminders) now run on their own schedule even when no other emails happen to be due, and a subscription cancellation reliably hands off to its win-back fanout before the request finishes instead of racing the response shutdown. The email cron also no longer crashes when no transactional emails are due in environments where the email provider key is missing; it simply skips the send loop and runs the trigger checks. Customers who churned, paused, or stalled in onboarding now get the message at the moment the trigger says they should.
- A pair of accessibility and operator-clarity tweaks. The agent run row now only offers the rollback control on runs that actually have something to roll back, so canceled runs no longer dangle a button that completes silently with zero work and an operator never clicks an action that appears to succeed while doing nothing. The severity picker on each proactive notification rule is also now announced to screen readers with its full intent ("Minimum severity for Deal coaching") instead of only its current value, so the setting is operable for assistive-tech users when several rules sit on the same page.
Security
- Every assistant surface that names workspace data now passes through a guard before reaching the user. The morning briefing checks every proper-noun entity against the actual workspace data the briefing was built from (projects, tasks, teammates, calendar events, announcement authors, competitors, polls, knowledge titles, connector observations, training disciplines, drip campaigns, feed items) and drops bullets that mention an unrecognised name. The chat surface runs the same detector as a fourth lane in its post-response inspection (alongside the existing nav-fabrication, citation-authenticity, and numeric-grounding lanes); fabricated entity mentions are logged, alerted, and persisted to the internal drift dashboard so the rate is observable. Earlier, when a workspace had zero active projects the language model could fill the silence with plausible-sounding names from training data; that path is now closed end-to-end across briefing AND chat with a single shared rule set.
- When the assistant pulls financial data from an uploaded image (proposal totals, invoice amounts, expense rows, rate sheets), it now lists every extracted amount in plain text and waits for explicit user confirmation before writing anything. Image OCR routinely misreads digits and one slip can turn $80,000 into $10,680,000; this gate makes the read explicit so the user catches errors before they land in the record. Pasting the same data as text bypasses the gate because OCR risk is no longer present.
- Closing your account now also redacts every personal AI-memory fact the assistant kept about you in the same transaction as the account delete, with the matching audit-trail row written through the same transaction so the two commit or roll back together. A deleted user has no working memory left in the prompt cache, and a partial failure can no longer leave a committed audit row claiming a redaction happened that did not. The redaction is preserved (not hard-deleted) so a reviewer can still see "this account was deleted on this date" without recovering the underlying preferences.
- Every workspace endpoint that accepts a JSON body now validates every incoming field against an explicit shape before any database write. Twenty-three routes converted in the most recent sweep on top of the eleven that landed earlier, with the remaining protocol-level surfaces (OAuth + SAML form-encoded callbacks, MCP JSON-RPC dispatchers) explicitly carved out via narrow path rules carrying inline comments naming the protocol. Invalid payloads now reject at the boundary with a clear field-level error rather than landing in a query and surfacing as a confusing 500. The validation baseline is at zero. Sixty-four financial / configuration mutations (competitors, expenses, prompt snippets, invoice creation + updates, budgets + budget items, documents, departments, automations, branding, letterhead theme, company logo, LLM provider config, approvals, billing payments, files, invitations, knowledge, lessons, meetings + minutes, playbooks, policy, polls, roles, slug, staff invites, subscription, tasks, time entries) now also write a complete audit-trail row including the workspace id, so a security reviewer or admin investigating a change can always tell who touched what and when. Two false-positive tenant-isolation entries (public OpenAPI spec and AI-transparency discovery doc) have been moved from the rolling baseline to explicit exemptions in the detector, with comments naming why each route is genuinely public; that baseline is now at zero too.
April 26, 2026v9.99.0

Trust-first AI, bulk everywhere, and a richer billing identity

Added
- Every grounded numerical claim now renders with a citation marker linking back to its source row, time-sensitive answers carry an "as of" footer, and you can click any number in chat to see exactly which tool produced it and what arguments it ran with.
- A second-pass auditor reviews high-risk responses for ungrounded statements, an output-anomaly detector flags numbers that diverge sharply from the workspace baseline, and self-critique runs automatically on any high-stakes recommendation regardless of plan tier.
- The assistant now proactively asks for thumbs-up/down on shaky answers instead of waiting for users to report them, and the operator team has a new weekly "what the AI got wrong" view covering grounding fallbacks, denied actions, and recurring failure shapes.
- Bulk import lets you paste rows or upload a CSV to create staff, tasks, time entries, expenses, and clients in a single move; bulk actions across every Command Center panel let you select many rows and approve, reject, archive, restore, or delete in one step.
- Manager and admin approval inboxes now batch-approve or batch-deny across PTO, time entries, and expense queues.
- Project setup now captures engagement structure so utilisation and profitability roll-ups know whether a project bills hourly, fixed-fee, or retainer.
- Client billing identity is now a first-class object with PO numbers, tax rules, and per-client billing addresses; profitability roll-ups scope by these too.
- Proactive AI surface: the assistant nudges you when something needs attention and shows a visible inbox of pending agent approvals. Admins now also get inline pause / resume / cancel / rollback controls on every in-flight agent run, so an operator can intervene without waiting for the run to finish or asking engineering to flip a flag.
- Numbers pulled from outside the workspace (currency conversions, market quotes, weather, news) now carry a "from <provider> as of <time>" footer so users can see at a glance that the figure is external and could be moments out of date.
- Forecasts now show a confidence band: instead of a bare "$124k", the answer reads "$124k ± $18k (P10–P90)" with the assumptions named, so users can challenge the parts they actually disagree with.
- High-stakes questions involving money, legal exposure, or people changes are now reviewed by a second model in parallel, and the answer is only presented as confident when the two agree. Disagreement surfaces both views with a "please confirm with a primary source" disclosure.
- You can now tell the assistant to forget a specific fact it has remembered (a wrong office address, a stale preference, a misheard name) and the directive sticks: future replies will not surface that fact even if it gets re-ingested by a later correction. Personal data exports now include the same memory entries the assistant relies on, so a self-service download is a true Article-15 record of everything the AI knows about you.
- Operators get a new weekly "what is getting worse" digest that buckets thumbs-down feedback by intent and reason and shows the week-over-week delta, so a fast-rising failure shape surfaces before it becomes a support ticket. Proactive notifications now expose tunable thresholds per user: deal coaching takes a minimum deal value and a "days without activity" floor, churn-risk takes a sensitivity score, and stale approvals take a wait-time floor, so each operator only hears the alerts they actually want to act on. Lifecycle email sequences now fire on real product events (subscription cancellation, trial-expiring-in-7-days, signup-with-no-documents-by-day-5, prolonged inactivity) instead of waiting for a manual operator nudge.
- Auto-generated meeting minutes now pass through the same safety, personal-identifier, and high-stakes review gates as chat answers BEFORE they are shared. Drafts that fail review are held with a clear reason for the operator instead of distributed silently.
Changed
- The adversarial-prompt guard now defaults ON in every workspace, and changes to chat behavior now block at PR review when they regress the golden test set instead of just logging a warning.
Fixed
- Owner role no longer hits permission edges that were blocking salary self-view, and helper consistency across permission gates was tightened so the same answer comes back from every entry point.
- Trash recovery is resilient to partial cascade failures so a single broken row no longer aborts the whole restore. Knowledge documents now soft-delete to the same central Trash as every other entity in the product, with a 30-day restore window; the previously inline knowledge trash list is replaced by a single "View &amp; restore" pointer. Proposals join the central Trash too. Deleting a proposal lands it there with a per-row Restore for 30 days instead of vanishing forever. The Trash itself now shows a colored badge per record type so a long restore decision is quick, plus filters by who deleted the row and how recently, and extra sort options for name, type, and deleter.
- Clients table no longer overflows on small screens, and the residual Clients tab inside Invoicing was removed to match the navigation reorganisation.
- Creating a project, task, staff member, client, deal, poll, invoice, or competitor that already exists now opens a "duplicate detected" prompt with clear choices: open the existing one, create a duplicate anyway (where it makes sense), or pick a different name. The previous behavior was a generic error string or, worse, a silent no-op. Bulk-import retries upsert by name and respect the source row’s status capitalisation. The "All" filter pills on Clients and Projects also stop silently behaving like "Active" and return every row across statuses.
- The chat Stop button now actually halts the assistant server-side, a client-row import shows a "Save to Clients" action chip instead of the misleading "Save to Rate Sheets" label, and the projects grid view has the same bulk-archive and Move-to-Trash actions the list view already had. Proactive notification cards no longer surface engineering jargon or a literal "[object Object]" on the rate-limit line; every alert now reads in operator language. The severity-threshold picker on each proactive trigger now matches the rest of the Command Center’s dropdown styling. The AI Memory table now shows a friendly "About" label ("Preferred client") instead of the raw snake_case key. Usage panel plan name now reads "Starter" rather than a flat capitalised slug. Bulk-select with Move-to-Trash now works on the Polls page, the Deals board view, and the Competitors page; "cannot be undone" copy on draft-invoice deletion is replaced with an honest "Move to Trash" message because draft invoices are now genuinely soft-deleted with a 30-day restore window. Inline replies inside the Messages panel now offer the same @mention autocomplete the main composer already had.
April 25, 2026v9.83.0

Detail pages, meeting transcription, integrations, and faster chat

Added
- Detail pages for every record: click any client, deal, expense, poll, or competitor for a full overview with status, key fields, related work roll-ups, and stage progress.
- My Day now includes a time-off balance card, and managers see a "Who is out" four-week visual band so leave overlap is obvious at a glance.
- Tasks open in a side drawer with description, an editable comment thread visible to the whole workspace, and attachments.
- Meeting audio upload with automatic transcription: drop a recording into a project and the assistant turns it into a searchable transcript.
- Integrations page with connector cards for Slack, Gmail, Drive, Linear, HubSpot, and Salesforce; connect, callback, and revoke flows are wired end-to-end.
- Streaming chat now uses a prompt cache on the base system prompt for noticeably faster first tokens and lower per-turn cost.
- Per-team AI memory so brand voice and workflow preferences can be set at the team level instead of per-user.
- Provider gating so admins can pin which AI providers their workspace is allowed to call.
- Operator visibility into model health, routing distribution, and per-tier ledger entries.
Changed
- Six small chat polish bugs in citations, source pills, and the verification badge were resolved together for a calmer reading experience.
Security
- Outbound messages and exports now strip regulated identifiers (national IDs, bank details, tax numbers) before they leave the platform.
April 24, 2026v9.75.1

Forecasts, agents, charts in chat, region routing, and BYOK audit trail

Added
- Forecasts dashboard: deal close probability, client churn risk, and 30/60/90-day cash runway, with inline charts available right in chat.
- Goal-driven agents: a runtime with budgets, approval gates for risky steps, and an observability page so admins can see what every agent did and why.
- Charts in chat: ask the assistant for a trend or breakdown and the answer renders the chart inline without leaving the conversation.
- PII redaction is now wired through every external send and export, so personal identifiers never leak by default.
- Per-region routing so EU workspaces can pin every model call to EU residency.
- Tree-of-thought reasoning option for harder analytical questions when accuracy outweighs latency.
- Time-to-first-token recorded on every chat trace so latency regressions surface immediately.
- Bring-your-own-key compliance fence: the audit trail now records provider, tier, and selection reason on every AI ledger row.
- Routing matrix sign-off path so a workspace owner can approve which model handles which category of request.
- Connector OAuth provider catalog covering Slack, Gmail, Drive, Linear, HubSpot, and Salesforce.
- Golden test set grew past four hundred conversations, anchoring the daily regression replay.
Fixed
- Inline charts render correctly on the first message; residency policy loads cleanly; retention errors surface with a useful message instead of a blank page.
- Five chat issues reported through error monitoring plus a roster miscount root cause cleaned up together.
April 23, 2026v9.45.0

Workspace knowledge index, grounded synthesis, planner-driven chat, design-system sweep

Added
- Workspace knowledge index: a structured catalog of your data (clients, deals, projects, files, meetings) that the assistant searches and cites instead of guessing.
- Grounded synthesis: every answer is backed by traceable evidence, with claims linked to specific source documents and rows.
- Planner-driven chat: complex requests are broken into ordered steps the assistant works through, instead of guessing in one pass.
- Factual statements are now checked against the catalog before the response renders, so the assistant cannot present a number it cannot back up.
- Safe query compiler that converts natural-language data questions into safe parameterised queries.
- "Analyze company" assistant tool with cross-record summaries, trends, and outliers.
- Golden test set with five hundred questions across the major workflows and a per-day accuracy ratchet that catches regressions automatically.
- Public connector catalog with submission-ready endpoints, documentation, and drift guards for the partner program.
- "About this section" accordion on every Command Center panel, ending with a clear access line so anyone opening a panel can see who can view, who can edit, and which data is personal vs shared.
- Workspace Usage panel now explains what a token is, how the daily average is computed, how the per-member breakdown works, and when counters reset.
Changed
- Full design-system sweep covering palette, motion, sketch vocabulary, focus rings, and drift guards across every surface.
April 22, 2026v9.31.0

Knowledge index pre-loading, roster assignment, and a quality pass

Added
- Tasks can now be assigned to anyone on your Team Roster, not just people who hold a login seat.
- Operator pre-loader for the AI knowledge index so search covers older content immediately, no staged recrawl required.
- The assistant can read the full text of a specific knowledge chunk via a paired chat tool with the existing knowledge search.
- Polymorphic assignee on integration callbacks so connector events can be routed to a user, team, or workspace owner.
Changed
- Quality pass: tool-set prompt pruning, UI bug fixes across the Command Center, plus an internal regate sweep and overlap cleanup.
April 21, 2026v9.16.0

Image and table understanding, plus AI Memory editing

Added
- The assistant can now describe images you share and parse pasted CSV or pipe-delimited tables into clean structured rows.
- Every chat turn is recorded for admin review, so it is easy to see what the assistant did and why.
- The AI Memory page now lets you add preferences, named entities, terms, or goals directly from the page.
April 20, 2026v9.5.52

Offline coverage everywhere, plus a theme picker

Added
- In-progress form text is preserved across tab closes, crashes, and connection drops.
- Most pages now show your last-seen version when offline, including polls, inbox, knowledge, deals, budgets, time off, timesheets, and company files.
- New in-app theme picker with System, Light, and Dark modes.
April 19, 2026v9.5.5

Every marketing section now speaks in one serif voice

Changed
- Section headings across every homepage panel (What it does, Why it's different, Features, Integrations, Capabilities, ROI, Use cases, Pricing, Trust, Employees, Live demo, Product tour, Footer) all land in the same Lora serif.
- The animated opacity pulse on the emphasised heading word was swapped for a static brand-teal pigment.
- The homepage hero now reads in the Lora serif display, matching every other hero on the site.
April 18, 2026v9.1.2

Edit polls, expenses, and draft invoices from chat

Added
- Ask the assistant to fix an existing poll.
- Ask the assistant to edit an expense you already logged.
- Ask the assistant to remove a draft invoice.
April 17, 2026v8.90.2

Long conversations stay coherent across many turns

Added
- Very long conversations now maintain a separate long-arc summary in addition to the recent thread, so context from earlier in the chat is not lost.
April 16, 2026v8.78.0

Smarter fact checking and verified answers

Added
- When you mention a specific fact earlier in a conversation, the assistant silently re-checks it against your data before relying on it many turns later.
- An opt-in "verify before sending" mode holds the assistant's response until it is reviewed for accuracy, then sends the full verified answer in one go.
April 15, 2026v8.72.5

Improvements

Added
- Deleting a project now moves it to trash for 30 days, where managers and above can restore it instead of rebuilding it from scratch.
- When you try to create a project with the same name as one in trash, the app offers an inline Restore action instead of silently blocking the save.
- The chat assistant has matching delete and restore tools for projects, with explicit confirmation before any destructive action.
April 14, 2026v8.65.0

Improvements

Added
- Onboarding now includes a quick "Tell us about your company" step between your name and your website.
- Workspaces can now be placed under a monthly AI spend cap measured in real dollars, not tokens.
- Meetings that never finished finalising (closed tab, lost connection) now show a clear notice and a "Finalise now" button when opened.
April 13, 2026v8.46.1

Ask the assistant about team PTO capacity

Added
- Managers, finance, HR, admins, and owners can now ask the assistant about approved time-off for any date range, for example "how much PTO is sales taking next sprint" or "who took the most vacation this quarter".
- The Inbox now shows each pending request's department as a small tag next to the requester name, and when your workspace has more than one department, a filter row lets you narrow the list to just that department's items.
- The Timesheets summary adds two new cards: PTO Hours for the current week (drawn from approved time-off) and Capacity Utilization, which divides billable hours by logged hours plus PTO hours.
April 12, 2026v8.34.1

Improvements

Added
- Every assistant response now shows a small attribution noting which model answered and when, with the time of day shown so multiple responses on the same day are easy to tell apart.
- The assistant selects the best available model automatically, starting with the highest-intelligence option and scaling down efficiently based on task complexity.
April 11, 2026v8.25.1

Subscription lifecycle clarity in billing

Added
- Scheduled cancellations show clearly in billing settings with the exact cancellation date.
- One-click reactivation lets admins undo a scheduled cancellation without navigating back to the billing portal.
- Paused subscriptions show the correct status and redirect to the billing portal to resume.
April 10, 2026v8.20.0

Rate sheet trash and restore

Added
- Deleted rates now move to a Trash section on the Rate Sheets page instead of being permanently removed.
April 9, 2026v8.19.9

Language preferences and multi-language website

Added
- You can now choose your preferred language for the Hubity website from your profile settings.
- Companies can now connect their own AI provider keys, so the assistant uses your preferred provider.
- Self-hosted storage connectors (Synology, QNAP, TrueNAS, Unraid) let teams surface on-premises files directly from the assistant.
April 8, 2026v8.10.0

Improvements

Added
- Integrations page consolidates connected apps, data sources, and activity into a single overview with real-time status.
Changed
- Chat autocorrect now catches significantly more common misspellings, including transpositions, doubled letters, missing letters, and adverb endings.
- The action confirmation card now appears after the full response is shown, so you can read the complete context before approving.
April 7, 2026v8.6.0

Reliability and session handling improvements

Changed
- Background services are more reliable during peak traffic and deployment transitions.
Fixed
- Brief interruptions when switching between devices have been resolved.
April 6, 2026v7.81.0

Streaming, memory, semantic search, and content guardrails

Added
- Hubity now streams responses token by token as they are generated, so you see the answer appearing in real time rather than waiting for the full response.
- Cross-session memory: Hubity remembers facts from your conversations, preferred projects, and communication preferences across sessions.
- Knowledge base search now uses semantic similarity.
April 5, 2026v7.53.0

Improvements

Added
- The assistant now recognizes over 80 multi-step workflows spanning finance, projects, meetings, staff, knowledge, analytics, competitive intelligence, marketing, and daily operations.
- When the assistant is uncertain which workflow you mean, it uses semantic similarity to find the best match, resolving ambiguous phrasings that keyword matching alone would miss.
- Conversation context now carries across turns.
April 4, 2026v7.28.0

Improvements

Added
- Payment reconciliation: say "reconcile outstanding invoices" to review partial and unpaid invoices and record payments in a confirmed batch.
- Tax prep export: ask "prepare our tax records for 2025" to compile all expenses, invoices, revenue, and unbilled amounts for a period into one view ready for your accountant.
- Recurring task setup: say "set up a weekly recurring task" to create a repeating task and optionally save it as a reusable playbook template.
April 3, 2026v7.18.0

Assistant reliability: every save is now verified

Added
- When importing team members from an image or document, a clear warning now appears if the "Reports to" field could not be set because the manager was not found in the directory.
- A new AI Tool Health page in the Command Center shows the success and verification rate for every assistant action over the last 30 days, so you can see at a glance which tools have had partial saves or mismatches.
Changed
- The assistant no longer confirms a change was saved until the database has verified the record.
April 2, 2026v7.17.0

Smarter assistant with fewer missed fields

Changed
- The assistant now explicitly acknowledges every optional field when saving tasks, projects, meetings, announcements, and invoices.
March 31, 2026v7.10.0

Role-based navigation and custom access controls

Added
- Admins on Enterprise plans can now create custom roles that grant specific pages to employees without elevating their full access level.
- Deleted tasks, meetings, and competitors can now be restored by asking the assistant.
- Announcements can now be removed via chat.
March 30, 2026v6.11.0

Improvements

Added
- Privacy Request center lets consumers submit access, deletion, correction, portability, and opt-out requests directly from the website.
- "Do Not Sell or Share My Personal Information" link added to the site footer as required by CCPA.
- Global Privacy Control (GPC) signals are now detected and honored automatically.
March 29, 2026v6.8.0

Improvements

Added
- Automated controls evaluate real system data: audit log health, MFA adoption rate, encryption key status, DSAR SLA compliance, session management, and account lockout protection.
- Manual controls are seeded with guidance notes so reviewers know exactly what to document.
- Compliance scores are calculated per framework and displayed as visual progress indicators so gaps are immediately visible.
March 28, 2026v5.92.0

Smarter responses with source citations

Added
- Responses that draw from your knowledge base now include "View Source" buttons so you can jump straight to the original document.
Changed
- Image analysis is now more precise, with zero tolerance for guessing.
- Financial calculations now show full working: line items, subtotals, tax, and totals with cited sources.
March 26, 2026v5.67.0

UI consistency overhaul

Added
- Translated over 1,800 strings across 11 languages including German, Spanish, French, Italian, Japanese, Korean, Dutch, Polish, Portuguese (BR and PT), and Turkish.
Changed
- All toggle switches, status badges, and navigation buttons now use standardized shared components for a consistent look across every screen.
- Hubity logo is now centered in the top bar on both desktop and mobile.
March 25, 2026v5.57.0

Visual polish across pages

Fixed
- Special characters and icon rendering now display consistently across the app.
March 24, 2026v5.56.0

Performance monitoring and clearer error messages

Added
- Real-user performance monitoring tracks page load speed, visual stability, and responsiveness, with alerts when pages fall outside target thresholds.
Changed
- Validation errors now identify the specific field that needs correction.
March 22, 2026v5.31.0

Subscription and billing improvements

Added
- Churn dashboard now shows expiring trials and past-due subscriptions.
- Tasks can now be assigned to team members and linked to projects directly from chat.
- Meeting notes now extract action items automatically and offer to convert them into tracked tasks.
March 21, 2026v5.26.0

Safer deployments and faster query monitoring

Changed
- Deployments are safer and more predictable, with stricter quality enforcement on the server.
- Slow queries are detected and surfaced for review automatically.
March 20, 2026v5.15.0

Live operations dashboard for admins

Added
- Live incident stream surfaces events as they happen with a pulsing LIVE indicator.
- Engineering performance metrics track deployment frequency, lead time, mean time to recovery, and change failure rate.
- Service dependency map shows how platform services connect, with blast-radius analysis when something goes down.
March 19, 2026v5.0.0

Hardened tool integrations

Added
- Connected tools advance through canary, beta, and stable stages with automated health checks before reaching full production access.
- Every tool action carries a signed receipt including arguments hash, policy decision, and blast-radius assessment, exportable for compliance.
- Connected tools request scoped, time-limited credentials instead of long-lived tokens, with full delegation tracking.
March 18, 2026v4.269.0

Integration safety and request verification

Added
- Connected tools now automatically renew their credentials in the background before they expire, so connections stay active without manual intervention.
- Integrations can now authenticate using certificate-based security for services that require it.
- Connect tools using secure one-click authorization directly from the integration settings.
March 17, 2026v4.237.0

Platform upgrades and passkey improvements

Added
- New connector system lets your organization plug in external data sources and specialized tools.
- Every piece of external data includes a provenance badge showing where it came from, when it was retrieved, and how confident the source is, so you always know what you can trust.
- Admins can manage which connectors are available and control exactly which roles can access each data source and its tools.
March 16, 2026v4.191.0

Project management and smarter save actions

Added
- Projects now include Notes, Start Date, and Tags fields for richer project setup.
- Projects can now be deleted from the edit screen by the creator or project manager.
- Image thumbnails in chat are now clickable to view full size.
March 15, 2026v4.187.0

Governance dashboard and workflow safeguards

Added
- New Governance dashboard groups every safety rule by category for easier review.
- Safeguards for autonomous and multi-step workflows include reconciliation checks and rate limits to prevent runaway automation.
- Strictness profiles let companies choose Standard, High-Assurance, or Regulated enforcement levels.
March 14, 2026v4.164.0

Inline task editing and project status updates

Added
- Saving detected information (team roster, knowledge) now shows a loading indicator while the save is in progress.
- Tasks can be edited inline: change title, due date, priority, and assignee without leaving the panel.
- Projects can be edited after creation and marked as completed or on hold directly from the expanded view.
March 13, 2026v4.135.0

Enterprise-level accessibility, SEO, and mobile polish

Added
- Feature pages now include rich FAQ sections for improved discoverability in search results
- Social sharing cards now display correctly when feature pages are shared on Twitter and other platforms
- Mobile navigation now includes a full-screen menu drawer accessible from a hamburger button on smaller screens
March 12, 2026v4.108.0

Production hardening and code quality improvements

Added
- Every document opened in the knowledge base is now tracked in the compliance audit trail, not just sensitive documents
- Financial data changes (expenses, revenue) now create a full audit trail with timestamps and user identity
- Data exports (CSV downloads) are now logged for compliance reporting
March 11, 2026v4.84.0

Improvements

Added
- New Marketing Studio in the Command Center for generating ready-to-post content and platform-optimized images across all major social channels, plus branded templates pre-filled with your company info
- Training Mode lets employees get real-time coaching feedback during live calls across six disciplines, with session scores and manager visibility into training history
- Workflow Guides section with eight step-by-step guides covering proposals, billing, meetings, onboarding, marketing, and more
March 7, 2026v4.41.0

Accessibility audit and brand polish

Added
- Logo mark in email headers with cross-client compatibility
- Translation support for all in-app components across 12 languages
Changed
- Improved color contrast throughout the application for better readability
March 6, 2026v4.11.0

Sidebar navigation, onboarding, and integrations

Added
- Sidebar navigation with Calendar, Meetings, Live Board, and The Hub sections
- Multi-step onboarding with team detection and website domain setup
- Trash and restore for team members
March 5, 2026v3.75.0

Trust Center, project board, and compliance

Added
- Trust Center page showing security and compliance status
- Live project board with real-time updates
- Turn any conversation into a reusable playbook
March 4, 2026v3.66.0

Feeds, status page, and mobile redesign

Added
- Feeds: subscribe to any URL and track changes automatically
- Save feed content directly to your knowledge base
- Public status page with 30-day uptime history
March 3, 2026v3.50.0

Billing improvements and email compliance

Added
- Seat request flow: request access and notify your admin automatically
- Support page with contact options
- Billing tab in settings for managing your subscription
March 2, 2026v3.40.0

Error tracking, Roadmap, and operations tools

Added
- Public Roadmap page
- Operations playbook with runbooks and checklists
- Admin access button for team members with elevated roles
March 1, 2026v3.29.0

12-language support and open signups

Added
- Full internationalization: 12 languages with in-app language switcher
- Business health dashboard with growth guidance
Changed
- Signups opened to all users (beta period ended)
February 28, 2026v3.0.0

Rebrand to Hubity

Added
- New brand identity with teal color palette and organic icon design
- Press page with downloadable brand assets
- Operations dashboard for company admins
February 27, 2026v2.47.0

Subscription billing and account management

Added
- Full subscription billing: checkout, customer portal, and plan management
- Dedicated Knowledge hub page
- Account deletion with 30-day recovery period
February 26, 2026v2.40.0

Knowledge hierarchy and data protection

Added
- Hierarchical knowledge system with AI-assisted document editing
- Source verification for regulatory documents
- Operations Hub with team guidance and onboarding tips
February 25, 2026v2.35.0

Company operations dashboard

Added
- Operations dashboard for managing company-wide activities
- Org chart with role-based permissions display
Changed
- Chat input bar redesigned for better usability
February 24, 2026v2.34.0

Voice selection, analytics, and daily briefings redesign

Added
- Text-to-speech with multiple voice options
- Company analytics dashboard
Changed
- Daily briefings redesigned with streamlined navigation
February 18, 2026v2.25.0

Projects, messaging, and team tools

Added
- Project tracking with milestones and approvals
- Direct messaging between team members
- Onboarding email sequence for new signups
February 17, 2026v2.23.0

Push notifications and document editing

Added
- Push notifications for briefings and alerts
- Task assignment to team members
- Pin important conversations in history
February 16, 2026v2.22.0

Accessibility and SEO improvements

Added
- Improved search engine discoverability
Changed
- Reduced-motion support for users who prefer less animation
- Landing page accessibility improvements
February 15, 2026v2.21.0

Calendar awareness, file storage, and bug reporting

Added
- Calendar-aware assistant: ask about your schedule in chat
- Multiple calendar feed support
- Company file storage with plan-based limits
February 14, 2026v2.19.0

Enterprise login and two-factor authentication

Added
- Sign in with Google or Microsoft
- Passkey (fingerprint/face) login
- Two-factor authentication with authenticator app and recovery codes
February 13, 2026v2.15.0

Voice conversations, web search, and task management

Added
- Listen to briefings and chat responses with text-to-speech
- Hands-free voice mode with wake word activation
- Web search with source citations in responses
February 12, 2026v2.5.0

Public website and task dashboard

Added
- Landing page with features, pricing, and trust sections
- Task dashboard for tracking company activities
- Terms of service and privacy policy pages
February 11, 2026v2.1.0

Plans, briefings, and team management

Added
- Pricing plans with tiered features
- Morning briefing with personalized daily summary
- Role-based access control for team members
February 10, 2026v1.8.0

Dark mode, knowledge intelligence, and team roster

Added
- Dark mode with theme preference saved to your account
- Knowledge intelligence panel with category breakdown
- Automatic update detection with one-tap activation
February 9, 2026v1.0.0

Core chat, knowledge base, and authentication

Added
- Chat interface with animated assistant
- Sign in with email verification code
- Knowledge base with auto-categorized uploads
February 8, 2026v0.1.0

Initial release

Added
- Business productivity hub with conversational assistant
- Mobile-responsive app that works from your home screen

See everything Hubity can do on the Features page.

© 2026 HubityPrivacyTermsSecurity