{"id":15077878,"url":"https://github.com/semklim/country-holidays","last_synced_at":"2026-02-01T20:04:39.734Z","repository":{"id":255745751,"uuid":"853450498","full_name":"semklim/Country-Holidays","owner":"semklim","description":"DevelopsToday task","archived":false,"fork":false,"pushed_at":"2024-09-08T20:26:36.000Z","size":678,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-04T20:27:11.306Z","etag":null,"topics":["airbnb-eslint","angular","bootstrap5","eslint","husky","jest","prettier","rxjs"],"latest_commit_sha":null,"homepage":"https://holidays-country.vercel.app/","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/semklim.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}},"created_at":"2024-09-06T17:21:33.000Z","updated_at":"2024-09-08T20:26:40.000Z","dependencies_parsed_at":"2024-09-07T00:13:33.015Z","dependency_job_id":"59b48a17-a706-4048-ad32-19de111c3e5d","html_url":"https://github.com/semklim/Country-Holidays","commit_stats":null,"previous_names":["semklim/country-info"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/semklim/Country-Holidays","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semklim%2FCountry-Holidays","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semklim%2FCountry-Holidays/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semklim%2FCountry-Holidays/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semklim%2FCountry-Holidays/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semklim","download_url":"https://codeload.github.com/semklim/Country-Holidays/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semklim%2FCountry-Holidays/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262145202,"owners_count":23265892,"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","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":["airbnb-eslint","angular","bootstrap5","eslint","husky","jest","prettier","rxjs"],"created_at":"2024-09-25T04:33:20.160Z","updated_at":"2026-02-01T20:04:39.681Z","avatar_url":"https://github.com/semklim.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Country Info Angular Application\n\nThis project use Angular version 15.2.6.\nProject created to solve task from interview.\n\nThis Angular application provides information about countries, their holidays, and neighboring countries using the [Nager.Date API](https://date.nager.at/swagger/index.html). Users can search for countries, view details about their holidays, and see neighboring countries.\n\n## Table of Contents\n\n1. [Features](#features)\n2. [Architecture Overview](#architecture-overview)\n3. [Installation](#installation)\n4. [Running the Application](#running-the-application)\n5. [Building the Application](#building-the-application)\n6. [Libraries and Frameworks Used](#libraries-and-frameworks-used)\n\n## Features\n\n- **Country Search**: Search for countries by name and navigate to their details page.\n- **Country Details**: View public holidays for a selected country and year.\n- **Random Countries Widget**: Displays the next public holiday for three random countries.\n- **Year Switching**: Easily switch between different years to view holidays for that period.\n- **Error Handling**: Provides meaningful error messages for network issues, invalid data, etc.\n- **404 Page**: A user-friendly \"Page Not Found\" screen for undefined routes.\n- **SEO**: The application is optimized for search engines and social media sharing.\n\n## Architecture Overview\n\nThe application is built with Angular and follows a component-based architecture. Key components and services are:\n\n- **HomeComponent**: Handles the search functionality and displays random country holidays.\n- **CountryComponent**: Displays details about a selected country's holidays.\n- **CountryService**: Handles all HTTP requests to the Nager.Date API.\n- **Error Handling Service**: Manages application-wide error handling and displays appropriate messages.\n- **PageNotFoundComponent**: Shows a custom 404 page for unmatched routes.\n\nThe app uses Angular Router for navigation and Bootstrap for styling. All API interactions are encapsulated in a dedicated service (`CountryService`).\n\n## Installation\n\n1. **Clone the Repository**:\n\n    ```bash\n    git clone https://github.com/semklim/Country-Holidays.git\n    cd country-holidays\n    ```\n\n2. **Install Dependencies**:\n\n    Clean install all the necessary packages using `npm`:\n\n    ```bash\n    npm ci\n    ```\n\n    Ensure you have Node.js and npm installed on your machine. You can check the versions by running:\n\n    ```bash\n    node -v\n    npm -v\n    ```\n\n## Running the Application\n\nTo run the application in development mode, use:\n\n```bash\nnpm start\n```\n\nThe application will be available at http://localhost:4200/.\n\n## Running with a Specific Port\n\nIf you want to run the app on a different port:\n\n```bash\nng serve --port 4300\n```\n\n## Building the Application\n\nTo build the application for production, run:\n\n```bash\nng build\n```\n\nThe build artifacts will be stored in the `dist/country-holidays` directory. You can serve the built application using any static file server.\n\n## Libraries and Frameworks Used\n\n- **Angular**: Front-end framework for building dynamic web applications.\n- **Bootstrap**: For responsive design and styling.\n- **Angular Router**: For handling routing and navigation.\n- **RxJS**: Reactive programming library for handling asynchronous data streams.\n- **Jest**: Testing framework.\n- **Husky**: For managing Git hooks.\n- **Lint-staged**: Runs linters on Git staged files.\n- **Prettier**: Code formatter.\n- **ESLint**: Linting utility.\n\n## ESLint and Code Style\nThe project follows the Airbnb TypeScript Style Guide for consistent and clean code. The ESLint configuration is set up with the following:\n\n- **Airbnb TypeScript Style Guide**: Provides a comprehensive set of rules and best practices for writing clean and maintainable TypeScript code. The guide helps ensure consistency across the project.\n- **Prettier Integration**: Prettier is integrated with ESLint to handle code formatting. The rules are defined to avoid conflicts between ESLint and Prettier, making sure that both tools work seamlessly together.\n\n- **ESLint Plugins**:\n  - **eslint-plugin-import**: Helps validate proper imports and prevent potential import/export errors.\n  - **eslint-plugin-jest**: Provides rules specific to Jest for better test code quality.\n  - **@typescript-eslint/eslint-plugin**: Adds TypeScript support for ESLint.\n  - **eslint-config-prettier**: Disables ESLint rules that conflict with Prettier.\n  - **eslint-plugin-prettier**: Allows running Prettier as an ESLint rule and reporting formatting errors as ESLint issues.\n\nTo customize or adjust the ESLint rules, modify the .eslintrc configuration file according to your team's coding standards.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemklim%2Fcountry-holidays","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemklim%2Fcountry-holidays","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemklim%2Fcountry-holidays/lists"}