<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Curtis Zhang</title>
    <description>The latest articles on DEV Community by Curtis Zhang (@curtis_zhang_f52bce500a3e).</description>
    <link>https://dev.to/curtis_zhang_f52bce500a3e</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4114963%2Fb412a668-1b63-4c14-b039-778068c68a84.png</url>
      <title>DEV Community: Curtis Zhang</title>
      <link>https://dev.to/curtis_zhang_f52bce500a3e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/curtis_zhang_f52bce500a3e"/>
    <language>en</language>
    <item>
      <title>Building an Award Flight Finder: What I Learned Turning 365 Date Checks Into One Search</title>
      <dc:creator>Curtis Zhang</dc:creator>
      <pubDate>Tue, 08 Sep 2026 05:53:58 +0000</pubDate>
      <link>https://dev.to/curtis_zhang_f52bce500a3e/building-an-award-flight-finder-what-i-learned-turning-365-date-checks-into-one-search-50j6</link>
      <guid>https://dev.to/curtis_zhang_f52bce500a3e/building-an-award-flight-finder-what-i-learned-turning-365-date-checks-into-one-search-50j6</guid>
      <description>&lt;p&gt;Reward flights are one of those problems that look simple until you try to build a useful search experience around them.&lt;/p&gt;

&lt;p&gt;A traveller usually starts with a straightforward question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Which dates can I fly this route using miles?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But airline websites often make people check one date at a time. Availability changes frequently, different cabins behave differently, and a seat that appears today may be gone tomorrow. The user does not really want another booking form. They want a fast way to understand a large, changing set of dates.&lt;/p&gt;

&lt;p&gt;While building &lt;a href="https://mileseat.com/en" rel="noopener noreferrer"&gt;MileSeat&lt;/a&gt;, I learned that the best interface for this problem is not a conventional list of search results. It is a calendar, supported by filters and alerts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the real user job
&lt;/h2&gt;

&lt;p&gt;The obvious product brief is “build an award flight search tool.” That description is too broad to guide many design decisions.&lt;/p&gt;

&lt;p&gt;The actual job is closer to this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check a route across a wide date range.&lt;/li&gt;
&lt;li&gt;See which dates have seats in the desired cabin.&lt;/li&gt;
&lt;li&gt;Compare nearby dates without repeating the search.&lt;/li&gt;
&lt;li&gt;Return later when availability changes.&lt;/li&gt;
&lt;li&gt;Complete the redemption on the relevant airline or loyalty-program website.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This framing matters. MileSeat is not an airline or a travel agent, and it does not complete bookings. Its job is to reduce the discovery work before booking.&lt;/p&gt;

&lt;h2&gt;
  
  
  A year is a better unit than a single date
&lt;/h2&gt;

&lt;p&gt;Most flight forms begin with a departure date. That works well when cash fares are widely available and the user is optimizing price or schedule.&lt;/p&gt;

&lt;p&gt;Award travel is different. Availability itself is often the constraint.&lt;/p&gt;

&lt;p&gt;If someone wants two Business Class award seats between London and New York, asking for one exact date too early can hide the useful answer: there may be no seats on Friday, but there may be seats on Thursday or Sunday.&lt;/p&gt;

&lt;p&gt;That led us toward a 365-day calendar view. A calendar changes the interaction from repeated querying into visual scanning. Users can identify clusters, gaps, and nearby alternatives without submitting dozens of nearly identical searches.&lt;/p&gt;

&lt;p&gt;The broader product lesson is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When flexibility is part of the user's strategy, show the whole decision space before asking them to narrow it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Availability and price are different questions
&lt;/h2&gt;

&lt;p&gt;Another important distinction is the difference between award-seat availability and the final redemption price.&lt;/p&gt;

&lt;p&gt;A seat can be available while the number of points, taxes, fees, or booking rules vary by program. Partner-airline access can differ as well. Trying to compress all of that into a single “best deal” number creates false certainty.&lt;/p&gt;

&lt;p&gt;A clearer flow is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find dates with award seats.&lt;/li&gt;
&lt;li&gt;Filter by airline, route, cabin, and number of seats.&lt;/li&gt;
&lt;li&gt;Confirm the current points price and fees with the program used for booking.&lt;/li&gt;
&lt;li&gt;Complete the redemption on the official site.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping these stages separate makes the product easier to explain and reduces the risk of users treating an availability signal as a guaranteed booking quote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filters should reflect traveller decisions
&lt;/h2&gt;

&lt;p&gt;A technically impressive filter is not necessarily a useful filter. The highest-value controls are the ones that map directly to decisions travellers already make:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Origin and destination&lt;/li&gt;
&lt;li&gt;One-way or return&lt;/li&gt;
&lt;li&gt;Economy, Premium Economy, Business, or First Class&lt;/li&gt;
&lt;li&gt;Number of seats&lt;/li&gt;
&lt;li&gt;Airline or loyalty-program context&lt;/li&gt;
&lt;li&gt;Flexible date range&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The number-of-seats filter is especially important. Showing a date with one seat is not useful to a couple looking for two. The calendar should reflect the party's actual requirement rather than presenting any positive inventory as a match.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alerts complete the workflow
&lt;/h2&gt;

&lt;p&gt;A search only answers “what is available now.” For popular premium cabins, that is often not enough.&lt;/p&gt;

&lt;p&gt;Availability can return after cancellations or inventory updates, so the product needs a second mode: monitoring. A traveller specifies the route, cabin, date range, and seat count, then receives an alert when a matching result appears.&lt;/p&gt;

&lt;p&gt;This is more than a notification feature. It changes the product from a one-time query tool into an asynchronous workflow:&lt;/p&gt;

&lt;p&gt;Search now → no suitable dates → save criteria → monitor changes → notify when a match appears.&lt;/p&gt;

&lt;p&gt;For products built around volatile data, the same pattern can be useful in many domains: appointments, event tickets, rentals, inventory, and pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would measure
&lt;/h2&gt;

&lt;p&gt;A search product can easily optimize the wrong metric. Page views alone do not tell you whether people found a usable result.&lt;/p&gt;

&lt;p&gt;The more meaningful signals are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Percentage of searches that return at least one matching date&lt;/li&gt;
&lt;li&gt;Time from landing to the first calendar result&lt;/li&gt;
&lt;li&gt;Filter changes after results appear&lt;/li&gt;
&lt;li&gt;Alert creation following a search with no suitable result&lt;/li&gt;
&lt;li&gt;Return visits from an alert&lt;/li&gt;
&lt;li&gt;Outbound clicks to continue the booking process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These metrics follow the user's progress rather than the site's content volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  The main takeaway
&lt;/h2&gt;

&lt;p&gt;The biggest lesson from building MileSeat is that search UX should match the shape of the underlying decision.&lt;/p&gt;

&lt;p&gt;For award travel, the user is not choosing from a stable list. They are exploring sparse availability across time. A full-year calendar makes that structure visible, while cabin and seat-count filters make it relevant. Alerts handle the fact that the answer can change after the user leaves.&lt;/p&gt;

&lt;p&gt;If you are building any product around limited, changing availability, begin by asking whether users really want a better search box—or a better view of the entire opportunity space.&lt;/p&gt;

&lt;p&gt;You can see the current implementation at &lt;a href="https://mileseat.com/en/reward-flight-finder" rel="noopener noreferrer"&gt;MileSeat&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
