DEV Community

Cover image for πŸ” GitHub Profile Finder – Built with Bolt
Smriti Singh
Smriti Singh

Posted on

πŸ” GitHub Profile Finder – Built with Bolt

WLH Challenge: Building with Bolt Submission

This is a submission for the World's Largest Hackathon Writing Challenge: Building with Bolt.

πŸ’‘ Prompt
The challenge was simple:

Create a landing page on GitHub where I can fill in the GitHub username, and click on search; the profile of the particular user should appear.

What followed was an exciting and seamless experience of building this project with the Bolt template.

πŸš€ Project Overview
I built a GitHub Profile Finderβ€”a sleek, responsive, and fully functional web app that allows users to search for any GitHub username and instantly view their public profile details including:

  • Name
  • Bio
  • Avatar
  • Followers & Following count
  • Repositories
  • Location
  • Company
  • And more!

All of this is powered by the GitHub REST API.

πŸ› οΈ Tech Stack
Framework: Vite + React

Styling: Tailwind CSS

Language: TypeScript

Linting: ESLint

API: GitHub REST API

Bolt template: Provided a clean foundation for development πŸš€

πŸ“ Project Structure
Here’s a peek at the file structure that kept things modular and scalable:


β”œβ”€β”€ public/
β”‚   └── vite.svg                    # Vite logo
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/                 # React components
β”‚   β”‚   β”œβ”€β”€ ErrorMessage.tsx        # Error display component
β”‚   β”‚   β”œβ”€β”€ LoadingSpinner.tsx      # Loading animation component
β”‚   β”‚   β”œβ”€β”€ SearchForm.tsx          # User search form
β”‚   β”‚   └── UserProfile.tsx         # User profile display
β”‚   β”œβ”€β”€ services/                   # API services
β”‚   β”‚   └── githubApi.ts            # GitHub API integration
β”‚   β”œβ”€β”€ types/                      # TypeScript type definitions
β”‚   β”‚   └── github.ts               # GitHub user interface
β”‚   β”œβ”€β”€ App.tsx                     # Main application component
β”‚   β”œβ”€β”€ index.css                   # Global styles (Tailwind imports)
β”‚   β”œβ”€β”€ main.tsx                    # Application entry point
β”‚   └── vite-env.d.ts               # Vite type definitions
β”œβ”€β”€ index.html                      # HTML template
β”œβ”€β”€ package.json                    # Dependencies and scripts
β”œβ”€β”€ tailwind.config.js              # Tailwind CSS configuration
β”œβ”€β”€ tsconfig.json                   # TypeScript configuration
β”œβ”€β”€ vite.config.ts                  # Vite configuration
└── README.md                       # Project documentation
Enter fullscreen mode Exit fullscreen mode

✨ Features
βœ… Live search for any GitHub username
βœ… Error handling for invalid users
βœ… Clean, responsive UI with Tailwind CSS
βœ… Loading spinner during API fetch
βœ… Modular file structure

🧠 Challenges & Breakthroughs
While using Bolt, the AI model itself worked smoothly, but I did face a few friction points on the platform side:

πŸ›‘ Google Sign-In Issues: I tried signing up with Google twice, but both attempts failed. Eventually, I had to use my GitHub account to get started.

πŸ‘» Browser Extension Glitches:While AI was generating my project, my Phantom and MetaMask Chrome extensions kept popping up repeatedlyβ€”even though I wasn’t interacting with them at all. It disrupted the experience a bit. It might be that this error was due to my browser. Don't know.

These small bugs aside, once I was inside the workspace, everything worked as expected, and I was able to build and deploy my app with ease using github and netlify.

🧩 Favorite Bolt Features
Bolt made it effortless to get started:

πŸ”₯ Vite + React + TS combo out of the box

🎨 Tailwind pre-configured

βœ… ESLint and TypeScript ready

🧹 Clean file organization

It saved hours of setup time and let me focus purely on building.

πŸ’» Code Highlight: GitHub API Integration

// src/services/githubApi.ts
import { GitHubUser } from '../types/github';

export const fetchGitHubUser = async (username: string): Promise<GitHubUser> => {
  const response = await fetch(`https://api.github.com/users/${username}`);

  if (!response.ok) {
    if (response.status === 404) {
      throw new Error('User not found. Please check the username and try again.');
    } else if (response.status === 403) {
      throw new Error('API rate limit exceeded. Please try again later.');
    } else {
      throw new Error('Failed to fetch user data. Please try again.');
    }
  }

  return response.json();
};
Enter fullscreen mode Exit fullscreen mode

πŸ‘₯ Team
This was an individual submission, but shoutout to the DEV and Bolt teams for making this possible! πŸ™Œ

πŸ“Έ Preview
Here’s what the final product looks like:

πŸ”— Try It Yourself
πŸ‘‰ GitHub Repo: https://github.com/thecreativecoder07/github-profile-finder
πŸ‘‰ Live Demo: https://github-profile-finderapp.netlify.app/

❀️ Final Thoughts
Building with Bolt was overall an exciting and smooth experience. I was able to go from idea to deployment in just a few hoursβ€”exactly what a hackathon platform should offer.

Thanks for reading and happy building! ⚑

β˜• If you liked this content, you can support me by buying a coffee:
Buy Me A Coffee

Top comments (0)