Skip to content
Bryant Moreira dos Anjos

Projeto

Granspace

Um dashboard local para gerenciar todos os projetos de desenvolvimento espalhados pela sua máquina — descubra e organize com um quadro Kanban, rode com logs ao vivo e acompanhe a saúde do git. Disponível como dashboard web, aplicativo desktop nativo em Electron e via ferramentas MCP, para que agentes de IA também possam controlá-lo.

Granspace cover image
TypeScriptReactNode.jsExpressElectronSQLiteMCP

Descrição

Granspace é uma central de controle local-first para todos os projetos espalhados por uma máquina de desenvolvimento. Ele descobre projetos em pastas raiz configuradas, permite organizá-los com tags, um quadro Kanban configurável e notas fixadas, roda os scripts npm de cada um com logs coloridos ao vivo, acompanha o status de sincronização do git e gerencia variáveis de ambiente por projeto com segredos criptografados atrás de uma senha mestra. Tudo funciona por um dashboard web, um aplicativo desktop nativo em Electron, ou via ferramentas MCP, para que um agente de IA de codificação possa consultar e controlar tudo diretamente.

Tecnologias

O frontend é React + TypeScript sobre Vite. O backend é um pequeno servidor Express com SQLite (better-sqlite3) para o registro de projetos. O build desktop empacota os dois com Electron, e um servidor MCP (@modelcontextprotocol/sdk) expõe os mesmos dados e ações do projeto como ferramentas para agentes de IA como o Claude Code.

Repositório

Repositório privado — o site do projeto, acima, tem downloads, documentação e capturas de tela.

Demo ao Vivo

Não há uma demo pelo navegador, já que o Granspace é um aplicativo desktop que gerencia arquivos e processos na própria máquina do usuário. O link acima é o site do projeto, com downloads, documentação e screenshots.

Principais Desafios

Empacotar o mesmo aplicativo Electron corretamente para Linux, Windows e macOS revelou alguns bugs específicos de plataforma no fim do ciclo de release:

  • No macOS, o ícone do app aparecia como ruído colorido no Finder e no Spotlight (mas parecia normal no Dock).
  • O “iniciar com o login” simplesmente não funcionava no Linux, e parecia se resetar sozinho no macOS.

Soluções Implementadas

  • O bug do ícone no macOS vinha do electron-builder derivando o .icns a partir de um PNG e dimensionando os slots Retina em o dobro do tamanho declarado — lido como dado corrompido pelos caminhos do Finder/Spotlight (que confiam no tamanho declarado), mas decodificado corretamente pelo Dock. Resolvido construindo o .icns com o iconutil da própria Apple, mais um teste de regressão que rejeita qualquer slot com tamanho incompatível.
  • A API setLoginItemSettings do Electron não tem implementação nenhuma no Linux (um no-op silencioso), então o Linux agora ganhou uma entrada real de autostart XDG (.desktop, compatível com AppImage). No macOS 13+, um item de login recém-registrado precisa de uma aprovação manual única nas Configurações do Sistema, durante a qual o SO reporta o estado como desligado — então o app agora persiste a intenção do usuário como fonte da verdade e a reafirma a cada abertura, com uma dica e link direto para as Configurações do Sistema enquanto a aprovação estiver pendente.