惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
H
Heimdal Security Blog
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
Webroot Blog
Webroot Blog
小众软件
小众软件
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Cloudbric
Cloudbric
AI
AI
WordPress大学
WordPress大学
博客园 - 聂微东
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
博客园 - Franky
V
V2EX
Schneier on Security
Schneier on Security
G
GRAHAM CLULEY
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
H
Help Net Security
量子位
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recorded Future
Recorded Future
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
C
Cisco Blogs
S
Security Affairs

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
The Paywall Was a Painted Door
Manan Santoki · 2026-05-26 · via DEV Community

How a $300 plane ticket turned into a free flight-search tool, a responsible-disclosure
report, a Reddit fight, and 1,700 visitors in a month.

Live: https://letsgowild.msantoki.com
Not affiliated with Frontier Airlines. Built by Manan Santoki.

LetsGoWild — map-first GoWild! flight search
LetsGoWild: an "Anywhere from PHX" search — 28 live options, priced route arcs, and a results rail, all in one map-first view.


TL;DR

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


Chapter 1 — The $300 problem

It started the way most side projects do: I wanted something for myself.

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

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

Chapter 2 — The rabbit hole

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

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

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

I tried them. And one thing genuinely annoyed me.

Chapter 3 — The thing that annoyed me: the paywall

gopassflights, like the others, was paywalled into tiers:

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

gopassflights tiered pricing — Free, Plus, Pro, Ultra
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.

And it wasn't just them — the whole market paywalls

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

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

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

Every single one of them gates the same scraped Frontier data that none of
them own. That's the whole market. It's the backdrop for everything that follows.

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

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

Chapter 4 — The 3-search limit, and what I found behind it

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

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

Specifically, what I found:

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

In other words: anyone who read the JS could replicate every paid feature in an
afternoon.

Chapter 5 — Responsible disclosure

I didn't post this. I didn't tweet it. I didn't dump it in the subreddit.

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

  1. Issue per-session signed tokens (short-lived JWT/signed cookie bound to account + tier + IP) instead of a shared userID. Reject connections without one.
  2. Enforce tier on every get event server-side — 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.
  3. Rate-limit the socket per user and per IP.
  4. Validate the fingerprint server-side or remove the dead code.
  5. Stop exposing long-lived IDs in client JS; mint and rotate session-bound IDs.
  6. Add CSP/origin checks on the WS upgrade as defense-in-depth.
  7. Optionally split the data plane — free features on a public socket, everything else behind authenticated channels.

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

That was the ethical end of it. I reported, they acknowledged, done.

The responsible-disclosure email thread with the gopassflights founder
The disclosure thread — my report on the bottom, the founder's grateful reply above it. (Private correspondence; redact before any public use.)

Chapter 6 — From "how does this work" to "I can build this"

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

And I had two strong opinions forming:

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

So I sat down. Two days. ~400mg of caffeine. Claude as a pair-programmer. And
I shipped the first working draft of what is now letsgowild.msantoki.com.

Chapter 7 — What I actually built

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

Search that matches how people actually fly

  • Specific mode — you know your dates. One-way or round-trip, depart + optional return, with calendars that won't let you pick the past.
  • Flexible mode — you don't know your exact dates, which is the normal state for a GoWild! pass holder. You give it a departure window (up to 30 days) and a stay-length range (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 ranked round-trip pairs. No more clicking 25 date combinations by hand. (Real run: PHX↔ATL, depart May 25–29, 2–5 nights → cheapest combo $40.62 total.)
  • "Anywhere" search — 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.
  • Multi-airport fan-out — pick several origins/destinations (e.g. all three NYC airports) and the backend fans the search across them.

The search pill with the Specific / Flexible toggle
The search pill — flip between **Specific* (you know your dates) and Flexible (a date window + stay length).*

Flexible mode: departure window and stay-length stepper
Flexible mode: pick a departure window (May 25–29) and a stay-length range (e.g. 2–5 nights).

Ranked round-trip pairs returned by flexible search
The payoff: every valid round-trip combination, ranked by total cash. Cheapest here is $40.62.

Seeing the data clearly — the part competitors got wrong

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

Map-first interface with route arcs and result legs
Map-first: route arcs, airport markers, and the results rail share one context — you can see the route you're booking.

Fare-class comparison with 30-day price history
Every fare class side by side — here a PHX→LAS nonstop where the GoWild! seat is *$15.41** vs $243.98 standard — with 30-day price history and a "cheapest in 30d" tag.*

Filters, sort options, range sliders, and the destination grid
Every filter and sort, plus dual-range sliders for duration, fare, stops, times, distance, and seats — all free, none of it tiered.

Planning a whole trip, not just one flight

  • Trip Builder — add legs from results into a drawer, reorder them, inspect layovers, name the trip. Anonymous trips live in local storage and migrate to your account after login so nothing is lost.
  • AI trip planner (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.

Trip Builder panel assembling a multi-leg itinerary
Trip Builder: add legs from results, reorder, inspect layovers, and see running totals (cash, flying time, overnights).

Not missing the seat you wanted

  • Watches — subscribe to a route + date + fare class with an optional max price.
  • Browser push alerts — 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.

The plumbing that makes it fast and stays online

  • A background worker 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.
  • Streaming search results render into the rail as they arrive.
  • Real auth — Argon2 password hashing, JWT access + refresh tokens, a "remember me for 7 days" option, email verification, password reset, and an active-sessions manager.
  • Admin + access control — signup pause, a waitlist, single-use email invites, and in-app + push announcements (this is what saved me during the launch surge — see below).

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

Chapter 8 — Launch, and the Reddit reaction

I posted it to r/gowildfrontier (as Personal_Citron9609): a free GoWild!
tracker with a map view, 60-day calendar, and price alerts — "what's missing?"

Two things happened at once.

The pushback

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

The argument escalated to: "we have to pay server costs for every search he
scrapes from us… he's draining someone else's infrastructure."

My response was simple, and public:

"Funny — when I emailed you privately about the security holes in your app, you
were grateful. Now you're whining about me 'draining your infrastructure'? Pick
a lane."

And:

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

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

The support

The encouragement, though, massively outweighed the noise:

  • "We GoWilders thank you!!!" — DrMoLew
  • "Love the interface/dark mode — sickkk!" — Soccer-Plane-444
  • "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!" — Silent_Garden_2668
  • "Great work! Lots of potential. Keep it going." — CarbonCubSS
  • "The UI and interface is crazy ngl." — sshivanshh11
  • "Love it! Would love a Discord so a community could talk about it." — whatevethefuck212
  • "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." — 2_krazykats

That last one stuck with me.

Chapter 9 — The surge, and going invite-only

Then the registrations hit.

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

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

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

Chapter 10 — Removed from the subreddit it was built for

The launch post didn't survive long. On May 5, r/gowildfrontier moderators
removed it for self-promotion.

I sent modmail to ask for it back. The exchange (with mod SuccessfulOutcome130):

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

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

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

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

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

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

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

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

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

Chapter 11 — The numbers

A few weeks in, the traffic told the story (via Rybbit analytics).

Last 30 days

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

Rybbit 30-day traffic with the May 4 launch spike
30 days: 1.7K users, 2.2K sessions, 6.7K pageviews — and the unmistakable launch spike on May 4.

Where they came from

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

Top referrers and most-visited pages
Referrers and pages: Reddit on top, and a clean land → register → login → verify funnel.

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

Acquisition channels — Direct dominates Organic Social
Direct (1.7K) > Organic Social (442): the Reddit spike kicked it off, but returning/direct traffic now carries it.

Who they were

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

Browsers and countries breakdown
Mobile-first and US-heavy — exactly the audience a GoWild! pass tool should expect.

A representative day, well after the spike

  • 68 unique users, 77 sessions, 223 pageviews, 2.9 pages/session, 2m 36s sessions — steady daily usage long after the launch wave passed.

A single day's traffic, weeks after launch
A normal day weeks later: ~68 users still showing up, spread across the clock — not a dead post.

Accounts

  • 318 total users, 308 verified, 0 disabled, 53 new in the last 7 days, 25 push subscriptions — and still zero monetization.

Admin dashboard: user and verification counts
The admin panel: 318 users, 308 verified, 53 new in the last 7 days — all on a free, invite-managed signup flow.

Chapter 12 — Why it stays free

Let me restate the philosophy plainly, because it's the whole reason this exists:

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

So LetsGoWild has:

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

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

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

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

Chapter 13 — What's next

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

Timeline at a glance

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