Geolocator: Building my first Lightning app
My background is in UX design. I know how to think about user flows, how to make things feel right, how to design something people actually want to use. What I don't have is a background in full-stack web development. This lack of knowledge has always prevented me from turning the numerous ideas in my head into reality.
For over a year, I kept coming back to the same idea: to build a micro web app with a Lightning Network paywall. I'm very interested in OSINT and GeoGuessr. A good start would be to build an app that allows people to find possible locations for a photo based solely on visual evidence.
Nothing ambitious, just something that would let users pay a few satoshis to request a visual analysis, using Bitcoin's instant settlement layer. It felt like the right payment model for a very straight forward tool: Lightweight, permissionless, no subscriptions, no accounts.
I tried Codex. I failed. I gave Cursor a try months later. Failed again. Then again.
The idea was not the problem. The implementation was. Every time I got close to wiring up the Lightning integration, I'd hit a wall I couldn't get past alone. LNBits got me very close, but not to the point that I needed. At some point I started wondering if this class of project was just out of reach for someone with my background.
Then I built it. In days.
This is the story of GeoLocator, an AI photo geolocation tool with a Lightning paywall, and the two things that finally made it possible.
The Turning Point: Claude Code and MoneyDevKit
My previous attempts at Lightning integration all shared the same failure pattern: I'd find an LSP, give it to the AI tool I was using at the moment, see it get lost in infrastructure concerns I didn't fully understand, and eventually lose momentum before anything worked. The problem wasn't any single piece. It was the compounding of unfamiliar decisions without enough context to make them confidently.
What changed this time was two tools arriving together.
MoneyDevKit is one of the easiest and fastest ways to accept payments on a web application. Instead of requiring you to manage a Lightning node or implement the payment protocol yourself, it gives you clean abstractions that slot directly into a Next.js project. The hard infrastructure is handled. Creating a Lightning invoice, displaying a checkout page, verifying a payment, all of it becomes a few lines of code rather than weeks of low-level plumbing. For someone who had been stopped by that plumbing every time before, this was the missing piece.
But even with that, there are integration decisions that aren't obvious. How to connect the pieces, how to structure the flow, how to handle edge cases. That's where the second piece mattered.
Claude Code was the building tool that made the whole thing coherent. What Claude Code actually did was meet me where I was. When I didn't know how to structure the repository, it walked me through it, not just the commands but why. When I needed to set up Vercel and configure environment variables, it explained what each one was for. When bugs appeared, it helped me understand what the error was actually telling me before jumping to a fix. It didn't just hand me code. It gave me enough context to make the right decisions myself.
As a designer, I think in terms of user flows and interactions. Claude Code matched that mode of thinking. It was the first tool that consistently explained the why behind the what, which made the difference between following instructions and actually understanding what I was building.
The combination of these two tools was the turning point. MoneyDevKit eliminated the infrastructure complexity that had stopped me every time before. Claude Code provided the contextual understanding that turned individual pieces into a working system.
What GeoLocator Does
The app does one thing: you submit a photo, pay 100 satoshis (a few cents), and an AI analyzes the image and returns the three most likely locations where it was taken.
It uses Google Gemini 3.1 Flash Lite Preview to work through visual clues, including architecture, vegetation, road markings, signage, vehicles, sun angle, and soil color, and synthesizes them into a ranked list with confidence levels and specific evidence. Results can be exported as PNG, JSON, or plain text. Images are never stored server-side.
The payment is Lightning-native. No accounts. No credit cards. No friction beyond maying the Lightning invoice and checking the results.
The Prompt Engineering
The one area where my design background gave me a clear advantage was the AI prompt. Getting Gemini to return consistent, structured, and genuinely useful results meant building a proper analytical framework, guiding the model through 11 categories of visual evidence: land and seascape, built environment, infrastructure, vegetation, text and symbols, vehicles, climate signals, cultural markers, road and soil color, street furniture, and contact information patterns.
The framework also includes a weighted confidence system that prioritizes permanent features (landforms, architecture) over easily-changed ones (clothing, flags), and a strict JSON output format that ensures the results are always structured the same way.
That framework went through many testing cycles. Upload a photo with a known location, check whether the model's reasoning matched what was actually visible, refine the weighting, tighten the output format, and do it again. By the time it reached its current version, the system prompt had gone through four major revisions. The iteration process felt familiar. It's not that different from testing a UX flow. You watch how the system behaves, identify where it breaks down, and adjust.
What This Means Beyond This App
I've been trying to put words to what this experience represents, and I keep coming back to something that feels significant.
The open source ecosystem around Bitcoin and Lightning runs on contributors, individuals who build tools not because a company told them to, but because they see a problem worth solving. The health of that ecosystem depends on how many such people can actually ship working software.
For years, there's been a gap between "caring enough to build something" and "being able to build it." That gap has filtered out a lot of people. Not because their ideas weren't good, but because certain implementation problems (Lightning infrastructure being a classic example) required either deep technical expertise or a team with complementary skills.
What I'm seeing is that gap narrowing in a meaningful way. Not disappearing. In my case, I am certain that my previous failed experiments were essential in providing me with the technical understanding necessary to succeed when I tried again with the right tools. So I dont mean that building software is easy for everyone.
But individuals and small teams can move faster, catch more edge cases, and cover more ground. For a certain class of project, the "you need at least one developer to make this real" constraint is beginning to dissolve. What used to require a deeper experience with the technical side is becoming achievable for a single person with the right tools and enough determination.
There's a renaissance possible here. Not just in what gets built, but in who builds it: Bitcoiners who are designers, writers, educators, people who understand specific problems deeply and have been sitting on ideas because they didn't think they could execute them.
What's Next
GeoLocator works, but it's not finished.
Making it agent-friendly. One of the more interesting possibilities is that this tool doesn't have to be used only by humans. AI agents that need to geolocate an image (for research, verification, or journalism workflows) should be able to call it programmatically. The Lightning-native payment model actually makes this more elegant, not less: an agent with a Lightning wallet can pay for exactly the analyses it needs, with no account setup, no API key provisioning, no monthly billing. That's a very interesting direction I intend to explore.
Improving the documentation. The current docs are written for developers. That needs to change. A lot of people who might genuinely find this tool useful have never interacted with Lightning before. I want to add a proper guide covering how to get started with Lightning for first-timers, what satoshis are in practical terms, and why the app is Lightning-only. That last point deserves a clear explanation: no accounts are required, payments are private by default, there is no payment processor intermediary, and settlement is instant. It wasn't an arbitrary technical choice. It's the point. I also want to make sure people know which everyday apps they can use to pay a Lightning invoice today. Cash App, Strike, and Wallet of Satoshi all support it, and most people already have one of them.
Come Build With Me
None of this happened in isolation. Projects like this benefit enormously from people who look at them with fresh eyes and tell you what's broken, confusing, or missing. Liz has been one of those people, helping improve the app in ways I couldn't see clearly from the inside.
If you've used the tool and have thoughts, spotted a bug, have ideas about the agent API, or want to contribute, I'd love to hear from you. The code is open source for exactly this reason. Building in public means building with whoever shows up, and the more people who can participate in projects like this (not just use them, but actually shape them) the healthier the ecosystem gets.