From 4aa8c44dcceae33894c6ffb46322bda536aeb952 Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 09:00:41 +0000
Subject: [PATCH 1/7] Initial plan
From b1fa68d1e3a64ac1a5c51a9e81a63b0fd4b941e1 Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 09:05:47 +0000
Subject: [PATCH 2/7] =?UTF-8?q?=E2=9C=A8=20Add=20comprehensive=20GitHub=20?=
=?UTF-8?q?profile=20enhancement=20package?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: amar-295 <233091910+amar-295@users.noreply.github.com>
---
BADGES_QUICK_REFERENCE.md | 415 ++++++++++++++++++++++++++++++++++++++
GITHUB_PROFILE_README.md | 192 ++++++++++++++++++
PROFILE_SETUP_GUIDE.md | 327 ++++++++++++++++++++++++++++++
README.md | 38 +++-
4 files changed, 971 insertions(+), 1 deletion(-)
create mode 100644 BADGES_QUICK_REFERENCE.md
create mode 100644 GITHUB_PROFILE_README.md
create mode 100644 PROFILE_SETUP_GUIDE.md
diff --git a/BADGES_QUICK_REFERENCE.md b/BADGES_QUICK_REFERENCE.md
new file mode 100644
index 0000000..0af4f98
--- /dev/null
+++ b/BADGES_QUICK_REFERENCE.md
@@ -0,0 +1,415 @@
+# 🎨 Quick Reference: GitHub Profile Badges & Stats
+
+A handy cheat sheet for customizing your GitHub profile README with badges, stats, and widgets.
+
+---
+
+## 📌 Table of Contents
+
+- [Technology Badges](#-technology-badges)
+- [GitHub Stats Cards](#-github-stats-cards)
+- [Social Badges](#-social-badges)
+- [Custom Badges](#-custom-badges)
+- [Dynamic Content](#-dynamic-content)
+- [Color Schemes](#-color-schemes)
+
+---
+
+## 💻 Technology Badges
+
+### Format
+```markdown
+
+```
+
+### Common Technologies
+
+#### Frontend
+```markdown
+
+
+
+
+
+
+```
+
+#### CSS Frameworks
+```markdown
+
+
+
+
+
+```
+
+#### Backend
+```markdown
+
+
+
+
+
+
+```
+
+#### Databases
+```markdown
+
+
+
+
+
+
+```
+
+#### Languages
+```markdown
+
+
+
+
+
+
+
+
+```
+
+#### Tools & Platforms
+```markdown
+
+
+
+
+
+
+
+```
+
+---
+
+## 📊 GitHub Stats Cards
+
+### 1. Basic Stats Card
+```markdown
+
+```
+
+**Parameters**:
+- `username` - Your GitHub username (required)
+- `show_icons` - Show icons (true/false)
+- `theme` - Color theme (see themes below)
+- `hide_border` - Hide border (true/false)
+- `include_all_commits` - Count all commits (true/false)
+- `count_private` - Include private contributions (true/false)
+- `hide` - Hide specific stats (comma-separated: stars,commits,prs,issues,contribs)
+- `show` - Show specific stats (reviews,discussions_started,discussions_answered,prs_merged,prs_merged_percentage)
+
+**Example**:
+```markdown
+
+```
+
+### 2. GitHub Streak Stats
+```markdown
+
+```
+
+**Parameters**:
+- `user` - Your GitHub username (required)
+- `theme` - Color theme
+- `hide_border` - Remove border
+- `background` - Background color (hex without #)
+- `stroke` - Border color
+- `ring` - Ring color around current streak
+- `fire` - Fire emoji color
+- `currStreakNum` - Current streak number color
+- `currStreakLabel` - Current streak label color
+
+**Example**:
+```markdown
+
+```
+
+### 3. Top Languages Card
+```markdown
+
+```
+
+**Parameters**:
+- `username` - Your GitHub username (required)
+- `layout` - Layout style (compact/default)
+- `theme` - Color theme
+- `hide` - Hide languages (comma-separated: html,css)
+- `langs_count` - Number of languages to show (default: 5, max: 10)
+- `exclude_repo` - Exclude specific repos (comma-separated)
+
+**Example**:
+```markdown
+
+```
+
+### 4. GitHub Trophies
+```markdown
+
+```
+
+**Parameters**:
+- `username` - Your GitHub username (required)
+- `theme` - Color theme
+- `no-frame` - Remove frame
+- `no-bg` - Transparent background
+- `row` - Number of rows (1-3)
+- `column` - Number of columns (1-7)
+- `margin-w` - Horizontal margin
+- `margin-h` - Vertical margin
+- `rank` - Filter by rank (SECRET,SSS,SS,S,AAA,AA,A,B,C)
+
+**Example**:
+```markdown
+
+```
+
+### 5. Contribution Activity Graph
+```markdown
+
+```
+
+**Parameters**:
+- `username` - Your GitHub username (required)
+- `theme` - Color theme
+- `bg_color` - Background color (hex without #)
+- `color` - Graph line color
+- `line` - Gradient line color
+- `point` - Point color
+- `area` - Show area under graph (true/false)
+- `hide_border` - Hide border
+
+**Example**:
+```markdown
+
+```
+
+---
+
+## 📱 Social Badges
+
+### Format
+```markdown
+[](LINK_URL)
+```
+
+### Common Social Platforms
+```markdown
+
+[](https://linkedin.com/in/YOUR_PROFILE)
+
+
+[](https://twitter.com/YOUR_HANDLE)
+
+
+[](mailto:your@email.com)
+
+
+[](https://your-portfolio.com)
+
+
+[](https://discord.gg/YOUR_INVITE)
+
+
+[](https://youtube.com/@YOUR_CHANNEL)
+
+
+[](https://dev.to/YOUR_USERNAME)
+
+
+[](https://medium.com/@YOUR_USERNAME)
+
+
+[](https://stackoverflow.com/users/YOUR_ID)
+
+
+[](https://codepen.io/YOUR_USERNAME)
+```
+
+---
+
+## 🎨 Custom Badges
+
+### Create Your Own Badge
+```markdown
+
+```
+
+### Badge Styles
+- `flat` - Flat style (default)
+- `flat-square` - Flat with square edges
+- `plastic` - Plastic 3D style
+- `for-the-badge` - Large badge with uppercase text
+- `social` - Social media style
+
+### Examples
+```markdown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 🎯 Dynamic Content
+
+### 1. Typing Animation
+```markdown
+
+```
+
+**Parameters**:
+- `font` - Font family (URL encoded)
+- `size` - Font size
+- `duration` - Animation duration per character (ms)
+- `pause` - Pause between lines (ms)
+- `color` - Text color (hex without #)
+- `width` - Width of SVG
+- `height` - Height of SVG
+- `lines` - Lines of text (semicolon-separated)
+- `center` - Center text (true/false)
+- `vCenter` - Vertical center (true/false)
+- `multiline` - Show multiple lines at once (true/false)
+- `repeat` - Repeat animation (true/false)
+
+### 2. Profile Views Counter
+```markdown
+
+```
+
+**Colors**: `brightgreen`, `green`, `yellowgreen`, `yellow`, `orange`, `red`, `lightgrey`, `blue`, `blueviolet`
+
+### 3. Wakatime Stats
+```markdown
+
+```
+
+### 4. Latest Blog Posts (with GitHub Actions)
+```markdown
+## 📝 Latest Blog Posts
+
+
+```
+
+Requires [blog-post-workflow](https://github.com/gautamkrishnar/blog-post-workflow) GitHub Action.
+
+### 5. Spotify Now Playing
+```markdown
+[](https://spotify-github-profile.vercel.app/api/view?uid=YOUR_SPOTIFY_ID&redirect=true)
+```
+
+---
+
+## 🌈 Color Schemes
+
+### Stats Card Themes
+- `default`, `transparent`, `shadow_red`, `shadow_green`, `shadow_blue`
+- `dark`, `radical`, `merko`, `gruvbox`, `gruvbox_light`, `tokyonight`
+- `onedark`, `cobalt`, `synthwave`, `highcontrast`, `dracula`
+- `prussian`, `monokai`, `vue`, `vue-dark`, `shades-of-purple`
+- `nightowl`, `buefy`, `blue-green`, `algolia`, `great-gatsby`
+- `darcula`, `bear`, `solarized-dark`, `solarized-light`
+- `chartreuse-dark`, `nord`, `gotham`, `material-palenight`
+- `graywhite`, `vision-friendly-dark`, `ayu-mirage`
+- `midnight-purple`, `calm`, `flag-india`, `omni`, `react`, `jolly`
+- `maroongold`, `yeblu`, `blueberry`, `slateorange`, `kacho_ga`
+
+### Hex Color Codes (Common)
+- React Blue: `61DAFB`
+- GitHub Dark: `0D1117`
+- Success Green: `28A745`
+- Warning Yellow: `FFC107`
+- Danger Red: `DC3545`
+- Info Blue: `17A2B8`
+- Primary Purple: `6F42C1`
+
+### Popular Color Combinations
+
+#### React Theme (Current)
+```
+Background: 0D1117
+Title: 61DAFB
+Icon: 61DAFB
+Text: FFFFFF
+```
+
+#### Dracula Theme
+```
+Background: 282A36
+Title: FF79C6
+Icon: BD93F9
+Text: F8F8F2
+```
+
+#### Nord Theme
+```
+Background: 2E3440
+Title: 88C0D0
+Icon: 81A1C1
+Text: ECEFF4
+```
+
+---
+
+## 🔍 Finding Logos
+
+**Simple Icons**: https://simpleicons.org/
+- Search for brand names to find logo slugs
+- Use the slug in `logo=` parameter
+- Check color codes for brand colors
+
+**Example**: For React logo
+1. Go to simpleicons.org
+2. Search "React"
+3. Logo slug: `react`
+4. Brand color: `#61DAFB`
+
+---
+
+## 📚 Useful Resources
+
+- **Shields.io**: https://shields.io/ - Badge generator
+- **GitHub Readme Stats**: https://github.com/anuraghazra/github-readme-stats
+- **GitHub Readme Streak Stats**: https://github.com/DenverCoder1/github-readme-streak-stats
+- **GitHub Profile Trophy**: https://github.com/ryo-ma/github-profile-trophy
+- **Readme Typing SVG**: https://github.com/DenverCoder1/readme-typing-svg
+- **Simple Icons**: https://simpleicons.org/ - Brand icons and colors
+- **Awesome GitHub Profile README**: https://github.com/abhisheknaiidu/awesome-github-profile-readme
+
+---
+
+## 💡 Pro Tips
+
+1. **Consistency**: Use the same theme across all stat cards
+2. **Color Harmony**: Match badge colors with your stats theme
+3. **Mobile Friendly**: Test how your profile looks on mobile
+4. **Performance**: Don't overload with too many dynamic widgets
+5. **Links**: Make badges clickable by wrapping in `[![]()]()` format
+6. **Alignment**: Use `
` for centered content
+7. **Spacing**: Add `---` for horizontal rules between sections
+8. **Updates**: Keep your profile updated with latest projects
+9. **Accessibility**: Use descriptive alt text for all images
+10. **Testing**: Preview changes before committing
+
+---
+
+
+ Made with ❤️ for developers who love beautiful profiles!
+
diff --git a/GITHUB_PROFILE_README.md b/GITHUB_PROFILE_README.md
new file mode 100644
index 0000000..dd791d8
--- /dev/null
+++ b/GITHUB_PROFILE_README.md
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+## 👨💻 About Me
+
+I'm a **Frontend Developer** specializing in building modern, accessible, and high-performance web applications. Currently pursuing my **BCA at DAV Centenary College** (2024-2027), I'm passionate about creating beautiful user experiences with clean, maintainable code.
+
+```javascript
+const amarnath = {
+ location: "Faridabad, India 🇮🇳",
+ education: "BCA Student (2024-2027)",
+ currentFocus: ["React.js", "Tailwind CSS", "Accessibility"],
+ learning: ["Node.js", "Express", "MongoDB"],
+ workMode: "Remote Friendly 🌍",
+ specialization: "Frontend Development",
+ openTo: ["Frontend Developer Roles", "Freelance Projects", "Open Source Collaboration"]
+};
+```
+
+### 🎯 What I Bring to the Table
+
+- **🎨 Modern UI Development**: Expert in React 19, Tailwind CSS v4, and responsive design principles
+- **♿ Accessibility First**: Building WCAG-compliant applications with semantic HTML and ARIA best practices
+- **⚡ Performance Obsessed**: Optimizing for Core Web Vitals, lazy loading, and efficient bundle sizes
+- **🌓 Design Systems**: Creating consistent, theme-aware components with dark/light mode support
+- **📱 Mobile-First Approach**: Ensuring perfect experiences across all devices
+
+---
+
+## 🚀 Featured Projects
+
+### 🌟 [Personal Portfolio Website](https://react-portfolio-lilac-nine.vercel.app/) • **Live**
+> A modern, high-performance portfolio showcasing technical proficiency and creative design
+
+**Tech Stack**: React 19 • Tailwind CSS v4 • Vite 7 • Formspree
+**Highlights**:
+- ⚡ Blazing fast with Vite and optimized production builds
+- 🎨 Dynamic theme system with glassmorphism effects
+- ♿ WCAG-compliant with semantic HTML and keyboard navigation
+- 📱 Fully responsive mobile-first design
+
+**Links**: [Live Demo](https://react-portfolio-lilac-nine.vercel.app/) • [Source Code](https://github.com/amar-295/react-portfolio)
+
+---
+
+### 🔒 Express Authentication Backend • **Production Ready**
+> RESTful API with JWT-based authentication, user management, and secure password handling
+
+**Tech Stack**: Node.js • Express • MongoDB • JWT • bcrypt
+**Highlights**:
+- 🔐 Secure JWT authentication with refresh tokens
+- 🛡️ Password hashing with bcrypt
+- 📝 User registration, login, and profile management
+- ✅ Input validation and error handling
+
+---
+
+### 🎲 [React Password Generator](https://github.com/amar-295/react-password-generator) • **Live**
+> Interactive tool for generating secure, customizable passwords
+
+**Tech Stack**: React • Vite • Tailwind CSS
+**Highlights**:
+- 🔢 Customizable length and character sets
+- 📋 One-click copy to clipboard
+- 🎨 Clean, intuitive interface
+- ⚡ Real-time password generation
+
+**Links**: [Live Demo](#) • [Source Code](https://github.com/amar-295/react-password-generator)
+
+---
+
+## 🛠️ Tech Stack
+
+### Core Technologies
+
+
+
+
+
+
+
+
+### Tools & Technologies
+
+
+
+
+
+
+
+
+### Currently Learning
+
+
+
+
+
+
+---
+
+## 📊 GitHub Stats
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+## 🏆 GitHub Trophies
+
+
+
+
+
+---
+
+## 📈 Contribution Activity
+
+
+
+
+
+---
+
+## 💼 What I'm Looking For
+
+I'm actively seeking opportunities where I can contribute my frontend expertise and continue growing as a developer:
+
+✅ **Frontend Developer Roles** - Full-time or contract positions
+✅ **Freelance Projects** - Web development and UI/UX implementation
+✅ **Open Source Collaboration** - Contributing to meaningful projects
+✅ **Remote Work** - Open to working with global teams
+
+---
+
+## 📫 Let's Connect
+
+I'm always excited to connect with fellow developers, potential collaborators, and hiring managers!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+
+
+
+
+
+ ⚡ "Building the web, one component at a time" ⚡
+
+
+---
+
+
+ Built with ❤️ by Amarnath • Last updated: March 2026
+
diff --git a/PROFILE_SETUP_GUIDE.md b/PROFILE_SETUP_GUIDE.md
new file mode 100644
index 0000000..0e96d19
--- /dev/null
+++ b/PROFILE_SETUP_GUIDE.md
@@ -0,0 +1,327 @@
+# 🚀 GitHub Profile README Setup Guide
+
+This guide will help you set up the enhanced GitHub profile README that was created for your account.
+
+## 📋 Table of Contents
+
+- [Creating Your Profile Repository](#creating-your-profile-repository)
+- [Adding the README Content](#adding-the-readme-content)
+- [Customizing Your Profile](#customizing-your-profile)
+- [Troubleshooting](#troubleshooting)
+- [Additional Enhancements](#additional-enhancements)
+
+---
+
+## 🎯 Creating Your Profile Repository
+
+GitHub allows you to create a special repository that displays a README on your profile page. Here's how to set it up:
+
+### Step 1: Create a New Repository
+
+1. Go to [GitHub](https://github.com) and sign in to your account
+2. Click the **+** icon in the top-right corner
+3. Select **"New repository"**
+4. Name the repository exactly as your username: **`amar-295`**
+ - ⚠️ **Important**: The repository name must match your GitHub username exactly
+5. Make sure the repository is set to **Public**
+6. Check the box "Add a README file"
+7. Click **"Create repository"**
+
+### Step 2: Add the README Content
+
+1. In your new `amar-295` repository, click on the `README.md` file
+2. Click the **pencil icon** (✏️) to edit the file
+3. **Delete** the default content
+4. **Copy** the entire content from `GITHUB_PROFILE_README.md` file (created in this PR)
+5. **Paste** it into the README.md editor
+6. Scroll to the bottom and click **"Commit changes"**
+7. Add a commit message like "✨ Add enhanced profile README"
+8. Click **"Commit changes"** to save
+
+### Step 3: Verify Your Profile
+
+1. Go to your GitHub profile: `https://github.com/amar-295`
+2. You should now see your enhanced README displayed on your profile page!
+3. All the badges, stats, and animations should be working automatically
+
+---
+
+## 🎨 Customizing Your Profile
+
+The README uses several third-party services to generate dynamic content. Here's how to customize each section:
+
+### 1. Animated Typing Header
+
+The header uses [Readme Typing SVG](https://readme-typing-svg.herokuapp.com/):
+
+```markdown
+
+```
+
+**To customize:**
+- Change `lines=` parameter to add/edit the rotating text
+- Separate multiple lines with `;` (semicolon)
+- Adjust `color=` to change text color (use hex codes without #)
+- Modify `size=` to change font size
+
+### 2. GitHub Stats Cards
+
+The stats use [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats):
+
+```markdown
+
+```
+
+**Available themes**: `dark`, `radical`, `merko`, `gruvbox`, `tokyonight`, `onedark`, `cobalt`, `synthwave`, `highcontrast`, `dracula`, `prussian`, `monokai`, `vue`, `vue-dark`, `shades-of-purple`, `nightowl`, `buefy`, `blue-green`, `algolia`, `great-gatsby`, `darcula`, `bear`, `solarized-dark`, `solarized-light`, `chartreuse-dark`, `nord`, `gotham`, `material-palenight`, `graywhite`, `vision-friendly-dark`, `ayu-mirage`, `midnight-purple`, `calm`, `flag-india`, `omni`, `react`, `jolly`, `maroongold`, `yeblu`, `blueberry`, `slateorange`, `kacho_ga`
+
+**To hide certain stats**:
+```markdown
+&hide=stars,commits,prs,issues,contribs
+```
+
+### 3. GitHub Streak Stats
+
+The streak counter uses [GitHub Readme Streak Stats](https://github.com/DenverCoder1/github-readme-streak-stats):
+
+```markdown
+
+```
+
+**Themes match the stats card** - use same theme name for consistency.
+
+### 4. Top Languages Card
+
+Shows your most-used programming languages:
+
+```markdown
+
+```
+
+**Layout options**:
+- `layout=compact` - Compact view (current)
+- `layout=default` - Default view
+- Remove `layout` parameter for vertical list
+
+**To hide certain languages**:
+```markdown
+&hide=html,css
+```
+
+### 5. GitHub Trophies
+
+Achievement badges using [GitHub Profile Trophy](https://github.com/ryo-ma/github-profile-trophy):
+
+```markdown
+
+```
+
+**Available themes**: `flat`, `onedark`, `gruvbox`, `dracula`, `monokai`, `chalk`, `nord`, `alduin`, `darkhub`, `juicyfresh`, `buddhism`, `oldie`, `radical`, `onestar`, `discord`, `algolia`, `gitdimmed`, `tokyonight`, `matrix`, `apprentice`, `dark_dimmed`, `dark_lover`
+
+**To show multiple rows**:
+```markdown
+&row=2 // Shows 2 rows of trophies
+```
+
+### 6. Contribution Activity Graph
+
+Visual graph of your contributions using [GitHub Readme Activity Graph](https://github.com/Ashutosh00710/github-readme-activity-graph):
+
+```markdown
+
+```
+
+**Available themes**: `minimal`, `github`, `github-dark`, `github-compact`, `xcode`, `rogue`, `merko`, `vue`, `tokyo-night`, `high-contrast`, `chartreuse-dark`, `react-dark`, `dracula`
+
+### 7. Profile Views Counter
+
+Tracks profile visits using [Profile Views Counter](https://github.com/antonkomarev/github-profile-views-counter):
+
+```markdown
+
+```
+
+**Style options**: `flat`, `flat-square`, `plastic`, `for-the-badge`
+
+---
+
+## 🔧 Updating Project Information
+
+### Adding New Projects
+
+To add more projects to your profile README, follow this structure:
+
+```markdown
+### 🎯 [Project Name](project-link) • **Status**
+> Brief description of what the project does
+
+**Tech Stack**: Tech1 • Tech2 • Tech3
+**Highlights**:
+- 📌 Feature 1
+- 📌 Feature 2
+- 📌 Feature 3
+
+**Links**: [Live Demo](demo-link) • [Source Code](repo-link)
+
+---
+```
+
+### Updating "About Me" Code Block
+
+Edit the JavaScript object in the About Me section:
+
+```javascript
+const amarnath = {
+ location: "Your Location",
+ education: "Your Education",
+ currentFocus: ["Tech1", "Tech2", "Tech3"],
+ learning: ["Learning1", "Learning2"],
+ workMode: "Your Work Mode",
+ specialization: "Your Specialization",
+ openTo: ["Opportunity1", "Opportunity2"]
+};
+```
+
+### Updating Tech Stack Badges
+
+Add new technology badges using shields.io format:
+
+```markdown
+
+```
+
+**Find logo names**: https://simpleicons.org/
+**Color codes**: Use hex color without the `#` symbol
+
+Example:
+```markdown
+
+```
+
+---
+
+## 🐛 Troubleshooting
+
+### Stats Not Showing?
+
+1. **Make sure your repository is public** - Stats only work for public repos
+2. **Wait a few minutes** - Stats cards may take time to generate on first load
+3. **Check username spelling** - Ensure `username=amar-295` is correct in all URLs
+4. **Clear browser cache** - Force refresh with Ctrl+F5 (Windows) or Cmd+Shift+R (Mac)
+
+### Images Broken?
+
+1. Verify all URLs are using `https://` not `http://`
+2. Check that external services (vercel.app, herokuapp.com) are accessible
+3. Some corporate networks may block external image services
+
+### Profile Not Updating?
+
+1. Make sure you committed your changes to the `README.md` file
+2. Wait up to 5 minutes for GitHub to update your profile
+3. Try opening your profile in an incognito/private window
+4. Clear GitHub's cache by adding `?v=1` to your profile URL: `https://github.com/amar-295?v=1`
+
+### Stats Show "Not Found"?
+
+- Double-check that your username `amar-295` is spelled correctly in all stat URLs
+- Ensure your GitHub account is public and not suspended
+- Some stats require you to have public repositories
+
+---
+
+## ✨ Additional Enhancements
+
+### 1. Add a Pinned Repositories Section
+
+You can manually pin your best repositories on GitHub:
+1. Go to your profile page
+2. Click "Customize your pins"
+3. Select up to 6 repositories to showcase
+
+### 2. Enable GitHub Achievements
+
+Earn badges by:
+- Contributing to open source projects
+- Participating in events like Hacktoberfest
+- Completing GitHub Learning Lab courses
+- Getting stars on your repositories
+
+### 3. Add a Blog Section
+
+If you write technical articles:
+```markdown
+## 📝 Latest Blog Posts
+
+- [Article Title 1](link)
+- [Article Title 2](link)
+
+```
+
+You can automate this with [GitHub Actions](https://github.com/gautamkrishnar/blog-post-workflow).
+
+### 4. Add Spotify Now Playing
+
+Show what you're listening to:
+```markdown
+[](https://spotify-github-profile.vercel.app/api/view?uid=YOUR_SPOTIFY_ID&redirect=true)
+```
+
+Get your Spotify ID from: https://www.spotify.com/account/profile/
+
+### 5. Add Wakatime Stats
+
+Track your coding time with [Wakatime](https://wakatime.com/):
+```markdown
+
+```
+
+### 6. Add Social Badges
+
+More social platform badges:
+```markdown
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 🎯 Best Practices
+
+1. **Keep it updated** - Review and update your README every few months
+2. **Add real links** - Make sure all project links work and demos are live
+3. **Be authentic** - Only list technologies you're comfortable with
+4. **Use consistent theming** - Stick to one color scheme (currently using React blue #61DAFB)
+5. **Mobile friendly** - The README should look good on mobile devices too
+6. **Accessible** - Use descriptive alt text for images
+7. **Professional** - Keep language professional and error-free
+
+---
+
+## 📚 Resources
+
+- [Awesome GitHub Profile README](https://github.com/abhisheknaiidu/awesome-github-profile-readme) - Collection of awesome READMEs
+- [GitHub Profile README Generator](https://rahuldkjain.github.io/gh-profile-readme-generator/) - Interactive generator
+- [Shields.io](https://shields.io/) - Badge generator
+- [Simple Icons](https://simpleicons.org/) - SVG icons for badges
+- [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats) - Stats cards documentation
+
+---
+
+## 🤝 Need Help?
+
+If you encounter any issues or want to customize further:
+1. Check the documentation of each service linked above
+2. Open an issue in this repository
+3. Contact me via email: 612amar@gmail.com
+
+---
+
+
+ Happy coding! 🚀
+
diff --git a/README.md b/README.md
index 8aac089..f424bfb 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,8 @@
> **A modern, high-performance frontend developer portfolio built to showcase technical proficiency and creative design.**
+> 💡 **New!** Looking to enhance your GitHub profile? Check out the [GitHub Profile README](./GITHUB_PROFILE_README.md) and [Setup Guide](./PROFILE_SETUP_GUIDE.md) included in this repository!
+
---
## 🚀 Live Demo
@@ -23,7 +25,8 @@
- [Project Structure](#-project-structure)
- [Getting Started](#-getting-started)
- [Deployment](#-deployment)
-- [Performance & Accessibility](#-performance-&-accessibility)
+- [Performance & Accessibility](#-performance--accessibility)
+- [GitHub Profile Enhancement](#-github-profile-enhancement)
- [Contact](#-contact)
---
@@ -143,6 +146,39 @@ This project is optimized for high performance and accessibility:
---
+## 🎨 GitHub Profile Enhancement
+
+This repository includes a comprehensive GitHub profile README and setup guide to help you create an impressive GitHub profile!
+
+### 📄 What's Included
+
+1. **[GITHUB_PROFILE_README.md](./GITHUB_PROFILE_README.md)** - A complete, ready-to-use GitHub profile README featuring:
+ - 🎯 Animated typing header with dynamic greeting
+ - 📊 Live GitHub stats, streak counters, and contribution graphs
+ - 🏆 GitHub trophies and achievements
+ - 🛠️ Comprehensive tech stack with badges
+ - 🚀 Featured projects showcase
+ - 📫 Contact information and social links
+ - 👀 Profile views counter
+
+2. **[PROFILE_SETUP_GUIDE.md](./PROFILE_SETUP_GUIDE.md)** - Complete setup instructions including:
+ - Step-by-step profile repository creation
+ - Customization options for all components
+ - Troubleshooting common issues
+ - Additional enhancement ideas
+ - Best practices and resources
+
+### 🚀 Quick Start
+
+1. Create a repository named `amar-295` (matching your GitHub username)
+2. Copy the content from [GITHUB_PROFILE_README.md](./GITHUB_PROFILE_README.md)
+3. Paste it into your profile repository's README.md
+4. Visit your profile at `https://github.com/amar-295` to see the enhanced profile!
+
+For detailed instructions and customization options, see the [Setup Guide](./PROFILE_SETUP_GUIDE.md).
+
+---
+
## 📬 Contact
I am open to **Frontend Developer** roles and interesting freelance projects.
From 74e2049dd896c87add9d00a23c504a57582cc2f0 Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 09:06:40 +0000
Subject: [PATCH 3/7] =?UTF-8?q?=F0=9F=93=8B=20Add=20comprehensive=20action?=
=?UTF-8?q?=20checklist=20for=20profile=20enhancement?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: amar-295 <233091910+amar-295@users.noreply.github.com>
---
ACTION_CHECKLIST.md | 327 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 327 insertions(+)
create mode 100644 ACTION_CHECKLIST.md
diff --git a/ACTION_CHECKLIST.md b/ACTION_CHECKLIST.md
new file mode 100644
index 0000000..6560e6e
--- /dev/null
+++ b/ACTION_CHECKLIST.md
@@ -0,0 +1,327 @@
+# ✅ GitHub Profile Enhancement - Action Checklist
+
+This checklist will guide you through setting up and optimizing your enhanced GitHub profile.
+
+---
+
+## 🎯 Immediate Actions (5 minutes)
+
+### Step 1: Create Your Profile Repository
+- [ ] Go to [GitHub](https://github.com) and log in
+- [ ] Click the **+** icon → **New repository**
+- [ ] Name it **`amar-295`** (exactly matching your username)
+- [ ] Set to **Public**
+- [ ] Check "Add a README file"
+- [ ] Click **Create repository**
+
+### Step 2: Add the Enhanced README
+- [ ] Open your new `amar-295` repository
+- [ ] Click on `README.md` → Click the **✏️ edit icon**
+- [ ] Open `GITHUB_PROFILE_README.md` from this repo
+- [ ] Copy the entire content
+- [ ] Paste into your profile README (replace existing content)
+- [ ] Commit changes with message: "✨ Add enhanced profile README"
+
+### Step 3: Verify Your Profile
+- [ ] Visit your profile: `https://github.com/amar-295`
+- [ ] Confirm the enhanced README is displayed
+- [ ] Check that all badges, stats, and animations are working
+- [ ] View on mobile to ensure responsive design
+
+---
+
+## 🎨 Quick Customizations (10 minutes)
+
+### Update Links
+- [ ] Replace `#` placeholder links with actual project demo URLs
+- [ ] Verify all social media links are correct
+- [ ] Update portfolio link if different from current
+
+### Adjust Content
+- [ ] Review the "About Me" code block - update if needed
+- [ ] Check featured projects - add/remove as needed
+- [ ] Verify tech stack badges match your skills
+- [ ] Update location, education, or other personal info
+
+### Fine-tune Appearance
+- [ ] Test different stat card themes (see `BADGES_QUICK_REFERENCE.md`)
+- [ ] Adjust typing animation text in header if desired
+- [ ] Consider adding/removing sections based on preference
+
+---
+
+## 🚀 Repository Enhancements (30 minutes)
+
+### For Each Project Repository
+
+#### Express Authentication Backend
+- [ ] Create comprehensive README with:
+ - [ ] Project overview and motivation
+ - [ ] Features list
+ - [ ] Tech stack with rationale
+ - [ ] Installation & setup instructions
+ - [ ] API endpoints documentation
+ - [ ] Environment variables needed
+ - [ ] Security best practices implemented
+ - [ ] Future improvements
+- [ ] Add relevant badges (Node.js, Express, MongoDB, JWT)
+- [ ] Create CONTRIBUTING.md if open to contributions
+- [ ] Add LICENSE file if not present
+
+#### React Password Generator
+- [ ] Enhance README with:
+ - [ ] Live demo link (prominently displayed)
+ - [ ] Screenshot or GIF of the tool
+ - [ ] Feature highlights
+ - [ ] How to use locally
+ - [ ] Customization options
+ - [ ] Technical implementation details
+- [ ] Add Lighthouse performance scores
+- [ ] Include badges for React, Vite, Tailwind
+
+#### React Portfolio (This Repository)
+- [x] Enhanced README with GitHub profile section ✅
+- [ ] Consider adding:
+ - [ ] Screenshots of different themes (light/dark)
+ - [ ] Lighthouse scores
+ - [ ] Deployment guide
+ - [ ] Browser compatibility matrix
+
+---
+
+## 📊 GitHub Activity Optimization (Ongoing)
+
+### Consistent Contribution Pattern
+- [ ] Set up GitHub Actions for automated tasks
+- [ ] Commit regularly (aim for consistent activity)
+- [ ] Contribute to at least 1 open source project
+- [ ] Create meaningful commit messages
+
+### Repository Quality
+- [ ] Ensure all repos have descriptions
+- [ ] Add topics/tags to each repository (helps discoverability)
+- [ ] Set appropriate repository visibility (public for showcase)
+- [ ] Archive or delete unused/experimental repos
+
+### Documentation Standards
+- [ ] Every repo should have a README
+- [ ] Include setup instructions in all repos
+- [ ] Add code comments for complex logic
+- [ ] Document any environment setup needed
+
+---
+
+## 🏆 Advanced Enhancements (Optional)
+
+### GitHub Actions & CI/CD
+- [ ] Add CI/CD workflows to projects
+- [ ] Display build status badges
+- [ ] Set up automated testing
+- [ ] Add code quality checks (ESLint, Prettier)
+
+### Portfolio Additions
+- [ ] Add a blog section (if you write articles)
+- [ ] Include certification badges
+- [ ] Showcase open source contributions
+- [ ] Add Wakatime stats (coding time tracker)
+- [ ] Integrate Spotify "Now Playing" widget
+
+### Social Proof
+- [ ] Ask colleagues for recommendations on LinkedIn
+- [ ] Share your projects on dev.to, Hashnode, or Medium
+- [ ] Participate in Hacktoberfest or similar events
+- [ ] Contribute to trending open source projects
+
+### Profile Optimization
+- [ ] Pin your 6 best repositories to profile
+- [ ] Update profile bio with clear value proposition
+- [ ] Add profile picture (professional or avatar)
+- [ ] Set GitHub status with current availability
+- [ ] Fill out profile fields (company, location, website)
+
+---
+
+## 📈 Continuous Improvement (Monthly)
+
+### Content Updates
+- [ ] Review and update profile README monthly
+- [ ] Add new projects as completed
+- [ ] Update "Currently Learning" section
+- [ ] Refresh project descriptions and links
+- [ ] Check that all links are working
+
+### Stats Monitoring
+- [ ] Monitor GitHub contribution graph
+- [ ] Track profile views (via counter)
+- [ ] Review most popular repositories
+- [ ] Analyze which content gets most attention
+
+### Community Engagement
+- [ ] Respond to issues on your repositories
+- [ ] Review and merge pull requests
+- [ ] Help others by answering questions
+- [ ] Share knowledge through discussions
+
+---
+
+## 🔍 Quality Checklist
+
+Before considering your profile "complete", verify:
+
+### Content Quality
+- [ ] No spelling or grammar errors
+- [ ] All links work correctly
+- [ ] Contact information is current
+- [ ] Professional tone throughout
+- [ ] Consistent formatting
+
+### Visual Appeal
+- [ ] Consistent color scheme
+- [ ] Good use of whitespace
+- [ ] Readable on mobile devices
+- [ ] Images load properly
+- [ ] Badges display correctly
+
+### Technical Quality
+- [ ] All stats cards work
+- [ ] No broken images
+- [ ] Fast loading times
+- [ ] Accessibility considerations
+- [ ] Works across browsers
+
+---
+
+## 📚 Resources to Explore
+
+### Learning & Growth
+- [ ] [GitHub Learning Lab](https://lab.github.com/) - Free courses
+- [ ] [First Timers Only](https://www.firsttimersonly.com/) - Beginner-friendly open source
+- [ ] [Good First Issues](https://goodfirstissues.com/) - Find projects to contribute to
+
+### Inspiration
+- [ ] [Awesome GitHub Profile README](https://github.com/abhisheknaiidu/awesome-github-profile-readme)
+- [ ] Browse top developers' profiles for ideas
+- [ ] Check trending repositories in your tech stack
+
+### Tools
+- [ ] [GitHub Profile README Generator](https://rahuldkjain.github.io/gh-profile-readme-generator/)
+- [ ] [Shields.io](https://shields.io/) - Badge maker
+- [ ] [Carbon](https://carbon.now.sh/) - Beautiful code screenshots
+- [ ] [Ray.so](https://ray.so/) - Code snippet images
+
+---
+
+## 🎯 Success Metrics
+
+Track these over time to measure improvement:
+
+### Quantitative
+- [ ] Profile views increase
+- [ ] Repository stars increase
+- [ ] Follower count grows
+- [ ] Consistent contribution streak
+- [ ] Issues/PRs engaged with
+
+### Qualitative
+- [ ] Profile appears professional
+- [ ] Content accurately represents skills
+- [ ] Easy for recruiters to contact you
+- [ ] Projects demonstrate your expertise
+- [ ] Documentation is clear and helpful
+
+---
+
+## 💼 Job Search Optimization
+
+### When Actively Looking for Work
+- [ ] Update profile status: "Open to work" or "Available for hire"
+- [ ] Add specific role types you're seeking
+- [ ] Highlight most relevant projects at top
+- [ ] Include keywords relevant to target roles
+- [ ] Ensure contact information is prominent
+- [ ] Link to resume/CV if appropriate
+
+### For Freelance Work
+- [ ] Add "Available for freelance" badge
+- [ ] Showcase client work (with permission)
+- [ ] Include hourly rate or project pricing if comfortable
+- [ ] Link to Upwork, Fiverr, or other freelance profiles
+- [ ] Display testimonials if available
+
+---
+
+## 🤝 Collaboration & Networking
+
+### Building Your Network
+- [ ] Follow developers you admire
+- [ ] Star repositories you find useful
+- [ ] Engage in discussions on projects
+- [ ] Share your projects on social media
+- [ ] Join developer communities (Discord, Reddit, etc.)
+
+### Open Source Contribution
+- [ ] Find projects aligned with your interests
+- [ ] Start with documentation improvements
+- [ ] Fix good first issues
+- [ ] Propose features thoughtfully
+- [ ] Be respectful and patient with maintainers
+
+---
+
+## 📝 Notes & Ideas
+
+Use this space to track ideas for future improvements:
+
+```
+Ideas for new projects:
+-
+-
+
+Skills to learn next:
+-
+-
+
+Profile improvements to make:
+-
+-
+
+Repositories to contribute to:
+-
+-
+```
+
+---
+
+## 🎉 Completion Status
+
+Track your overall progress:
+
+- [ ] Phase 1: Basic Profile Setup (Day 1)
+- [ ] Phase 2: Content Customization (Week 1)
+- [ ] Phase 3: Repository Enhancement (Week 2)
+- [ ] Phase 4: Continuous Optimization (Ongoing)
+
+---
+
+
+ Remember: Your GitHub profile is a living document. Update it regularly!
+
+
+
+ Good luck with your enhanced GitHub profile! 🚀
+
+
+---
+
+## 📞 Need Help?
+
+If you encounter any issues:
+1. Check the `PROFILE_SETUP_GUIDE.md` for detailed instructions
+2. Refer to `BADGES_QUICK_REFERENCE.md` for customization options
+3. Open an issue in this repository
+4. Contact: 612amar@gmail.com
+
+---
+
+**Last Updated**: March 2026
+**Version**: 1.0
From 000aa59045b063e20d99325269b8db6c16c343c0 Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 09:07:32 +0000
Subject: [PATCH 4/7] =?UTF-8?q?=F0=9F=93=96=20Add=20comprehensive=20enhanc?=
=?UTF-8?q?ement=20summary=20document?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: amar-295 <233091910+amar-295@users.noreply.github.com>
---
ENHANCEMENT_SUMMARY.md | 379 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 379 insertions(+)
create mode 100644 ENHANCEMENT_SUMMARY.md
diff --git a/ENHANCEMENT_SUMMARY.md b/ENHANCEMENT_SUMMARY.md
new file mode 100644
index 0000000..e6b4d7e
--- /dev/null
+++ b/ENHANCEMENT_SUMMARY.md
@@ -0,0 +1,379 @@
+# 🎉 GitHub Profile Enhancement - Complete Package
+
+## 📦 What Was Created
+
+Your GitHub profile enhancement package is complete! Here's everything included:
+
+---
+
+## 📄 Files Created
+
+### 1. **GITHUB_PROFILE_README.md** (8.1 KB)
+**Purpose**: Your complete GitHub profile README - ready to copy and paste!
+
+**Features**:
+- 🎯 Animated typing header with rotating messages
+- 📊 Live GitHub stats (contributions, repos, languages)
+- 🔥 GitHub streak counter
+- 🏆 Achievement trophies
+- 📈 Contribution activity graph
+- 💻 Complete tech stack with badges
+- 🚀 Featured projects showcase
+- 📫 Contact information and social links
+- 👀 Profile views counter
+
+**What to do**: Copy this entire file to your `amar-295/amar-295` repository README.md
+
+---
+
+### 2. **PROFILE_SETUP_GUIDE.md** (11 KB)
+**Purpose**: Step-by-step instructions for setting up and customizing your profile
+
+**Contents**:
+- ✅ How to create your profile repository
+- ✅ How to add the README content
+- ✅ Customization options for every component
+- ✅ Troubleshooting common issues
+- ✅ Additional enhancement ideas
+- ✅ Best practices and resources
+
+**What to do**: Read this guide while setting up your profile
+
+---
+
+### 3. **BADGES_QUICK_REFERENCE.md** (16 KB)
+**Purpose**: Comprehensive cheat sheet for customizing badges and stats
+
+**Contents**:
+- 💻 Technology badges (Frontend, Backend, Databases, Languages)
+- 📊 GitHub stats cards (configuration options)
+- 📱 Social media badges (LinkedIn, Twitter, Email, etc.)
+- 🎨 Custom badge creation
+- 🎯 Dynamic content (animations, counters, etc.)
+- 🌈 Color schemes and themes
+- 🔍 How to find logos and icons
+
+**What to do**: Keep this as reference when customizing your profile
+
+---
+
+### 4. **ACTION_CHECKLIST.md** (New!)
+**Purpose**: Organized checklist to track your profile enhancement progress
+
+**Contents**:
+- ✅ Immediate actions (5 minutes)
+- ✅ Quick customizations (10 minutes)
+- ✅ Repository enhancements (30 minutes)
+- ✅ Ongoing optimization tasks
+- ✅ Advanced enhancements (optional)
+- ✅ Quality checklist
+- ✅ Success metrics to track
+
+**What to do**: Use this to systematically enhance your profile
+
+---
+
+### 5. **README.md** (Updated)
+**Purpose**: Enhanced repository README with links to profile enhancement resources
+
+**Changes**:
+- Added notice about GitHub profile enhancement files
+- Added new section explaining what's included
+- Updated table of contents
+- Added quick start guide
+
+---
+
+## 🚀 Quick Start Guide
+
+### Immediate Next Steps (5 minutes):
+
+1. **Create Profile Repository**
+ ```
+ 1. Go to github.com
+ 2. Click + → New repository
+ 3. Name: amar-295
+ 4. Set to Public
+ 5. Check "Add a README file"
+ 6. Create repository
+ ```
+
+2. **Add Enhanced README**
+ ```
+ 1. Open your new amar-295 repository
+ 2. Click README.md → Edit (✏️ icon)
+ 3. Open GITHUB_PROFILE_README.md from this repo
+ 4. Copy everything
+ 5. Paste into your profile README
+ 6. Commit changes
+ ```
+
+3. **View Your Profile**
+ ```
+ Visit: https://github.com/amar-295
+ Your enhanced profile should now be live!
+ ```
+
+---
+
+## 🎨 What Your Profile Includes
+
+### Header Section
+```
+🎯 Animated greeting: "Hi 👋 I'm Amarnath"
+💼 Rotating titles: "Frontend Developer | Open to Opportunities | Building Accessible Web Apps"
+🔗 Portfolio, Email, and LinkedIn badges
+```
+
+### About Me Section
+```javascript
+const amarnath = {
+ location: "Faridabad, India 🇮🇳",
+ education: "BCA Student (2024-2027)",
+ currentFocus: ["React.js", "Tailwind CSS", "Accessibility"],
+ learning: ["Node.js", "Express", "MongoDB"],
+ workMode: "Remote Friendly 🌍",
+ specialization: "Frontend Development",
+ openTo: ["Frontend Developer Roles", "Freelance Projects", "Open Source Collaboration"]
+};
+```
+
+### Featured Projects
+- ✅ Personal Portfolio Website (Live)
+- ✅ Express Authentication Backend (Production Ready)
+- ✅ React Password Generator (Live)
+
+### Tech Stack Badges
+- Frontend: React, JavaScript, Tailwind CSS, HTML5, CSS3
+- Tools: Vite, Git, GitHub, ESLint, Prettier
+- Learning: Node.js, Express, MongoDB
+
+### Live Statistics
+- GitHub contribution stats
+- Coding streak counter
+- Top programming languages
+- Achievement trophies
+- Activity contribution graph
+
+---
+
+## 📊 Visual Preview
+
+Your profile will display:
+
+```
+┌─────────────────────────────────────────────────────────┐
+│ Hi 👋 I'm Amarnath [Animated] │
+│ [Portfolio] [Email] [LinkedIn] │
+├─────────────────────────────────────────────────────────┤
+│ 👨💻 About Me │
+│ Frontend Developer | BCA Student | Remote Friendly │
+├─────────────────────────────────────────────────────────┤
+│ 🚀 Featured Projects │
+│ → Portfolio (Live) ⚡ React 19, Tailwind v4 │
+│ → Express Auth API 🔒 JWT, bcrypt, MongoDB │
+│ → Password Generator 🎲 React, Vite │
+├─────────────────────────────────────────────────────────┤
+│ 🛠️ Tech Stack │
+│ [React] [JavaScript] [Tailwind] [Vite] [Git]... │
+├─────────────────────────────────────────────────────────┤
+│ 📊 GitHub Stats │
+│ [Stats Card] [Streak] [Top Languages] [Trophies] │
+├─────────────────────────────────────────────────────────┤
+│ 📫 Let's Connect │
+│ [Portfolio] [Email] [LinkedIn] [GitHub] │
+└─────────────────────────────────────────────────────────┘
+```
+
+---
+
+## 🎯 Customization Options
+
+### Change Colors
+- Default: React Blue (#61DAFB)
+- See `BADGES_QUICK_REFERENCE.md` for 40+ themes
+
+### Update Content
+- Modify the JavaScript object in "About Me"
+- Add/remove projects in "Featured Projects"
+- Update tech stack badges as you learn new skills
+
+### Adjust Stats
+- Hide certain stats (commits, issues, etc.)
+- Change graph themes
+- Show private contributions
+- Filter specific languages
+
+---
+
+## 📈 Expected Impact
+
+After implementing this profile enhancement:
+
+### Visibility
+- ✅ Professional first impression
+- ✅ Clear demonstration of skills
+- ✅ Easy navigation to projects
+- ✅ Prominent contact information
+
+### Engagement
+- ✅ Higher profile views
+- ✅ More repository stars
+- ✅ Better recruiter reach
+- ✅ Increased networking opportunities
+
+### Career Benefits
+- ✅ Stand out in job applications
+- ✅ Showcase technical expertise
+- ✅ Demonstrate attention to detail
+- ✅ Build personal brand
+
+---
+
+## 🔧 Maintenance
+
+### Weekly
+- Check that all links work
+- Update "Currently Learning" if changed
+
+### Monthly
+- Add new projects as completed
+- Update featured projects list
+- Review and refresh project descriptions
+
+### Quarterly
+- Update tech stack with new skills
+- Add achievements or certifications
+- Refresh profile bio if needed
+
+---
+
+## 📚 Support Resources
+
+### Documentation
+- `PROFILE_SETUP_GUIDE.md` - Detailed setup instructions
+- `BADGES_QUICK_REFERENCE.md` - Customization reference
+- `ACTION_CHECKLIST.md` - Progress tracking
+
+### External Resources
+- [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats)
+- [Shields.io](https://shields.io/)
+- [Simple Icons](https://simpleicons.org/)
+
+### Need Help?
+- 📧 Email: 612amar@gmail.com
+- 🐛 Open an issue in this repository
+- 💬 Check troubleshooting in PROFILE_SETUP_GUIDE.md
+
+---
+
+## ✅ Success Checklist
+
+Quick verification that everything is set up correctly:
+
+- [ ] Profile repository created (amar-295/amar-295)
+- [ ] README content copied from GITHUB_PROFILE_README.md
+- [ ] Profile displays at github.com/amar-295
+- [ ] All stats cards loading correctly
+- [ ] Animated header working
+- [ ] Links to projects functional
+- [ ] Contact information correct
+- [ ] Mobile responsive (check on phone)
+- [ ] No broken images or badges
+
+---
+
+## 🎉 What Makes This Profile Stand Out
+
+### Professional Design
+- Clean, modern layout
+- Consistent color scheme (React blue theme)
+- Professional typography and spacing
+- Mobile-responsive design
+
+### Technical Showcase
+- Live GitHub statistics
+- Real-time contribution tracking
+- Technology proficiency display
+- Featured project highlights
+
+### Accessibility
+- Clear navigation
+- Readable on all devices
+- Descriptive alt text
+- Professional tone
+
+### Completeness
+- Contact information prominent
+- Work availability status clear
+- Skills comprehensively listed
+- Projects well-documented
+
+---
+
+## 🚀 Next Steps
+
+1. **Immediate** (Today)
+ - Set up profile repository
+ - Add enhanced README
+ - Verify everything displays correctly
+
+2. **This Week**
+ - Customize content to match your preferences
+ - Update project links and descriptions
+ - Pin best repositories to profile
+
+3. **Ongoing**
+ - Keep profile updated with new projects
+ - Maintain consistent GitHub activity
+ - Engage with developer community
+
+---
+
+## 💡 Pro Tips
+
+1. **First Impression**: Your profile README is often the first thing people see
+2. **Keep Updated**: Stale profiles suggest inactive developers
+3. **Be Authentic**: Only list skills you're comfortable discussing
+4. **Show Projects**: Demos are more impressive than descriptions
+5. **Make Contact Easy**: Don't hide your email or social links
+6. **Quality > Quantity**: Better to have 3 polished projects than 10 unfinished ones
+7. **Tell a Story**: Your profile should convey your journey and growth
+8. **Stand Out**: But remain professional and avoid gimmicks
+
+---
+
+## 📞 Final Notes
+
+Your GitHub profile enhancement package is complete and ready to use! This comprehensive solution includes:
+
+✅ Professional profile README with dynamic content
+✅ Complete setup and customization guide
+✅ Badge and stats reference guide
+✅ Action checklist for systematic implementation
+✅ Enhanced repository documentation
+
+**Total Time Investment**:
+- Setup: 5-10 minutes
+- Customization: 10-30 minutes
+- Full implementation: 1-2 hours
+
+**Expected Results**:
+- Professional, eye-catching profile
+- Clear demonstration of skills
+- Better visibility to recruiters
+- Increased networking opportunities
+
+---
+
+
+ 🎯 Your GitHub profile is now ready to impress!
+
+
+
+ Built with ❤️ for your success
+
+
+
+ Created: March 2026 | Version: 1.0
+
From f788fe9d9a908517affcfa1f942e67bc31e11aa7 Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 09:15:02 +0000
Subject: [PATCH 5/7] =?UTF-8?q?=F0=9F=93=8B=20Add=20comprehensive=20PR=20m?=
=?UTF-8?q?anagement=20system=20with=20report=20and=20automation=20script?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: amar-295 <233091910+amar-295@users.noreply.github.com>
---
PR_MANAGEMENT_REPORT.md | 427 ++++++++++++++++++++++++++++++++++++++++
manage-prs.sh | 323 ++++++++++++++++++++++++++++++
2 files changed, 750 insertions(+)
create mode 100644 PR_MANAGEMENT_REPORT.md
create mode 100755 manage-prs.sh
diff --git a/PR_MANAGEMENT_REPORT.md b/PR_MANAGEMENT_REPORT.md
new file mode 100644
index 0000000..c47e9f4
--- /dev/null
+++ b/PR_MANAGEMENT_REPORT.md
@@ -0,0 +1,427 @@
+# Pull Request Management Report
+**Generated**: March 17, 2026
+**Repository**: amar-295/react-portfolio
+
+---
+
+## Executive Summary
+
+This repository currently has **9 open pull requests** (8 ready for review, 1 draft) and **27 closed/merged PRs**. All open PRs are experiencing Vercel deployment failures that need to be addressed before merging.
+
+### Quick Stats
+- 🟢 **Merged PRs**: 27
+- 🟡 **Open PRs**: 9 (8 ready, 1 draft)
+- 🔴 **Failing Checks**: All 9 open PRs have Vercel deployment failures
+- ⏱️ **Oldest Open PR**: #88 (March 11, 2026 - 6 days old)
+- 🆕 **Newest Open PR**: #95 (March 17, 2026 - today)
+
+---
+
+## Open Pull Requests Status
+
+### 🚨 High Priority - Draft PRs
+
+#### PR #95: GitHub Profile Enhancement Package ⭐ **Current Branch**
+- **Branch**: `claude/enhance-github-profile`
+- **Status**: Draft (NOT ready for review)
+- **Created**: March 17, 2026 (today)
+- **Author**: Claude (AI agent)
+- **Checks**: ❌ Vercel deployment failed
+- **Files Changed**: 5 files (GITHUB_PROFILE_README.md, PROFILE_SETUP_GUIDE.md, BADGES_QUICK_REFERENCE.md, ACTION_CHECKLIST.md, ENHANCEMENT_SUMMARY.md, README.md)
+
+**Description**: Complete GitHub profile enhancement solution with ready-to-use content, setup documentation, and customization references.
+
+**Action Required**:
+1. Fix Vercel deployment failure
+2. Review and test all documentation
+3. Mark as ready for review when complete
+4. This is the PR you're currently working on!
+
+---
+
+#### PR #90: Scope ProjectCard glow to image container (Sub-PR)
+- **Branch**: `copilot/sub-pr-89`
+- **Status**: Draft (NOT ready for review)
+- **Created**: March 12, 2026 (5 days ago)
+- **Author**: Copilot
+- **Base Branch**: `aurora-project-card-glow-3706439520198146184` (PR #89)
+- **Checks**: Not applicable (sub-PR of another open PR)
+
+**Description**: Fixes glow element positioning that was blocking mobile buttons.
+
+**Action Required**:
+1. This is a sub-PR of #89, should be merged into #89 first
+2. Consider squashing into parent PR #89
+3. Resolve parent PR #89 first before handling this
+
+---
+
+### 🟡 Medium Priority - Accessibility Improvements (Similar Changes)
+
+These PRs all improve alt text accessibility - there's overlap and potential conflicts:
+
+#### PR #93: Improve About Image Alt Text
+- **Branch**: `palette-about-alt-text-13972328420027707570`
+- **Created**: March 13, 2026 (4 days ago)
+- **Author**: @amar-295 (Jules)
+- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed
+- **Changes**: Alt text from `"PROFILE_PICTURE"` to `"Amarnath"`
+
+#### PR #91: Improve Screen Reader Experience for Profile Picture
+- **Branch**: `palette-alt-text-improvement-1818449705510043824`
+- **Created**: March 12, 2026 (5 days ago)
+- **Author**: @amar-295 (Jules)
+- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed
+- **Changes**: Alt text from `PROFILE_PICTURE` to `Profile picture of Amarnath`
+- **Additional**: Added guidance to `.Jules/palette.md`
+
+#### PR #88: Improve Alt Text on Profile Picture
+- **Branch**: `palette-profile-pic-alt-text-7630681974151242554`
+- **Created**: March 11, 2026 (6 days ago)
+- **Author**: @amar-295 (Jules)
+- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed
+- **Changes**: Alt text from `"PROFILE_PICTURE"` to `"Profile picture"`
+- **Additional**: Added JSX accessibility linting
+
+**⚠️ CONFLICT ALERT**: These three PRs (#88, #91, #93) are all changing the same alt text! You need to:
+1. Choose ONE approach (recommendation: #91 - most descriptive)
+2. Close the other two as duplicates
+3. Ensure `.Jules/palette.md` guidance is included
+
+---
+
+### 🟢 Low Priority - UI Enhancement PRs
+
+#### PR #94: Add Glassmorphic Glow to ContactInfoCard
+- **Branch**: `aurora-contact-card-glow-13606082035047715654`
+- **Created**: March 14, 2026 (3 days ago)
+- **Author**: @amar-295 (Jules)
+- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed
+- **Changes**: Premium glassmorphic hover effect on contact cards
+
+**Action**: Fix Vercel deployment, then ready to merge
+
+---
+
+#### PR #92: Enhance TechTag with Subtle Hover Interaction
+- **Branch**: `aurora-techtag-hover-8273217808774143383`
+- **Created**: March 13, 2026 (4 days ago)
+- **Author**: @amar-295 (Jules)
+- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed
+- **Changes**: Added hover background transition to TechTag component
+
+**Action**: Fix Vercel deployment, then ready to merge
+
+---
+
+#### PR #89: Add Glassmorphic Glow to ProjectCard
+- **Branch**: `aurora-project-card-glow-3706439520198146184`
+- **Created**: March 12, 2026 (5 days ago)
+- **Author**: @amar-295 (Jules)
+- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed
+- **Changes**: Animated gradient blur behind ProjectCard images
+- **Note**: Has sub-PR #90 that should be merged into this branch
+
+**Action**:
+1. Merge sub-PR #90 into this branch
+2. Fix Vercel deployment
+3. Then ready to merge to main
+
+---
+
+## Critical Issues
+
+### 🔥 Issue #1: Vercel Deployment Failures (All Open PRs)
+**Problem**: Every single open PR is failing Vercel deployment checks.
+
+**Likely Causes**:
+1. Build errors in the codebase
+2. Missing environment variables (e.g., `VITE_FORMSPREE_PROJECT_ID`)
+3. Vercel configuration issues
+4. Node version mismatch
+
+**Resolution Steps**:
+1. Check main branch deployment status
+2. Review Vercel deployment logs for each failed PR
+3. Fix underlying build issues
+4. Ensure all required environment variables are set in Vercel
+5. Re-trigger deployments for all PRs
+
+---
+
+### 🔥 Issue #2: Duplicate Alt Text PRs (#88, #91, #93)
+**Problem**: Three different PRs are trying to fix the same alt text issue with different approaches.
+
+**Impact**: Creates confusion and potential merge conflicts.
+
+**Resolution**:
+1. **Choose PR #91** (most descriptive: "Profile picture of Amarnath")
+2. Close PR #93 with comment: "Closing in favor of #91 which provides more descriptive alt text"
+3. Close PR #88 with comment: "Closing in favor of #91 which includes both linting setup and better alt text"
+4. Merge #91 after fixing Vercel deployment
+
+---
+
+### 🔥 Issue #3: Sub-PR #90 Not Properly Integrated
+**Problem**: PR #90 is a sub-PR targeting another open PR (#89) rather than main.
+
+**Resolution**:
+1. Merge #90 into #89's branch
+2. Close #90
+3. Continue with #89 review process
+
+---
+
+## Recommended Action Plan
+
+### Phase 1: Fix Infrastructure (Priority 1) 🔴
+
+1. **Investigate Vercel Failures**
+ ```bash
+ # Check if main branch builds successfully
+ npm install
+ npm run build
+ ```
+
+2. **Review Vercel Logs** for each PR:
+ - PR #95: https://vercel.com/amar-295s-projects/react-portfolio/DmY6YtgZjVg6znTfUDSPGGHjDysh
+ - PR #94: https://vercel.com/amar-295s-projects/react-portfolio/CNMwur498ADEM2SwKak46mCqkEmK
+ - PR #93: https://vercel.com/amar-295s-projects/react-portfolio/GEyGJGpcN45zAeThdgZXW1n8mbvF
+
+3. **Fix Build Issues** identified in logs
+
+4. **Re-trigger All Deployments**
+
+---
+
+### Phase 2: Resolve Duplicate PRs (Priority 2) 🟡
+
+1. **Keep PR #91** - Most complete solution
+2. **Close PR #93** with comment:
+ ```
+ Closing this PR in favor of #91, which provides more descriptive alt text
+ ("Profile picture of Amarnath" vs just "Amarnath").
+ ```
+
+3. **Close PR #88** with comment:
+ ```
+ Closing this PR in favor of #91, which includes both the JSX accessibility
+ linting setup and better alt text description.
+ ```
+
+---
+
+### Phase 3: Handle Sub-PR (Priority 2) 🟡
+
+1. **Merge PR #90 into PR #89's branch**:
+ ```bash
+ git checkout aurora-project-card-glow-3706439520198146184
+ git merge copilot/sub-pr-89
+ git push
+ ```
+
+2. **Close PR #90** with comment:
+ ```
+ Changes merged into parent PR #89. This sub-PR is no longer needed.
+ ```
+
+---
+
+### Phase 4: Merge Ready PRs (Priority 3) 🟢
+
+After fixing Vercel deployments, merge in this order:
+
+1. **PR #91** - Alt text improvement (foundational accessibility fix)
+2. **PR #92** - TechTag hover (small, isolated change)
+3. **PR #94** - ContactInfoCard glow (isolated component)
+4. **PR #89** - ProjectCard glow (after merging sub-PR #90)
+
+---
+
+### Phase 5: Complete Draft PRs (Priority 4) ⚪
+
+1. **PR #95** - GitHub profile enhancement (current work)
+ - Review all files
+ - Test documentation
+ - Fix Vercel deployment
+ - Mark as ready for review
+ - Merge after approval
+
+---
+
+## PR Merge Strategy
+
+### Recommended Merge Order (After Fixing Vercel)
+
+```
+1. PR #91 (Alt text - foundation)
+ ↓
+2. PR #92 (TechTag hover - simple)
+ ↓
+3. PR #94 (ContactInfo glow - isolated)
+ ↓
+4. PR #89 (ProjectCard glow - with sub-PR #90 merged)
+ ↓
+5. PR #95 (GitHub profile - after draft complete)
+```
+
+### Why This Order?
+
+1. **Accessibility First**: Alt text fix (#91) improves core accessibility
+2. **Simple → Complex**: Start with small, isolated changes
+3. **Visual Enhancements**: Group related UI improvements together
+4. **Documentation Last**: Complete feature work before documentation
+
+---
+
+## Maintenance Recommendations
+
+### 1. Establish PR Guidelines
+
+Create `.github/PULL_REQUEST_TEMPLATE.md`:
+```markdown
+## Description
+
+
+## Type of Change
+- [ ] Bug fix
+- [ ] New feature
+- [ ] Accessibility improvement
+- [ ] UI enhancement
+- [ ] Documentation
+- [ ] Refactor
+
+## Checklist
+- [ ] Builds successfully locally
+- [ ] All tests pass
+- [ ] No console errors
+- [ ] Accessibility tested (if applicable)
+- [ ] Mobile responsive (if UI change)
+- [ ] Dark mode works (if UI change)
+
+## Screenshots (if applicable)
+
+```
+
+---
+
+### 2. Prevent Duplicate PRs
+
+**Process**:
+1. Check open PRs before creating new ones
+2. Use GitHub Projects to track work in progress
+3. Add labels: `accessibility`, `ui-enhancement`, `aurora`, `palette`
+4. Close stale PRs after 7 days of inactivity
+
+---
+
+### 3. Fix CI/CD Pipeline
+
+**Vercel Configuration**:
+1. Verify build command: `npm run build` or `vite build`
+2. Check Node version in `package.json` engines field
+3. Set required environment variables in Vercel dashboard
+4. Enable automatic deployments for PRs
+
+**Add GitHub Actions** (optional):
+```yaml
+# .github/workflows/ci.yml
+name: CI
+on: [pull_request]
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
+ with:
+ node-version: '18'
+ - run: npm install
+ - run: npm run lint
+ - run: npm run test
+ - run: npm run build
+```
+
+---
+
+### 4. PR Review Process
+
+**Before Merging**, ensure:
+- ✅ All CI checks pass (especially Vercel deployment)
+- ✅ Code review completed
+- ✅ No merge conflicts
+- ✅ Tests pass locally
+- ✅ Visually tested in browser (for UI changes)
+- ✅ Accessibility tested (for a11y changes)
+
+---
+
+## Quick Action Commands
+
+### Check Build Locally
+```bash
+cd /home/runner/work/react-portfolio/react-portfolio
+npm install
+npm run build
+```
+
+### View PR Diff
+```bash
+gh pr diff
+```
+
+### Close Duplicate PRs
+```bash
+gh pr close 88 -c "Closing in favor of #91"
+gh pr close 93 -c "Closing in favor of #91"
+```
+
+### Merge Sub-PR into Parent
+```bash
+git checkout aurora-project-card-glow-3706439520198146184
+git merge copilot/sub-pr-89
+git push origin aurora-project-card-glow-3706439520198146184
+gh pr close 90 -c "Merged into parent PR #89"
+```
+
+### Merge PR After Approval
+```bash
+gh pr merge --squash --delete-branch
+```
+
+---
+
+## Summary of Actions Needed
+
+### Immediate (Do Now) 🔴
+- [ ] Fix Vercel deployment failures (investigate build errors)
+- [ ] Choose one alt text PR (#91 recommended)
+- [ ] Close duplicate PRs (#88, #93)
+
+### Soon (This Week) 🟡
+- [ ] Merge sub-PR #90 into PR #89
+- [ ] Complete PR #95 (GitHub profile enhancement)
+- [ ] Merge ready PRs in recommended order
+
+### Later (Ongoing) 🟢
+- [ ] Establish PR guidelines and templates
+- [ ] Add CI/CD automation with GitHub Actions
+- [ ] Implement PR labels and project tracking
+- [ ] Set up automatic stale PR closure
+
+---
+
+## Contact & Resources
+
+**Repository**: https://github.com/amar-295/react-portfolio
+**Open PRs**: https://github.com/amar-295/react-portfolio/pulls
+**Issues**: https://github.com/amar-295/react-portfolio/issues
+
+**For Questions**:
+- Email: 612amar@gmail.com
+- GitHub: @amar-295
+
+---
+
+*Report generated by Claude Code Assistant*
+*Last updated: March 17, 2026*
diff --git a/manage-prs.sh b/manage-prs.sh
new file mode 100755
index 0000000..591e3aa
--- /dev/null
+++ b/manage-prs.sh
@@ -0,0 +1,323 @@
+#!/bin/bash
+
+# PR Management Quick Actions Script
+# Repository: amar-295/react-portfolio
+# This script helps manage all open pull requests efficiently
+
+set -e
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+echo -e "${BLUE}========================================${NC}"
+echo -e "${BLUE} PR Management Quick Actions${NC}"
+echo -e "${BLUE} Repository: amar-295/react-portfolio${NC}"
+echo -e "${BLUE}========================================${NC}"
+echo ""
+
+# Function to display menu
+show_menu() {
+ echo "Select an action:"
+ echo ""
+ echo " ${GREEN}Infrastructure Fixes:${NC}"
+ echo " 1. Check local build (verify no build errors)"
+ echo " 2. Run tests locally"
+ echo " 3. Check Vercel deployment status for all PRs"
+ echo ""
+ echo " ${YELLOW}PR Management:${NC}"
+ echo " 4. Close duplicate alt-text PRs (#88, #93)"
+ echo " 5. Merge sub-PR #90 into parent PR #89"
+ echo " 6. List all open PRs with status"
+ echo " 7. View specific PR details"
+ echo ""
+ echo " ${BLUE}Merge Operations:${NC}"
+ echo " 8. Merge PR (with checks)"
+ echo " 9. Merge PRs in recommended order (batch)"
+ echo ""
+ echo " ${RED}Other:${NC}"
+ echo " 10. Create PR management report"
+ echo " 11. Exit"
+ echo ""
+ read -p "Enter choice [1-11]: " choice
+ echo ""
+}
+
+# Function to check local build
+check_build() {
+ echo -e "${BLUE}Checking local build...${NC}"
+ if npm run build; then
+ echo -e "${GREEN}✓ Build successful!${NC}"
+ return 0
+ else
+ echo -e "${RED}✗ Build failed! Fix errors before merging PRs.${NC}"
+ return 1
+ fi
+}
+
+# Function to run tests
+run_tests() {
+ echo -e "${BLUE}Running tests...${NC}"
+ if npm test; then
+ echo -e "${GREEN}✓ All tests passed!${NC}"
+ return 0
+ else
+ echo -e "${RED}✗ Tests failed!${NC}"
+ return 1
+ fi
+}
+
+# Function to check Vercel status
+check_vercel_status() {
+ echo -e "${BLUE}Checking Vercel deployment status...${NC}"
+ echo ""
+
+ declare -a prs=(95 94 93 92 91 90 89 88)
+
+ for pr in "${prs[@]}"; do
+ echo -e "${YELLOW}PR #$pr:${NC}"
+ gh pr view "$pr" --json statusCheckRollup --jq '.statusCheckRollup[] | select(.context == "Vercel") | " Status: \(.state) - \(.description)"' || echo " Could not fetch status"
+ echo ""
+ done
+}
+
+# Function to close duplicate PRs
+close_duplicates() {
+ echo -e "${YELLOW}Closing duplicate alt-text PRs...${NC}"
+ echo ""
+
+ read -p "This will close PRs #88 and #93 in favor of #91. Continue? (y/n): " confirm
+ if [ "$confirm" != "y" ]; then
+ echo "Cancelled."
+ return
+ fi
+
+ echo "Closing PR #88..."
+ gh pr close 88 --comment "Closing this PR in favor of #91, which includes both the JSX accessibility linting setup and better alt text description ('Profile picture of Amarnath')." || true
+
+ echo "Closing PR #93..."
+ gh pr close 93 --comment "Closing this PR in favor of #91, which provides more descriptive alt text ('Profile picture of Amarnath' vs just 'Amarnath')." || true
+
+ echo -e "${GREEN}✓ Duplicate PRs closed successfully!${NC}"
+}
+
+# Function to merge sub-PR into parent
+merge_sub_pr() {
+ echo -e "${YELLOW}Merging sub-PR #90 into parent PR #89...${NC}"
+ echo ""
+
+ read -p "This will merge copilot/sub-pr-89 into aurora-project-card-glow-3706439520198146184. Continue? (y/n): " confirm
+ if [ "$confirm" != "y" ]; then
+ echo "Cancelled."
+ return
+ fi
+
+ # Save current branch
+ CURRENT_BRANCH=$(git branch --show-current)
+
+ echo "Fetching latest changes..."
+ git fetch origin
+
+ echo "Checking out parent PR branch..."
+ git checkout aurora-project-card-glow-3706439520198146184
+
+ echo "Merging sub-PR branch..."
+ if git merge origin/copilot/sub-pr-89 --no-ff -m "Merge sub-PR #90: Scope ProjectCard glow to image container"; then
+ echo "Pushing changes..."
+ git push origin aurora-project-card-glow-3706439520198146184
+
+ echo "Closing sub-PR #90..."
+ gh pr close 90 --comment "Changes merged into parent PR #89. This sub-PR is no longer needed." || true
+
+ echo -e "${GREEN}✓ Sub-PR merged and closed successfully!${NC}"
+ else
+ echo -e "${RED}✗ Merge failed! Please resolve conflicts manually.${NC}"
+ fi
+
+ # Return to original branch
+ git checkout "$CURRENT_BRANCH"
+}
+
+# Function to list open PRs
+list_open_prs() {
+ echo -e "${BLUE}Open Pull Requests:${NC}"
+ echo ""
+ gh pr list --state open --json number,title,headRefName,isDraft,createdAt,author --template '{{range .}}{{printf "#%v" .number}} - {{.title}}
+ Branch: {{.headRefName}}
+ Author: {{.author.login}}
+ Created: {{timeago .createdAt}}
+ Draft: {{.isDraft}}
+
+{{end}}'
+}
+
+# Function to view PR details
+view_pr_details() {
+ read -p "Enter PR number: " pr_num
+ echo ""
+ gh pr view "$pr_num"
+}
+
+# Function to merge PR with checks
+merge_pr() {
+ read -p "Enter PR number to merge: " pr_num
+ echo ""
+
+ echo -e "${BLUE}Checking PR #$pr_num status...${NC}"
+
+ # Check if PR is mergeable
+ MERGEABLE=$(gh pr view "$pr_num" --json mergeable --jq '.mergeable')
+ STATE=$(gh pr view "$pr_num" --json state --jq '.state')
+
+ if [ "$STATE" != "OPEN" ]; then
+ echo -e "${RED}✗ PR #$pr_num is not open (state: $STATE)${NC}"
+ return 1
+ fi
+
+ if [ "$MERGEABLE" != "MERGEABLE" ]; then
+ echo -e "${RED}✗ PR #$pr_num is not mergeable (status: $MERGEABLE)${NC}"
+ echo " Please resolve conflicts or wait for checks to complete."
+ return 1
+ fi
+
+ echo -e "${GREEN}✓ PR #$pr_num is ready to merge${NC}"
+ echo ""
+
+ read -p "Merge strategy? (s=squash, m=merge, r=rebase) [s]: " strategy
+ strategy=${strategy:-s}
+
+ case $strategy in
+ s)
+ echo "Merging with squash..."
+ gh pr merge "$pr_num" --squash --delete-branch
+ ;;
+ m)
+ echo "Merging with merge commit..."
+ gh pr merge "$pr_num" --merge --delete-branch
+ ;;
+ r)
+ echo "Merging with rebase..."
+ gh pr merge "$pr_num" --rebase --delete-branch
+ ;;
+ *)
+ echo "Invalid strategy. Cancelled."
+ return 1
+ ;;
+ esac
+
+ echo -e "${GREEN}✓ PR #$pr_num merged successfully!${NC}"
+}
+
+# Function to merge PRs in recommended order
+batch_merge() {
+ echo -e "${YELLOW}Batch merge PRs in recommended order${NC}"
+ echo ""
+ echo "This will merge PRs in this order:"
+ echo " 1. PR #91 (Alt text - foundation)"
+ echo " 2. PR #92 (TechTag hover)"
+ echo " 3. PR #94 (ContactInfo glow)"
+ echo " 4. PR #89 (ProjectCard glow)"
+ echo ""
+
+ read -p "Continue with batch merge? (y/n): " confirm
+ if [ "$confirm" != "y" ]; then
+ echo "Cancelled."
+ return
+ fi
+
+ declare -a prs_to_merge=(91 92 94 89)
+
+ for pr in "${prs_to_merge[@]}"; do
+ echo ""
+ echo -e "${BLUE}Processing PR #$pr...${NC}"
+
+ # Check if mergeable
+ MERGEABLE=$(gh pr view "$pr" --json mergeable --jq '.mergeable')
+
+ if [ "$MERGEABLE" == "MERGEABLE" ]; then
+ echo -e "${GREEN}✓ PR #$pr is mergeable${NC}"
+ read -p "Merge PR #$pr now? (y/n/q to quit): " merge_confirm
+
+ if [ "$merge_confirm" == "q" ]; then
+ echo "Batch merge cancelled."
+ return
+ elif [ "$merge_confirm" == "y" ]; then
+ gh pr merge "$pr" --squash --delete-branch
+ echo -e "${GREEN}✓ PR #$pr merged!${NC}"
+ sleep 2 # Wait a bit between merges
+ else
+ echo "Skipping PR #$pr"
+ fi
+ else
+ echo -e "${RED}✗ PR #$pr is not mergeable (status: $MERGEABLE)${NC}"
+ echo " Stopping batch merge. Please fix this PR first."
+ return 1
+ fi
+ done
+
+ echo ""
+ echo -e "${GREEN}✓ Batch merge completed!${NC}"
+}
+
+# Function to create report
+create_report() {
+ echo -e "${BLUE}PR Management Report already exists:${NC}"
+ echo " Location: PR_MANAGEMENT_REPORT.md"
+ echo ""
+ read -p "Open in editor? (y/n): " open_editor
+ if [ "$open_editor" == "y" ]; then
+ ${EDITOR:-nano} PR_MANAGEMENT_REPORT.md
+ fi
+}
+
+# Main loop
+while true; do
+ show_menu
+
+ case $choice in
+ 1)
+ check_build
+ ;;
+ 2)
+ run_tests
+ ;;
+ 3)
+ check_vercel_status
+ ;;
+ 4)
+ close_duplicates
+ ;;
+ 5)
+ merge_sub_pr
+ ;;
+ 6)
+ list_open_prs
+ ;;
+ 7)
+ view_pr_details
+ ;;
+ 8)
+ merge_pr
+ ;;
+ 9)
+ batch_merge
+ ;;
+ 10)
+ create_report
+ ;;
+ 11)
+ echo -e "${GREEN}Goodbye!${NC}"
+ exit 0
+ ;;
+ *)
+ echo -e "${RED}Invalid option. Please try again.${NC}"
+ ;;
+ esac
+
+ echo ""
+ read -p "Press Enter to continue..."
+ echo ""
+done
From 4a67535cba06998384b0681df7b927acdb3d739f Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 12:20:28 +0000
Subject: [PATCH 6/7] Initial commit - preparing to merge open PRs
Co-authored-by: amar-295 <233091910+amar-295@users.noreply.github.com>
---
package-lock.json | 1247 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 1233 insertions(+), 14 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 0283a07..66e0996 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,9 @@
"version": "0.0.0",
"dependencies": {
"@formspree/react": "^3.0.0",
+ "@playwright/test": "^1.58.2",
"@tailwindcss/vite": "^4.1.18",
+ "playwright": "^1.58.2",
"prop-types": "^15.8.1",
"react": "^19.2.0",
"react-dom": "^19.2.0",
@@ -18,6 +20,9 @@
},
"devDependencies": {
"@eslint/js": "^9.39.1",
+ "@testing-library/jest-dom": "^6.6.3",
+ "@testing-library/react": "^16.2.0",
+ "@testing-library/user-event": "^14.6.1",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.1",
@@ -25,12 +30,42 @@
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^16.5.0",
+ "jsdom": "^26.0.0",
"vite": "^7.3.1",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-html-inline-sources": "^0.0.4",
- "vite-plugin-webfont-dl": "^3.12.0"
+ "vite-plugin-webfont-dl": "^3.12.0",
+ "vitest": "^3.0.5"
}
},
+ "node_modules/@adobe/css-tools": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
+ "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz",
+ "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/@babel/code-frame": {
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
@@ -62,7 +97,6 @@
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -266,6 +300,16 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/runtime": {
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
+ "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/template": {
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
@@ -350,7 +394,6 @@
"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@keyv/serialize": "^1.1.1"
}
@@ -376,6 +419,121 @@
"@keyv/serialize": "^1.1.1"
}
},
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
+ "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
+ "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
+ "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.1.0",
+ "@csstools/css-calc": "^2.1.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+ "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+ "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
@@ -1077,6 +1235,21 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@playwright/test": {
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz",
+ "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright": "1.58.2"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz",
@@ -1428,7 +1601,6 @@
"resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-5.10.0.tgz",
"integrity": "sha512-PTigkxMdMUP6B5ISS7jMqJAKhgrhZwjprDqR1eATtFfh0OpKVNp110xiH+goeVdrJ29/4LeZJR4FaHHWstsu0A==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12.16"
}
@@ -1690,6 +1862,104 @@
"vite": "^5.2.0 || ^6 || ^7"
}
},
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
+ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "picocolors": "1.1.1",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/jest-dom": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz",
+ "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@adobe/css-tools": "^4.4.0",
+ "aria-query": "^5.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.6.3",
+ "picocolors": "^1.1.1",
+ "redent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+ "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@testing-library/react": {
+ "version": "16.3.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz",
+ "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": "^10.0.0",
+ "@types/react": "^18.0.0 || ^19.0.0",
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@testing-library/user-event": {
+ "version": "14.6.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
+ "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": ">=7.21.4"
+ }
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1735,6 +2005,24 @@
"@babel/types": "^7.28.2"
}
},
+ "node_modules/@types/chai": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/deep-eql": "*",
+ "assertion-error": "^2.0.1"
+ }
+ },
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -1754,7 +2042,6 @@
"integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -1790,13 +2077,127 @@
"vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
}
},
+ "node_modules/@vitest/expect": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+ "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "3.2.4",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+ "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+ "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "3.2.4",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+ "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+ "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^4.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+ "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "loupe": "^3.1.4",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
"node_modules/acorn": {
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1814,6 +2215,16 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -1831,6 +2242,17 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -1854,6 +2276,26 @@
"dev": true,
"license": "Python-2.0"
},
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -1921,7 +2363,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -1936,6 +2377,16 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/cacheable": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz",
@@ -2005,7 +2456,24 @@
],
"license": "CC-BY-4.0"
},
- "node_modules/chalk": {
+ "node_modules/chai": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
+ "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
@@ -2022,6 +2490,16 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/check-error": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
+ "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
"node_modules/clean-css": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
@@ -2097,6 +2575,27 @@
"node": ">= 8"
}
},
+ "node_modules/css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cssstyle": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
+ "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/css-color": "^3.2.0",
+ "rrweb-cssom": "^0.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/csstype": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
@@ -2104,6 +2603,20 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -2122,6 +2635,23 @@
}
}
},
+ "node_modules/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -2139,6 +2669,16 @@
"node": ">=0.4.0"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/detect-libc": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
@@ -2148,6 +2688,14 @@
"node": ">=8"
}
},
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -2216,6 +2764,13 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
@@ -2315,7 +2870,6 @@
"integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -2484,6 +3038,16 @@
"node": ">=4.0"
}
},
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -2494,6 +3058,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/expect-type": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
+ "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2843,6 +3417,60 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -2880,6 +3508,16 @@
"node": ">=0.8.19"
}
},
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2903,6 +3541,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2938,6 +3583,46 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/jsdom": {
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -3306,6 +3991,13 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/loupe": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+ "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -3316,6 +4008,17 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
"node_modules/magic-string": {
"version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
@@ -3358,6 +4061,16 @@
"node": ">= 0.6"
}
},
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3410,6 +4123,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/nwsapi": {
+ "version": "2.2.23",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz",
+ "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -3515,6 +4235,23 @@
"node": ">=8"
}
},
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathval": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
+ "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16"
+ }
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -3526,7 +4263,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -3534,6 +4270,50 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/playwright": {
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz",
+ "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.58.2"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz",
+ "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==",
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/playwright/node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
@@ -3572,6 +4352,44 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -3618,7 +4436,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3628,7 +4445,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -3661,6 +4477,20 @@
"node": ">=0.10.0"
}
},
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -3715,6 +4545,33 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
"node_modules/scheduler": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
@@ -3754,6 +4611,13 @@
"node": ">=8"
}
},
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -3773,6 +4637,33 @@
"node": ">=0.10.0"
}
},
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/std-env": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
+ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -3786,6 +4677,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/strip-literal": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz",
+ "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/strip-literal/node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -3799,6 +4710,13 @@
"node": ">=8"
}
},
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tailwindcss": {
"version": "4.1.18",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz",
@@ -3818,6 +4736,20 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -3834,6 +4766,82 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
+ "node_modules/tinypool": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+ "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
+ "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
+ "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.86"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -3903,7 +4911,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -3973,6 +4980,29 @@
}
}
},
+ "node_modules/vite-node": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.4.1",
+ "es-module-lexer": "^1.7.0",
+ "pathe": "^2.0.3",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
"node_modules/vite-plugin-compression": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz",
@@ -4494,6 +5524,140 @@
"hookified": "^1.15.0"
}
},
+ "node_modules/vitest": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.4",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/pretty-format": "^3.2.4",
+ "@vitest/runner": "3.2.4",
+ "@vitest/snapshot": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.1",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.4",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.4",
+ "@vitest/ui": "3.2.4",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "^5.1.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -4510,6 +5674,23 @@
"node": ">= 8"
}
},
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -4520,6 +5701,45 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ws": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
+ "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -4546,7 +5766,6 @@
"integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"dev": true,
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
From bdd1f91626fdcc479d5da8460ba0d817043d18af Mon Sep 17 00:00:00 2001
From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com>
Date: Tue, 17 Mar 2026 12:23:41 +0000
Subject: [PATCH 7/7] Add script to close merged/duplicate PRs
---
close-merged-prs.sh | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100755 close-merged-prs.sh
diff --git a/close-merged-prs.sh b/close-merged-prs.sh
new file mode 100755
index 0000000..8e2bbf9
--- /dev/null
+++ b/close-merged-prs.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+# Script to close remaining PRs after successful merges
+# Run this after verifying all merges are successful
+
+echo "Closing duplicate and merged PRs..."
+echo ""
+
+# Close PR #88 (duplicate of #91)
+echo "Closing PR #88 (duplicate alt-text PR)..."
+gh pr close 88 --comment "Closing in favor of #91, which includes both JSX accessibility linting and more descriptive alt text ('Profile picture of Amarnath'). Thank you for the contribution!"
+
+# Close PR #93 (duplicate of #91)
+echo "Closing PR #93 (duplicate alt-text PR)..."
+gh pr close 93 --comment "Closing in favor of #91, which provides more descriptive alt text ('Profile picture of Amarnath' vs just 'Amarnath'). Thank you for the contribution!"
+
+# Close PR #90 (sub-PR merged into #89)
+echo "Closing PR #90 (sub-PR)..."
+gh pr close 90 --comment "Changes from this sub-PR have been merged into parent PR #89, which has now been successfully merged to main. Thank you for the fix!"
+
+echo ""
+echo "✅ All duplicate and merged PRs closed successfully!"
+echo ""
+echo "Remaining open PRs:"
+gh pr list --state open