Plataforma de acompanhamento do mercado acionário de código aberto, oferecendo monitoramento em tempo real de preços, alertas personalizados e análises detalhadas de empresas, totalmente gratuita e permanentemente acessível.
Apresentação do Projeto OpenStock
Visão Geral do Projeto
O OpenStock é uma aplicação moderna e de código aberto para o mercado acionário, projetada para oferecer a todos ferramentas gratuitas e abertas de acompanhamento do mercado. Trata-se de uma alternativa de código aberto às plataformas de mercado caras, com suporte a rastreamento de preços em tempo real, alertas personalizados e análises detalhadas sobre empresas.
Princípio fundamental: O conhecimento deve ser aberto, gratuito e acessível, e a tecnologia deve pertencer a todos.
Principais Funcionalidades
🔐 Autenticação
- Sistema de autenticação por e-mail/senha baseado no Better Auth + MongoDB
- Rotas protegidas por middleware do Next.js
- Gerenciamento completo de sessões de usuário
🔍 Busca Global
- Busca rápida de ações, alimentada pela API Finnhub
- Exibição de ações populares quando ocioso, com consultas debounced
- Painel de comandos acessível com atalho Command + K
⭐ Lista de Acompanhamento (Watchlist)
- Ações favoritas de cada usuário armazenadas no MongoDB
- Cada símbolo de ação é único por usuário
- Funcionalidade prática para adicionar/remover ações
📊 Detalhes das Ações
- Informações sobre os símbolos fornecidas pelo TradingView
- Gráficos avançados (candlestick), gráficos de linha de base e indicadores técnicos
- Widgets com perfil da empresa e dados financeiros
📈 Visão Geral do Mercado
- Mapas de calor, cotações e notícias principais
- Widgets incorporáveis do TradingView
- Atualizações em tempo real dos dados de mercado
🎯 Fluxo de Introdução Personalizado
- Coleta de país do usuário e objetivos de investimento
- Avaliação de tolerância ao risco e setores preferidos
- Experiência de usuário adaptada individualmente
📧 E-mails e Automação
- E-mail de boas-vindas personalizado com IA (chamando o Gemini via Inngest)
- Resumo diário de notícias por e-mail (tarefas agendadas)
- Conteúdo personalizado com base nas ações favoritas do usuário
🎨 Interface de Usuário Refinada
- Componentes shadcn/ui + componentes base Radix UI
- Sistema de design Tailwind v4
- Tema escuro por padrão
- Design responsivo
Stack Tecnológica
Tecnologias Principais
- Next.js 15 (App Router)
- React 19
- TypeScript
- Tailwind CSS v4 (via @tailwindcss/postcss)
- Componentes shadcn/ui + Radix UI
- Biblioteca de ícones Lucide
Autenticação e Dados
- Better Auth – autenticação por e-mail/senha com adaptador MongoDB
- MongoDB + Mongoose – persistência de dados
- API Finnhub – símbolos de ações, perfis de empresas e notícias de mercado
- TradingView – widgets incorporáveis de gráficos
Automação e Comunicação
- Inngest – manipulação de eventos, tarefas agendadas e inferência com IA (Gemini)
- Nodemailer – envio de e-mails (transporte via Gmail)
- next-themes – alternância de temas
- cmdk – painel de comandos
- react-hook-form – gerenciamento de formulários
Composição por Linguagem
- TypeScript (~93,4%)
- CSS (~6%)
- JavaScript (~0,6%)
Estrutura do Projeto
app/
├── (auth)/ # Páginas relacionadas à autenticação
│ ├── layout.tsx
│ ├── sign-in/page.tsx
│ └── sign-up/page.tsx
├── (root)/ # Páginas principais da aplicação
│ ├── layout.tsx
│ ├── page.tsx
│ ├── help/page.tsx
│ └── stocks/[symbol]/page.tsx
├── api/inngest/route.ts # Endpoint da API Inngest
├── globals.css
└── layout.tsx
components/
├── ui/ # Componentes base shadcn/radix
├── forms/ # Componentes de formulário
├── Header.tsx
├── Footer.tsx
├── SearchCommand.tsx
└── WatchlistButton.tsx
database/
├── models/watchlist.model.ts
└── mongoose.ts
lib/
├── actions/ # Ações no lado do servidor
│ ├── auth
│ ├── finnhub
│ ├── user
│ └── watchlist
├── better-auth/
├── inngest/ # Cliente e funções do Inngest
├── nodemailer/ # Configuração de envio de e-mails
├── constants.ts
└── utils.ts
scripts/
└── test-db.mjs # Teste de conexão com o banco de dados
types/
└── global.d.ts
public/assets/images/ # Logotipo e capturas de tela
Começando Rapidamente
Pré-requisitos
- Node.js 20+
- pnpm ou npm
- String de conexão do MongoDB (MongoDB Atlas ou Docker local)
- Chave da API Finnhub
- Conta do Gmail (para envio de e-mails)
- Opcional: chave da API Google Gemini (para conteúdo gerado por IA)
Passos de Instalação
- Clonar o repositório
git clone https://github.com/Open-Dev-Society/OpenStock.git
cd OpenStock
- Instalar dependências
pnpm install
# ou
npm install
- Configurar variáveis de ambiente
Crie um arquivo .env:
# Configuração principal
NODE_ENV=development
# Banco de dados
MONGODB_URI=sua_string_de_conexão_mongodb
# Better Auth
BETTER_AUTH_SECRET=sua_chave_secreta_better_auth
BETTER_AUTH_URL=http://localhost:3000
# Finnhub
FINNHUB_API_KEY=sua_chave_finnhub
NEXT_PUBLIC_FINNHUB_API_KEY=
FINNHUB_BASE_URL=https://finnhub.io/api/v1
# Inngest AI (Gemini)
GEMINI_API_KEY=sua_chave_gemini_api
# Configuração de e-mail
NODEMAILER_EMAIL=seuemail@gmail.com
NODEMAILER_PASSWORD=sua_senha_de_aplicativo_gmail
- Verificar conexão com o banco de dados
pnpm test:db
- Iniciar servidor de desenvolvimento
pnpm dev
- Iniciar o Inngest (para workflows e tarefas agendadas)
npx inngest-cli@latest dev
- Acessar a aplicação
Abra seu navegador em http://localhost:3000
Implantação com Docker
O projeto inclui configuração do Docker Compose para iniciar rapidamente a aplicação e o MongoDB:
# Iniciar MongoDB
docker compose up -d mongodb
# Construir e iniciar a aplicação
docker compose up -d --build
Ao usar Docker, a string de conexão do MongoDB deve ser:
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
Dados e Integrações
API Finnhub
- Fornece busca de ações, perfis de empresas e notícias de mercado
- A versão gratuita pode retornar cotações com atraso
- Atenção aos limites de taxa de requisições
TradingView
- Fornece widgets incorporáveis de gráficos, mapas de calor e cotações
- Imagens externas provenientes de
i.ibb.co
Better Auth + MongoDB
- Autenticação por e-mail/senha
- Adaptador MongoDB para armazenamento de sessões
- A maioria das rotas é protegida, exceto páginas de login/cadastro
Workflows do Inngest
- Evento de criação de usuário → e-mail de boas-vindas personalizado com IA
- Tarefa agendada (diariamente às 12h) → envio de resumo de notícias por e-mail
- Desenvolvimento local com
npx inngest-cli@latest dev
Envio de E-mails (Nodemailer)
- Usa o Gmail como transporte
- Disponibiliza modelos para e-mails de boas-vindas e resumos de notícias
- Recomenda-se usar serviços SMTP profissionais em produção
Scripts Disponíveis
pnpm dev– inicia servidor de desenvolvimento (Turbopack)pnpm build– constrói para ambiente de produçãopnpm start– inicia servidor de produçãopnpm lint– executa ESLintpnpm test:db– verifica conexão com o banco de dados
Experiência do Desenvolvedor
- Modo estrito do TypeScript
- Tailwind CSS v4 (sem necessidade de arquivo de configuração separado)
- Biblioteca de componentes shadcn/ui
- Painel de comandos cmdk
- Alternância de temas com next-themes
- Ícones lucide-react
Manifesto da Open Dev Society
Vivemos num mundo onde o conhecimento está escondido atrás de paywalls, as ferramentas estão trancadas em assinaturas, a informação é distorcida por vieses e iniciantes ouvem que "não são bons o suficiente" para construir.
Nossas crenças:
- A tecnologia deve pertencer a todos
- O conhecimento deve ser aberto, gratuito e acessível
- A comunidade deve acolher iniciantes com confiança, não com barreiras
Nossa missão:
- Construir projetos de código aberto verdadeiramente úteis e gratuitos
- Ferramentas acessíveis tanto a profissionais quanto a estudantes
- Plataforma de aprendizado com conhecimento sempre gratuito
- Comunidade que orienta, não julga, os iniciantes
- Recursos operados com base na confiança, não no lucro
Nosso compromisso:
- Nunca bloquear conhecimento
- Nunca cobrar por acesso
- Nunca trocar confiança por dinheiro
- Operar com transparência, doações e força da comunidade
Guia de Contribuição
Todas as contribuições são bem-vindas! Seja você estudante, desenvolvedor autodidata ou engenheiro experiente.
- Discuta ideias e bugs por meio de Issues
- Procure por problemas marcados como "good first issue" ou "help wanted"
- Mantenha PRs focados; alterações na UI devem incluir capturas de tela
- Seja gentil, oriente iniciantes e rejeite barreiras — este é o caminho da ODS
Segurança
Se encontrar uma vulnerabilidade de segurança:
- Não abra uma Issue publicamente
- Envie um e-mail para: opendevsociety@cc.cc
- Coordenaremos uma divulgação responsável e corrigiremos rapidamente
Licença
O OpenStock é licenciado sob a licença AGPL-3.0. Caso modifique, redistribua ou implante o software (inclusive como serviço web), você deverá disponibilizar seu código-fonte sob a mesma licença e atribuir os autores originais.
Agradecimentos
- Finnhub – por fornecer dados de mercado acessíveis
- TradingView – por fornecer widgets incorporáveis de mercado
- Comunidades de shadcn/ui, Radix UI, Tailwind CSS, Next.js
- Inngest – por tarefas em segundo plano e workflows confiáveis
- Better Auth – por autenticação simples e segura
- Todos os contribuidores que tornam possível o ecossistema de ferramentas open source
Um agradecimento especial a Adrian Hajdin (JavaScript Mastery), cujo tutorial excepcional sobre aplicações de mercado acionário foi fundamental para a construção do OpenStock pela Open Dev Society.
Construído com abertura, para todos, sempre gratuito. — Open Dev Society
Repositório do projeto: https://github.com/Open-Dev-Society/OpenStock