
Building UsernameScout
How I built a full stack username availability checker and the problems I ran into along the way.
Building UsernameScout
UsernameScout started as a simple idea. I wanted a fast way to check whether a username was available across multiple platforms without manually opening tabs and guessing.
What began as a small utility quickly turned into a full stack project with real backend challenges.
The problem
Checking username availability sounds simple, but it is not.
Every platform behaves differently. Some expose APIs. Some return useful status codes. Others require parsing HTML responses. Rate limits vary widely and error handling matters if you want accurate results.
I wanted a tool that could:
- Check many platforms at once
- Handle platform specific logic correctly
- Return results quickly and reliably
- Be simple to use from a clean web interface
Architecture overview
UsernameScout is built as a full stack application.
The backend is responsible for all availability checks. It exposes a REST API that accepts a username and returns availability results per platform.
The frontend focuses on speed and clarity. Users enter a username, trigger a search, and immediately see results update as checks complete.
High level stack choices:
- FastAPI for the backend API
- AsyncIO for concurrent requests
- Next.js with TypeScript for the frontend
- Tailwind CSS for styling
- REST based communication between frontend and backend
Handling concurrency
One of the core challenges was performance.
Checking platforms sequentially is slow and unnecessary. The backend uses async requests so multiple platforms can be checked at the same time. This significantly reduces response time and improves the user experience.
Concurrency also introduced complexity. Each platform needed isolated error handling so one failure would not affect the rest of the results.
Platform specific detection logic
There is no universal way to detect username availability.
Some platforms return a clear not found response. Others return a valid page with subtle differences in content. Some block requests aggressively if you are not careful.
Each platform uses its own detection strategy. The backend maps platforms to detection methods so logic stays organized and easy to extend.
This design makes it straightforward to add new platforms without rewriting existing code.
Frontend design decisions
The UI is intentionally minimal.
The goal is to get answers quickly, not overwhelm the user. Results are sortable and easy to scan. Feedback is immediate and loading states are clear.
I focused on making the interface responsive and predictable so it feels fast even when network latency exists.
What I would improve next
There are several areas I want to improve over time:
- Persistent caching to reduce repeat checks
- Better handling of aggressive rate limiting
- Optional authentication for saved searches
- More granular confidence indicators per platform
The core system is solid, but there is plenty of room to evolve it.
Closing thoughts
UsernameScout was a great example of how a simple idea can uncover real engineering challenges. Async systems, unreliable third party behavior, and performance constraints all showed up quickly.
Projects like this are why I enjoy building software. You start with a small problem and end up designing real systems to solve it properly.
More improvements and write ups to come.