<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Product on BunnyCal Blog</title><link>https://bunnycal.io/blog/tags/product/</link><description>Recent content in Product on BunnyCal Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 27 Jul 2026 16:03:00 +0530</lastBuildDate><atom:link href="https://bunnycal.io/blog/tags/product/index.xml" rel="self" type="application/rss+xml"/><item><title>What shipped in July</title><link>https://bunnycal.io/blog/changelog-july-2026/</link><pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate><guid>https://bunnycal.io/blog/changelog-july-2026/</guid><description>&lt;p&gt;A month of work that mostly amounts to removing steps from things you already
do more than once a day.&lt;/p&gt;
&lt;h2 id="multi-account-calendars"&gt;Multi-account calendars&lt;/h2&gt;
&lt;p&gt;You can now connect more than one calendar account per provider — two Google
accounts, or a Google and a Microsoft account side by side. Every connected
calendar can be marked as a conflict source, while exactly one stays the write
target for new bookings.&lt;/p&gt;
&lt;p&gt;This also fixes a long-standing sharp edge: connecting a second account used to
overwrite the first. Each connection is now independent, with its own disconnect.&lt;/p&gt;</description></item><item><title>Round-robin that actually balances</title><link>https://bunnycal.io/blog/round-robin-that-actually-balances/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://bunnycal.io/blog/round-robin-that-actually-balances/</guid><description>&lt;p&gt;Every scheduling tool with a team plan claims to do round-robin. Most of them
implement the same thing: keep a pointer, hand the next booking to whoever is
next in the list, advance the pointer. It demos beautifully. It falls apart in
the second week.&lt;/p&gt;
&lt;h2 id="why-a-rotating-pointer-drifts"&gt;Why a rotating pointer drifts&lt;/h2&gt;
&lt;p&gt;A pointer only counts &lt;em&gt;offers&lt;/em&gt;, not outcomes. Consider a three-person team where
everyone is nominally equal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Priya works Tuesdays through Fridays.&lt;/li&gt;
&lt;li&gt;Marco is on Pacific time; the team&amp;rsquo;s booking page is mostly booked by European
prospects in the morning.&lt;/li&gt;
&lt;li&gt;Dana has back-to-back internal meetings every Monday.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pointer doesn&amp;rsquo;t know any of that. It offers Marco the 9am CET slot, finds he
has no availability, and skips to the next person. Skipping &lt;em&gt;doesn&amp;rsquo;t cost Marco
his turn&lt;/em&gt; — so he stays at the head of the queue and gets skipped again. By
Friday, Priya has taken sixteen calls and Marco has taken three, and nobody
touched a setting.&lt;/p&gt;</description></item><item><title>Multiple calendars, one source of availability</title><link>https://bunnycal.io/blog/multiple-calendars-one-availability/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://bunnycal.io/blog/multiple-calendars-one-availability/</guid><description>&lt;p&gt;Most people don&amp;rsquo;t have &lt;em&gt;a&lt;/em&gt; calendar. They have a work Google account, a personal
one, maybe an Outlook calendar from a client engagement — and meetings booked
against any of them are equally real when someone asks if you&amp;rsquo;re free at two.&lt;/p&gt;
&lt;h2 id="read-from-everything-write-to-one"&gt;Read from everything, write to one&lt;/h2&gt;
&lt;p&gt;BunnyCal separates the two operations, because they want opposite defaults.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conflict checking should be greedy.&lt;/strong&gt; Every connected calendar you mark as a
conflict source is queried when computing availability. A dentist appointment on
your personal calendar blocks a work booking, and nobody outside sees why — the
slot is simply gone.&lt;/p&gt;</description></item></channel></rss>