{"id":33526239,"url":"https://github.com/luismr/pudim-dev-calculator","last_synced_at":"2025-11-26T12:04:41.514Z","repository":{"id":324986399,"uuid":"1099343920","full_name":"luismr/pudim-dev-calculator","owner":"luismr","description":"🍮 Calculate your Dev Pudim Score! Next.js app that analyzes GitHub profiles and ranks developers with dessert-themed titles from \"Legendary Flan\" to \"Uncooked Mix\". Built with Next.js 16, React 19, Tailwind \u0026 shadcn/ui. Inspired by github-readme-stats. Gamifies developer stats into a sweet scoring system. Check your flavor!","archived":false,"fork":false,"pushed_at":"2025-11-19T01:03:19.000Z","size":260,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-19T01:09:19.420Z","etag":null,"topics":["docker","github","github-actions","pudim","react","typescript","vitest"],"latest_commit_sha":null,"homepage":"https://pudim.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luismr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-18T21:55:29.000Z","updated_at":"2025-11-19T01:03:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/luismr/pudim-dev-calculator","commit_stats":null,"previous_names":["luismr/pudim-dev-calculator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/luismr/pudim-dev-calculator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luismr%2Fpudim-dev-calculator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luismr%2Fpudim-dev-calculator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luismr%2Fpudim-dev-calculator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luismr%2Fpudim-dev-calculator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luismr","download_url":"https://codeload.github.com/luismr/pudim-dev-calculator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luismr%2Fpudim-dev-calculator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286079811,"owners_count":27282121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-26T02:00:06.075Z","response_time":193,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","github","github-actions","pudim","react","typescript","vitest"],"created_at":"2025-11-26T12:04:41.044Z","updated_at":"2025-11-26T12:04:41.506Z","avatar_url":"https://github.com/luismr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pudim.dev 🍮\n\n![CI](https://github.com/luismr/pudim-dev-calculator/workflows/CI%20-%20Build,%20Test%20%26%20Coverage/badge.svg)\n![Docker](https://github.com/luismr/pudim-dev-calculator/workflows/Docker%20Build%20%26%20Push/badge.svg)\n![Next.js](https://img.shields.io/badge/Next.js-16.0.3-black?style=flat-square\u0026logo=next.js)\n![React](https://img.shields.io/badge/React-19.2.0-blue?style=flat-square\u0026logo=react)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue?style=flat-square\u0026logo=typescript)\n![TailwindCSS](https://img.shields.io/badge/Tailwind-4.x-38bdf8?style=flat-square\u0026logo=tailwindcss)\n![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)\n\n🍮 Calculate your Dev Pudim Score! Next.js app that analyzes GitHub profiles and ranks developers with dessert-themed titles from \"Legendary Flan\" to \"Underbaked\". Built with Next.js 16, React 19, Tailwind \u0026 shadcn/ui. Inspired by github-readme-stats. Gamifies developer stats into a sweet scoring system. Check your flavor!\n\n## 🚀 Quick Start\n\n**Check your score:**\n```\nhttps://pudim.dev/calculator/YOUR_GITHUB_USERNAME\n```\n\n**Embed your badge:**\n```markdown\n[![Pudim Score](https://pudim.dev/badge/YOUR_GITHUB_USERNAME)](https://pudim.dev/calculator/YOUR_GITHUB_USERNAME)\n```\n\nReplace `YOUR_GITHUB_USERNAME` with your actual GitHub username!\n\n## 🎯 What is this?\n\n**pudim.dev** is a fun, interactive web application that gamifies your GitHub profile statistics into a delicious \"Pudim Score\" (pudding score). Enter any GitHub username and discover their developer flavor profile with ranks ranging from \"Legendary Flan\" 🍮✨ to \"Underbaked\" 🥚.\n\nThe app analyzes public GitHub data including:\n- ⭐ Total stars across all repositories\n- 👥 Follower count\n- 📦 Number of public repositories\n- 💻 Programming language distribution (your \"pudim flavors\")\n\nBased on these metrics, users receive a personalized rank, score, and dessert-themed title that celebrates their open-source contributions.\n\n## ✨ Features\n\n### 🔗 Direct Calculator Links\nShare your Pudim Score with a personalized URL that instantly displays your GitHub stats:\n\n```\nhttps://pudim.dev/calculator/[username]\n```\n\n**Example:** [https://pudim.dev/calculator/luismr](https://pudim.dev/calculator/luismr)\n\nSimply replace `[username]` with any GitHub username. The calculator page loads automatically with all the user's stats, rank, and \"pudim flavors\" (programming languages) beautifully displayed!\n\n**Use Cases:**\n- Share your developer profile on social media\n- Include in your portfolio or website\n- Show off your open-source contributions\n- Compare scores with friends and colleagues\n\n---\n\n### 🖼️ Embeddable Badge\nGenerate a beautiful, dynamic badge image of your Pudim Score to embed in your GitHub profile, documentation, or anywhere else!\n\n**Direct Image URL:**\n```\nhttps://pudim.dev/badge/[username]\n```\n\n**In Markdown (Perfect for README files):**\n```markdown\n![Pudim Score](https://pudim.dev/badge/luismr)\n```\n\n**As a Clickable Badge (Recommended):**\n```markdown\n[![Pudim Score](https://pudim.dev/badge/luismr)](https://pudim.dev/calculator/luismr)\n```\n\n**In HTML:**\n```html\n\u003ca href=\"https://pudim.dev/calculator/luismr\"\u003e\n  \u003cimg src=\"https://pudim.dev/badge/luismr\" alt=\"Pudim Score\" /\u003e\n\u003c/a\u003e\n```\n\n**Badge Features:**\n- 🖼️ **Your GitHub avatar** - Personal branding\n- 👤 **Username and member since date** - Show how long you've been coding\n- 🏆 **Rank and title** - Your prestigious dessert designation (e.g., \"Master Pudim\")\n- 📊 **Key Stats** - Total stars, followers, and public repos at a glance\n- 🎨 **Top 5 Programming Languages** - Your \"Pudim Flavors\" with color-coded bars\n- 🔄 **Real-time Updates** - Badge refreshes automatically when your stats change\n- 📱 **Responsive Design** - Looks great on any device or platform\n\n**Pro Tips:**\n- Add the clickable version to your GitHub profile README for maximum engagement\n- Use it in project documentation to showcase maintainer credibility\n- Include in your resume or portfolio as a visual stats summary\n- Badge dimensions: 800x600px (optimized for most platforms)\n\n---\n\n### 📊 Interactive Rank Information\nClick the info icon (ⓘ) next to your rank title to open an interactive modal showing:\n\n- 📋 **Complete Ranking System** - All 6 tiers from \"Legendary Flan\" to \"Underbaked\"\n- 🧮 **Score Calculation Formula** - Transparent algorithm breakdown\n- 🎯 **Threshold Details** - See exactly what score you need for the next rank\n- 💡 **Rank Descriptions** - Fun, dessert-themed explanations for each tier\n- 📈 **Your Progress** - See how close you are to leveling up\n\nThis feature helps you understand how to improve your score and reach the next delicious rank!\n\n## 🧮 How is the Score Calculated?\n\nThe Pudim Score uses a **weighted algorithm** inspired by [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) that evaluates your GitHub profile across multiple dimensions:\n\n### The Formula\n\n```typescript\nscore = (followers × 0.5) + (total_stars × 2) + (public_repos × 1)\n```\n\n### Understanding the Weights\n\nEach metric has a carefully chosen weight that reflects its importance in the open-source community:\n\n#### ⭐ **Total Stars (×2)** - Highest Weight\n- **Why it matters**: Stars indicate that your projects are valuable, useful, and appreciated by the community\n- **Impact**: Each star contributes 2 points to your score\n- **Example**: 100 stars = 200 points\n- **Focus on**: Creating quality projects that solve real problems\n\n#### 📦 **Public Repositories (×1)** - Medium Weight\n- **Why it matters**: Shows productivity, consistency, and willingness to share your work\n- **Impact**: Each public repo contributes 1 point to your score\n- **Example**: 50 repos = 50 points\n- **Focus on**: Maintaining active projects and experimenting with new technologies\n\n#### 👥 **Followers (×0.5)** - Lower Weight\n- **Why it matters**: Represents community recognition and influence\n- **Impact**: Each follower contributes 0.5 points to your score\n- **Example**: 200 followers = 100 points\n- **Focus on**: Building relationships and sharing knowledge\n\n### Example Calculation\n\nLet's calculate the score for a developer with:\n- 👥 150 followers\n- ⭐ 250 total stars across all repositories\n- 📦 40 public repositories\n\n```\nscore = (150 × 0.5) + (250 × 2) + (40 × 1)\nscore = 75 + 500 + 40\nscore = 615\nRank = S (Master Pudim 🍮)\n```\n\n---\n\n### 🏆 Rank Thresholds\n\nYour calculated score determines your rank and delicious title:\n\n| Score | Rank | Title | Description | What it means |\n|-------|------|-------|-------------|---------------|\n| **1000+** | **S+** | **Legendary Flan 🍮✨** | The texture is perfect, the caramel is divine. You are a coding god! | Elite open-source contributor with massive impact |\n| **500-999** | **S** | **Master Pudim 🍮** | A delicious result. Michelin star worthy. | Highly accomplished developer with strong community presence |\n| **200-499** | **A** | **Tasty Pudding 😋** | Everyone wants a slice. Great job! | Established developer with solid contributions |\n| **100-199** | **B** | **Sweet Treat 🍬** | Solid and dependable. A good dessert. | Active contributor building their portfolio |\n| **50-99** | **C** | **Homemade 🏠** | Made with love, but room for improvement. | Emerging developer on the journey |\n| **0-49** | **D** | **Underbaked 🥚** | Needs a bit more time in the oven. | Just getting started - keep cooking! |\n\n### 💡 Tips to Improve Your Score\n\nWant to level up your Pudim Score? Focus on:\n\n1. **Quality over Quantity** (Stars)\n   - Build projects that solve real problems\n   - Write good documentation and READMEs\n   - Engage with users and address issues\n   - Promote your projects appropriately\n\n2. **Consistent Activity** (Public Repos)\n   - Share your learning journey publicly\n   - Contribute to open-source projects\n   - Create small utility libraries\n   - Maintain your existing projects\n\n3. **Community Engagement** (Followers)\n   - Help others in discussions and issues\n   - Share knowledge through blog posts or tutorials\n   - Contribute to popular projects\n   - Be active and helpful in the community\n\nRemember: **The Pudim Score is just for fun!** 🍮 The real value is in the learning, building, and sharing that happens along the way.\n\n## 💡 Inspiration\n\nThis project is lovingly inspired by:\n\n- **[github-readme-stats](https://github.com/anuraghazra/github-readme-stats)** by [@anuraghazra](https://github.com/anuraghazra) - The OG GitHub stats visualizer that sparked countless creative projects\n- The **pudding/flan dessert culture** - Because developer profiles deserve to be as delightful as dessert! 🍮\n\nWe stand on the shoulders of giants and honor the open-source community that makes projects like this possible.\n\n## 🛠️ Tech Stack\n\nThis project is built with modern web technologies:\n\n### Core Framework\n- **[Next.js 16](https://nextjs.org/)** - React framework with App Router\n- **[React 19](https://react.dev/)** - Latest React with improved performance\n- **[TypeScript 5](https://www.typescriptlang.org/)** - Type-safe development\n\n### UI \u0026 Styling\n- **[Tailwind CSS 4](https://tailwindcss.com/)** - Utility-first CSS framework\n- **[shadcn/ui](https://ui.shadcn.com/)** - Beautiful, accessible component library\n- **[Radix UI](https://www.radix-ui.com/)** - Unstyled, accessible UI primitives\n- **[Lucide React](https://lucide.dev/)** - Beautiful icon library\n\n### Developer Experience\n- **[ESLint 9](https://eslint.org/)** - Code linting\n- **[PostCSS](https://postcss.org/)** - CSS processing\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js 20+ (LTS recommended)\n- npm, yarn, pnpm, or bun\n\n### Installation\n\n1. **Clone the repository**\n\n```bash\ngit clone git@github.com:luismr/pudim-dev-calculator.git\ncd pudim-dev-calculator\n```\n\n2. **Install dependencies**\n\n```bash\nnpm install\n# or\nyarn install\n# or\npnpm install\n# or\nbun install\n```\n\n3. **Run the development server**\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\n4. **Open your browser**\n\nNavigate to [http://localhost:3000](http://localhost:3000) to see the app in action!\n\nThe page will auto-reload when you make changes to the code.\n\n## 🏗️ Build for Production\n\nBuild an optimized production bundle:\n\n```bash\nnpm run build\n```\n\nStart the production server:\n\n```bash\nnpm start\n```\n\n## 🔄 CI/CD with GitHub Actions\n\nThis project uses GitHub Actions for continuous integration and deployment.\n\n### Automated Workflows\n\n**1. CI - Build, Test \u0026 Coverage** (`.github/workflows/ci.yml`)\n\nRuns on every push and pull request to `main` and `develop` branches:\n- ✅ Installs dependencies\n- ✅ Runs ESLint\n- ✅ Executes all tests (50 tests)\n- ✅ Generates coverage reports\n- ✅ Posts coverage comment on PRs\n- ✅ Uploads coverage to Codecov\n- ✅ Builds Next.js application\n- ✅ Uploads build artifacts\n\n**2. Docker Build \u0026 Push** (`.github/workflows/docker.yml`)\n\nBuilds multi-architecture Docker images:\n- 🐳 Supports **ARM64** and **AMD64** architectures\n- 📦 Pushes to GitHub Container Registry (ghcr.io)\n- 🏷️ Auto-generates semantic tags\n- 🔐 Includes build attestation\n- ⚡ Uses layer caching for faster builds\n\n**Triggers:**\n- Push to `main` branch\n- Version tags (`v*.*.*`)\n- Pull requests (build only, no push)\n- Manual workflow dispatch\n\n**3. Release** (`.github/workflows/release.yml`)\n\nAutomated releases on version tags:\n- 📝 Generates changelog from commits\n- 🎉 Creates GitHub release\n- 🐳 Docker images tagged with version\n\n### Using the Docker Images\n\n**Pull the latest image:**\n```bash\ndocker pull ghcr.io/luismr/pudim-dev-calculator:latest\n```\n\n**Pull specific version:**\n```bash\ndocker pull ghcr.io/luismr/pudim-dev-calculator:v1.0.0\n```\n\n**Pull for specific architecture:**\n```bash\n# ARM64 (Apple Silicon, ARM servers)\ndocker pull --platform linux/arm64 ghcr.io/luismr/pudim-dev-calculator:latest\n\n# AMD64 (Intel/AMD processors)\ndocker pull --platform linux/amd64 ghcr.io/luismr/pudim-dev-calculator:latest\n```\n\n### Setting Up GitHub Actions\n\n**Required Secrets:**\n- `GITHUB_TOKEN` - Automatically provided by GitHub\n- `CODECOV_TOKEN` - (Optional) For Codecov integration\n\n**Enable GitHub Container Registry:**\n1. Go to Settings → Actions → General\n2. Under \"Workflow permissions\", select \"Read and write permissions\"\n3. Save changes\n\n### Creating a Release\n\n```bash\n# Tag a new version\ngit tag -a v1.0.0 -m \"Release version 1.0.0\"\ngit push origin v1.0.0\n```\n\nThis will trigger:\n- Automated release creation\n- Multi-arch Docker image build and push\n- Image tagged as `v1.0.0`, `v1.0`, `v1`, and `latest`\n\n## 🐳 Docker Deployment\n\nThe application is fully containerized and ready for Docker deployment with **multi-architecture support** (ARM64 \u0026 AMD64).\n\n### Prerequisites\n\n- Docker installed on your system ([Get Docker](https://docs.docker.com/get-docker/))\n- Docker Compose (optional, included with Docker Desktop)\n\n### Building the Docker Image\n\nBuild the production-ready Docker image:\n\n```bash\ndocker build -t pudim-dev:latest .\n```\n\nThe Dockerfile uses a multi-stage build process to:\n- Install dependencies in an isolated stage\n- Build the Next.js application\n- Create a minimal production image (~150MB)\n- Run as non-root user for security\n- Include health checks for monitoring\n\n### Running with Docker\n\n**Option 1: Using Docker directly**\n\n```bash\ndocker run -d \\\n  --name pudim-dev \\\n  -p 3000:3000 \\\n  --restart unless-stopped \\\n  pudim-dev:latest\n```\n\n**Option 2: Using Docker Compose (Recommended)**\n\n```bash\n# Start the application\ndocker-compose up -d\n\n# View logs\ndocker-compose logs -f\n\n# Stop the application\ndocker-compose down\n```\n\n### Accessing the Application\n\nOnce running, access the application at:\n- **Local**: [http://localhost:3000](http://localhost:3000)\n- **Health Check**: [http://localhost:3000/api/health](http://localhost:3000/api/health)\n\n### Docker Commands Reference\n\n```bash\n# Build the image\ndocker build -t pudim-dev:latest .\n\n# Run the container\ndocker run -d -p 3000:3000 --name pudim-dev pudim-dev:latest\n\n# View logs\ndocker logs -f pudim-dev\n\n# Stop the container\ndocker stop pudim-dev\n\n# Remove the container\ndocker rm pudim-dev\n\n# Check health status\ndocker inspect --format='{{json .State.Health}}' pudim-dev\n\n# Access container shell (for debugging)\ndocker exec -it pudim-dev sh\n```\n\n### Environment Variables\n\nThe Docker image supports the following environment variables:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `NODE_ENV` | `production` | Node environment |\n| `PORT` | `3000` | Application port |\n| `HOSTNAME` | `0.0.0.0` | Bind address |\n| `NEXT_TELEMETRY_DISABLED` | `1` | Disable Next.js telemetry |\n\nExample with custom environment variables:\n\n```bash\ndocker run -d \\\n  --name pudim-dev \\\n  -p 8080:3000 \\\n  -e PORT=3000 \\\n  pudim-dev:latest\n```\n\n### Docker Image Details\n\n- **Base Image**: `node:20-alpine` (lightweight Alpine Linux)\n- **Image Size**: ~407MB (optimized with multi-stage build)\n- **Architectures**: linux/amd64, linux/arm64\n- **Security**: Runs as non-root user (nextjs:nodejs)\n- **Health Check**: Built-in health endpoint monitoring\n- **Standalone Mode**: Next.js standalone output for minimal dependencies\n- **Registry**: GitHub Container Registry (ghcr.io)\n\n### Multi-Architecture Build\n\nThe Dockerfile supports building for multiple architectures:\n\n**Using Docker Buildx (local build):**\n```bash\n# Setup buildx (one time)\ndocker buildx create --name multiarch --use\ndocker buildx inspect --bootstrap\n\n# Build for both architectures\ndocker buildx build \\\n  --platform linux/amd64,linux/arm64 \\\n  -t pudim-dev:latest \\\n  --load \\\n  .\n```\n\n**GitHub Actions handles this automatically!** 🚀\n\n### Production Deployment\n\nFor production deployments, consider:\n\n1. **Using GitHub Container Registry** (automated via CI/CD):\n   - Multi-arch images automatically built and pushed\n   - Semantic versioning with tags\n   - No manual intervention needed\n\n2. **Using orchestration platforms**:\n   - Docker Swarm\n   - Kubernetes (see Kubernetes section)\n   - AWS ECS\n   - Google Cloud Run\n   - Azure Container Instances\n   - Railway, Render, Fly.io\n\n3. **Adding reverse proxy** (nginx, Traefik, Caddy) for:\n   - SSL/TLS termination\n   - Load balancing\n   - Additional security headers\n\n## 🧪 Testing\n\nThis project uses [Vitest](https://vitest.dev/) and [React Testing Library](https://testing-library.com/react) for comprehensive unit testing.\n\n### Running Tests\n\n```bash\n# Run tests in watch mode\nnpm test\n\n# Run tests once\nnpm run test:run\n\n# Run tests with coverage report\nnpm run test:coverage\n\n# Run tests with UI (interactive)\nnpm run test:ui\n```\n\n### Test Coverage\n\nThe test suite covers:\n- ✅ **Components**: Navbar, Footer, PudimScore (with full user interactions)\n- ✅ **Pages**: Home page, Calculator page\n- ✅ **API Routes**: Health check endpoint\n- ✅ **Actions**: GitHub stats fetching with various scenarios\n- ✅ **Utilities**: Class name merging utility\n\n### Writing Tests\n\nTests are located next to the code they test in `__tests__` directories:\n\n```\nsrc/\n├── components/\n│   ├── __tests__/\n│   │   ├── Navbar.test.tsx\n│   │   ├── Footer.test.tsx\n│   │   └── PudimScore.test.tsx\n│   └── ...\n├── app/\n│   ├── __tests__/\n│   │   ├── page.test.tsx\n│   │   └── actions.test.ts\n│   └── ...\n└── lib/\n    ├── __tests__/\n    │   └── utils.test.ts\n    └── ...\n```\n\n### Test Configuration\n\n- **Framework**: Vitest with jsdom environment\n- **React Testing**: @testing-library/react\n- **Assertions**: @testing-library/jest-dom matchers\n- **Configuration**: `vitest.config.ts`\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! Here's how you can help:\n\n### Fork and Submit Pull Requests\n\n1. **Fork the repository**\n   - Click the \"Fork\" button at the top right of this page\n\n2. **Clone your fork**\n\n```bash\ngit clone git@github.com:YOUR_USERNAME/pudim-dev-calculator.git\ncd pudim-dev-calculator\n```\n\n3. **Add the upstream remote**\n\n```bash\ngit remote add upstream git@github.com:luismr/pudim-dev-calculator.git\n```\n\n4. **Create a new branch**\n\n```bash\ngit checkout -b feature/your-feature-name\n```\n\n5. **Make your changes**\n   - Write clean, maintainable code\n   - Follow the existing code style\n   - Test your changes locally\n\n6. **Commit your changes**\n\n```bash\ngit add .\ngit commit -m \"feat: add your feature description\"\n```\n\n7. **Push to your fork**\n\n```bash\ngit push origin feature/your-feature-name\n```\n\n8. **Open a Pull Request**\n   - Go to the original repository\n   - Click \"Pull Requests\" → \"New Pull Request\"\n   - Select your fork and branch\n   - Describe your changes clearly\n\n### Commit Message Convention\n\nWe follow [Conventional Commits](https://www.conventionalcommits.org/):\n\n- `feat:` - New feature\n- `fix:` - Bug fix\n- `docs:` - Documentation changes\n- `style:` - Code style changes (formatting, etc.)\n- `refactor:` - Code refactoring\n- `test:` - Adding or updating tests\n- `chore:` - Maintenance tasks\n\n### Code of Conduct\n\n- Be respectful and inclusive\n- Provide constructive feedback\n- Focus on what is best for the community\n\n## 📝 Project Structure\n\n```\npudim.dev/\n├── public/                      # Static assets\n├── src/\n│   ├── app/                     # Next.js App Router\n│   │   ├── api/\n│   │   │   └── health/\n│   │   │       └── route.ts     # Health check endpoint\n│   │   ├── badge/\n│   │   │   └── [username]/\n│   │   │       └── route.tsx    # Badge image generation\n│   │   ├── calculator/\n│   │   │   └── [username]/\n│   │   │       └── page.tsx     # Direct calculator page\n│   │   ├── actions.ts           # Server actions (GitHub API calls)\n│   │   ├── layout.tsx           # Root layout\n│   │   └── page.tsx             # Home page\n│   ├── components/              # React components\n│   │   ├── ui/                  # shadcn/ui components\n│   │   │   ├── avatar.tsx\n│   │   │   ├── badge.tsx\n│   │   │   ├── button.tsx\n│   │   │   ├── card.tsx\n│   │   │   ├── dialog.tsx       # Rank info modal\n│   │   │   ├── input.tsx\n│   │   │   ├── navigation-menu.tsx\n│   │   │   ├── separator.tsx\n│   │   │   └── sheet.tsx\n│   │   ├── Footer.tsx\n│   │   ├── Navbar.tsx\n│   │   └── PudimScore.tsx       # Main calculator component\n│   └── lib/                     # Utilities\n│       └── utils.ts\n├── .dockerignore                # Docker ignore patterns\n├── Dockerfile                   # Docker production build\n├── docker-compose.yml           # Docker Compose configuration\n├── next.config.ts               # Next.js configuration\n├── package.json                 # Dependencies\n└── tsconfig.json                # TypeScript config\n```\n\n## 📄 License\n\nThis project is open source and available under the [MIT License](LICENSE).\n\n## 🙏 Acknowledgments\n\n- [Anurag Hazra](https://github.com/anuraghazra) for the original github-readme-stats concept\n- The [Next.js](https://nextjs.org/) team for an amazing framework\n- The [shadcn](https://ui.shadcn.com/) for beautiful UI components\n- The open-source community for continuous inspiration\n\n## 🔗 Links\n\n- **Live Demo**: [pudim.dev](https://pudim.dev)\n- **GitHub**: [luismr/pudim-dev-calculator](https://github.com/luismr/pudim-dev-calculator)\n- **Example Calculator**: [pudim.dev/calculator/luismr](https://pudim.dev/calculator/luismr)\n- **Example Badge**: [pudim.dev/badge/luismr](https://pudim.dev/badge/luismr)\n\n---\n\nMade with 💜 and 🍮 by the pudim.dev community\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluismr%2Fpudim-dev-calculator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluismr%2Fpudim-dev-calculator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluismr%2Fpudim-dev-calculator/lists"}