// changelog
Shipped weekly, tracked openly.
Every update, fix, and improvement that lands in NeatMail.17 releases · 247 documented changes
Latest2026-05-26
v1.7.0Version 1.7.0
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
- Google API quota reference and rate limits for Gmail and Calendar APIs
// previous releases
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
- NeatMail Open Source License
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