vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Full Analytics Suite for Mercado Livre sellers — from raw orders to executive decisions. Pipeline analítico completo para vendedores do Mercado Livre: ingere pedidos via API oficial (OAuth 2.0), consolida em SQLite, e entrega insights em três formatos — relatório executivo em PDF, notebooks Jupyter narrativos e dashboard Streamlit interativo. Uma única camada analítica pura alimenta as três saídas. _Screenshot capturado localmente rodando python -m src.main abrir-dashboard._ Executive Summary — receita, custos e resultado líquido, com variação sobre a janela anterior:README 전문 보기 ↗
Analytics para vendedores do Mercado Livre — do pedido bruto à decisão de negócio.
O vendedor conecta a conta dele pelo fluxo oficial do Mercado Livre, os últimos 6 meses de pedidos entram sozinhos, e o produto responde o que a plataforma não responde: quanto sobra de cada venda, quais produtos sustentam a loja, quem são os compradores que valem reconquistar, e quais anúncios são vistos sem converter.
Sem planilha, sem CSV, sem campo digitado à mão.
→ Demonstração navegável, sem cadastro
Os prints abaixo são capturas da demonstração pública. Os dados dela são sintéticos e se regeneram periodicamente para terminar sempre no dia de hoje, então os valores exatos mudam com o tempo — a forma, o volume e o catálogo são os mesmos.
Receita, comissão do Mercado Livre e margem de contribuição por dia, com variação sobre o período anterior.
A margem é calculada, não estimada: receita − comissão − frete, cada parcela rastreável a uma coluna do banco. O custo do produto é o único número que o sistema não tem — e ele diz isso na tela, em vez de preencher com um percentual chutado.
Curva ABC de Pareto sobre a receita por produto. Na demonstração, 14 produtos respondem por 78,7% do faturamento e a cauda de 16 produtos responde por 5,1%.
Tem também cohort por mês de lançamento, para ver se produto novo vinga ou morre.
Segmentação RFM (recência, frequência, valor). Cada ponto é um comprador, colorido pelo segmento; o eixo X é dias desde a última compra, então quem está indo embora aparece à direita.
É o que transforma "tive 372 compradores" em "95 deles estão sumindo e valem R$ 154 mil".
Receita menos comissão menos frete não é margem de contribuição: falta o custo da mercadoria, que é o maior custo variável de todos. O SellerPulse nunca o estima — ele pergunta. A tela lista os produtos em ordem de receita, salva cada valor ao sair do campo, e toda tela que mostra margem diz quanto dela está coberta por custo informado.
CSV que o Excel em português abre com dois cliques, com um glossário das 19 colunas. É onde estão escritas, pela primeira vez no produto, duas regras que antes só existiam no código: o campo "Até" não entra na janela, e a recência conta a partir do fim do período.
Conta do Mercado Livre
│ OAuth 2.0 oficial — a senha do vendedor nunca passa pelo SellerPulse
▼
Fila de sincronização ──► 6 meses de pedidos, em janelas de 30 dias
│ retoma de onde parou se a instância cair
▼
PostgreSQL ──► multi-inquilino, isolado por seller_id
│
▼
API (FastAPI) ──► métricas e segmentação em pandas
│
▼
Web (Next.js)
Decisões que valem citar:
seller_id, toda consulta filtra por ele, e todo JOIN casa por seller_id também — sem isso um item_id do Mercado Livre, que é global, casaria com o pedido de outro vendedor e multiplicaria a receita. Há RLS no banco, mas como defesa em profundidade: o backend conecta num papel que a contorna, então quem garante o isolamento é o predicado explícito na consulta, coberto por teste de mutação.date_last_updated, não por data de criação — um pedido cancelado semanas depois precisa deixar de contar como receita./demo/* é o único caminho sem autenticação: aceita apenas GET, resolve o vendedor por variável de ambiente do servidor (nunca por parâmetro), exige a marca is_demo no banco, e tem teto de janela e de paginação.| Camada | |
|---|---|
| Backend | Python 3.11 · FastAPI · asyncpg · pandas |
| Banco | PostgreSQL 17 (Supabase) · 13 migrations versionadas · RLS em todas as tabelas |
| Frontend | Next.js 16 · React 19 · TypeScript · Tailwind · Recharts |
| Auth | Supabase Auth (JWT ES256) + OAuth 2.0 do Mercado Livre |
| Infra | Render (Docker) · Vercel |
| Testes | pytest · vitest · CI em 3 jobs (o legado roda em Linux e Windows) |
Pré-requisitos: Python 3.11+, Node 20+, PostgreSQL 17.
# 1. Backend (no Windows troque bin/ por Scripts/)
python -m venv backend/.venv
backend/.venv/bin/pip install -r backend/requirements.txt
cp backend/.env.example backend/.env # credenciais; ver o aviso abaixo
backend/.venv/bin/python backend/scripts/setup_test_db.py
# 2. Frontend
cd frontend && npm ci && cp .env.local.example .env.local
# 3. Subir contra o banco de TESTE, com o worker desligado
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/sellerpulse_test WORKER_IN_PROCESS=0 DEMO_REFRESH_IN_PROCESS=0 backend/.venv/bin/python -m uvicorn backend.main:app --port 10000
cd frontend && npm run dev # web em :3000
Nunca suba o backend só com o
backend/.env. O worker vem ligado por padrão e, se o.envapontar para a base de produção, ele drena a fila real. O passo a passo seguro, com dados de demonstração, está emdocs/operacao.md.
Todo comando roda a partir da raiz do repositório — backend/ não é instalado via pip, roda como pacote top-level igual a src/.
As migrations em backend/migrations/ rodam em ordem numérica. A 0000 é um stub do schema auth para o banco de testes; no Supabase esse schema já existe.
.venv/bin/python -m pytest tests # camada analítica pura
backend/.venv/bin/python -m pytest backend/tests # API, fila, ingestão
cd frontend && npm test && npm run lint && npm run build
Teste de mutação é padrão do projeto, não exceção. Toda correção quebra o código de propósito primeiro, confirma que o teste falha, e só então desfaz. A razão é concreta: um erro que zerava a comissão do Mercado Livre sobreviveu meses porque os dados de teste tinham exatamente as mesmas premissas erradas do código — os testes provavam que o sistema concordava consigo mesmo, não que estava certo.
Desde então a regra é verificar contra dado real, não só contra fixture.
sellerpulse/
├── backend/
│ ├── analytics/ # métricas e segmentação sobre Postgres (asyncpg)
│ ├── ml/ # OAuth, cifra de tokens, ingestão da API do ML
│ ├── jobs/ worker/ # fila de sincronização com lease e retomada
│ ├── routers/ # endpoints REST (autenticados + /demo público)
│ ├── migrations/ # 13 migrations SQL versionadas
│ └── tests/ # API, fila, ingestão e paridade
├── frontend/
│ ├── app/ # landing, /demo público, /dashboard autenticado
│ ├── components/ # gráficos, tabelas, seções da landing
│ └── lib/ # clientes da API (um por contexto de auth)
├── src/ # camada original (SQLite) — cliente do ML, ingestão e paridade
├── tests/ # testes da camada pura
├── templates/ # template Jinja2 do relatório em PDF
└── docs/specs/ # design docs de cada sprint
src/é a primeira versão, single-tenant sobre SQLite. Continua viva por dois motivos: o cliente da API do Mercado Livre, o OAuth e o gerador de dados sintéticos rodam em produção a partir dela, ebackend/analytics/é um porte fiel das suas métricas para Postgres — as divergências deliberadas entre as duas estão documentadas em comentário, no ponto exato em que divergem.
| Conexão com conta real do Mercado Livre | ✅ em produção |
| Importação de 6 meses + sincronização incremental | ✅ em produção |
| Telas autenticadas e demonstração sem cadastro | ✅ no ar |
| Custo de produto informado pelo vendedor | ✅ em produção |
| Exportação em CSV com glossário das colunas | ✅ em produção |
| Visitas e conversão por anúncio | ✅ em produção |
| Diagnóstico de anúncio por quadrante | ✅ em produção |
| Servidor MCP somente leitura sobre a demonstração | ✅ em produção |
| Produtos com visita e zero venda | 📋 planejado |
| Frete pago pelo vendedor, buscado por envio | ✅ em produção |
| Impostos por regime tributário | 📋 planejado |
MIT — livre uso comercial e pessoal, com atribuição.
Guilherme Carreri