Skip to content

Projeto de Lista de Presentes em React, TypeScript e Supabase com scraper para pegar informações de produtos e mensagens no WhatsApp via Evolution API

License

Notifications You must be signed in to change notification settings

Vini-Paixao/Presentex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Presentex

🎁 Presentex é o hub onde casais, famílias e squads organizam todos os mimos de forma elegante, rápida e colaborativa. Pense nele como um “Notion dos presentes”: você cria listas temáticas, convida quem quiser, acompanha valores em tempo real e recebe ping de WhatsApp quando algo novo acontece.

Construí o app para usar no meu relacionamento (e já está vivo em produção!), mas a ideia é que qualquer pessoa possa hospedar a sua própria instância, adaptar o visual e até hackear novas integrações. Se quiser apenas utilizar, basta rodar localmente; se quiser evoluir, o código está todo aqui sob licença MIT.

📸 Sneak peek

Login Cadastro
Tela de Login Cadastro
Home Perfil
Home Lista
Produtos Tela da lista
Home Lista

✨ Destaques

  • Autenticação Supabase com confirmação de e-mail e fluxo protegido.
  • Criação, edição e compartilhamento de listas de presentes com múltiplos membros.
  • Produtos com valores sugeridos, status e estatísticas calculadas em tempo real.
  • Notificações por WhatsApp via Evolution API disparadas por Edge Function.
  • Experiência responsiva construída com Vite, React 18, TypeScript, Tailwind e shadcn/ui.
  • Infra pronta para produção: Docker multi-stage, Nginx, Apache proxy e scripts de deploy.

🧱 Stack

Camada Tecnologias
Front-end React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui
Backend-as-a-Service Supabase (Auth, PostgreSQL, Edge Functions, Storage)
Edge Functions Deno + Supabase Functions (notify-whatsapp, scrape-product)
Notificações Evolution API (envio de mensagens WhatsApp)
Infra/DevOps Docker, Nginx, Supabase CLI

🏗️ Arquitetura

React SPA (Vite) ──> Supabase (Auth + DB + Storage)
                      └─> Edge Function notify-whatsapp ──> Evolution API ──> WhatsApp

Docker (lista_presentes_app) ──> Nginx Host ──> Domínio público

🚀 Getting Started

0. Pré-requisitos

  • Node.js 20+ e npm
  • Supabase CLI (npm install -g supabase)
  • Docker + Docker Compose (opcional para produção/local infra)
  • Conta na Evolution API (ou serviço similar) para o envio de notificações por WhatsApp

1. Clone e instale

git clone https://github.com/<seu-usuario>/Presentex.git
cd Presentex
npm install

2. Variáveis de ambiente

O repositório inclui .env.example. Crie sua cópia local:

cp .env.example .env
Variável Descrição
VITE_SUPABASE_PROJECT_ID ID do projeto Supabase (supabase projects list)
VITE_SUPABASE_URL URL base do Supabase (https://<project>.supabase.co)
VITE_SUPABASE_PUBLISHABLE_KEY Chave anon gerada no dashboard Supabase
NODE_ENV development ou production

⚠️ Nunca commite credenciais reais. Os arquivos versionados já foram limpos e servem apenas como referência.

3. Supabase setup

  1. Crie um projeto novo no Supabase.
  2. Atualize supabase/config.toml e supabase/.temp/project-ref com o seu project_ref.
  3. Link o projeto localmente e aplique as migrações:
npx supabase login
npx supabase link --project-ref <seu-project-ref>
npx supabase db push

4. Edge Functions & segredos

npx supabase functions deploy notify-whatsapp
npx supabase functions deploy scrape-product

# configure os segredos usados pelas funções
npx supabase secrets set \
  EVOLUTION_API_URL=https://<sua-instancia-evolution> \
  EVOLUTION_API_KEY=<apikey-evolution> \
  EVOLUTION_INSTANCE_NAME=<nome-da-instancia>

5. Rodando localmente

npm run dev
# abra http://localhost:5173

6. Scripts úteis

npm run build     # gera o bundle de produção
npm run preview   # serve o build para QA rápido

🐳 Deploy com Docker

Este repositório inclui tudo necessário para subir o front-end estático dentro de um Nginx Alpine.

docker-compose build
docker-compose up -d
  • docker-compose.yml: expõe o app em 127.0.0.1:3001 (ajuste conforme seu host)
  • configs/nginx-host.conf: reverse proxy (porta 8083) para expor o container dentro do VPS
  • scripts/deploy.sh / scripts/health-check.sh: automação de deploy e verificação

Adapte as portas segundo a sua infraestrutura — o README descreve o fluxo usado em produção (Apache → Nginx → Docker → App).

📁 Estrutura principal

.
├─ src/
│  ├─ components/        # UI (cards, dialogs, forms, shadcn/ui wrappers)
│  ├─ contexts/          # Auth provider com Supabase
│  ├─ hooks/             # useListaSums, useToast, useMobile
│  ├─ integrations/
│  │   └─ supabase/      # client e tipagens locais
│  ├─ lib/               # utilitários (preço, cores, notificações)
│  └─ pages/             # Auth, Listas, Profile, etc.
├─ supabase/
│  ├─ migrations/        # histórico completo do schema
│  ├─ functions/         # notify-whatsapp, scrape-product
│  └─ config.toml        # apontar para o seu project_ref
├─ configs/              # Nginx/Apache prontos para VPS
├─ scripts/              # deploy + health check automatizados
└─ docker-compose.yml    # build & run em produção

🔐 Manutenção de segredos

  • Nunca exponha chaves reais (anon, service_role, tokens Evolution API) em commits públicos.
  • Use .env, Supabase Secrets e gerenciadores seguros (1Password, Doppler, Vault, etc.).
  • Antes de publicar um fork, execute um git grep para ter certeza de que IDs e URLs sensíveis não ficaram no histórico.

🤝 Contribuindo

Pull Requests são bem-vindos! Siga este fluxo:

  1. Abra uma issue descrevendo a melhoria/bug.
  2. Crie um branch a partir de main.
  3. Rode npm run lint/npm run build antes de enviar o PR.
  4. Descreva claramente mudanças de schema ou dependências.

📄 Licença

Este projeto está sob a MIT License. Use, modifique e distribua como preferir, mantendo os créditos originais.

📢 Divulgação

Se você publicar algo nas redes (por exemplo, no LinkedIn), marque o projeto e compartilhe melhorias! Isso ajuda outras pessoas a reutilizarem a mesma base para listas colaborativas de presentes.

About

Projeto de Lista de Presentes em React, TypeScript e Supabase com scraper para pegar informações de produtos e mensagens no WhatsApp via Evolution API

Topics

Resources

License

Stars

Watchers

Forks