zntb/github-profile-maker

0

stars

225

commits

TypeScript

primary language

Sep 9, 2026

updated

github-profile-maker.vercel.app
nextjs
shadcn
tailwindcss
typescript
uploadthing
zustand

README


✨ Overview

GitHub Profile README Builder is a fully visual, drag-and-drop editor for creating beautiful GitHub profile README.md files — zero code required. Pick from a rich library of blocks, configure them with an intuitive panel, preview the result in real time, and export production-ready Markdown in one click.

Built with Next.js 16, React 19, TypeScript, Tailwind CSS v4, shadcn/ui, Zustand, and dnd-kit.

App Screenshot

🗂️ Table of Contents


🎯 Features

FeatureDescription
🧱 Drag & Drop CanvasReorder blocks effortlessly with smooth dnd-kit animations
👁️ Live PreviewSee exactly how your README renders in GitHub's style
📝 Markdown ExportCopy to clipboard or download a ready-to-use README.md
🎨 50+ ThemesTokyo Night, Dracula, Radical, Catppuccin, and many more
📦 20+ Block TypesHeaders, stats cards, badges, skill icons, graphs, and more
🖼️ Template LibraryStart fast with 4 curated, fully customizable templates
📱 Fully ResponsiveOptimized three-layout system for desktop, tablet, and mobile
🌙 Dark / Light ModeSystem-aware theming powered by next-themes
Self-hosted StatsBuilt-in Next.js API routes generate GitHub stat SVGs server-side
🔑 GitHub GraphQLOptional GITHUB_TOKEN for real, live stats from the GitHub API

🧱 Block Library

Blocks are organized into eight categories:

Layout — Structure your README
BlockDescription
ContainerFlex wrapper supporting row/column direction, alignment, and gap
DividerHorizontal rule or a custom animated GIF divider
SpacerConfigurable height gap (10–100 px)
Hero — Eye-catching headers
BlockDescription
Capsule HeaderAnimated banner via capsule-render with 7 animation types
AvatarCircular or rounded profile image with configurable size
GreetingLarge <h1> greeting with optional emoji
Typing AnimationAnimated typing SVG via readme-typing-svg with multiple lines
Content — Text and code
BlockDescription
HeadingH1–H3 with alignment and emoji prefix
ParagraphFreeform text with alignment control
CollapsibleGitHub <details> block with nested children
Code BlockSyntax-highlighted fenced code with language selector
Media — Images & GIFs
BlockDescription
ImageExternal image with size, alignment, and border-radius
GIFLightweight GIF embed with width control
Social — Badges & links
BlockDescription
Social BadgesOne-click shields.io badges for LinkedIn, Twitter, GitHub, YouTube, Instagram, Discord, Email, Portfolio
Custom BadgeFully custom label/message/color/logo badge
Tech Stack — Skills
BlockDescription
Skill IconsGrid of tech icons via skillicons.dev — 80+ icons available
GitHub Stats — Activity widgets
BlockDescription
Stats CardStars, commits, PRs, issues, and rank ring
Top LanguagesCompact, normal, donut, donut-vertical, or pie layout
Streak StatsCurrent streak, longest streak, and total contributions
Activity Graph30-day contribution line chart
TrophiesTrophy grid with configurable columns/rows
Advanced — Extra elements
BlockDescription
Visitor Counterkomarev.com page-view badge
QuoteStatic custom quote or random dev quote from API
Footer BannerWaving capsule-render footer

🛠️ Tech Stack

Frontend          Next.js 16 (App Router) · React 19 · TypeScript 5
Styling           Tailwind CSS v4 · tw-animate-css · shadcn/ui (radix-nova)
State             Zustand 5
Drag & Drop       dnd-kit (sortable)
Icons             Lucide React
Theming           next-themes
Notifications     Sonner
API               Next.js Route Handlers · GitHub REST & GraphQL APIs
Fonts             Outfit · JetBrains Mono

🚀 Getting Started

Prerequisites

  • Node.js ≥ 18
  • A package manager: npm, pnpm, yarn, or bun
  • (Optional) A GitHub Personal Access Token for live stats

Installation

# 1. Clone the repository
git clone https://github.com/zntb/github-profile-readme-builder.git
cd github-profile-readme-builder

# 2. Install dependencies
npm install

# 3. Copy environment variables
cp .env.example .env.local

Environment Variables

# .env.local

# Optional – enables real GitHub stats, streak, trophies, and activity graphs.
# Create one at: https://github.com/settings/tokens
# Required scopes: read:user
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

Without a token the stat widgets still render but display a "GitHub Token Required" placeholder instead of live data.

Development

npm run dev

Open http://localhost:3000 in your browser.

Production Build

npm run build
npm start

📁 Project Structure

github-profile-readme-builder/
├── app/
│   ├── api/
│   │   ├── activity/route.ts      # Contribution activity graph SVG
│   │   ├── stats/route.ts         # GitHub stats card SVG
│   │   ├── streak/route.ts        # Streak stats SVG
│   │   ├── top-langs/route.ts     # Top languages SVG
│   │   └── trophies/route.ts      # Trophy grid SVG
│   ├── globals.css                # Tailwind v4 tokens + custom animations
│   ├── layout.tsx                 # Root layout with ThemeProvider & fonts
│   └── page.tsx                   # Entry point → <Builder />
│
├── components/
│   ├── builder/
│   │   ├── index.tsx              # Responsive layout orchestrator (desktop / tablet / mobile)
│   │   ├── header.tsx             # Top bar: branding, Templates, Clear, Export
│   │   ├── block-sidebar.tsx      # Searchable block library with categories
│   │   ├── canvas.tsx             # dnd-kit sortable drop zone
│   │   ├── canvas-block.tsx       # Individual draggable block wrapper
│   │   ├── block-preview.tsx      # Compact canvas-level block previews
│   │   ├── config-panel.tsx       # Right-side property editor (per block type)
│   │   ├── live-preview.tsx       # Full GitHub-style README render
│   │   ├── output-panel.tsx       # Markdown output + copy/download actions
│   │   └── templates-dialog.tsx   # Template picker dialog
│   ├── ui/                        # shadcn/ui components
│   └── mode-toggle.tsx            # Light/Dark/System theme switcher
│
├── lib/
│   ├── github.ts                  # GitHub REST + GraphQL helpers, rank calc, streak calc
│   ├── markdown.ts                # Block → Markdown renderer + download/copy utils
│   ├── store.ts                   # Zustand builder store (blocks, selection, DnD)
│   ├── templates.ts               # Pre-built template definitions
│   ├── types.ts                   # Block types, prop interfaces, BLOCK_CATEGORIES
│   └── utils.ts                   # cn() Tailwind merge helper
│
└── public/                        # Static assets & favicons

🔌 API Routes

All stat widgets are generated server-side by built-in Next.js route handlers. They proxy and render live GitHub data as SVG images, meaning the generated Markdown will work from any host that has GITHUB_TOKEN configured.

RouteQuery ParamsDescription
GET /api/statsusername, theme, show_icons, hide_border, hide_title, hide_rank, border_radius, bg_color, text_color, title_color, icon_colorGitHub stats card
GET /api/streakusername, theme, hide_border, border_radius, background, fire, ring, currStreakNum, sideNums, sideLabels, datesStreak stats card
GET /api/top-langsusername, theme, layout, hide_border, hide_progress, langs_count, border_radius, bg_color, text_color, title_colorTop languages card
GET /api/activityusername, theme, hide_border, bg_color, color, line, point, area_color30-day activity graph
GET /api/trophiesusername, theme, column, row, margin_w, margin_h, no_frame, no_bgTrophy grid

Supported Themes

Over 50 themes are supported across all widgets, including:

default · dark · radical · tokyonight · dracula · onedark · nord · github_dark · catppuccin_mocha · gruvbox · merko · react · midnight-purple · rose_pine · and many more.


🎨 Templates

Four built-in templates are included to help you start quickly:

TemplateDescriptionBlocks
Animated DeveloperWaving header, typing SVG, full stats suite, social badges16
Minimal CleanSimple heading/paragraph layout with essential stats8
Stats FocusedFull stats dashboard — card, streak, languages, graph, trophies8
Creative ProfileAvatar, custom animation, quote block, creative color palette9

Templates are defined in lib/templates.ts and can be extended freely.


🤝 Contributing

Contributions are welcome! Here's how to get involved:

# Fork & clone
git clone https://github.com/<your-username>/github-profile-readme-builder.git

# Create a feature branch
git checkout -b feat/my-new-block

# Make your changes, then commit
git commit -m "feat: add <block-name> block"

# Push and open a Pull Request
git push origin feat/my-new-block

Adding a New Block

  1. Add the block type to the BlockType union in lib/types.ts
  2. Define its defaultProps in the relevant BLOCK_CATEGORIES entry in lib/types.ts
  3. Add a preview renderer case in components/builder/block-preview.tsx
  4. Add a config fields case in components/builder/config-panel.tsx
  5. Add a live preview case in components/builder/live-preview.tsx
  6. Add a Markdown render case in lib/markdown.ts

Code Style

  • All code is TypeScript — avoid any
  • Use shadcn/ui components where possible
  • Follow existing Tailwind class conventions (CSS variables, cn() helper)
  • Run npm run lint before submitting

We use Prettier and ESLint with a pre-commit hook. The hook will block commits if there are any lint errors or formatting issues:

# Format all files
npm run format

# Check for issues
npm run format:check
npm run lint

📄 License

This project is licensed under the MIT License — see the LICENSE file for details.


Made with ❤️ using Next.js & React

Star this repo if you found it useful!


Contributors

zntb

196 commits

dependabot[bot]

29 commits

zntb/github-profile-maker

0

stars

225

commits

TypeScript

primary language

Sep 9, 2026

updated

github-profile-maker.vercel.app
nextjs
shadcn
tailwindcss
typescript
uploadthing
zustand

README


✨ Overview

GitHub Profile README Builder is a fully visual, drag-and-drop editor for creating beautiful GitHub profile README.md files — zero code required. Pick from a rich library of blocks, configure them with an intuitive panel, preview the result in real time, and export production-ready Markdown in one click.

Built with Next.js 16, React 19, TypeScript, Tailwind CSS v4, shadcn/ui, Zustand, and dnd-kit.

App Screenshot

🗂️ Table of Contents


🎯 Features

FeatureDescription
🧱 Drag & Drop CanvasReorder blocks effortlessly with smooth dnd-kit animations
👁️ Live PreviewSee exactly how your README renders in GitHub's style
📝 Markdown ExportCopy to clipboard or download a ready-to-use README.md
🎨 50+ ThemesTokyo Night, Dracula, Radical, Catppuccin, and many more
📦 20+ Block TypesHeaders, stats cards, badges, skill icons, graphs, and more
🖼️ Template LibraryStart fast with 4 curated, fully customizable templates
📱 Fully ResponsiveOptimized three-layout system for desktop, tablet, and mobile
🌙 Dark / Light ModeSystem-aware theming powered by next-themes
Self-hosted StatsBuilt-in Next.js API routes generate GitHub stat SVGs server-side
🔑 GitHub GraphQLOptional GITHUB_TOKEN for real, live stats from the GitHub API

🧱 Block Library

Blocks are organized into eight categories:

Layout — Structure your README
BlockDescription
ContainerFlex wrapper supporting row/column direction, alignment, and gap
DividerHorizontal rule or a custom animated GIF divider
SpacerConfigurable height gap (10–100 px)
Hero — Eye-catching headers
BlockDescription
Capsule HeaderAnimated banner via capsule-render with 7 animation types
AvatarCircular or rounded profile image with configurable size
GreetingLarge <h1> greeting with optional emoji
Typing AnimationAnimated typing SVG via readme-typing-svg with multiple lines
Content — Text and code
BlockDescription
HeadingH1–H3 with alignment and emoji prefix
ParagraphFreeform text with alignment control
CollapsibleGitHub <details> block with nested children
Code BlockSyntax-highlighted fenced code with language selector
Media — Images & GIFs
BlockDescription
ImageExternal image with size, alignment, and border-radius
GIFLightweight GIF embed with width control
Social — Badges & links
BlockDescription
Social BadgesOne-click shields.io badges for LinkedIn, Twitter, GitHub, YouTube, Instagram, Discord, Email, Portfolio
Custom BadgeFully custom label/message/color/logo badge
Tech Stack — Skills
BlockDescription
Skill IconsGrid of tech icons via skillicons.dev — 80+ icons available
GitHub Stats — Activity widgets
BlockDescription
Stats CardStars, commits, PRs, issues, and rank ring
Top LanguagesCompact, normal, donut, donut-vertical, or pie layout
Streak StatsCurrent streak, longest streak, and total contributions
Activity Graph30-day contribution line chart
TrophiesTrophy grid with configurable columns/rows
Advanced — Extra elements
BlockDescription
Visitor Counterkomarev.com page-view badge
QuoteStatic custom quote or random dev quote from API
Footer BannerWaving capsule-render footer

🛠️ Tech Stack

Frontend          Next.js 16 (App Router) · React 19 · TypeScript 5
Styling           Tailwind CSS v4 · tw-animate-css · shadcn/ui (radix-nova)
State             Zustand 5
Drag & Drop       dnd-kit (sortable)
Icons             Lucide React
Theming           next-themes
Notifications     Sonner
API               Next.js Route Handlers · GitHub REST & GraphQL APIs
Fonts             Outfit · JetBrains Mono

🚀 Getting Started

Prerequisites

  • Node.js ≥ 18
  • A package manager: npm, pnpm, yarn, or bun
  • (Optional) A GitHub Personal Access Token for live stats

Installation

# 1. Clone the repository
git clone https://github.com/zntb/github-profile-readme-builder.git
cd github-profile-readme-builder

# 2. Install dependencies
npm install

# 3. Copy environment variables
cp .env.example .env.local

Environment Variables

# .env.local

# Optional – enables real GitHub stats, streak, trophies, and activity graphs.
# Create one at: https://github.com/settings/tokens
# Required scopes: read:user
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

Without a token the stat widgets still render but display a "GitHub Token Required" placeholder instead of live data.

Development

npm run dev

Open http://localhost:3000 in your browser.

Production Build

npm run build
npm start

📁 Project Structure

github-profile-readme-builder/
├── app/
│   ├── api/
│   │   ├── activity/route.ts      # Contribution activity graph SVG
│   │   ├── stats/route.ts         # GitHub stats card SVG
│   │   ├── streak/route.ts        # Streak stats SVG
│   │   ├── top-langs/route.ts     # Top languages SVG
│   │   └── trophies/route.ts      # Trophy grid SVG
│   ├── globals.css                # Tailwind v4 tokens + custom animations
│   ├── layout.tsx                 # Root layout with ThemeProvider & fonts
│   └── page.tsx                   # Entry point → <Builder />
│
├── components/
│   ├── builder/
│   │   ├── index.tsx              # Responsive layout orchestrator (desktop / tablet / mobile)
│   │   ├── header.tsx             # Top bar: branding, Templates, Clear, Export
│   │   ├── block-sidebar.tsx      # Searchable block library with categories
│   │   ├── canvas.tsx             # dnd-kit sortable drop zone
│   │   ├── canvas-block.tsx       # Individual draggable block wrapper
│   │   ├── block-preview.tsx      # Compact canvas-level block previews
│   │   ├── config-panel.tsx       # Right-side property editor (per block type)
│   │   ├── live-preview.tsx       # Full GitHub-style README render
│   │   ├── output-panel.tsx       # Markdown output + copy/download actions
│   │   └── templates-dialog.tsx   # Template picker dialog
│   ├── ui/                        # shadcn/ui components
│   └── mode-toggle.tsx            # Light/Dark/System theme switcher
│
├── lib/
│   ├── github.ts                  # GitHub REST + GraphQL helpers, rank calc, streak calc
│   ├── markdown.ts                # Block → Markdown renderer + download/copy utils
│   ├── store.ts                   # Zustand builder store (blocks, selection, DnD)
│   ├── templates.ts               # Pre-built template definitions
│   ├── types.ts                   # Block types, prop interfaces, BLOCK_CATEGORIES
│   └── utils.ts                   # cn() Tailwind merge helper
│
└── public/                        # Static assets & favicons

🔌 API Routes

All stat widgets are generated server-side by built-in Next.js route handlers. They proxy and render live GitHub data as SVG images, meaning the generated Markdown will work from any host that has GITHUB_TOKEN configured.

RouteQuery ParamsDescription
GET /api/statsusername, theme, show_icons, hide_border, hide_title, hide_rank, border_radius, bg_color, text_color, title_color, icon_colorGitHub stats card
GET /api/streakusername, theme, hide_border, border_radius, background, fire, ring, currStreakNum, sideNums, sideLabels, datesStreak stats card
GET /api/top-langsusername, theme, layout, hide_border, hide_progress, langs_count, border_radius, bg_color, text_color, title_colorTop languages card
GET /api/activityusername, theme, hide_border, bg_color, color, line, point, area_color30-day activity graph
GET /api/trophiesusername, theme, column, row, margin_w, margin_h, no_frame, no_bgTrophy grid

Supported Themes

Over 50 themes are supported across all widgets, including:

default · dark · radical · tokyonight · dracula · onedark · nord · github_dark · catppuccin_mocha · gruvbox · merko · react · midnight-purple · rose_pine · and many more.


🎨 Templates

Four built-in templates are included to help you start quickly:

TemplateDescriptionBlocks
Animated DeveloperWaving header, typing SVG, full stats suite, social badges16
Minimal CleanSimple heading/paragraph layout with essential stats8
Stats FocusedFull stats dashboard — card, streak, languages, graph, trophies8
Creative ProfileAvatar, custom animation, quote block, creative color palette9

Templates are defined in lib/templates.ts and can be extended freely.


🤝 Contributing

Contributions are welcome! Here's how to get involved:

# Fork & clone
git clone https://github.com/<your-username>/github-profile-readme-builder.git

# Create a feature branch
git checkout -b feat/my-new-block

# Make your changes, then commit
git commit -m "feat: add <block-name> block"

# Push and open a Pull Request
git push origin feat/my-new-block

Adding a New Block

  1. Add the block type to the BlockType union in lib/types.ts
  2. Define its defaultProps in the relevant BLOCK_CATEGORIES entry in lib/types.ts
  3. Add a preview renderer case in components/builder/block-preview.tsx
  4. Add a config fields case in components/builder/config-panel.tsx
  5. Add a live preview case in components/builder/live-preview.tsx
  6. Add a Markdown render case in lib/markdown.ts

Code Style

  • All code is TypeScript — avoid any
  • Use shadcn/ui components where possible
  • Follow existing Tailwind class conventions (CSS variables, cn() helper)
  • Run npm run lint before submitting

We use Prettier and ESLint with a pre-commit hook. The hook will block commits if there are any lint errors or formatting issues:

# Format all files
npm run format

# Check for issues
npm run format:check
npm run lint

📄 License

This project is licensed under the MIT License — see the LICENSE file for details.


Made with ❤️ using Next.js & React

Star this repo if you found it useful!


Contributors

zntb

196 commits

dependabot[bot]

29 commits

Languages

TypeScript

95.8%

CSS

2.3%

Python

1.5%