<?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: Manan Santoki</title>
    <description>The latest articles on DEV Community by Manan Santoki (@manansantoki).</description>
    <link>https://dev.to/manansantoki</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951657%2F7f573551-fd86-4c19-ad1d-ed2f3babc771.jpg</url>
      <title>DEV Community: Manan Santoki</title>
      <link>https://dev.to/manansantoki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manansantoki"/>
    <language>en</language>
    <item>
      <title>The Paywall Was a Painted Door</title>
      <dc:creator>Manan Santoki</dc:creator>
      <pubDate>Tue, 26 May 2026 03:22:48 +0000</pubDate>
      <link>https://dev.to/manansantoki/the-paywall-was-a-painted-door-bl</link>
      <guid>https://dev.to/manansantoki/the-paywall-was-a-painted-door-bl</guid>
      <description>&lt;p&gt;&lt;em&gt;How a $300 plane ticket turned into a free flight-search tool, a responsible-disclosure&lt;br&gt;
report, a Reddit fight, and 1,700 visitors in a month.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Live: &lt;strong&gt;&lt;a href="https://letsgowild.msantoki.com" rel="noopener noreferrer"&gt;https://letsgowild.msantoki.com&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Not affiliated with Frontier Airlines. Built by Manan Santoki.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjc0tb9xospubg00w247q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjc0tb9xospubg00w247q.png" alt="LetsGoWild — map-first GoWild! flight search" width="800" height="394"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;LetsGoWild: an "Anywhere from PHX" search — 28 live options, priced route arcs, and a results rail, all in one map-first view.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I went looking for a cheap round trip to visit family. I ended up finding a $200&lt;br&gt;
all-you-can-fly pass, a cottage industry of paywalled tools wrapped around free&lt;br&gt;
Frontier data, a security hole I disclosed responsibly, and — two days and a lot&lt;br&gt;
of caffeine later — a free alternative I built myself. It launched, Reddit&lt;br&gt;
noticed, the competition wasn't thrilled, the moderators removed my post and&lt;br&gt;
eventually &lt;strong&gt;permanently banned me&lt;/strong&gt; — and ~316 people signed up anyway in the&lt;br&gt;
first weeks. This is the whole thing, start to finish.&lt;/p&gt;




&lt;h2&gt;
  
  
  Chapter 1 — The $300 problem
&lt;/h2&gt;

&lt;p&gt;It started the way most side projects do: I wanted something for myself.&lt;/p&gt;

&lt;p&gt;I was planning a summer trip from &lt;strong&gt;Phoenix (PHX) to Atlanta (ATL)&lt;/strong&gt; to visit&lt;br&gt;
family. I pulled up the usual round-trip fares and the total kept landing around&lt;br&gt;
&lt;strong&gt;$300+&lt;/strong&gt;. Not outrageous, but not nothing either — and I was flexible on dates,&lt;br&gt;
which always makes me feel like I'm leaving money on the table when I just book&lt;br&gt;
the first thing I see.&lt;/p&gt;

&lt;p&gt;Then I noticed Frontier was selling &lt;strong&gt;GoWild! summer passes for ~$200&lt;/strong&gt; — an&lt;br&gt;
all-you-can-fly pass for the season. If I was going to fly more than a couple of&lt;br&gt;
times, the math was obviously in favor of the pass. So, like any normal person&lt;br&gt;
about to spend $200, I went down the rabbit hole of &lt;em&gt;how does this actually&lt;br&gt;
work?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 2 — The rabbit hole
&lt;/h2&gt;

&lt;p&gt;GoWild! has rules. Seats are limited per flight, availability opens on its own&lt;br&gt;
schedule, fares show up as a separate class, and the only way to really "win" at&lt;br&gt;
it is to be flexible and fast. The official Frontier site is not built to make&lt;br&gt;
any of that easy.&lt;/p&gt;

&lt;p&gt;So I did what everyone does — I went to &lt;strong&gt;r/gowildfrontier&lt;/strong&gt; to see how the&lt;br&gt;
community handles it. Scattered through the threads were mentions of a tool&lt;br&gt;
called &lt;strong&gt;gopassflights.com&lt;/strong&gt;. I checked it out. It's a flight-search service&lt;br&gt;
that, under the hood, scrapes Frontier's own booking data through URL/endpoint&lt;br&gt;
manipulation and presents it in a nicer interface — exactly the kind of thing I&lt;br&gt;
needed.&lt;/p&gt;

&lt;p&gt;And it wasn't the only one. There's a small ecosystem of these GoWild! trackers,&lt;br&gt;
all doing fundamentally the same thing: pulling Frontier's public flight data and&lt;br&gt;
re-presenting it.&lt;/p&gt;

&lt;p&gt;I tried them. And one thing genuinely annoyed me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 3 — The thing that annoyed me: the paywall
&lt;/h2&gt;

&lt;p&gt;gopassflights, like the others, was &lt;strong&gt;paywalled into tiers&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;What it unlocked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;One-to-one airport search, GoWild!/non-stop filters, one-way + round-trip, browser alerts, basic fare classes — &lt;em&gt;capped at 3 searches&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$4.89/mo (3-day trial)&lt;/td&gt;
&lt;td&gt;One-to-all airports, inbound search, available-seat counts, range filters, day trips, email/text alerts, GoWild! calendar, interactive map, weather&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$7.89/mo (5-day trial)&lt;/td&gt;
&lt;td&gt;Multi-airport → all, Reward Miles seats, all sort/filter options, fare-drop alerts, "lightning fast" speed, pinned airports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ultra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$9.89/mo (7-day trial)&lt;/td&gt;
&lt;td&gt;Dark mode, month/year search, GoWild! fare calendar, route builder, hidden routes, red-eye, proximity sort, mobile web app — plus "9 features coming soon"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ubbkt6nsls5joi826ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ubbkt6nsls5joi826ai.png" alt="gopassflights tiered pricing — Free, Plus, Pro, Ultra" width="800" height="651"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;gopassflights' "Upgrade your plan" page: real-time data, multi-airport search, the map, miles fares, and even round-trip all live behind $4.89–$9.89/mo tiers.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  And it wasn't just them — the whole market paywalls
&lt;/h3&gt;

&lt;p&gt;gopassflights was the one I ended up deepest in, but as I surveyed the space it&lt;br&gt;
became obvious this is the &lt;em&gt;norm&lt;/em&gt;, not the exception. Every comparable GoWild!&lt;br&gt;
tracker charges for the same scraped Frontier data:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Free tier?&lt;/th&gt;
&lt;th&gt;What it costs&lt;/th&gt;
&lt;th&gt;What sits behind the paywall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;gopassflights.com&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — capped at &lt;strong&gt;3 searches&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$4.89 Plus / $7.89 Pro / $9.89 Ultra per month&lt;/td&gt;
&lt;td&gt;Multi-airport search, interactive map, calendar, Miles fares, alerts, dark mode, month/year search…&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;searchgwp.com&lt;/strong&gt; (SearchGWP)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No free tier at all&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$8.95/mo (web) · $9.95/mo (web+apps) · $79.95–$89.95/yr · $24.95/3mo&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Everything&lt;/em&gt; — even basic 1→all-cities, round-trip, any-date, day-trip, and sorting are subscription-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;the1491club.com&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — "Basic Economy" (beta)&lt;/td&gt;
&lt;td&gt;$4.91 first month → &lt;strong&gt;$9.95/mo&lt;/strong&gt; ("First Class")&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Real-time availability + pricing&lt;/strong&gt;, any-date search, early-booking pricing, Asia + international connections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;gowilder.net&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — &lt;strong&gt;1 search per week&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$5/mo intro → &lt;strong&gt;$10/mo&lt;/strong&gt; Premium (7-day trial)&lt;/td&gt;
&lt;td&gt;AI trip planner (capped 2M tokens/mo), unlimited searches, interactive maps, flight alerts/SMS, inbound + return search, live seat availability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Look at what each one chooses to gate. SearchGWP doesn't even offer a free tier —&lt;br&gt;
you subscribe or you leave. the1491club gives you a free "Basic Economy" plan but&lt;br&gt;
puts &lt;strong&gt;real-time availability and pricing&lt;/strong&gt; — the entire point of the tool —&lt;br&gt;
behind "First Class." gowilder.net's free tier is literally &lt;strong&gt;one search per&lt;br&gt;
week&lt;/strong&gt; with no maps and no alerts, while the genuinely useful stuff (AI planner,&lt;br&gt;
unlimited search, live seats, alerts) is $10/mo.&lt;/p&gt;

&lt;p&gt;Every single one of them gates &lt;strong&gt;the same scraped Frontier data&lt;/strong&gt; that none of&lt;br&gt;
them own. That's the whole market. It's the backdrop for everything that follows.&lt;/p&gt;

&lt;p&gt;Here's the part I want to be honest about: &lt;strong&gt;I don't mind paying for software.&lt;/strong&gt; I&lt;br&gt;
pay for Spotify, Netflix, Prime, a stack of other subscriptions. If a tool makes&lt;br&gt;
my life easier, take my money.&lt;/p&gt;

&lt;p&gt;But this felt different. &lt;strong&gt;None of these services own the data.&lt;/strong&gt; It's Frontier's&lt;br&gt;
flight data. Every one of these tools — gopassflights, the others, &lt;em&gt;and the one I&lt;br&gt;
eventually built&lt;/em&gt; — is a scraper. We're all wrappers around someone else's data.&lt;br&gt;
Charging a monthly subscription, with a "9 features coming soon" upsell, for a&lt;br&gt;
cosmetic layer over data you don't own and arguably aren't supposed to be&lt;br&gt;
reselling, sat wrong with me. That's the core of my philosophy and I'll come back&lt;br&gt;
to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 4 — The 3-search limit, and what I found behind it
&lt;/h2&gt;

&lt;p&gt;The free tier capped you at &lt;strong&gt;3 searches&lt;/strong&gt;. Fine — except, being a developer, I&lt;br&gt;
opened DevTools out of habit, popped into the Network tab, and watched what the&lt;br&gt;
app actually did.&lt;/p&gt;

&lt;p&gt;The cap was &lt;strong&gt;enforced entirely in client-side JavaScript.&lt;/strong&gt; The backend didn't&lt;br&gt;
care. It would happily answer any search, from any caller, for any tier — the&lt;br&gt;
"Plus/Pro/Ultra" gates lived only in the JS that drew the UI. The server saw a&lt;br&gt;
request, read the params, and returned full results. The paywall was a painted&lt;br&gt;
door.&lt;/p&gt;

&lt;p&gt;Specifically, what I found:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A hard-coded, shared &lt;code&gt;userID&lt;/code&gt;&lt;/strong&gt; baked into &lt;code&gt;/files/scripts/funcs.js&lt;/code&gt;
(&lt;code&gt;var userID = "NGY2eWc3dnU6OGc1dDZmdjk"&lt;/code&gt;). Every single visitor used the same
value. The Socket.IO server at &lt;code&gt;wss://api.gopassflights.com:2443/socket.io/&lt;/code&gt;
accepted it from any origin. That ID was a &lt;em&gt;label&lt;/em&gt;, not an &lt;em&gt;authenticator&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No tier enforcement on the WebSocket.&lt;/strong&gt; A standard Engine.IO v4 / Socket.IO
v4 handshake followed by a &lt;code&gt;get&lt;/code&gt; event streamed back full results regardless
of which "paid" features the payload requested — one-to-many cities (Plus),
multi-airport groups (Pro), &lt;code&gt;"All airports"&lt;/code&gt; fan-out (Plus/Pro), Reward Miles
fares, all sort options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The browser-fingerprint object was unused.&lt;/strong&gt; Stub data sailed right through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No socket-level rate limiting.&lt;/strong&gt; The only usage tracking was a separate HTTP
endpoint on a different path from the data plane — skipping it changed nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Origin wasn't actually enforced&lt;/strong&gt; on the WS upgrade.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In other words: anyone who read the JS could replicate every paid feature in an&lt;br&gt;
afternoon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 5 — Responsible disclosure
&lt;/h2&gt;

&lt;p&gt;I didn't post this. I didn't tweet it. I didn't dump it in the subreddit.&lt;/p&gt;

&lt;p&gt;I built a &lt;strong&gt;private proof-of-concept&lt;/strong&gt; (a working page that talked directly to&lt;br&gt;
their Socket.IO endpoint and exposed every paid feature without auth), found the&lt;br&gt;
founder's email, and wrote a clear, professional disclosure. The full report laid&lt;br&gt;
out all six findings above and a &lt;strong&gt;prioritized remediation roadmap&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issue per-session signed tokens (short-lived JWT/signed cookie bound to
account + tier + IP) instead of a shared &lt;code&gt;userID&lt;/code&gt;. Reject connections without
one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforce tier on every &lt;code&gt;get&lt;/code&gt; event server-side&lt;/strong&gt; — the single most impactful
fix. The server knows the plan from the token; it should reject above-tier
payloads instead of trusting the client to hide buttons.&lt;/li&gt;
&lt;li&gt;Rate-limit the socket per user and per IP.&lt;/li&gt;
&lt;li&gt;Validate the fingerprint server-side or remove the dead code.&lt;/li&gt;
&lt;li&gt;Stop exposing long-lived IDs in client JS; mint and rotate session-bound IDs.&lt;/li&gt;
&lt;li&gt;Add CSP/origin checks on the WS upgrade as defense-in-depth.&lt;/li&gt;
&lt;li&gt;Optionally split the data plane — free features on a public socket, everything
else behind authenticated channels.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The founder wrote back, and to his credit, he was gracious about it. He admitted&lt;br&gt;
the client-side enforcement was a &lt;strong&gt;deliberate MVP trade-off&lt;/strong&gt; to ship fast, that&lt;br&gt;
he'd been watching backend logs for competitor abuse and planned to harden it&lt;br&gt;
"when ready." He thanked me — genuinely, at length — for building an entire demo&lt;br&gt;
just to prove the point and for handing him a step-by-step fix instead of just a&lt;br&gt;
list of holes.&lt;/p&gt;

&lt;p&gt;That was the ethical end of it. I reported, they acknowledged, done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3hbaq1l030c8sf17own.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3hbaq1l030c8sf17own.png" alt="The responsible-disclosure email thread with the gopassflights founder" width="799" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The disclosure thread — my report on the bottom, the founder's grateful reply above it. (Private correspondence; redact before any public use.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 6 — From "how does this work" to "I can build this"
&lt;/h2&gt;

&lt;p&gt;But by then I'd done something else as a side effect of all that poking around:&lt;br&gt;
&lt;strong&gt;I'd learned exactly how the data layer worked.&lt;/strong&gt; How these tools talk to&lt;br&gt;
Frontier's booking backend, how the flight details come back, how to structure&lt;br&gt;
the requests, how to parse and cache the results.&lt;/p&gt;

&lt;p&gt;And I had two strong opinions forming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It should be free.&lt;/strong&gt; Permanently. Because none of us own this data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The existing UX was bad.&lt;/strong&gt; The data was there, but the &lt;em&gt;presentation&lt;/em&gt; —
how results were shown, formatted, filtered, and compared — was clumsy across
every tool I tried. I knew I could do that part dramatically better.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I sat down. &lt;strong&gt;Two days. ~400mg of caffeine. Claude as a pair-programmer.&lt;/strong&gt; And&lt;br&gt;
I shipped the first working draft of what is now &lt;strong&gt;letsgowild.msantoki.com&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 7 — What I actually built
&lt;/h2&gt;

&lt;p&gt;This is the part that matters, because "another GoWild tracker" undersells it.&lt;br&gt;
Here's what's in the product and &lt;em&gt;why each piece earns its place in a real&lt;br&gt;
booking workflow.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Search that matches how people actually fly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specific mode&lt;/strong&gt; — you know your dates. One-way or round-trip, depart + optional
return, with calendars that won't let you pick the past.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible mode&lt;/strong&gt; — you &lt;em&gt;don't&lt;/em&gt; know your exact dates, which is the normal state
for a GoWild! pass holder. You give it a &lt;strong&gt;departure window&lt;/strong&gt; (up to 30 days)
and a &lt;strong&gt;stay-length range&lt;/strong&gt; (e.g. 2–5 nights). It scans every day in the window
in parallel, cross-products departures against returns, filters by your stay
length, totals the cash, and hands back &lt;strong&gt;ranked round-trip pairs&lt;/strong&gt;. No more
clicking 25 date combinations by hand. &lt;em&gt;(Real run: PHX↔ATL, depart May 25–29,
2–5 nights → cheapest combo $40.62 total.)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Anywhere" search&lt;/strong&gt; — origin or destination set to a curated list of
Frontier-heavy hubs, so you can ask "where can I cheaply go from PHX?" without
triggering a wasteful all-airports fan-out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-airport fan-out&lt;/strong&gt; — pick several origins/destinations (e.g. all three
NYC airports) and the backend fans the search across them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkg7up0wk7a5l4913b1b3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkg7up0wk7a5l4913b1b3.jpg" alt="The search pill with the Specific / Flexible toggle" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The search pill — flip between **Specific&lt;/em&gt;* (you know your dates) and &lt;strong&gt;Flexible&lt;/strong&gt; (a date window + stay length).*&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9nbdeyv4f0y9hw7p2wy3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9nbdeyv4f0y9hw7p2wy3.jpg" alt="Flexible mode: departure window and stay-length stepper" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Flexible mode: pick a departure window (May 25–29) and a stay-length range (e.g. 2–5 nights).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6okqwyt7606m8wuizvxt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6okqwyt7606m8wuizvxt.jpg" alt="Ranked round-trip pairs returned by flexible search" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The payoff: every valid round-trip combination, ranked by total cash. Cheapest here is $40.62.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Seeing the data clearly — the part competitors got wrong
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All fare classes side by side&lt;/strong&gt; — Standard, Discount Den, GoWild!, and Miles
in one view, so you can instantly see what the GoWild! seat actually saves you
versus paying cash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive map-first interface&lt;/strong&gt; (MapLibre) — route arcs, airport markers,
and live results all share one map context. You can &lt;em&gt;see&lt;/em&gt; the route you're
about to book, not just read a table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;60-day calendar&lt;/strong&gt; — spot the cheapest days to fly across two months at a
glance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30-day price history&lt;/strong&gt; with "cheapest in 30d" tags — know whether the fare
you're looking at is actually a good price or just the price today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep filtering and sorting&lt;/strong&gt; — nonstop, GoWild!-only, no-overnight, fare
range, duration, stops, departure/arrival time, distance, available-seat
counts — all of it, &lt;strong&gt;free&lt;/strong&gt;, none of it behind a tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyp6g3llfb2qlppsv1xik.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyp6g3llfb2qlppsv1xik.jpg" alt="Map-first interface with route arcs and result legs" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Map-first: route arcs, airport markers, and the results rail share one context — you can see the route you're booking.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmmyzltuvu34oev6eqle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmmyzltuvu34oev6eqle.png" alt="Fare-class comparison with 30-day price history" width="680" height="552"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Every fare class side by side — here a PHX→LAS nonstop where the GoWild! seat is *&lt;/em&gt;$15.41** vs &lt;strong&gt;$243.98&lt;/strong&gt; standard — with 30-day price history and a "cheapest in 30d" tag.*&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73e6vu46twtd5wfi8see.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73e6vu46twtd5wfi8see.png" alt="Filters, sort options, range sliders, and the destination grid" width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Every filter and sort, plus dual-range sliders for duration, fare, stops, times, distance, and seats — all free, none of it tiered.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Planning a whole trip, not just one flight
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trip Builder&lt;/strong&gt; — add legs from results into a drawer, reorder them, inspect
layovers, name the trip. Anonymous trips live in local storage and &lt;strong&gt;migrate to
your account after login&lt;/strong&gt; so nothing is lost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI trip planner&lt;/strong&gt; (OpenRouter-backed) — it calls real flight-search tools
server-side, computes layovers, and proposes itineraries. If the AI key isn't
configured, everything else still works — it degrades cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr83qatr1qrsdxjq5g0q0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr83qatr1qrsdxjq5g0q0.jpg" alt="Trip Builder panel assembling a multi-leg itinerary" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Trip Builder: add legs from results, reorder, inspect layovers, and see running totals (cash, flying time, overnights).&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Not missing the seat you wanted
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Watches&lt;/strong&gt; — subscribe to a route + date + fare class with an optional max
price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser push alerts&lt;/strong&gt; — a background worker re-checks active watches on a
schedule and pushes you a notification when a GoWild! seat opens or a fare drops
below your target, with de-duplication so you don't get spammed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The plumbing that makes it fast and stays online
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;background worker&lt;/strong&gt; pre-warms popular routes every 30 minutes, caches
day-level summaries in Redis, and writes per-fare-class snapshots into fare
history — so common searches feel instant and history accrues over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming search&lt;/strong&gt; results render into the rail as they arrive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real auth&lt;/strong&gt; — Argon2 password hashing, JWT access + refresh tokens, a
"remember me for 7 days" option, email verification, password reset, and an
active-sessions manager.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin + access control&lt;/strong&gt; — signup pause, a waitlist, single-use email
invites, and in-app + push announcements (this is what saved me during the
launch surge — see below).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stack, for the record:&lt;/strong&gt; FastAPI + SQLAlchemy (async) + PostgreSQL + Redis +&lt;br&gt;
APScheduler on the backend; Next.js 16 / React 19 / TypeScript / Tailwind /&lt;br&gt;
MapLibre on the front end; the whole thing deployed as a Docker stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 8 — Launch, and the Reddit reaction
&lt;/h2&gt;

&lt;p&gt;I posted it to &lt;strong&gt;r/gowildfrontier&lt;/strong&gt; (as &lt;code&gt;Personal_Citron9609&lt;/code&gt;): a free GoWild!&lt;br&gt;
tracker with a map view, 60-day calendar, and price alerts — &lt;em&gt;"what's missing?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Two things happened at once.&lt;/p&gt;

&lt;h3&gt;
  
  
  The pushback
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;gopassflights devs showed up.&lt;/strong&gt; One account ("GoWildDevs") commented that&lt;br&gt;
the airport-selection list "looked identical to ours," that they'd "checked the&lt;br&gt;
dev tools," and that my site "might be caching our flight data" — asking me to&lt;br&gt;
"build your own infrastructure rather than using our processed files." A second,&lt;br&gt;
similar comment echoed it almost word-for-word. There were a few &lt;strong&gt;throwaway /&lt;br&gt;
fake-looking accounts&lt;/strong&gt; piling on with the same line.&lt;/p&gt;

&lt;p&gt;The argument escalated to: &lt;em&gt;"we have to pay server costs for every search he&lt;br&gt;
scrapes from us… he's draining someone else's infrastructure."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My response was simple, and public:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Funny — when I emailed you privately about the security holes in your app, you&lt;br&gt;
were grateful. Now you're whining about me 'draining your infrastructure'? Pick&lt;br&gt;
a lane."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"First off, I am not using your infrastructure at all. Secondly, I'll open-source&lt;br&gt;
my code when I'm done working. If you're still worried I'm using your stuff under&lt;br&gt;
the hood — you can DM me."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A neutral commenter (SD-Buckeye) cut to the real point that applies to &lt;em&gt;all&lt;/em&gt; of&lt;br&gt;
us: &lt;em&gt;"Aren't you guys just breaking Frontier's ToS anyway?"&lt;/em&gt; — which is exactly&lt;br&gt;
why I think none of these tools have any business charging money. We're all&lt;br&gt;
standing in the same glass house.&lt;/p&gt;

&lt;h3&gt;
  
  
  The support
&lt;/h3&gt;

&lt;p&gt;The encouragement, though, massively outweighed the noise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;"We GoWilders thank you!!!"&lt;/em&gt; — DrMoLew&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Love the interface/dark mode — sickkk!"&lt;/em&gt; — Soccer-Plane-444&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"This is just faaaantastic! The look, the features, the ease of use… that's me
using it for about 30 seconds. Hats off to you!"&lt;/em&gt; — Silent_Garden_2668&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Great work! Lots of potential. Keep it going."&lt;/em&gt; — CarbonCubSS&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"The UI and interface is crazy ngl."&lt;/em&gt; — sshivanshh11&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Love it! Would love a Discord so a community could talk about it."&lt;/em&gt; —
whatevethefuck212&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Haven't bought the GoWild yet but this'll help me decide. So this is what
hardworking people do with their free time while I'm binging Netflix."&lt;/em&gt; —
2_krazykats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one stuck with me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 9 — The surge, and going invite-only
&lt;/h2&gt;

&lt;p&gt;Then the registrations hit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100+ sign-ups in a single day&lt;/strong&gt; — more than my email-verification limits were&lt;br&gt;
provisioned to handle. Rather than let verification emails silently fail, I&lt;br&gt;
&lt;strong&gt;flipped the site to invite-only&lt;/strong&gt; for a few days behind this message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Too many registrations in the last 24 hours, so new signups are temporarily&lt;br&gt;
paused. Enter your email below to request access. We'll notify you when&lt;br&gt;
registration opens again, or send you a direct invite if access is available&lt;br&gt;
sooner."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The admin tooling I'd built — signup pause, waitlist, single-use invites — turned&lt;br&gt;
out to be exactly what I needed within 24 hours of launch. Good luck, partly.&lt;br&gt;
Mostly: building the boring access-control plumbing up front paid off immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 10 — Removed from the subreddit it was built for
&lt;/h2&gt;

&lt;p&gt;The launch post didn't survive long. On &lt;strong&gt;May 5&lt;/strong&gt;, r/gowildfrontier moderators&lt;br&gt;
&lt;strong&gt;removed it&lt;/strong&gt; for self-promotion.&lt;/p&gt;

&lt;p&gt;I sent modmail to ask for it back. The exchange (with mod &lt;code&gt;SuccessfulOutcome130&lt;/code&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; &lt;em&gt;"I understand promotion is not allowed in this subreddit. But I am not&lt;br&gt;
charging any money and I am never planning to. I've had people using my services&lt;br&gt;
and I plan to keep it that way. I'd appreciate if you can allow my post back."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mod:&lt;/strong&gt; &lt;em&gt;"Unfortunately we've had many issues with 'free' tools that have spammed&lt;br&gt;
the sub in the past. Additionally, to date, **every 'free' tool has ended up&lt;br&gt;
monetizing.&lt;/em&gt;* The direction of the sub is not for tooling but rather to post&lt;br&gt;
experiences and trip reports. Please respect the rules of the sub; it is very&lt;br&gt;
common in subreddits to ban self-promotions (free or otherwise)."*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; &lt;em&gt;"I have no plans to monetize this, and I fully understand the rule against&lt;br&gt;
self-promotion. My intent was simply to share a tool the community could use&lt;br&gt;
freely. Personally, I don't think people should have to pay for something that&lt;br&gt;
isn't really theirs to sell. Tools like gopassflights and others are a good&lt;br&gt;
example — as a developer, I can tell their data isn't coming from official&lt;br&gt;
channels, and it genuinely bothers me to see users charged for that. I'm not here&lt;br&gt;
to market anything."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mod:&lt;/strong&gt; &lt;em&gt;"I understand your frustration and I genuinely believe you have every&lt;br&gt;
intention to keep it free. However, the reality is that costs will increase and&lt;br&gt;
monetization will be the only path forward. Best of luck with your business and I&lt;br&gt;
appreciate your understanding of the rules moving forward."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'll be straight about how this felt. The rule — &lt;em&gt;no self-promotion, free or&lt;br&gt;
otherwise&lt;/em&gt; — is a legitimate, common subreddit rule, and on paper the mod applied&lt;br&gt;
it consistently. But from where I sat, the field didn't feel level. The same&lt;br&gt;
community happily name-drops the &lt;strong&gt;paid&lt;/strong&gt; tools in conversation, while the stated&lt;br&gt;
logic — &lt;em&gt;"every free tool eventually monetizes, so even a free one is suspect"&lt;/em&gt; —&lt;br&gt;
effectively &lt;strong&gt;pre-judges the free option by the track record of the paid ones.&lt;/strong&gt;&lt;br&gt;
It read as protecting the exact status quo I was trying to offer an alternative&lt;br&gt;
to.&lt;/p&gt;

&lt;p&gt;Then it went a step further. On &lt;strong&gt;May 23&lt;/strong&gt;, I got a &lt;strong&gt;permanent ban&lt;/strong&gt; from&lt;br&gt;
r/gowildfrontier — this time for &lt;em&gt;a comment&lt;/em&gt;, where I'd done little more than&lt;br&gt;
mention my free service:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"You have been permanently banned from participating in /r/gowildfrontier&lt;br&gt;
because your comment violates this community's rules. … If you use another&lt;br&gt;
account to circumvent this community ban, that will be considered a violation of&lt;br&gt;
the Reddit Rules and may result in your account being banned from the platform&lt;br&gt;
as a whole."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So: &lt;strong&gt;removed for posting it, then banned for mentioning it.&lt;/strong&gt; My read — and I'll&lt;br&gt;
label it as a read, not a proven fact — is that the moderation leaned toward the&lt;br&gt;
incumbents who market in that space, free or paid. Either way, the irony wasn't&lt;br&gt;
lost on me: walled out of the one subreddit the tool was literally built for.&lt;/p&gt;

&lt;p&gt;It didn't change the math, though. The original (now-removed) post had already&lt;br&gt;
sent its wave of traffic, people had the link, and word of mouth carried it the&lt;br&gt;
rest of the way. You can remove a post. You can't un-share a URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 11 — The numbers
&lt;/h2&gt;

&lt;p&gt;A few weeks in, the traffic told the story (via Rybbit analytics).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Last 30 days&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;~1,700 unique visitors&lt;/strong&gt;, &lt;strong&gt;2,200 sessions&lt;/strong&gt;, &lt;strong&gt;6,700 pageviews&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;~3 pages per session, ~2m 48s average session, 38% bounce&lt;/li&gt;
&lt;li&gt;A sharp launch spike of &lt;strong&gt;~530 users on a single day (May 4)&lt;/strong&gt;, then a healthy
sustained tail rather than a flatline — people kept coming back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbg6b55autgcou0ntzan0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbg6b55autgcou0ntzan0.png" alt="Rybbit 30-day traffic with the May 4 launch spike" width="800" height="375"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;30 days: 1.7K users, 2.2K sessions, 6.7K pageviews — and the unmistakable launch spike on May 4.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where they came from&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reddit was the spark&lt;/strong&gt;: &lt;code&gt;reddit.com&lt;/code&gt; (315) + &lt;code&gt;com.reddit.frontpage&lt;/code&gt; (122) +
&lt;code&gt;old.reddit.com&lt;/code&gt; — the launch post was the engine. Then Android Gmail, Google,
Facebook, even ChatGPT and a temp-mail service (people guarding their inbox).&lt;/li&gt;
&lt;li&gt;The funnel is legible in the page hits: &lt;code&gt;/&lt;/code&gt; (2K) → &lt;code&gt;/register&lt;/code&gt; (1K) →
&lt;code&gt;/login&lt;/code&gt; (717) → &lt;code&gt;/verify&lt;/code&gt; (344). Land, sign up, verify, come back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1mc95n90z6oapi3qs6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1mc95n90z6oapi3qs6a.png" alt="Top referrers and most-visited pages" width="799" height="297"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Referrers and pages: Reddit on top, and a clean land → register → login → verify funnel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But the most telling cut is &lt;strong&gt;channels&lt;/strong&gt;: &lt;strong&gt;Direct (1.7K)&lt;/strong&gt; dwarfs Organic Social&lt;br&gt;
(442). After the initial Reddit blast, most sessions are people typing the URL or&lt;br&gt;
returning by bookmark — the strongest signal I have that it's becoming a habit,&lt;br&gt;
not just a one-time curiosity click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foldueayphufx27d02wlu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foldueayphufx27d02wlu.png" alt="Acquisition channels — Direct dominates Organic Social" width="545" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Direct (1.7K) &amp;gt; Organic Social (442): the Reddit spike kicked it off, but returning/direct traffic now carries it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who they were&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overwhelmingly &lt;strong&gt;mobile&lt;/strong&gt; — Mobile Safari (863) + Mobile Chrome (400) led, which
validated every minute spent on the responsive layout.&lt;/li&gt;
&lt;li&gt;Overwhelmingly &lt;strong&gt;US&lt;/strong&gt; (2.1K sessions), with a long international tail: Pakistan,
UK, Canada, Puerto Rico, Sweden, Germany, Hungary, Honduras, Panama.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdmvvzn3j6evjytrlll4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdmvvzn3j6evjytrlll4.png" alt="Browsers and countries breakdown" width="800" height="318"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Mobile-first and US-heavy — exactly the audience a GoWild! pass tool should expect.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A representative day, well after the spike&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;68 unique users, 77 sessions, 223 pageviews, 2.9 pages/session, 2m 36s sessions —
steady daily usage long after the launch wave passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fct0l48wnddri4kcm5idq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fct0l48wnddri4kcm5idq.png" alt="A single day's traffic, weeks after launch" width="800" height="596"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A normal day weeks later: ~68 users still showing up, spread across the clock — not a dead post.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accounts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;318 total users&lt;/strong&gt;, &lt;strong&gt;308 verified&lt;/strong&gt;, &lt;strong&gt;0 disabled&lt;/strong&gt;, &lt;strong&gt;53 new in the last 7
days&lt;/strong&gt;, 25 push subscriptions — and still zero monetization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2my1dpobuba9vexcvbep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2my1dpobuba9vexcvbep.png" alt="Admin dashboard: user and verification counts" width="653" height="319"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The admin panel: 318 users, 308 verified, 53 new in the last 7 days — all on a free, invite-managed signup flow.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 12 — Why it stays free
&lt;/h2&gt;

&lt;p&gt;Let me restate the philosophy plainly, because it's the whole reason this exists:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The data isn't ours. It's Frontier's.&lt;/strong&gt; Every tool in this space — including&lt;br&gt;
mine — is a scraper sitting on top of an airline's public booking data. I'm not&lt;br&gt;
pretending otherwise; I scrape too, the same way they do. That's precisely &lt;em&gt;why&lt;/em&gt;&lt;br&gt;
I won't charge for it. You don't get to wrap data you don't own, against the&lt;br&gt;
source's terms, and then sell a $9.89/mo "Ultra" tier with nine mystery features&lt;br&gt;
coming soon. If the value you're adding is &lt;em&gt;presentation&lt;/em&gt;, then compete on&lt;br&gt;
presentation — and let people use it for free.&lt;/p&gt;

&lt;p&gt;So LetsGoWild has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No paid tier. No trial. No credit card. No "Pro."&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The features other tools gate behind $5–$10/mo — multi-airport search, the
interactive map, the calendar, all the filters, alerts — are just… there.&lt;/li&gt;
&lt;li&gt;A stated intent to &lt;strong&gt;open-source the code&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Put concretely against the market survey from Chapter 3: gowilder.net charges&lt;br&gt;
$10/mo for an AI trip planner — &lt;strong&gt;LetsGoWild has one, free.&lt;/strong&gt; the1491club gates&lt;br&gt;
real-time availability and pricing behind "First Class" — &lt;strong&gt;that's the default&lt;br&gt;
here.&lt;/strong&gt; SearchGWP doesn't offer a free tier at all — and the entire LetsGoWild&lt;br&gt;
product &lt;em&gt;is&lt;/em&gt; the free tier, because there is no other tier to upsell you to.&lt;/p&gt;

&lt;p&gt;A moderator told me, in so many words, that &lt;em&gt;every&lt;/em&gt; free tool in this space&lt;br&gt;
eventually monetizes — that costs rise and "monetization will be the only path&lt;br&gt;
forward." Maybe that's been true historically. I intend to be the exception, and&lt;br&gt;
I'm writing it down here precisely so it can be held against me if I'm ever&lt;br&gt;
tempted to break it. The data isn't mine to sell; that doesn't change when the&lt;br&gt;
server bill goes up.&lt;/p&gt;

&lt;p&gt;The second reason is simpler: I genuinely believed I could present this data&lt;br&gt;
better than what existed, and the launch reaction suggests I wasn't wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 13 — What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-sourcing&lt;/strong&gt; the codebase, as promised publicly.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;community space&lt;/strong&gt; (Discord) — multiple people asked, and it's a good idea.&lt;/li&gt;
&lt;li&gt;Continuing to widen the &lt;strong&gt;flexible-search&lt;/strong&gt; patterns people actually want.&lt;/li&gt;
&lt;li&gt;Keeping the lights on, keeping it fast, and keeping it &lt;strong&gt;free&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Timeline at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Late Apr 2026&lt;/td&gt;
&lt;td&gt;Searching PHX→ATL for a summer family trip; fares ~$300+. Spotted Frontier's ~$200 GoWild! summer pass.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late Apr 2026&lt;/td&gt;
&lt;td&gt;Researched how GoWild! works; found gopassflights.com (and peers) via r/gowildfrontier.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late Apr 2026&lt;/td&gt;
&lt;td&gt;Hit the paywalls. Noticed the free-tier 3-search cap was client-side only; confirmed full backend access in DevTools.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late Apr 2026&lt;/td&gt;
&lt;td&gt;Built a private PoC, sent a full responsible-disclosure report to the founder. He replied gratefully, admitting it was an MVP trade-off.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Early May 2026&lt;/td&gt;
&lt;td&gt;Having learned the data layer, built the first draft of LetsGoWild in ~2 days.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;~May 3–4, 2026&lt;/td&gt;
&lt;td&gt;Launched + posted to r/gowildfrontier. 500+ visitors in a day.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;~May 3–4, 2026&lt;/td&gt;
&lt;td&gt;gopassflights devs + throwaway accounts pushed back; community support far outweighed it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Within 24h&lt;/td&gt;
&lt;td&gt;100+ registrations exceeded email-verification limits → flipped to invite-only with a waitlist.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;May 5, 2026&lt;/td&gt;
&lt;td&gt;r/gowildfrontier mods &lt;strong&gt;removed&lt;/strong&gt; the launch post for self-promotion; modmail appeal denied ("every free tool ends up monetizing").&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;May 23, 2026&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Permanent ban&lt;/strong&gt; from r/gowildfrontier — for a comment merely mentioning the free tool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;~May 24, 2026&lt;/td&gt;
&lt;td&gt;~1.7K unique visitors/30d, 318 users (308 verified), still 100% free. Tool kept growing on word of mouth despite the ban.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




</description>
      <category>security</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
