{"id":23178862,"url":"https://github.com/aszurar/ignitetimer","last_synced_at":"2026-04-12T03:35:44.431Z","repository":{"id":206235215,"uuid":"708279373","full_name":"Aszurar/igniteTimer","owner":"Aszurar","description":"O projeto Ignite Timer é um site que simula um timer para a prática de Pomodoro. Nele temos 2 telas: Tela de Início, onde é possível registar o novo ciclo, iniciar o timer e encerrar; Tela de Histórico, onde é possível ver o histórico de cada ciclo iniciado anteriormente.","archived":false,"fork":false,"pushed_at":"2024-04-24T18:52:31.000Z","size":337,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-05T02:16:37.749Z","etag":null,"topics":["axe","axe-core","context-api","css","date-fns","html","ignite-reactjs","javascript","netlify","react","react-hooks","react-router","react-router-dom","reactjs","styled-components","type","usereducer","vite","vitejs","zod"],"latest_commit_sha":null,"homepage":"https://ignite-timer-aszurar.netlify.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/Aszurar.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":"2023-10-22T04:15:40.000Z","updated_at":"2024-04-24T18:52:35.000Z","dependencies_parsed_at":"2024-12-18T07:23:15.420Z","dependency_job_id":null,"html_url":"https://github.com/Aszurar/igniteTimer","commit_stats":null,"previous_names":["aszurar/ignitetimer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Aszurar/igniteTimer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2FigniteTimer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2FigniteTimer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2FigniteTimer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2FigniteTimer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aszurar","download_url":"https://codeload.github.com/Aszurar/igniteTimer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2FigniteTimer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31703501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"online","status_checked_at":"2026-04-12T02:00:06.763Z","response_time":58,"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":["axe","axe-core","context-api","css","date-fns","html","ignite-reactjs","javascript","netlify","react","react-hooks","react-router","react-router-dom","reactjs","styled-components","type","usereducer","vite","vitejs","zod"],"created_at":"2024-12-18T07:13:01.403Z","updated_at":"2026-04-12T03:35:44.414Z","avatar_url":"https://github.com/Aszurar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# #6 - React: **\u003chttps://ignite-timer-aszurar.netlify.app//\u003e**\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://i.imgur.com/Ft7UF8u.png\" width=\"1000\" alt=\"Banner\"\u003e\n\u003c/div\u003e\n\n## Ignite Timer\n\n- O projeto Ignite Timer é um site que simula um timer para a prática de Pomodoro. Nele temos 2 telas:\n  - **Tela de Início**, onde é possível registar o novo ciclo, iniciar o timer e encerrar;\n  - **Tela de Histórico**, onde é possível ver o histórico de cada ciclo iniciado anteriormente.\n\n- O propósito do projeto é praticar o uso do React com **Styled-Components**, Navegação com **React Router DOM**, TypeScript e **localStorage** para persistência de dados.\n\n- O site foi publicado com CI/CD por meio da plataforma **[Netlify](https://www.netlify.com/)**.\n- Acesse e teste o projeto em: **\u003chttps://ignite-timer-aszurar.netlify.app//\u003e**\n\n  \u003cdiv align=\"center\"\u003e\n    \u003ch3\u003e\u003ca href=\"\"\u003eIgnite Timer\u003c/a\u003e\u003c/h3\u003e\n\n    [Ignite Timer](https://github.com/Aszurar/igniteTimer/assets/64987824/baaf4710-baca-4067-ba0e-3509092b180c)\n    \n\n  \u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Netlify Status](https://api.netlify.com/api/v1/badges/4a82c1b2-e5bd-49df-a2c3-a9e50e8fa9e7/deploy-status)](https://app.netlify.com/sites/ignite-timer-aszurar/deploys) [![Vite](https://img.shields.io/badge/vite-%23646CFF.svg?style=flat\u0026logo=vite\u0026logoColor=white)](https://vitejs.dev/) [![React](https://img.shields.io/badge/-React-%2320232a.svg?style=flat\u0026logo=react\u0026link=https://react.dev)](https://react.dev/) [![React Router](https://img.shields.io/badge/React_Router-CA4245?style=flat\u0026logo=react-router\u0026logoColor=white)](https://reactrouter.com/en/main)  [![Context-API](https://img.shields.io/badge/Context--Api-000000?style=flat\u0026logo=react)](https://react.dev/learn/scaling-up-with-reducer-and-context) [![React Hook Form](https://img.shields.io/badge/React%20Hook%20Form-%23EC5990.svg?style=flat\u0026logo=reacthookform\u0026logoColor=white)](https://react-hook-form.com/) [![StyledComponents](https://img.shields.io/badge/styled--components-DB7093.svg?style=flat\u0026logo=styled-components\u0026logoColor=white\u0026link=https://tailwindcss.com/)](https://tailwindcss.com/)  [![Radix UI](https://img.shields.io/badge/Radix%20UI-161618.svg?style=flat\u0026logo=radix-ui\u0026logoColor=white)](https://www.radix-ui.com/) [![TypeScript](https://img.shields.io/badge/-TypeScript-%23007ACC?style=?style=flat-square\u0026logo=typescript\u0026logoColor=white\u0026link=https://www.typescriptlang.org/)](https://www.typescriptlang.org/) [![JavaScript](https://img.shields.io/badge/-JavaScript-%23323330.svg?style=flat\u0026logo=javascript\u0026link=https://www.javascript.com/)](https://www.javascript.com/) [![HTML5](https://img.shields.io/badge/-HTML5-E34F26?style=flat\u0026logo=html5\u0026logoColor=white\u0026link=https://developer.mozilla.org/pt-BR/docs/Web/HTML)](https://developer.mozilla.org/pt-BR/docs/Web/HTML) [![CSS3](https://img.shields.io/badge/-CSS3-1572B6?style=flat\u0026logo=css3\u0026link=https://www.w3schools.com/css/)](https://www.w3schools.com/css/) [![Yarn](https://img.shields.io/badge/-yarn-%232C8EBB?style=flat\u0026logo=yarn\u0026logoColor=white\u0026link=https://yarnpkg.com/)](https://yarnpkg.com/)  [![Figma](https://img.shields.io/badge/Figma-%23F24E1E.svg?style=flat\u0026logo=figma\u0026logoColor=white)](https://www.figma.com/)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n        \u003ch2\u003e\n          \u003ca href=\"#information_source-sobre\"\u003eSobre\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#interrobang-motivo\"\u003eMotivo\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#art-design\"\u003eDesign\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#seedling-requisitos-mínimos\"\u003eRequisitos\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#rocket-tecnologias-utilizadas\"\u003eTecnologias\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca\n          href=\"#truck-entrega-e-distribuição-continua\"\u003eCI/CD\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#package-como-baixar-e-executar-o-projeto\"\u003eBaixar e Executar\u003c/a\u003e\u0026nbsp;\n        \u003c/h2\u003e\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://i.imgur.com/f5Grj3B.gif\" width=\"700\" alt=\"Gif mostrando o projeto\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\" \u003e\n\n**[Vídeo no Youtube](https://www.youtube.com/watch?v=u1aEHPypsSc)**\n\n\u003c/div\u003e\n\n---\n\n## :information_source: Sobre\n- O projeto **ignite timer** pode ser um projeto simples, mas que foi abordado conceitos importantes para o desenvolvimento de web apps com **React**, **TypeScript**, **Styled Components** e navegação com React Router DOM.\n\n- A ideia desse projeto é implementar um timer para a prática de Pomodoro, onde é possível registrar um novo ciclo, iniciar o timer e encerrar. Além disso, é possível ver o histórico de cada ciclo iniciado anteriormente.\n\n- Assim abordamos como podemos criar rota e navegação entre páginas no React, como podemos criar um contexto, trabalhar com tempo em minutos e segundos, gerenciar o Estado por meio do useReducer, persistir os dados com localStorage, desenvolver a parte visual com Styled-Components, dentre outros tópicos...\n\n- A acessibilidade foi levada em consideração, com o uso da lib **[axe-core](https://www.npmjs.com/package/@axe-core/react)** para testes e correções de acessibilidade assim como leitor de tela ChromeVox e o uso do **[Radix UI](https://www.radix-ui.com/)** para componentes acessíveis como Modais e Tooltips.\n\n- O projeto Ignite Timer é o 2º projeto realizado em aula do curso Ignite ReactJS de 2022 da [Rocketseat](https://www.rocketseat.com.br/).\n  \n- **Tela inicial**\n\n\u003cdiv align=\"center\" \u003e\n      \u003cimg src=\"https://i.imgur.com/4DdDjcz.png\" width=\"1000\" alt=\"Tela Inicial\"\u003e\n\u003c/div\u003e\n\n---\n\n## :interrobang: Motivo\n\n- Esse projeto tem o objetivo de praticar o uso do **React com Styled-Components, Navegação com React Router DOM,  TypeScript e localStorage** para a construção de uma aplicação web. \n\n### Funcionalidades:\n\n  1. Cadastro de cada ciclo do Pomodoro.\n  2. Navegação entre telas e aplicação do Layout pelo React Router DOM.\n  3. Persistência de dados com **localStorage**.\n  4. Exibição do histórico de ciclos.\n  5. Implementação da navegabilidade entre páginas com **React Router DOM**.\n  6. **Componentes acessíveis** com **Radix UI** como ToolTip;\n  7. **Uso do useReducer** e **Context API** do React para o gerenciamento de estado da aplicação em conjunto com a divisão da lógica de **actions** e **reducers** para o gerenciamento de estado;\n  8. Entender e praticar construção de interfaces com **Styled Components** aplicando responsividade e breakpoints;\n\n### O que foi aprendido de novo?\n\n  1. Implementação da Navegação com React Router DOM;\n  2. Construção de Layouts com React Router DOM;\n  3. Aprofundamento nos conceitos de Styled Components e Context API.\n  4. Implementação de responsividade total com Styled-Components;\n  5. Design das telas responsivas\n     - Esse design das telas para celular foi uma adaptação minha, tanto seu Figma quanto sua implementação não há no projeto original, é só uma tentativa para prática.\n\n- **Tela de Histórico**\n\n  \u003cdiv align=\"center\" \u003e\n       \u003cimg src=\"https://i.imgur.com/MQNtsiu.png\" width=\"1000\" alt=\"Tela de Histórico\"\u003e\n  \u003c/div\u003e\n\n---\n\n## :art: Design\n\n- No design, eu acrescentei as telas responsivas para celular, uma melhoria que fiz por mim mesmo, não há no projeto original.\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\u003ca href=\"https://www.figma.com/file/ZFx7ibCTZ9pgPsrvwryMhW/Ignite-Timer?type=design\u0026node-id=0-1\u0026mode=design\u0026t=lTSkIabOQ7ISiv0R-0\"\u003eIgnite Timer\u003c/a\u003e\u003c/h3\u003e\n\n  [![Design](https://i.imgur.com/TAfikM6.png)](https://www.figma.com/file/ZFx7ibCTZ9pgPsrvwryMhW/Ignite-Timer?type=design\u0026node-id=0-1\u0026mode=design\u0026t=lTSkIabOQ7ISiv0R-0)\n\u003c/div\u003e\n\n---\n\n## :seedling: Requisitos Mínimos\n\n  1. NodeJS\n  2. ReactJS\n  3. Vite\n  4. Yarn(ou NPM)\n  \n- **Responsividade**\n\n\u003cdiv align=\"center\" \u003e\n      \u003cimg src=\"https://i.imgur.com/8OtcKGU.png\" alt=\"Iniciando ciclo\" width=\"1000\"\u003e\n      \u003cimg src=\"https://i.imgur.com/oT7NYqL.png\" alt=\"Ciclo em andamento\" width=\"1000\"\u003e\n\u003c/div\u003e\n\n---\n\n## :rocket: Tecnologias Utilizadas\n\n- O projeto foi desenvolvido utilizando as seguintes tecnologias:\n\n  1. **[axe-core/react](https://www.npmjs.com/package/@axe-core/react)**\n  2. **[Date FNS](https://date-fns.org/)**\n  3. **[JavaScript](https://developer.mozilla.org/pt1.BR/docs/Web/JavaScript)**\n  4. **[Netlify](https://www.netlify.com/)**\n  5. **[NodeJS](https://nodejs.org/en/)**\n  6. **[Phosphor React](https://www.npmjs.com/package/phosphor-react)**\n  7. **[Radix UI](https://www.radix-ui.com/)**\n  8. **[React](https://pt1.br.react.dev/)**\n  9. **[React Router DOM](https://reactrouter.com/en/main)**\n  10. **[React Hook Form](https://react-hook-form.com/)**\n  11. **[Styled Components](https://styled-components.com/)**\n  12. **[TypeScript](https://www.typescriptlang.org/)**\n  13. **[Vite](https://vitejs.dev/)**\n  14. **[Yarn](https://classic.yarnpkg.com/blog/2017/05/12/introducing-yarn/)**\n  15. **[zod](https://zod.dev/)**\n\n- **Responsividade**\n\n\u003cdiv align=\"center\" \u003e\n      \u003cimg src=\"https://i.imgur.com/67kGPsS.png\" alt=\"Tela inicial no modo responsivo\" width=\"280\"\u003e_\u003cimg src=\"https://i.imgur.com/0A4z9RQ.png\" width=\"280\" alt=\"Tela de Histórico em modo responsivo\"\u003e\n\u003c/div\u003e\n\n---\n\n## :truck: Entrega e distribuição continua\n\n**\u003chttps://ignite-timer-aszurar.netlify.app//\u003e**\n\n- Para a publicação da aplicação foi por meio da plataforma **[Netlify](https://www.netlify.com/)** onde é possível publicar de forma rápida, fácil e simples projetos React que estão hospedados no GitHub, GitLab, dentre outras plataformas de repositório remoto de graça.\n- Com isso, o CI/CD já é aplicado automaticamente por meio dessa plataforma definindo a branch de produção, sempre que houver uma atualização nela, será gerado uma nova versão do projeto e já publicado.\n- Além disso, podemos customizar o próprio endereço do site, adicionar ferramentas dentre outras funcionalidades facilmente.\n\n\u003cdiv align=\"center\"\u003e\n   \u003cimg src=\"https://i.imgur.com/D1F2HVc.png\" width=\"1000\" alt=\"Projeto publicado no Netlify\"\u003e\n\u003c/div\u003e\n\n---\n\n## :package: Como baixar e executar o projeto\n\n### Baixar\n\n- Clonar o projeto:\n\n  ```bash\n   git clone https://github.com/Aszurar/igniteTimer\n  ```\n\n- É necessário ter o Node.js e um gerenciador de pacotes, como o Yarn, instalados em seu sistema. Se você ainda não os tem, siga estas instruções:\n  - [Instalação do NodeJS](https://nodejs.org/en/)\n  - [Instalação do Yarn](https://classic.yarnpkg.com/blog/2017/05/12/introducing-yarn/)\n\n- Instalação das dependências:\n  - Execute o comando abaixo dentro da pasta do projeto\n\n    ```bash\n      yarn\n    ```\n\n### Execução\n\n- Caso tudo tenha sido instalado com sucesso, basta executar na raiz do projeto:\n\n  ```bash\n    yarn dev\n  ```\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nDesenvolvido por :star2: Lucas de Lima Martins de Souza.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faszurar%2Fignitetimer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faszurar%2Fignitetimer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faszurar%2Fignitetimer/lists"}