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.

AGPL-3.0TypeScriptOpenStockOpen-Dev-Society 5.5k Last Updated: October 24, 2025

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

  1. Clonar o repositório
git clone https://github.com/Open-Dev-Society/OpenStock.git
cd OpenStock
  1. Instalar dependências
pnpm install
# ou
npm install
  1. 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
  1. Verificar conexão com o banco de dados
pnpm test:db
  1. Iniciar servidor de desenvolvimento
pnpm dev
  1. Iniciar o Inngest (para workflows e tarefas agendadas)
npx inngest-cli@latest dev
  1. 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ção
  • pnpm start – inicia servidor de produção
  • pnpm lint – executa ESLint
  • pnpm 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

Star History Chart