// changelog

Shipped weekly, tracked openly.

Every update, fix, and improvement that lands in NeatMail.37 releases · 393 documented changes

Latest2026-07-20
v1.27.0

Version 1.27.0

Added
  • Engagement-based auto-archive rules — auto-mute senders a user consistently ignores
  • Feedback survey integration in the app
Changed
  • Email handling excludes self-sent messages from tracking and processing
// previous releases
v1.26.02026-07-18
Added
  • First-run inbox sweep with preview and one-click undo
  • Auto-archive functionality for user tags
Changed
  • Onboarding flow updated with trial plan features and savings display
  • First-run sweep refined to exclude only starred messages and count conversations accurately
  • Dashboard components reorganized for improved layout and clarity
Removed
  • InsightHighlights component and related new-senders logic
v1.25.02026-07-16
Added
  • Extra mailbox add-ons for subscriptions — paid seats via DodoPay
  • `ConfirmDialog` for consistent destructive-action confirmations in TeamSettings
  • Teammate referral guard to prevent circular rewards
  • "Mailboxes" feature label; `formatFeatures` updated for tier limits
  • Migration to backfill solo organizations for pre-existing signups
Changed
  • Payment region inference switched from currency-based to plan-based resolution
  • Presentment currency handling for recurring charges and credits (`d088e63`); `presentmentRecurring` renamed to `planRecurring`
  • `ExtraMailboxesCard` region logic now uses geo information (`e357d45`); styling improved
  • Billing page enhanced with additional information and support contact
  • OAuth error handling and reconnect notifications enhanced for Gmail and Outlook
  • README enhanced with clearer description, links, and team/industry use cases
Fixed
  • `DodoDisputeData.amount` corrected to string, matching DodoPay's webhook contract
v1.24.02026-07-14
Added
  • Organizations & teams — `organization` and `organization_members` models with roles
  • Organization-aware billing tier resolution for users
  • Organization hooks for invite, team, and member management
  • Organization API, pages, components, and route registration
  • Schema org fields and migrations for invite tokens, member active flag, and trial flag
Changed
  • Checkout, subscription, billing page, and user deletion updated with org support
  • AppSidebar, user settings, sign-in, onboarding, and Resend lib updated for orgs
  • Outlook workers, watch activation, cron, and Gmail webhook updated for orgs
v1.23.02026-07-12
Added
  • Gmail processing queues and workers for incoming and sent messages
  • Per-user burst limiter for Gmail processing to prevent mailbox flooding
  • Edit-label functionality with validation and API integration
  • New favicon assets and updated metadata for branding
Changed
  • Migrated from Azure OpenAI to the OpenAI API
  • Classification polling timeout extended from 60s to 600s
  • Checkbox replaced with Switch in user preferences; save-state handling enhanced
  • Input validation for tag name/description; Dashboard greeting logic refined
v1.22.02026-07-09
Added
  • Referral system — referral code generation, tracking, and rewards
  • Billing portal access for subscriptions on hold
v1.21.02026-07-07
Added
  • Chat session management and message persistence
  • Follow-up feature with a mandatory "Resolved" tag and related checks
  • Keyword-based attachment search for Outlook; fallback to most recent candidate for generic requests
Changed
  • Email handling refactored to provider-agnostic types; Gmail/Outlook-specific implementations removed
  • Chat markdown styling improved; email date formatting enhanced
Removed
  • "Discussion" label and related checks from email processing
v1.20.02026-07-02
Added
  • Attachment auto-resolution for drafts — file retrieval and attachment capabilities
  • Email subject and confidence level included in attachment resolution
  • Follow-up email functionality in the daily digest
  • Carousel on the sign-in page with new imagery
  • Comprehensive agent guide (`CLAUDE.md`) — build, architecture, pricing, and API details
Changed
  • Onboarding page enhanced with trust and reassurance messaging for card verification
  • Sign-in page header and description updated for clarity
Fixed
  • Pricing tiers updated for Pro and Max; free-tier option removed
  • Tier degraded on trial expiry; watch deactivated on delete; watch teardown hardened
v1.19.02026-06-29
Added
  • Card-required free trial logic with an enhanced onboarding flow
  • Trial reminder system for card-required free trials
  • Reconnect reminder system to notify users when an OAuth token is revoked
  • `UnsubscribeFailedDialog` for improved unsubscribe error handling
Changed
  • Pricing updated for PRO and MAX tiers; tier limits adjusted
  • `UserLabel` component handles loading states and stale data
  • Navbar and AppSidebar layout spacing; sidebar width normalized
v1.18.02026-06-26
Added
  • New-senders tracking endpoint integrated into dashboard insights
  • Dashboard email statistics and insights enhanced
Changed
  • License updated to Elastic License 2.0; README updated for consistency
  • `ConditionalSidebar` hidden on the onboard-complete page
  • Google API integration checks Gmail access and scopes
v1.17.02026-06-23
Added
  • 4-step onboarding wizard replacing the bare redirect, with an OAuth re-auth flow
  • `user_defined` property on tags for identification
Changed
  • Sign-in page redesigned with tagline, mascot, and trust badges
  • Email digest sent only to users with an active subscription or trial
  • Email classification: read-only/discussion tag handling and expanded `noReplyNeeded` read-only signals
Fixed
  • "Follow-up" spelling corrected in sidebar items
v1.16.02026-06-19
Added
  • Follow-up system — detection, AI draft generation, and preference management
  • Follow-up limits and tracking for user preferences
  • Follow-up preferences in onboarding; default values in `EmailCategorizationModal`
  • Follow-up message handling for Gmail and Outlook — move to inbox, mark unread
  • Digest "Completed" tab with a dedicated API; digest section redesigned
  • Animated `BeamAvatar` component; `DigestRow` with formatted date/time
Changed
  • `DailyDigestEmail` supports `message_id` and `is_gmail` for dynamic email links
  • Trimmed digest emails increased from 5 to 10
  • Throttling added to the `sendNewMails` endpoint to avoid rate limits
  • AI model parameters tuned for follow-up checks
v1.15.02026-06-16
Added
  • PostHog tracking for user events and onboarding
  • PostHog project token and host wired as Docker build args and env vars
Changed
  • User-token upsert enhanced with email and Gmail provider check
  • Onboarding page title and sidebar visibility logic updated
  • Primary email address prioritized in user-related API responses
v1.14.02026-06-13
Added
  • AI chat agent — backend tools (`create_draft`, `trash_messages`, web attachments)
  • Chat UI with markdown rendering and sidebar integration
  • Onboarding API integrated with the email categorization modal
  • Loading steps and interval in `EmailCategorizationModal` during onboarding
Changed
  • `react-markdown` and `remark-gfm` added for chat markdown rendering
Fixed
  • Chat mobile: `dvh` viewport height, safe-area padding, reduced padding on small screens
Docs
  • `DESIGN.md` added to `notion/`
v1.13.02026-06-12
Added
  • Free trial activation with onboarding integration
  • `OAuthError` class with enhanced error handling in the Gmail client
  • NeatMail footer on Gmail and Outlook draft emails
Changed
  • Tier-based feature restrictions and UI updates for free users
  • Confetti animation on the onboarding success dialog
  • Classification batch size reduced from 10 to 5
  • "Action Needed" tag renamed to "Automated alerts"
Fixed
  • Free trial users can select the PRO plan in billing
  • History ID updated as a string in Gmail webhook processing
v1.12.02026-06-07
Added
  • Tier system — `Tier` enum and field on `user_tokens` with migration
  • Core tier infrastructure — limits, webhook sync, tier hooks
  • Tier-aware API endpoints — checkout, changePlan, preview, trial, limits
  • Frontend tier gating, onboarding flow, billing cards, and plan preview dialog
  • Region-aware pricing with INR support
  • Draft count tracking with tier-based access control
Changed
  • Existing PRO subscribers upgraded to MAX tier; support features enhanced
  • Trial subscription tier set to MAX
  • Watch renewal supported for free users in cron
Docs
  • Env example updated with tier product IDs; pricing strategy doc added
v1.11.02026-06-02
Added
  • Health check endpoint at `/api/health`
  • Batch email classification via a Redis buffer queue
Changed
  • Draft `MAX_OUTPUT_TOKENS` increased from 600 to 4096 to prevent length truncation
  • Draft style mirroring expanded — emojis, expressiveness, capitalization, abbreviations, sign-offs
  • Draft prompt uses natural human replies instead of bracket placeholders
  • GitHub repo resolution enhanced
Fixed
  • Empty OpenAI response guarded to prevent a JSON parse crash
  • Batch deduplicated by `message_id` to prevent ON CONFLICT error 21000
  • GitHub global search fallback removed to prevent leaking unrelated public repos
v1.10.02026-05-31
Added
  • Redis-buffered batch email inserts via BullMQ
Changed
  • Docker image size reduced ~82% (900MB → 160MB) with Alpine + in-process workers
  • `SubscriptionModal` redesigned; `media-src` added for Cloudinary
Fixed
  • Calendar timezone handling — DB timezone over ISO offset, FreeBusy cross-checked with `events.list`
  • ISO 8601 interval format handled from the draft API
  • Regex character-class range bug in `timePart` extraction
  • Docker/Alpine build fixes — bash dependency, `oven/bun` image, `@bull-board` runtime copy
  • Instrumentation and workers restricted to the Node.js runtime
v1.9.02026-05-29
Added
  • Dashboard UI refreshed
Changed
  • Background job processing migrated from Inngest to BullMQ
  • Bull Board auth hardened — rate limiting, timing-safe comparison, audit logging, min password length
Fixed
  • 404 handled gracefully when messages are manually deleted by the user
  • Unsubscribe shows "Message already deleted or moved" on 404; error field checked even on HTTP 200
  • BullMQ: keep last 50 completed jobs, increased `lockDuration`; `removeOnComplete` reverted to prevent Redis RDB bloat
Docs
  • Inngest references updated to BullMQ across README, AGENTS.md, and `tags.ts`
v1.8.02026-05-27
Added
  • Daily Digest — schema and AI summary/action pipeline
  • Daily digest backend with cron job and email template
  • Digest UI pages with restructured sidebar
  • Message body retrieval and reply functionality in the digest section
Changed
  • Email tracking uses `isDone` instead of `is_read`
  • Google verification check added in OAuth
Fixed
  • Digest preferences no longer auto-created on GET; default enabled state is false
  • `supabase.ts` encryption handling corrected for non-empty strings
Security
  • `ai_summary` and `ai_action` encrypted at rest
v1.7.02026-05-26
Added
  • GitHub integration for context fetching and issue retrieval in email drafts
  • Notion integration with context fetching and relevant page extraction
  • HubSpotProvider enhanced with methods for fetching notes, tasks, and tickets
  • User deletion functionality in draft and model services with error handling
  • Google verification email handling for history sync in email route
  • Gmail integration enhancement with client retrieval and quota limits in throttle.ts
  • Caching for known repositories in GitHubProvider
  • Stopword package integrated in GitHub and HubSpot providers
Changed
  • GitHubProvider simplified — removed router/scoring, uses Promise.allSettled + unified fetchWithTimeout
  • Unnecessary logging removed in GitHub and Notion providers; logging added in HubSpot
  • Reply generation rules clarified with explicit checks for missing information
  • Timeout duration increased for context fetching and guidance on missing information updated
  • getLastSentMessageInThreadOutlook optimized by directly querying sent items
  • Condition updated to check for top pages in NotionProvider context fetching
Docs
  • Google API quota reference and rate limits for Gmail and Calendar APIs
v1.6.02026-05-24
Added
  • HubSpot integration with context fetching and UI components
  • Last message retrieval for email threads in Gmail and Outlook
  • Email draft processing with user name integration and context formatting
  • Trial status response for users with active trials in subscription checks
  • Prompt engineering patterns skill to skills-lock.json
Changed
  • Output token limit adjusted with guidelines for reply generation length
  • Output token limit increased; helper functions exported for better accessibility
  • .agents/skills removed from tracking and added to .gitignore
v1.5.02026-05-21
Added
  • Reply functionality for Gmail and Outlook conversations with FollowUps UI integration
v1.4.02026-05-20
Added
  • `NotSubscribedState` component using `premium.svg` with default "Go to Billing" link
  • Subscription gating on FollowUps, EmailStats (unsubscribe), and StorageAnalysis pages
  • `enabled` parameter on `useGetSentEmails`, `useGetUserEmailStats`, and `useGetFilteredEmails` hooks to skip API calls for unsubscribed users
v1.3.02026-05-19
Added
  • Throttling mechanism for API requests using Redis
v1.2.02026-05-18
Added
  • `reminder_sent_at` field to Subscription model for tracking reminder delivery
  • Cache-Control header to improve caching strategy
  • FollowUps button text updated to indicate email client
Changed
  • next.config settings enhanced for image handling and headers
  • Code structure refactored for improved readability and maintainability
v1.1.02026-05-16
Added
  • Follow-ups page showing sent emails awaiting replies
  • Changelog to document project updates and version history
Fixed
  • Outlook ID handling updated to support multiple IDs in renewal process and various functions
v1.0.02026-05-15
Added
  • Watched folders functionality with Outlook integration
  • Active folder data in Outlook subscription creation
  • Language selection to draft preferences, piped through draft creation
  • Slack integration — OAuth flow, context provider, API routes, and UI
  • Slack provider with search, context retrieval, and user connection check
Fixed
  • Debug logs removed from Gmail and Outlook label correction processing
  • Debug logs removed from SlackProvider fetchContext and buildQuery
  • Slack search parameters updated: count to 6, sort by score
  • Async handling for Slack token decryption
  • Layout adjustments for folder selection in WatchedFolderSelect
Changed
  • activeFolder function corrected to filter and map folder data properly
v0.9.02026-05-10
Added
  • Storage analysis page: find and delete large emails by size and date range
  • ErrorState component replacing Alert in EmailStats and StorageAnalysis
  • PageTransition component for animated page transitions
  • AppSidebar animated active indicator with layout grouping
  • One-Click Cleanup feature image in README
  • Badge UI component with variants
  • Pagination for email retrieval with nextPageToken and maxResults
  • DeleteOutlookMessage function and email deletion logic
  • Outlook message archiving with enhanced filtering
Fixed
  • Date validation schema and error handling for date queries in email and stats routes
  • Audience URL in Gmail webhook now uses environment variable
  • Syncing message clarifies inbox reference
Changed
  • Sidebar restructured with Cleanup section and refined navigation
  • getGmailClient simplified: Redis caching and in-process token cache removed
  • Code structure refactored for readability and maintainability
Removed
  • entity-extractor.ts file and associated OpenAI integration
  • User privacy settings and related API endpoints
v0.8.02026-05-01
Added
  • Auto-archive functionality for Gmail and Outlook messages
  • Archive rules management in API
  • Gmail historical data sync via API endpoint and React hook
  • Outlook email history sync and retrieval
  • Read vs Unread component with API integration for 7-day stats
  • MostEmails component for tracking top email senders
  • Date range picker on dashboard with component updates
  • Skip processing for users not subscribed to archiving rules
Fixed
  • Clutter component layout, loading states, and unsubscribe options
  • Archive option alignment in EmailStats
  • Layout and responsiveness in EmailStats
  • Login.svg added to public folder
  • Total days calculation for email metrics
  • Margin adjustments in Clutter and MostEmails components
  • Take limits in stats API for clutter and top labels queries
  • Greeting calculation optimized with useMemo
  • Dashboard greeting subtitles and LabelDistribution colors
  • Time period references from month to week
  • Traffic data metrics and trend rendering
Changed
  • Debounced date handling in dashboard for performance
  • Email count logic simplified, date range extended
  • archiveMessages renamed to trashMessages with updated response
  • Archive flow simplified to button + duration selection
  • TruncateLabel function limits domain display in EmailStats
Removed
  • MailsByDay component and associated data fetching
v0.7.02026-04-20
Added
  • OpenAI agent for Gmail interaction and email drafting via Telegram
  • HTML-to-text dependency and Telegram HTML formatting functions
  • Automated alerts for email categorization
  • Global API rate limiting with dynamic response headers
  • ioredis migration from Upstash Redis
  • MailsByDay component with time-saved metrics
  • Daily email statistics API integration
Fixed
  • Console logging for missing user token includes clerk user ID
  • Email labeling logic refined, redundant conditions removed
  • inngest downgraded to 3.54.0 for compatibility
Changed
  • Agentic workflow optimized with compact search and increased buffer
  • Agentic loop token usage optimized via result compression
  • OpenAI model updated from gpt-5.4-mini to gpt-5-mini
  • Font sizes increased in MailsByDay and LabelDistribution
  • Color scheme updated in MailsByDay
  • Take limits increased for clutter and top labels queries
v0.6.02026-04-10
Added
  • HeatMap component for inbox traffic and focus time visualization
  • Clutter component with hooks for clutter data management
  • Stats route for email metrics and engagement analysis
  • EmailStats component and fetching hooks
  • Endpoint to fetch email statistics by domain
  • Email unsubscribe functionality — link extraction, redirect handling
  • Outlook mail event update and webhook integration
  • Domain, is_read, and rawDomain fields in email_tracked model
  • Gmail API client with caching, message fetching, parsing, and drafting
  • WelcomeDialog component for onboarding
Fixed
  • Gmail attachment ID rotation handled by falling back to first available
  • Sender name and email assignment in Outlook mail processing
  • Email body snippet sanitization — HTML character escaping
  • Various console logs removed from Gmail processing
  • Truncation of email body for snippet in processing
Changed
  • HeatMap color scheme improved for clarity
  • LabelDistribution background colors updated
  • Clutter component styling: Avatar variant, gap, layout
  • Domain encryption uses libsodium with deterministic nonce
  • Sidebar updated: "Mails" → "Unsubscribe", icon to Shredder
  • Email classification enhanced with tag matching and category normalization
  • Classification rules refined for automated emails and response requirements
  • Sensitivity handling updated across processing functions
v0.5.02026-03-28
Added
  • Telegram integration for email notifications and management
  • Quick reply options and draft notification for Telegram
  • telegramPendingDraft table with unique constraint on chat_id
  • Gmail draft update and send functions with OpenAI text corrections
  • deleteGmailDraft function and route integration
  • checkAndForwardToTelegram with tagName support
  • Forward important mails and draft confirmation fields to TelegramIntegration
  • Integration rules model with user_tokens relation
  • Telegram query processing function with routing
  • sendTelegramMessage function for notifications
  • HTML escaping in handleTelegramQuery response
  • Attachment handling in Gmail and Telegram messaging
  • Chat history management with Redis in handleTelegramQuery
  • Feedback link in AppSidebar, "Delete Account" → "Danger Zone"
Fixed
  • Telegram webhook route matcher corrected
  • Response for unsubscribed users returns JSON
  • Subscription check added before Telegram messages
  • Rotating Gmail attachment IDs handled by fallback
  • Debug logs removed from attachment retrieval
Changed
  • OpenAI model updated from gpt-5.4-mini to gpt-5-mini
  • getModelTagsUser removed, tag references updated in email processing
  • Logging enhanced in checkAndForwardToTelegram
v0.4.02026-03-15
Added
  • Context engine with email entity extraction and Google Calendar integration
  • Draft context API and processing with context generation
  • Outlook calendar integration for draft processing
  • getGmailMessageBody function for full email body retrieval
  • Email classification with response requirement in OpenAI
  • Sensitivity field in draft_preference model and related types
  • Timezone support in draft preferences and processing
  • "Read only" label for specific email categories
  • Description field in tag model and UserTag
  • User Gmail status retrieval with label settings integration
  • Development route for Microsoft OAuth token retrieval
Fixed
  • Timezone encoding in Google Calendar API requests
  • Google Calendar queries respect local timezone boundaries
  • Variable names corrected for token and email body in draft processing
  • GPT model deployment name corrected to gpt-5-mini
Changed
  • OpenAI classifier replaces model classification in email processing
  • classifyEmail enhanced with available categories in prompt
  • max_completion_tokens increased from 20 to 40
  • Label handling simplified, CATEGORY_UPDATES check removed
  • classifyEmail simplified, unused generateEmailReply removed
  • response_required handling removed from classification
  • Email body extraction simplified — HTML handling removed
  • Full email body retrieved and truncated for snippet
  • Classification rules updated for priority and semantic context
  • Category descriptions updated for clarity
  • Conflict messaging shows all busy slots
  • Calendar providers privacy menu item commented out
v0.3.02026-03-05
Added
  • Microsoft Outlook integration — webhook, subscription management, email fetching
  • Outlook email processing and label correction
  • Outlook watch and subscription renewal support
  • Outlook preset field in tag model
  • is_folder field in user_tokens model for folder categorization
  • UpdateFolderPreference component with folder messaging
  • Customer portal with payment history and subscription handling
  • Billing component on billing page
  • DodoPayments integration for payment processing
  • GitHub Actions workflow for production database migration
  • Initial database migration: user_tokens, tag, and related tables
  • Gmail API history and message retrieval error handling
Fixed
  • Subscription query filters by next billing date and cancellation status
  • activateWatch uses clerk_user_id instead of dodoSubscriptionId
  • Default value of is_folder set to false
  • Model deployment name corrected to gpt-4.1-mini
  • /all route error handling and public API route inclusion
  • README updated with Outlook integration details
Changed
  • Privacy settings description updated with link
  • Rate limiting logic enhanced, identifier includes user ID
  • Label mapping simplified in classifyEmail
  • Email classification rules refined for finance and domain contexts
  • Font family updated in globals.css
v0.2.02026-02-14
Added
  • DodoPayments checkout session with country-based product selection
  • Trial period (14 days) if not previously taken
  • Subscription status display and cancel button in Billing
  • Wallet balance retrieval in Billing component
  • Subscription modal with 7-day free trial offer
  • Reserved keywords validation for label names
  • Dockerfile with multi-stage build and .dockerignore
  • Permissions modal and scope fetching logic
  • Custom label creation with description field
  • Email classification with axios integration
  • Cron job endpoint for user deletion
  • Watch renewal endpoint for active subscriptions
  • Refund processing endpoint with automated logic
  • Login.svg asset
  • API timeout increased to 120 seconds
Fixed
  • Subscription status handling extended in addSubscriptiontoDb
  • User subscription check in Gmail webhook handler
  • Hardcoded user check removed from addSubscriptiontoDb
  • Wallet balance display reflects correct value
  • Checkbox and button disabled when user is unsubscribed
  • Timestamp fields updated to Timestamptz
  • Subscription queries ordered by updatedAt
  • Authorization header validation in Gmail webhook
  • Package vulnerabilities fixed
  • Domain updated from neatmail.tech to neatmail.app in CSP
Changed
  • TrackedEmail component layout, header, and sender formatting
  • README updated with Docker support, environment config
  • Endpoint renamed from /create to /addTagtoUser
  • Query invalidation added for watch and tag mutations
  • Tag names trimmed before duplicate check
  • Thread processing logic updated for correct Redis key usage
v0.1.02026-02-01
Added
  • Initial Next.js project setup with App Router and Hono API mount
  • Clerk authentication integration with middleware in proxy.ts
  • Prisma ORM with PostgreSQL — custom output path for generated client
  • Redis-based sliding window rate limiter
  • Gmail webhook handling with PubSub push notifications
  • Gmail API watch management
  • Email tracking model (email_tracked) with user and domain tracking
  • Basic subscription management with DodoPayments
  • User account deletion flow with watch deactivation
  • Content-Security-Policy headers
  • Elastic License 2.0
Fixed
  • Thread processing logic and duplicate tag prevention
  • Message processing with unmarkMessageProcessed function
Security
  • Authorization header validation for webhook endpoints
  • Environment variable configuration for all secrets
  • Content-Security-Policy for neatmail.app domain
// what's next

Follow the public roadmap.

See what we're building next and join the conversation on GitHub.

View on GitHub