Skip to content

LeonardoJaques/qrcodePix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QRCode Pix

React React Router License Status

📋 Sobre o Projeto

Este projeto é uma atualização moderna de uma ferramenta criada originalmente há 6 anos. O objetivo continua o mesmo: ajudar microempreendedores individuais (MEIs) e facilitar pagamentos entre amigos (aquela cerveja no trabalho remoto! 🍻).

Ele permite gerar QR Codes Pix estáticos (padrão EMVCo/BRCode) que podem ser lidos por qualquer aplicativo bancário brasileiro.


✨ Novidades (2024 Refactor)

O projeto foi totalmente refatorado para tecnologias atuais:

  • React 18: Atualizado da versão 16/17, utilizando createRoot e Hooks modernos.
  • React Router v6: Navegação mais declarativa e segura.
  • Modo de Impressão (Novo!): Página dedicada /imprimir com layout limpo e otimizado para papel (sem botões, sem URLs, borda de alto contraste).
  • Geração de PDF Personalizada: Modal interativo com opções de tamanho (Pequeno, Normal, Médio, Grande) para o QR Code no PDF.
  • Validação de Chaves: Suporte para CPF, E-mail, Telefone e Chaves Aleatórias com validação em tempo real.
  • Performance: Implementação de debounce para geração de QR Code sem travamentos.
  • Testes: Cobertura de testes unitários com Jest e React Testing Library.
  • Estrutura Organizada: Seguindo melhores práticas do React com barrel exports e separação clara de responsabilidades.

🏗️ Estrutura do Projeto

src/
├── app/                      # Configuração principal do aplicativo
│   ├── App.js
│   ├── App.test.js
│   └── routes/
│       └── AppRoutes.js      # Configuração de rotas
├── assets/
│   ├── images/               # Imagens e logos
│   │   └── logo.svg
│   └── styles/               # Estilos CSS globais
│       ├── App.css
│       └── index.css
├── components/               # Componentes reutilizáveis
│   └── PixCard/
│       ├── PixCard.js        # Componente de exibição do QR Code
│       └── index.js          # Barrel export
├── hooks/                    # Hooks customizados
│   ├── useDebounce.js
│   └── index.js
├── pages/                    # Páginas da aplicação
│   ├── QrCodePage/
│   │   ├── QrCodePage.js
│   │   ├── QrCodePage.test.js
│   │   └── index.js
│   ├── PrintPage/
│   │   ├── PrintPage.js      # Página de impressão/PDF
│   │   └── index.js
│   └── ConfirmTransactionPage/
│       ├── ConfirmTransactionPage.js
│       ├── ConfirmTransactionPage.test.js
│       └── index.js
└── utils/                    # Utilitários e helpers
    ├── pix.js                # Lógica de geração de payload Pix
    ├── validators.js         # Validadores de chave Pix
    ├── validators.test.js
    └── index.js

🛠️ Tecnologias


🚀 Fluxo de Uso

sequenceDiagram
    participant User as Usuário
    participant App as QRCode Pix
    participant Print as Impressão/PDF

    User->>App: Digita Chave Pix (CPF, Email, Phone)
    App->>App: Valida Formato (Real-time + Debounce)
    
    alt Chave Válida
        App-->>User: Exibe QR Code automaticamente
        User->>App: Clica "Imprimir"
        App->>Print: Navega para /imprimir
        Print-->>User: Exibe Cartão Limpo (Sem botões)
        User->>Print: Clica "Gerar PDF"
        Print-->>User: Modal com opções de tamanho
        User->>Print: Escolhe tamanho (Pequeno/Normal/Médio/Grande)
        Print->>Print: Gera PDF com html2canvas + jsPDF
        Print-->>User: Download automático do PDF
    else Chave Inválida
        App-->>User: Oculta QR Code e exibe erro
    end
Loading

📁 Qualidade de Código (Auditado)

O projeto passou por uma revisão rigorosa de manutenibilidade e legibilidade:

  • Arquitetura: Separação clara entre Lógica (QrCodePage) e Apresentação (PixCard).
  • Hooks: Lógica complexa extraída para hooks reutilizáveis (useDebounce).
  • Barrel Exports: Todos os componentes e páginas utilizam barrel exports para imports limpos.
  • Padrões: Código limpo, variáveis semânticas e sem números mágicos.
  • Segurança: Nenhum dado sensível é persistido ou enviado para servidores externos. Tudo roda no navegador do cliente.

💻 Como Rodar Localmente

Pré-requisitos

  • Node.js 18+ (recomendado: v22.22.0)
  • npm ou yarn

Instalação

  1. Clone o repositório:

    git clone https://github.com/LeonardoJaques/qrcodePix.git
    cd qrcodePix
  2. Instale as dependências:

    npm install
  3. Inicie o servidor de desenvolvimento:

    npm start

    O app abrirá em http://localhost:3000.


🧪 Como Testar

Para rodar os testes unitários e de validação:

npm test

Para verificar o build de produção:

npm run build

📝 Uso

  1. Digite sua chave Pix (CPF, email, telefone ou chave aleatória)
  2. Preencha os dados opcionais: Nome do beneficiário, cidade e valor
  3. O QR Code será gerado automaticamente quando a chave for válida
  4. Clique em "Imprimir" para ir para a página de impressão
  5. Escolha "Gerar PDF" e selecione o tamanho desejado
  6. O PDF será baixado automaticamente com o QR Code centralizado em formato A4

Persistência de Dados

O aplicativo salva automaticamente no localStorage:

  • Nome do beneficiário
  • Cidade

Esses dados serão preenchidos automaticamente na próxima vez que você acessar a aplicação.


🐛 Solução de Problemas

QR Code não aparece no PDF

Resolvido! A versão atual utiliza configurações otimizadas do html2canvas:

  • scale: 3 - Alta resolução
  • allowTaint: true - Permite captura de elementos SVG
  • foreignObjectRendering: false - Melhor compatibilidade com SVG

Se ainda assim tiver problemas, tente:

  1. Atualizar o navegador para a versão mais recente
  2. Desabilitar extensões que bloqueiam canvas/downloads
  3. Verificar se o JavaScript está habilitado

🤝 Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para:

  1. Fork o projeto
  2. Criar uma branch para sua feature (git checkout -b feature/NovaFeature)
  3. Commit suas mudanças (git commit -m 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/NovaFeature)
  5. Abrir um Pull Request

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


Feito com ❤️ para a comunidade MEI brasileira.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •