A reusable personal portfolio built with React and TypeScript, designed to showcase projects, technical focus, and growth as a developer.
The site pulls live data from GitHub and is fully configurable through a single configuration file.
This portfolio is designed to be both a personal showcase and a reusable project. All portfolio content is driven by public APIs and a centralized configuration file, allowing the site to update automatically as GitHub data changes.
Adapting the project for a new user only requires updating the configuration file. No application logic changes are needed.
- Dynamic project and profile data sourced from the GitHub API
- Centralized configuration for easy reuse and customization
- Backend-aware frontend architecture with type-safe data handling
- Contact form powered by Web3Forms API
- Modular, reusable React components
- Responsive layout with a GitHub-inspired design system
- Simple deployment with no environment configuration required
- React
- TypeScript
- Bun (runtime, package manager, build tooling)
- GitHub Public API
- Web3Forms API
This project is designed to be reusable.
To adapt it for a new user:
- Fork the repository
- Update the configuration file with your GitHub username, social links, and preferences
- Deploy
All API endpoints and displayed content update automatically based on the configuration values.
If you wish to use this project as a base, forking the repository and making any changes that fit your needs is encouraged.
The application is driven by a single configuration file that controls:
- GitHub username and repository display behavior
- Sorting and pagination rules
- Public contact information
- Portfolio-specific repository folders
- Contact form integration
Example (simplified):
export const CONFIG = {
github: {
username: "your-github-username",
repos: {
number_of_repos_to_display: 20,
sort_by: "updated",
direction: "desc",
},
},
profile: {
email: "your@email.com",
linkedin: "your-linkedin-handle",
},
web3forms: {
access_key: "your-web3forms-access-key",
},
};
---
## Requirements
- Bun installed: https://bun.sh
---
## Getting started
Install dependencies:
```bash
bun installRun the dev server:
bun devOpen the URL printed in your terminal http://localhost:3000
Common scripts (see package.json for details):
bun dev— servesrc/index.htmlfor local developmentbun lint— lint the codebase with oxlintbun fmt— format files using dprintbun run build— bundle the React app fromsrc/index.tsxinto thedist/folderbun start— serve the production build fromdist/bun run typecheck— run TypeScript type checking without emitting files
Configuration-driven design
All user-specific values are centralized in a single file, making the project easy to reuse, maintain, and adapt without modifying application logic.
React and TypeScript
React provides a component-driven architecture, while TypeScript enforces strict typing across API data and component boundaries.
GitHub as the content source
Using GitHub as the data source ensures projects remain up to date automatically and removes the need for a custom CMS or database.
Web3Forms for contact handling
Web3Forms enables contact form submissions without maintaining a backend or exposing secrets, keeping the project simple and production-ready, free version accepts up to 250 submisions per month, more than enough for a portfolio.
Barrel exports
Each folder exposes a clear public API using index.ts barrel files, improving import clarity and long-term maintainability.
Bun toolchain
Bun consolidates runtime, package management, and build tooling into a single solution, reducing configuration overhead and improving developer experience.
- Present a clear, professional overview of projects and experience
- Emphasize backend-integrated frontend applications
- Enable reuse through configuration-only customization
- Maintain a scalable and readable codebase
- Rely exclusively on public APIs and configuration-free tooling
This project is actively maintained and updated as new issues are added.
MIT