{"id":48217700,"url":"https://github.com/cdilga/kris-kryngle-coordinator","last_synced_at":"2026-04-04T19:01:44.464Z","repository":{"id":330242390,"uuid":"1122080080","full_name":"cdilga/kris-kryngle-coordinator","owner":"cdilga","description":"A web application where the user can enter a list of names of people participating in the Kris Kringle. The webapp randomly assigns each person another person they should buy presents for this holiday season.","archived":false,"fork":false,"pushed_at":"2025-12-24T11:52:34.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-25T18:02:52.582Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","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/cdilga.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-12-24T04:27:55.000Z","updated_at":"2025-12-24T11:52:38.000Z","dependencies_parsed_at":"2025-12-25T18:02:59.338Z","dependency_job_id":null,"html_url":"https://github.com/cdilga/kris-kryngle-coordinator","commit_stats":null,"previous_names":["cdilga/kris-kryngle-coordinator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cdilga/kris-kryngle-coordinator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdilga%2Fkris-kryngle-coordinator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdilga%2Fkris-kryngle-coordinator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdilga%2Fkris-kryngle-coordinator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdilga%2Fkris-kryngle-coordinator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cdilga","download_url":"https://codeload.github.com/cdilga/kris-kryngle-coordinator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdilga%2Fkris-kryngle-coordinator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31409471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-04-04T19:01:43.860Z","updated_at":"2026-04-04T19:01:44.456Z","avatar_url":"https://github.com/cdilga.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎅 Kris Kringle Coordinator\n\nA delightful web application for organizing Secret Santa gift exchanges! Simply enter participant names, click the magical Pretzel button, and let the app randomly assign who buys presents for whom this holiday season.\n\n## ✨ Features\n\n- **100% Client-Side**: All processing happens in your browser - no data is stored or sent to servers\n- **Simple \u0026 Intuitive**: Clean interface for adding/removing participants\n- **Fair Algorithm**: Uses Fisher-Yates shuffle and derangement to ensure truly random assignments\n- **Privacy-Focused**: Click-to-reveal assignments keep secrets safe\n- **Mobile-Friendly**: Works great on all devices\n- **No Sign-Up Required**: Just visit and start organizing!\n\n## 🌐 Live Deployment\n\n🚀 **Production**: [https://kris-kryngle-coordinator.dilger.dev](https://kris-kryngle-coordinator.dilger.dev)\n\n## 🎯 How It Works\n\n1. **Add Participants**: Enter names of everyone participating in the gift exchange\n2. **Generate Assignments**: Click the bright green \"Pretzel\" button to create random assignments\n3. **Reveal Secrets**: Each participant can click on their name to see who they're buying for\n4. **Stay Anonymous**: The algorithm ensures no one gets themselves and everyone forms one continuous gift-giving chain\n\n### The Algorithm\n\nThe allocation uses a proven derangement algorithm:\n1. The list of names is shuffled using Fisher-Yates shuffle for fair randomness\n2. Each person at position `i` is assigned to buy for the person at position `(i + 1) % length`\n3. This guarantees:\n   - Everyone gives to exactly one person\n   - Everyone receives from exactly one person\n   - No one gives to themselves\n   - No partitioned cycles (everyone is connected in one chain)\n\n## 🚀 Quick Start\n\n```bash\n# Clone the repository\ngit clone https://github.com/cdilga/kris-kryngle-coordinator.git\ncd kris-kryngle-coordinator\n\n# Install dependencies\nnpm install\n\n# Run locally\nnpm run dev\n\n# Visit http://localhost:8788 in your browser\n```\n\n## 🧪 Testing\n\n```bash\n# Run unit tests\nnpm test\n\n# Run E2E tests\nnpm run test:e2e\n\n# Run E2E tests with UI\nnpm run test:e2e:ui\n\n# Test against deployed production site\nnpm run test:deployed\n```\n\n## 📦 Deployment\n\nThis project automatically deploys to Cloudflare Pages when you push to the main branch.\n\n### Manual Deployment\n```bash\nnpm run deploy\n```\n\n## 🛠️ Technology Stack\n\n- **Frontend**: Vanilla JavaScript (no frameworks needed!)\n- **Styling**: Tailwind CSS via CDN\n- **Hosting**: Cloudflare Pages\n- **Testing**: Vitest (unit) + Playwright (E2E)\n- **Build Tool**: Wrangler CLI\n\n## 📁 Project Structure\n\n```\nkris-kryngle-coordinator/\n├── public/\n│   ├── index.html          # Main application\n│   └── kris-kringle.js     # Core allocation logic (for testing)\n├── tests/\n│   ├── unit/\n│   │   └── kris-kringle.test.js    # Unit tests for allocation algorithm\n│   └── e2e/\n│       └── kris-kringle.spec.js    # End-to-end tests\n├── CLAUDE.md              # Development guidelines\n└── README.md              # This file\n```\n\n## 🎨 Design Philosophy\n\nThis project follows the \"minimal but delightful\" approach:\n- **Keep it simple**: No over-engineering or unnecessary complexity\n- **Make it work**: Reliable core functionality first\n- **Add personality**: Fun error messages and smooth animations\n- **Stay focused**: Build what's needed, not what might be needed someday\n\n## 🤖 Created with Claude\n\nThis project was automatically generated using [the-ultimate-bootstrap](https://github.com/cdilga/the-ultimate-bootstrap).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdilga%2Fkris-kryngle-coordinator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcdilga%2Fkris-kryngle-coordinator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdilga%2Fkris-kryngle-coordinator/lists"}