{"id":30265104,"url":"https://github.com/ayfri/pokecards-collector","last_synced_at":"2025-08-15T22:47:49.144Z","repository":{"id":199081957,"uuid":"699275841","full_name":"Ayfri/PokeCards-Collector","owner":"Ayfri","description":"PokeCards-Collector is a website that allows you to check Pokemon browse and manage your Pokémon Trading Card Game (TCG) collection.","archived":false,"fork":false,"pushed_at":"2025-07-04T13:43:17.000Z","size":24506,"stargazers_count":2,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-04T15:15:03.973Z","etag":null,"topics":["pokemon","pokemon-cards","supabase","svelte","sveltekit","tcg","website"],"latest_commit_sha":null,"homepage":"https://pokecards-collector.pages.dev","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ayfri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2023-10-02T10:00:36.000Z","updated_at":"2025-06-19T13:05:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"ee3e1d1d-e85b-460d-a355-29fed697e332","html_url":"https://github.com/Ayfri/PokeCards-Collector","commit_stats":null,"previous_names":["ayfri/pokestore","ayfri/pokecards-collector"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ayfri/PokeCards-Collector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ayfri%2FPokeCards-Collector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ayfri%2FPokeCards-Collector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ayfri%2FPokeCards-Collector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ayfri%2FPokeCards-Collector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ayfri","download_url":"https://codeload.github.com/Ayfri/PokeCards-Collector/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ayfri%2FPokeCards-Collector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270642169,"owners_count":24621322,"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-08-15T02:00:12.559Z","response_time":110,"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":["pokemon","pokemon-cards","supabase","svelte","sveltekit","tcg","website"],"created_at":"2025-08-15T22:47:45.589Z","updated_at":"2025-08-15T22:47:49.043Z","avatar_url":"https://github.com/Ayfri.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./src/assets/pokecards-collector.png\" alt=\"PokéCards-Collector Logo\" width=\"150\"/\u003e\n\n  # PokéCards-Collector\n\n  [![License: GPL-3.0](https://img.shields.io/badge/License-GPL%203.0-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n  [![SvelteKit](https://img.shields.io/badge/SvelteKit-FF3E00?style=flat\u0026logo=svelte\u0026logoColor=white)](https://kit.svelte.dev/)\n  [![Supabase](https://img.shields.io/badge/Supabase-3ECF8E?style=flat\u0026logo=supabase\u0026logoColor=white)](https://supabase.io/)\n  [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n  [![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-06B6D4?style=flat\u0026logo=tailwind-css\u0026logoColor=white)](https://tailwindcss.com/)\n  [![Cloudflare Pages](https://img.shields.io/badge/Cloudflare_Pages-F38020?style=flat\u0026logo=cloudflare\u0026logoColor=white)](https://pages.cloudflare.com/)\n  [![PNPM](https://img.shields.io/badge/PNPM-F69220?style=flat\u0026logo=pnpm\u0026logoColor=white)](https://pnpm.io/)\n\n  \u003cp\u003eA modern web application for managing your Pokémon Trading Card Game collection\u003c/p\u003e\n\u003c/div\u003e\n\n## 📋 Overview\n\nPokéCards-Collector is a comprehensive web application built with SvelteKit and Supabase that allows you to browse and manage your Pokémon Trading Card Game (TCG) collection with ease.\n\n### 📸 Website\n\nCheck out the live website [here](https://pokecards-collector.pages.dev).\n\n![Demo Screenshot](./pokecards-collector.png)\n\n## ✨ Features\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e🔐\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eUser Authentication\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eSign up and log in to manage your personal collection.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e🔍\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eCard Browser\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eSearch and view Pokémon TCG cards with advanced filtering options.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e📚\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eCollection Management\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eKeep track of the cards you own with quantity and condition tracking.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e⭐\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eWishlist\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eMaintain a list of cards you want to acquire.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e👤\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eProfile \u0026 Settings\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eManage your user profile and application settings.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e🤖\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eData Scraping\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eBuilt-in CLI tool to fetch the latest Pokémon TCG data.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 🛠️ Tech Stack\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eCategory\u003c/th\u003e\n    \u003cth\u003eTechnologies\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eFrontend\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://kit.svelte.dev/\"\u003e\u003cimg src=\"https://img.shields.io/badge/SvelteKit-FF3E00?style=flat\u0026logo=svelte\u0026logoColor=white\" alt=\"SvelteKit\"/\u003e\u003c/a\u003e\n      \u003ca href=\"https://www.typescriptlang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-3178C6?style=flat\u0026logo=typescript\u0026logoColor=white\" alt=\"TypeScript\"/\u003e\u003c/a\u003e\n      \u003ca href=\"https://tailwindcss.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tailwind_CSS-06B6D4?style=flat\u0026logo=tailwind-css\u0026logoColor=white\" alt=\"Tailwind CSS\"/\u003e\u003c/a\u003e\n      \u003ca href=\"https://lucide.dev/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Lucide_Icons-5468FF?style=flat\u0026logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3ggMCAwIDI0IDI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+DQogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIgMTkuNUg4QzcuMTcxNTcgMTkuNSA2LjUgMTguODI4NCA2LjUgMThWMTNDNi41IDEyLjE3MTYgNy4xNzE1NyAxMS41IDggMTEuNUgxMkMxMi44Mjg0IDExLjUgMTMuNSAxMi4xNzE2IDEzLjUgMTNWMThDMTMuNSAxOC44Mjg0IDEyLjgyODQgMTkuNSAxMiAxOS41WiIgZmlsbD0iIzU0NjhGRiIvPg0KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQgNy41VjE2QzIuMzQzMTUgMTYgMSAxNC42NTY5IDEgMTNWMTAuNUMxIDguODQzMTUgMi4zNDMxNSA3LjUgNCA3LjVaIiBmaWxsPSIjNTQ2OEZGIi8+DQogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAgNy41VjE2QzIxLjY1NjkgMTYgMjMgMTQuNjU2OSAyMyAxM1YxMC41QzIzIDguODQzMTUgMjEuNjU2OSA3LjUgMjAgNy41WiIgZmlsbD0iIzU0NjhGRiIvPg0KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgNkMxMS41IDYuODI4NDMgMTIuMTcxNiA3LjUgMTMgNy41SDE3QzE3LjgyODQgNy41IDE4LjUgNi44Mjg0MyAxOC41IDZDMTGUNTE1LjE3MTYgMTcuNSAxNC41IDE3IDE0LjVDMTcgMTQuNSAxNi41IDEzLjgyODQgMTYuNSAxM0MxNi41IDEyLjE3MTYgMTYuMTU2OSAxMS41IDE1LjUgMTEuNUMxNC44NDMxIDExLjUgMTQuNSAxMi4xNzE2IDE0LjUgMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41QzEyLjE3MTYgMTQuNSAxMS41IDEzLjgyODQgMTEuNSAxM0MxMS41IDEyLjE3MTYgMTEuMTU2OSAxMS41IDEwLjUgMTEuNUM5Ljg0MzE1IDExLjUgOS41IDEyLjE3MTYgOS41IDEzQzkuNSAxMy44Mjg0IDguODI4NDMgMTQuNSA4IDE0LjVDNy4xNzE1NyAxNC41IDYuNSAxMy44Mjg0IDYuNSAxM0M2LjUgMTIuMTcxNiA1Ljg0MzE1IDExLjUgNSAxMS41QzQuMTU2ODUgMTEuNSAzLjUgMTIuMTcxNiAzLjUgMTNDMy41IDEzLjgyODQgNC4xNzE1NyAxNC41IDUgMTQuNUM0IDE0LjUgMy41IDE1LjE3MTYgMy41IDE2QzMuNSAxNi44Mjg0IDQuMTcxNTcgMTcuNSA1IDE3LjVDNS44Mjg0MyAxNy41IDYuNSAxNi44Mjg0IDYuNSAxNkM2LjUgMTUuMTcxNiA3LjE3MTU3IDE0LjUgOCAxNC41QzguODI4NDMgMTQuNSA5LjUgMTUuMTcxNiA5LjUgMTZDOS41IDE2LjgyODQgMTAuMTcxNiAxNy41IDExIDE3LjVIMTJDMTEgMTcuNSAxMC41IDE2LjgyODQgMTAuNSAxNkMxMC41IDE1LjE3MTYgOS44Mjg0MyAxNC41IDkgMTQuNUM4LjE3MTU3IDE0LjUgNy41IDE1LjE3MTYgNy41IDE2QzcuNSAxNi44Mjg0IDYuODI4NDMgMTcuNSA2IDE3LjVDNS4xNzE1NyAxNy41IDQuNSAxNi44Mjg0IDQuNSAxNkM0LjUgMTUuMTcxNiA0LjE1Njg1IDE0LjUgMy41IDE0LjVDMi44NDMxNSAxNC41IDIuNSAxNS4xNzE2IDIuNSAxNkMyLjUgMTYuODI4NCAzLjE3MTU3IDE3LjUgNCAxNy41QzMgMTcuNSAyLjUgMTguMTcxNiAyLjUgMTlDMi41IDE5LjgyODQgMy4xNzE1NyAyMC41IDQgMjAuNUM0LjgyODQzIDIwLjUgNS41IDE5LjgyODQgNS41IDE5QzUuNSAxOC4xNzE2IDYuMTcxNTcgMTcuNSA3IDE3LjVDNy44Mjg0MyAxNy41IDguNSAxOC4xNzE2IDguNSAxOUM4LjUgMTkuODI4NCA5LjE3MTU3IDIwLjUgMTAgMjAuNUgxNEMxNC44Mjg0IDIwLjUgMTUuNSAxOS44Mjg0IDE1LjUgMTlDMTUuNSAxOC4xNzE2IDE2LjE3MTYgMTcuNSAxNyAxNy41QzE3LjgyODQgMTcuNSAxOC41IDE4LjE3MTYgMTguNSAxOUMxOC41IDE5LjgyODQgMTkuMTcxNiAyMC41IDIwIDIwLjVDMjAuODI4NCAyMC41IDIxLjUgMTkuODI4NCAyMS41IDE5QzIxLjUgMTguMTcxNiAyMC44Mjg0IDE3LjUgMjAgMTcuNUMyMSAxNy41IDIxLjUgMTYuODI4NCAyMS41IDE2QzIxLjUgMTUuMTcxNiAyMC44Mjg0IDE0LjUgMjAgMTQuNUMxOS4xNzE2IDE0LjUgMTguNSAxNS4xNzE2IDE4LjUgMTZDMTguNSAxNi44Mjg0IDE3LjgyODQgMTcuNSAxNyAxNy41QzE2LjE3MTYgMTcuNSAxNS41IDE2LjgyODQgMTUuNSAxNkMxNS41IDE1LjE3MTYgMTQuODI4NCAxNC41IDE0IDE0LjVDMTMuMTcxNiAxNC41IDEyLjUgMTUuMTcxNiAxMi41IDE2QzEyLjUgMTYuODI4NCAxMy4xNzE2IDE3LjUgMTQgMTcuNUgxM0MxNCAxNy41IDE0LjUgMTYuODI4NCAxNC41IDE2QzE0LjUgMTUuMTcxNiAxNS4xNzE2IDE0LjUgMTYgMTQuNUMxNi44Mjg0IDE0LjUgMTcuNSAxNS4xNzE2IDE3LjUgMTZDMTcuNSAxNi44Mjg0IDE4LjE3MTYgMTcuNSAxOSAxNy41QzE5LjgyODQgMTcuNSAyMC41IDE2LjgyODQgMjAuNSAxNkMyMC41IDE1LjE3MTYgMjEuMTcxNiAxNC41IDIyIDE0LjVDMjIuODI4NCAxNC41IDIzLjUgMTMuODI4NCAyMy41IDEzQzIzLjUgMTIuMTcxNiAyMi44Mjg0IDExLjUgMjIgMTEuNUMyMS4xNzE2IDExLjUgMjAuNSAxMi4xNzE2IDIwLjUgMTNDMjAuNSAxMy44Mjg0IDE5LjgyODQgMTQuNSAxOSAxNC41QzE4LjE3MTYgMTQuNSAxNy41IDEzLjgyODQgMTcuNSAxM0MxNy41IDEyLjE3MTYgMTYuODI4NCAxMS41IDE2IDExLjVDMTUuMTcxNiAxMS41IDE0LjUgMTAuODI4NCAxNC41IDEwQzE0LjUgOS4xNzE1NyAxMy44Mjg0IDguNSAxMyA4LjVDMTIuMTcxNiA4LjUgMTEuNSA3LjgyODQzIDExLjUgN1Y2WiIgZmlsbD0iIzU0NjhGRiIvPg0KPC9zdmc+\" alt=\"Lucide Icons\"/\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eBackend\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://supabase.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Supabase-3ECF8E?style=flat\u0026logo=supabase\u0026logoColor=white\" alt=\"Supabase\"/\u003e\u003c/a\u003e\n      \u003ca href=\"https://pokemontcg.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Pokémon_TCG_API-FFCB05?style=flat\u0026logo=pokemon\u0026logoColor=black\" alt=\"Pokémon TCG API\"/\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDeployment\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://pages.cloudflare.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Cloudflare_Pages-F38020?style=flat\u0026logo=cloudflare\u0026logoColor=white\" alt=\"Cloudflare Pages\"/\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eTools\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://pnpm.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/PNPM-F69220?style=flat\u0026logo=pnpm\u0026logoColor=white\" alt=\"PNPM\"/\u003e\u003c/a\u003e\n      \u003ca href=\"https://github.com/esbuild-kit/tsx\"\u003e\u003cimg src=\"https://img.shields.io/badge/TSX-3178C6?style=flat\u0026logo=typescript\u0026logoColor=white\" alt=\"TSX\"/\u003e\u003c/a\u003e\n      \u003ca href=\"https://github.com/SBoudrias/Inquirer.js/tree/master/packages/prompts\"\u003e\u003cimg src=\"https://img.shields.io/badge/Inquirer-FFCF00?style=flat\u0026logo=javascript\u0026logoColor=black\" alt=\"Inquirer\"/\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 🚀 Getting Started\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePrerequisites\u003c/b\u003e\u003c/summary\u003e\n\n- [Node.js](https://nodejs.org/) (v18 or higher)\n- [PNPM](https://pnpm.io/installation) package manager\n- A [Supabase](https://supabase.io/) account\n- A [Pokémon TCG API](https://pokemontcg.io/) key\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003eInstallation\u003c/b\u003e\u003c/summary\u003e\n\n1.  **Clone the repository:**\n    ```bash\n    git clone https://github.com/Ayfri/PokeCards-Collector.git\n    cd PokeCards-Collector\n    ```\n\n2.  **Install dependencies:**\n    ```bash\n    pnpm install\n    ```\n\n3.  **Set up Supabase:**\n    - Create a new project on [Supabase](https://supabase.io/)\n    - In your Supabase project dashboard, go to the SQL Editor\n    - Copy the contents of `supabase-schema.sql` from this repository and run it to create the initial database tables\n    - (Optional) If needed, run the contents of `supabase-schema-update.sql` for subsequent updates\n    - Navigate to Project Settings \u003e API\n    - Find your Project URL and `anon` public key\n\n4.  **Set up Pokémon TCG API Key:**\n    - Get an API key from the [Pokemon TCG API](https://pokemontcg.io/)\n\n5.  **Configure Environment Variables:**\n    - Create a `.env` file in the root of the project by copying `.env.example`\n    - Fill in the required variables:\n      ```dotenv\n      # Supabase Configuration\n      VITE_SUPABASE_URL=YOUR_SUPABASE_PROJECT_URL\n      VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_PUBLIC_KEY\n\n      # Pokemon TCG API Key\n      POKEMON_TCG_API_KEY=YOUR_POKEMON_TCG_API_KEY\n\n      # CDN URL for card images (optional) without trailing slash\n      # If not provided, original API URLs will be used\n      # Format: https://your-cdn.com/path\n      PUBLIC_CARD_CDN_URL=\n      ```\n\n6.  **Run the development server:**\n    ```bash\n    pnpm dev\n    ```\n    The application should now be running on `http://localhost:5173` (or the next available port).\n\u003c/details\u003e\n\n## 📊 Data Scraping\n\nThe project includes an interactive CLI tool to fetch and update various Pokémon TCG data required for the application.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eRunning the Scraper CLI\u003c/b\u003e\u003c/summary\u003e\n\n```bash\npnpm scrapers\n```\n\nThis command will present a menu allowing you to choose which scraper to run. Available options include:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eOption\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n    \u003cth\u003eDependencies\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eall\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eRun all data scrapers sequentially (pokemons, sets, cards, holo, foil, types). Does \u003ci\u003enot\u003c/i\u003e download images.\u003c/td\u003e\n    \u003ctd\u003eNone\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003ecards\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eFetch all Pokémon cards from the TCG API.\u003c/td\u003e\n    \u003ctd\u003eNone\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003edownload-images\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eDownload card images based on the fetched card data.\u003c/td\u003e\n    \u003ctd\u003eRequires \u003ccode\u003ecards\u003c/code\u003e to be run first\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003efoil\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eGenerate foil mask URLs for holographic cards.\u003c/td\u003e\n    \u003ctd\u003eRequires \u003ccode\u003eholo\u003c/code\u003e data\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eholo\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eExtract holographic cards from the main card dataset.\u003c/td\u003e\n    \u003ctd\u003eRequires \u003ccode\u003ecards\u003c/code\u003e data\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003epokemons\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eFetch base Pokémon data from PokéAPI.\u003c/td\u003e\n    \u003ctd\u003eNone\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003esets\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eFetch all card set information from the TCG API.\u003c/td\u003e\n    \u003ctd\u003eNone\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003etypes\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eExtract unique Pokémon types from the card dataset.\u003c/td\u003e\n    \u003ctd\u003eRequires \u003ccode\u003ecards\u003c/code\u003e data\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**Recommended Scraper Order:**\n\nFor initial setup or a full data refresh, it's recommended to run the scrapers in this order:\n\n1. `pokemons`\n2. `types`\n3. `sets`\n4. `cards`\n5. `holo`\n6. `foil`\n7. `download-images` (Optional, run if you need local images)\n\nYou can run `all` to execute steps 1-6 automatically.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eUsing a Custom CDN for Images\u003c/b\u003e\u003c/summary\u003e\n\nAfter running the `download-images` scraper, you will have local copies of the card images. If you host these images on your own CDN or file server:\n\n1. Upload the contents of the `images` directory to your CDN\n2. Set the `PUBLIC_CARD_CDN_URL` environment variable in your `.env` file to the base URL of your hosted images\n   Example: `PUBLIC_CARD_CDN_URL=https://cdn.example.com/pokemon-cards`\n3. The application will automatically construct image URLs like `https://cdn.example.com/pokemon-cards/{setCode}/{cardId}.png`\n\u003c/details\u003e\n\n## 📜 Available Scripts\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eCommand\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003epnpm dev\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eStarts the development server\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003epnpm build\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eBuilds the application for production (outputs to \u003ccode\u003e.svelte-kit/cloudflare\u003c/code\u003e)\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003epnpm preview\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eRuns a local preview of the production build\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003epnpm scrapers\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eRuns the interactive data scraping CLI\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 📁 Project Structure\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eView Project Structure\u003c/b\u003e\u003c/summary\u003e\n\n```\n.\n├── .svelte-kit/        # Build output and internal SvelteKit files\n├── node_modules/       # Project dependencies\n├── src/\n│   ├── assets/         # Static assets (e.g., scraped JSON data)\n│   ├── lib/            # Svelte components, utilities, Supabase client, etc.\n│   │   ├── components/ # Reusable Svelte components\n│   │   ├── helpers/    # Utility functions\n│   │   ├── services/   # Data fetching or business logic services\n│   │   ├── stores/     # Svelte stores\n│   │   └── supabase.ts # Supabase client initialization\n│   ├── routes/         # Application pages and API endpoints\n│   ├── scrapers/      # Data scraping scripts\n│   ├── styles/         # Global styles\n│   ├── app.css         # Main CSS file (often imports Tailwind)\n│   ├── app.d.ts        # Ambient TypeScript declarations for SvelteKit\n│   ├── app.html        # Main HTML template\n│   └── constants.ts    # Application constants\n├── static/             # Static files (favicon, etc.)\n├── .env                # Local environment variables (ignored by Git)\n├── .env.example        # Example environment variables\n├── .gitignore          # Git ignore rules\n├── package.json        # Project metadata and dependencies\n├── pnpm-lock.yaml      # PNPM lock file\n├── svelte.config.js    # SvelteKit configuration\n├── supabase-schema.sql # Initial Supabase database schema\n├── supabase-schema-update.sql # Database schema updates (if any)\n├── tailwind.config.mjs # Tailwind CSS configuration\n├── tsconfig.json       # TypeScript configuration\n├── scraper-cli.ts     # Entry point for the data scraper CLI\n└── vite.config.ts      # Vite configuration\n```\n\u003c/details\u003e\n\n## 👥 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow to Contribute\u003c/b\u003e\u003c/summary\u003e\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\u003c/details\u003e\n\n## 📄 License\n\nThis project is licensed under the GNU GPLv3 License - see the [LICENSE](LICENSE) file for details.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/Ayfri/pokecards-collector/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/Ayfri/pokecards-collector/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    Made with ❤️ by \u003ca href=\"https://github.com/Ayfri\"\u003eAyfri\u003c/a\u003e,\n    \u003ca href=\"https://github.com/antaww\"\u003eAnta\u003c/a\u003e,\n    \u003ca href=\"https://github.com/Bahsiik\"\u003eBahsiik\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayfri%2Fpokecards-collector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fayfri%2Fpokecards-collector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayfri%2Fpokecards-collector/lists"}