Skip to content

Changelog

What we shipped, when, and why.

Updates land here as they ship. We don’t bunch them into “releases” — every meaningful change is its own entry.

Subscribe via RSS

  1. Feature

    Booking pages — shareable links for direct self-serve scheduling

    Each team member can now create event types (30-minute intro, 60-minute deep-dive, etc.) with configurable availability windows, minimum lead time, and advance booking limits. Share the link — schedule.nicoleassist.com/your-handle/member/event — and Nicole handles the rest: checks free/busy across every connected calendar, blocks the time, creates the calendar event with any conferencing details, and sends confirmation emails and a calendar invite to both sides.

    Tenant admins can brand the booking page with a logo, accent color, header, and footer text. Each member controls their own availability on/off; admins can disable booking for any member workspace-wide. Custom questions let you collect whatever you need before the meeting. Self-serve booking runs through the same calendar layer as the email path — free/busy is always current.

  2. Feature

    Auto-negotiate within organization — skip back-and-forth for internal meetings

    When Nicole detects that both parties are in the same Microsoft 365 organization — matched by M365 tenant ID, shared email domain, or Nicole workspace membership — she can find the first mutually free slot and book it directly, skipping the email round-trip entirely. Opt in under Settings → Auto-negotiate within organization.

    Detection is conservative: all three signals have to be consistent before Nicole acts. If no slot is found in the configured window, or if any of your rules block the candidate times, it falls back to the normal draft-and-approve flow. The existing safety gates (sensitive topics, low confidence, contact policy, platform kill-switch) still apply exactly as before.

  3. Improvement

    Calendars + conferencing folded into Settings; sidebar trimmed

    Calendar connections, Teams, and Zoom all live under Settings → Calendars & conferencing now. The standalone sidebar entry is gone — fewer top-level routes, one place for everything that affects how Nicole books.

    OAuth round-trips land at Settings#calendars with the connection card visible. Internal links and dashboard CTAs all point at the new section. The sidebar is now: Dashboard, Threads, Rules, Contacts, Audit, Help, Settings.

  4. Feature

    Auto-negotiate scheduling with other Nicole-managed accounts

    When the other side of a thread is also a Nicole Assist account in your contacts, you can opt out of the dry-run draft step. Two assistants negotiate directly — humans see the result via the audit log instead of an approve queue. Off by default; flip it on under Settings.

    Asymmetric: your setting only affects your side. The peer can still be on full manual review. Capped at 3 rounds before escalating to humans, and existing safety gates (sensitive_topic, low confidence, contact_policy blocks) always still escalate. Calendly bookings never auto-confirm.

  5. Improvement

    Customizable signature + properly branded transactional emails

    Settings → Email signature lets you replace Nicole's default sign-off with your own block. Appended verbatim to every counterparty-facing email; internal questions to you don't use it.

    Verification + password-reset emails got a proper visual treatment — branded card, real CTA buttons, hidden inbox-preview text. Scheduling emails (Nicole talking to a counterparty) stay deliberately minimal so they read like personal correspondence, not a newsletter.

  6. Feature

    Contacts page — manual entry + one-click Microsoft 365 address book sync

    New Contacts surface in the sidebar. Add people manually, or sync your entire Outlook address book in one click. Operator edits are never overwritten by re-syncs; only null fields get backfilled.

    Contacts.Read is requested incrementally — only when you opt into the sync feature, never as part of the initial M365 connection. So accounts that don't use sync never see the prompt.

  7. Feature

    Ask Nicole to schedule for you — operator delegation, with question buttons

    Email Nicole at your scheduling address with something like "set up 30 minutes with Riley next week" and she'll reach out to Riley directly — not back to you. The new send_outreach tool gates on contacts (verified contact rows only), so Nicole can't email someone you haven't approved.

    When Nicole has a question for you, she emails it directly with click-to-reply buttons for fixed-choice answers ("Personal" or "Work calendar?"). Click the button, your email client opens with the answer pre-filled, send. Nicole resumes the original task.

    We also retired the in-dashboard chat surface — the email-driven model covers everything chat did, and one fewer place to context-switch.

  8. Feature

    Contact policy: control who Nicole talks to

    New rule type. Three modes: allow everyone (default, preserves existing behavior), allowlist only (strictest — only contacts you've allowlisted get through), or blocklist mode (allow everyone except people you've blocked). Domain-level always-allow / always-block lists stack on top of any mode.

    Two safety options worth turning on: require DKIM verification (your always-allow domains only match when DKIM proves the email came from that domain — defends against From-header spoofing) and auto-reply when blocking (sends a polite "not accepting requests" reply, with a bot-filter so you don't feed feedback loops).

    Inbound enforcement runs before the agent loop fires. Outbound enforcement runs at send time, so flipping to allowlist-only retroactively kills in-flight drafts to off-allowlist recipients.

  9. Feature

    Zoom — connect your account, attach Zoom links to every video event

    Connect Zoom under Settings → Calendars & conferencing. Pick Zoom in Virtual meetings and Nicole creates a scheduled Zoom meeting for every video event, appending the join URL, passcode, and meeting ID to the calendar invite.

    OAuth, encrypted refresh tokens (per-tenant DEK), transparent token refresh on expiry, and a disconnect button that automatically flips the default away from Zoom so you can't accidentally book video events with no link. Microsoft Teams still works for M365-connected tenants — pick whichever your customers expect.

  10. Feature

    Three-layer tenant isolation test suite gates every PR

    We've made tenant isolation a non-negotiable invariant. The new test suite spins up a real Postgres container, seeds two tenants with overlapping data, and runs every cross-tenant access pattern we could think of — direct queries, RLS bypass attempts, async-context leaks across loop iterations.

    Any cross-tenant read or write that returns another tenant's row fails the build. We can't ship code that breaks isolation, even by accident. The same suite reruns on a nightly schedule against the production database (read-only) so config drift surfaces fast.

  11. Improvement

    Per-tenant audit log JSON export from the dashboard

    Every audit-log row Nicole writes is now one click away from a JSON download. Filter by date range, actor, or thread — the export contains exactly the rows your filter resolves to. Useful for compliance reviews, post-incident reads, or just keeping your own internal record.

    Exports run as a streaming response so even a year's worth of activity finishes in seconds without holding it all in memory.

  12. Feature

    Chat with Nicole inside the tenant dashboard (read-only tools)

    The chat lets you ask Nicole about your own data — "when am I free Tuesday after lunch", "summarize the Acme thread", "do I have anything that conflicts with travel block". Same agent loop as the email path, but only read-only tools are exposed.

    Writes still route through the main approval flow. So even if you say "book the 2:30", Nicole produces a draft you confirm — never a hard send. Keeps the chat fast and exploratory without a blast radius.

  13. Security

    Argon2id-only password hashing with leaked-password list check

    Switched all password hashing to Argon2id with parameters tuned to ~250ms on our app servers. Existing users were rehashed transparently on next login.

    Signup and password-reset flows now check candidate passwords against a hashed-prefix lookup of HIBP's known-breached-passwords list. We don't store or transmit the password itself — only a partial hash leaves our servers. Common compromised passwords are rejected with a clear message.

  14. Feature

    Resend wildcard inbound; new tenants provision instantly

    Onboarding used to require a couple of minutes for DNS propagation between handle creation and the first inbound email working. We've moved to a wildcard MX on schedule.nicoleassist.com — every handle resolves the moment the tenant is created.

    Pick a handle, connect a calendar, forward your first scheduling email — usually under 60 seconds end-to-end.