{"id":48871248,"url":"https://github.com/rajwanyair/wedding","last_synced_at":"2026-05-06T07:04:27.977Z","repository":{"id":351016178,"uuid":"1209131781","full_name":"RajwanYair/Wedding","owner":"RajwanYair","description":"Wedding Manager v4.7.0 - Open-source PWA for guest RSVP, table seating charts, WhatsApp invitations, budget tracking, vendor management, check-in and analytics. Hebrew RTL + English i18n. Google Sheets sync.","archived":false,"fork":false,"pushed_at":"2026-04-26T07:13:52.000Z","size":5267,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-26T08:38:34.102Z","etag":null,"topics":["budget-tracker","event-management","google-sheets","guest-management","hebrew","i18n","offline-first","pwa","rsvp","rtl","seating-chart","table-seating","vanilla-javascript","vendor-management","vite","wedding","wedding-app","wedding-management","wedding-planner","whatsapp"],"latest_commit_sha":null,"homepage":"https://rajwanyair.github.io/Wedding/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RajwanYair.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-13T05:59:04.000Z","updated_at":"2026-04-26T07:12:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/RajwanYair/Wedding","commit_stats":null,"previous_names":["rajwanyair/wedding"],"tags_count":79,"template":false,"template_full_name":null,"purl":"pkg:github/RajwanYair/Wedding","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RajwanYair%2FWedding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RajwanYair%2FWedding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RajwanYair%2FWedding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RajwanYair%2FWedding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RajwanYair","download_url":"https://codeload.github.com/RajwanYair/Wedding/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RajwanYair%2FWedding/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32383791,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T11:25:28.583Z","status":"ssl_error","status_checked_at":"2026-04-28T11:25:05.435Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["budget-tracker","event-management","google-sheets","guest-management","hebrew","i18n","offline-first","pwa","rsvp","rtl","seating-chart","table-seating","vanilla-javascript","vendor-management","vite","wedding","wedding-app","wedding-management","wedding-planner","whatsapp"],"created_at":"2026-04-15T22:03:20.541Z","updated_at":"2026-05-01T07:03:31.449Z","avatar_url":"https://github.com/RajwanYair.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💍 Wedding Manager\n\n[![Version](https://img.shields.io/badge/version-v30.1.0-d4a574?style=flat-square)](https://github.com/RajwanYair/Wedding/releases)\n[![CI](https://github.com/RajwanYair/Wedding/actions/workflows/ci.yml/badge.svg)](https://github.com/RajwanYair/Wedding/actions/workflows/ci.yml)\n[![Deploy](https://github.com/RajwanYair/Wedding/actions/workflows/deploy.yml/badge.svg)](https://github.com/RajwanYair/Wedding/actions/workflows/deploy.yml)\n[![Tests](https://img.shields.io/badge/tests-5339_passing-brightgreen?style=flat-square)](https://github.com/RajwanYair/Wedding/actions)\n[![Coverage](https://img.shields.io/badge/coverage-58%25_lines_%C2%B7_51%25_branches-1abc9c?style=flat-square)](.github/workflows/ci.yml)\n[![Node](https://img.shields.io/badge/node-%3E%3D22-339933?style=flat-square\u0026logo=node.js\u0026logoColor=white)](https://nodejs.org)\n[![Modular](https://img.shields.io/badge/Modular-50%2B_JS_%2B_7_CSS-E34F26?style=flat-square\u0026logo=html5\u0026logoColor=white)](docs/README.md)\n[![License](https://img.shields.io/badge/license-MIT-yellow?style=flat-square)](LICENSE)\n[![Hebrew](https://img.shields.io/badge/שפה-עברית_RTL-60a5fa?style=flat-square)](src/i18n/he.json)\n[![Bundle](https://img.shields.io/badge/bundle-%E2%89%A460KB_gzip-1abc9c?style=flat-square)](.github/workflows/ci.yml)\n[![Lighthouse](https://img.shields.io/badge/Lighthouse-CI_gated-6c5ce7?style=flat-square\u0026logo=lighthouse\u0026logoColor=white)](.github/workflows/lighthouse.yml)\n[![CodeQL](https://github.com/RajwanYair/Wedding/actions/workflows/codeql.yml/badge.svg)](https://github.com/RajwanYair/Wedding/actions/workflows/codeql.yml)\n[![Scorecard](https://github.com/RajwanYair/Wedding/actions/workflows/scorecard.yml/badge.svg)](https://github.com/RajwanYair/Wedding/actions/workflows/scorecard.yml)\n[![SBOM](https://github.com/RajwanYair/Wedding/actions/workflows/sbom.yml/badge.svg)](https://github.com/RajwanYair/Wedding/actions/workflows/sbom.yml)\n[![Trivy](https://github.com/RajwanYair/Wedding/actions/workflows/trivy.yml/badge.svg)](https://github.com/RajwanYair/Wedding/actions/workflows/trivy.yml)\n[![ADRs](https://img.shields.io/badge/ADRs-42-7f5af0?style=flat-square)](docs/adr/README.md)\n[![Audits](https://img.shields.io/badge/audits-dead%20%C2%B7%20actions%20%C2%B7%20types-1abc9c?style=flat-square)](.github/workflows/ci.yml)\n[![Uptime](https://img.shields.io/badge/uptime-monitored-1abc9c?style=flat-square)](docs/operations/uptime.md)\n\n**Wedding management app for RSVP, guest lists, table seating, WhatsApp outreach, and event-day operations.**\n**Vite 8, vanilla JS/CSS, Hebrew RTL first, minimal runtime dependencies (3).**\n\nNode 22+ is the supported local and CI runtime.\n\n---\n\n## Features\n\n![Features](docs/features-grid.svg)\n\n## RSVP Journey\n\n![RSVP Flow](docs/rsvp-flow.svg)\n\n## Quick Start\n\n```bash\ngit clone https://github.com/RajwanYair/Wedding.git\ncd Wedding\n\n# Install dependencies (shared tooling lives at ../MyScripts/node_modules/)\n# If you cloned into the recommended parent workspace:\nnpm install --prefix ../MyScripts  # one-time shared tooling\nnpm install                         # project devDependencies\n\n# — OR — install standalone (CI / first-time setup):\nnpm ci\n\n# Start local development\nnpm run dev\n```\n\n## Development\n\n```bash\nnpm run lint          # HTML + CSS + JS + Markdown — 0 errors, 0 warnings\nnpm run format:check  # Prettier formatting check (add to pre-commit hook)\nnpm test              # 4187+ Vitest unit tests\nnpm run build         # Vite production bundle → dist/\n```\n\n## Overview\n\n```text\nindex.html        HTML shell\ncss/              layered stylesheets\nsrc/main.js       bootstrap entry\nsrc/core/         app primitives: store, nav, events, i18n, ui\nsrc/sections/     feature modules with mount/unmount lifecycle\nsrc/services/     auth, sheets, backend, presence, supabase\nsrc/templates/    lazy-loaded section markup\nsrc/modals/       lazy-loaded modal markup\ntests/            Vitest + Playwright coverage\n```\n\n## Production Notes\n\n- Runtime entry is `src/main.js`; feature UIs mount from `src/sections/` and lazy templates/modals under `src/templates/` and `src/modals/`\n- User-facing strings are localized through `src/i18n/`; Hebrew is the default UI, English is the supported alternate UI toggle\n- Data persists locally and can sync through the configured backend path; service worker assets live under `public/`\n- CI expects `npm run lint`, `npm test`, and `npm run build` to stay green\n\n## Docs\n\n- [ARCHITECTURE.md](ARCHITECTURE.md): runtime structure, module boundaries, data flow\n- [CONTRIBUTING.md](CONTRIBUTING.md): contributor workflow, testing rules, review checklist\n- [CHANGELOG.md](CHANGELOG.md): release history and shipped changes\n- [ROADMAP.md](ROADMAP.md): active production roadmap and upcoming priorities\n\nDetailed runtime and data-model notes intentionally live outside the README so this file stays public-facing and production-relevant.\n\n## Themes\n\n| Name | CSS class | Primary color |\n|------|-----------|---------------|\n| Default | (none) | Purple `#8b5cf6` |\n| Rose Gold | `theme-rosegold` | `#d4a574` |\n| Gold | `theme-gold` | `#f59e0b` |\n| Emerald | `theme-emerald` | `#10b981` |\n| Royal Blue | `theme-royal` | `#3b82f6` |\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| `npm install` fails | Run from parent `MyScripts/` dir — deps are shared via `../MyScripts/node_modules/` |\n| Lint errors after pull | `rm -rf node_modules/.cache` then re-run `npm run lint` |\n| Tests show `pool deprecated` | Suppressed via `pool: \"forks\"` + `--no-warnings` — should not appear |\n| SW not updating | Bump `CACHE_NAME` in `public/sw.js` to match the new version |\n| OAuth redirect fails | Verify `GOOGLE_CLIENT_ID` / `FB_APP_ID` / `APPLE_SERVICE_ID` in `src/core/config.js` |\n| Hebrew text reversed | Ensure `dir=\"rtl\"` and `lang=\"he\"` on `\u003chtml\u003e` element |\n| Vite build OOM | Increase Node memory: `NODE_OPTIONS=--max-old-space-size=4096 npm run build` |\n\n## License\n\nMIT © [RajwanYair](https://github.com/RajwanYair)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frajwanyair%2Fwedding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frajwanyair%2Fwedding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frajwanyair%2Fwedding/lists"}