CHANGELOG
97 Commits in 8 Days: Our Biggest Sprint Yet
Andres MuguiraFebruary 26, 20269 min read
SprintChangelogFeb 2026
← Back to Blog
The Context
From February 14 to February 21, 2026, we shipped 97 commits to SalesSheet's main branch. That is roughly 12 commits per day, every day, for eight consecutive days. This was not a hackathon. There was no pizza-fueled all-nighter. It was sustained, focused execution across every layer of the product, driven by a simple realization: we had accumulated too much planned work and not enough shipped work. The backlog was winning. So we declared a sprint and committed to clearing it.
A backlog is a list of promises you made to your future self. At some point, your future self arrives and wants to know why none of them were kept.
This post categorizes every commit by area, explains the most impactful changes, and shares what we learned about sustained high-velocity shipping. If you are a SalesSheet user, this is your detailed changelog. If you are a builder, this is a window into what focused execution looks like at a small team.
97 commits broken down by category: UI & Design led with 16, followed by Grid & Data (15) and Auth (14).
Authentication (14 commits)
Authentication dominated the first two days of the sprint. We had been planning a passwordless migration for weeks and finally pulled the trigger. The major changes included:
- Magic link implementation with PKCE flow for mobile devices, replacing password-based auth entirely
- Recovery token system for users who lose email access, using bcrypt-hashed one-time tokens
- 60-second resend cooldown with server-side Redis enforcement and client-side countdown UI
- Session refresh logic that silently renews tokens 5 minutes before expiration, eliminating mid-workflow logouts
- OAuth cleanup removing dead code paths for password-based flows, shrinking the auth module by 340 lines
- Deep link configuration for iOS universal links and Android app links to handle magic link redirects
The auth changes alone would have justified a full sprint. Shipping them in two days meant we could spend the remaining six days on features that users actually see and interact with daily.
Calling (11 commits)
Our built-in calling feature received its biggest update since launch. The Twilio integration was functional but rough around the edges. These commits smoothed it out:
- Call recording consent with a two-party notification that plays before the call connects, configurable per state/country
- Voicemail drop allowing reps to leave a pre-recorded message with a single tap when the call goes to voicemail
- Call disposition modal that appears after each call ends, prompting the rep to log the outcome (connected, left voicemail, no answer, wrong number)
- DTMF tone support for navigating phone trees, with a keypad overlay during active calls
- Call quality indicator showing real-time packet loss and jitter metrics, so reps know if their connection is degrading
- Automatic call logging to the contact timeline with duration, recording link, and disposition
The voicemail drop feature alone has saved our beta users an estimated 15 minutes per day. Instead of waiting for the beep and reciting the same pitch, they tap a button and move to the next call.
Email (12 commits)
Email is the backbone of sales communication, and our Gmail sync needed serious attention. The sprint included:
- History API migration replacing full inbox syncs with incremental updates, reducing sync time from 47 seconds to under 1 second for most users
- Thread grouping fix that correctly associates replies with their parent conversation, even when the subject line changes
- HTML rendering overhaul fixing six separate issues with how email bodies render inside the CRM, including table width bugs and style tag preservation
- Attachment preview showing inline thumbnails for images and PDFs directly in the email thread view
- Bounce detection that automatically marks contacts as "invalid email" when we detect a hard bounce, preventing wasted outreach
Grid and Data (15 commits)
The contact grid is where users spend most of their time. It needed to feel like a spreadsheet but work like a database. These commits bridged that gap:
- Column resizing with drag handles and double-click to auto-fit, persisted per user
- Frozen columns keeping the contact name visible while scrolling horizontally through custom fields
- Bulk edit mode allowing users to select multiple rows and update a field value across all of them in a single action
- Sort persistence remembering the last sort column and direction across page refreshes and sessions
- Custom field types adding currency, percentage, and date fields with proper formatting and validation
- Inline editing with tab-to-next-cell navigation, turning the grid into a true spreadsheet experience
- CSV export respecting current filters and sort order, so users export exactly what they see
The grid changes represent the largest chunk of the sprint because they touch every part of the data layer. Each column resize triggers a layout recalculation. Each bulk edit triggers validation across every affected row. These are not simple UI tweaks; they are fundamental data operations with complex edge cases.
AI Assistant (9 commits)
The AI assistant got smarter and more contextual:
- Deal context injection automatically including the current deal's stage, value, and recent activity when the user asks for help
- Email draft generation that writes follow-up emails based on the contact's history and the deal's current stage
- Meeting prep summaries compiling a contact's recent emails, calls, and deal changes into a one-page brief
- Smart prompt suggestions that appear based on what the user is currently viewing (contact detail, deal card, email thread)
- Response streaming showing AI responses word-by-word as they generate, reducing perceived latency by 60%
8 key features shipped during the sprint: Magic Link Auth, Voicemail Drop, Email History API, Inline Grid Editing, AI Deal Context, Dark Mode, Smart CSV Import, and Sentry Monitoring.
UI and Design (16 commits)
The largest category by commit count was UI polish. These are the changes that make SalesSheet feel crafted rather than assembled:
- Dark mode audit across 100+ files, fixing every hardcoded color and ensuring consistent theming
- Brand refresh rolling out the new #32BAB0 teal across all interactive elements
- Loading skeletons replacing spinners with content-shaped placeholders that reduce perceived load time
- Transition refinements adding 200ms ease-out animations to modals, dropdowns, and panel slides
- Typography scale standardizing font sizes, weights, and line heights across every page
- Empty states designing helpful illustrations and copy for every view that can have zero items
- Responsive fixes for tablet viewports that fell between our mobile and desktop breakpoints
Imports (8 commits)
Getting data into SalesSheet needed to be friction-free. The import system was rebuilt:
- CSV column mapping with intelligent auto-detection of common field names (First Name, Email, Phone, Company)
- Duplicate detection checking email addresses against existing contacts and offering merge, skip, or overwrite options
- Progress indicator showing real-time import progress for large files (1,000+ rows)
- Error reporting with row-level details about what failed and why, downloadable as a separate CSV
- Google Contacts import as a one-click alternative to CSV for users who keep contacts in Google
Infrastructure (12 commits)
The invisible work that keeps everything running:
- Sentry integration added to 84 catch blocks across the codebase, giving us real-time error visibility with stack traces and user context
- Edge function optimization reducing cold start times by splitting monolithic functions into focused single-purpose handlers
- Database indexing adding composite indexes on the five most common query patterns, cutting p95 response times by 40%
- Rate limiting on all public-facing API endpoints using sliding window counters in Redis
- Health check endpoints for uptime monitoring with granular checks on database, Redis, Twilio, and Gmail API connectivity
8-day sprint timeline: Day 1 peaked at 16 commits with the auth launch, Day 5 hit 15 commits with grid inline editing.
What We Learned
Shipping 97 commits in 8 days taught us three things:
- Small commits ship faster than big ones. Our average commit touched 4 files. No commit touched more than 12. By keeping changes small and focused, we reduced review time, merge conflict risk, and rollback complexity. A commit that takes 20 minutes to write, 5 minutes to review, and 2 minutes to deploy is infinitely better than one that takes 3 hours to write and 45 minutes to review.
- Categories create momentum. By grouping work into areas (auth day, calling day, grid day), we avoided the cognitive overhead of context switching. When you are deep in the calling code, fixing the next calling issue takes 10 minutes. Switching to a grid issue takes 30 minutes because you need to reload your mental model.
- The backlog is finite. Before the sprint, our backlog felt infinite. After clearing 97 items in 8 days, we realized most of the items were small. The backlog looked intimidating because of its length, not its depth. Most items were 30-minute fixes that had been sitting there for weeks because no one allocated the focused time to knock them out.
Velocity is not about working harder. It is about eliminating the gaps between working sessions. Ship, commit, move. Ship, commit, move.
The sprint is over, but the pace continues. We are shipping daily, and every commit lands in production within minutes of merging. If you are a SalesSheet user, you are already using everything described in this post. If you are not a user yet, there has never been a better time to start.
Try SalesSheet Free
No credit card required. Start selling smarter today.
Start Free Trial