Um Stream Deck
sem hardware.
A Stream Deck
with no hardware.
O celular abre uma página web e controla seu PC Windows pela rede local: liga programas, jogos e sites, posiciona janelas em monitores específicos, entra e sai de tela cheia. Nenhum app instalado no celular. Your phone opens a web page and controls your Windows PC over the local network: launches apps, games and sites, positions windows on specific monitors, toggles fullscreen. No app installed on the phone.
git clone …/rigdeck.git && npm i && npm start
Nasceu de um problema específico: jogar com amigos exigia abrir o Discord num monitor e o jogo em outro, toda vez, na mão. Virou um painel de automação completo. Born from one specific problem: gaming with friends meant opening Discord on one monitor and the game on another, by hand, every single time. It grew into a full automation panel.— do README do projeto — from the project's README
Quatro camadas, cada uma cega pra vizinha
Four layers, each blind to its neighbor
O frontend não sabe que existe PowerShell. O executor não sabe que existe uma grade de botões. Cada camada só conhece a interface da vizinha — dá pra testar isolado. The frontend doesn't know PowerShell exists. The executor doesn't know a button grid exists. Each layer only knows its neighbor's interface — every piece is independently testable.
PWA no celular
Phone PWA
JavaScript puro, sem framework, sem build step. Grade de botões em pastas.
Plain JavaScript, no framework, no build step. Button grid organized in folders.
Fastify API
Backend TypeScript recebe o pedido, resolve os passos do preset.
TypeScript backend receives the request, resolves the preset's steps.
Executor
Executor
Decide como cada passo roda: abrir programa, mandar tecla, rodar comando.
Decides how each step runs: open a program, send a key, run a command.
PowerShell / Win32
PowerShell / Win32
Move janelas, extrai ícones, descobre jogos instalados, envia teclas.
Moves windows, extracts icons, discovers installed games, sends keys.
Rodando de verdade, num PC de verdade
Running for real, on a real PC
Capturas direto de uma instância rodando agora — sem mockup.
Captures straight from an instance running right now — no mockups.
Tudo que um Stream Deck físico faz — e mais
Everything a physical Stream Deck does — and more
Nove recursos, cada um resolvendo uma fricção real de quem alterna entre jogo, chamada e trabalho no mesmo PC.
Nine features, each solving a real friction point for anyone switching between games, calls and work on the same PC.
Presets em pastas
Presets in folders
Organiza atalhos em pastas aninhadas, igual ao Stream Deck físico da Elgato.
Nested folders for shortcuts, just like Elgato's physical Stream Deck.
3 tipos de passo
3 step types
launch abre programa/URL, cmd roda shell, key envia tecla — inclui MAXIMIZE/RESTORE de verdade.
launch opens app/URL, cmd runs shell, key sends keystrokes — includes real MAXIMIZE/RESTORE window actions.
Presets com múltiplos passos
Multi-step presets
Um botão abre Spotify, Brave e VS Code de uma vez, por exemplo.
One button opens Spotify, Brave and VS Code at once, for example.
Posicionamento por monitor
Per-monitor positioning
Cada passo escolhe o monitor e decide tela cheia ou posição/tamanho específicos.
Each step picks its monitor and either goes fullscreen or a specific position/size.
Segurar pra fechar
Hold to close
Encerra exatamente o que aquele preset abriu, rastreado por PID/HWND — não mata processos de outro motivo.
Closes exactly what that preset opened, tracked by PID/HWND — never kills unrelated processes with the same name.
Descoberta automática
Auto-discovery
Varre Menu Iniciar, Desktop, manifestos do Steam e Epic Games — classifica jogo vs. programa sozinho.
Scans Start Menu, Desktop, Steam and Epic Games manifests — classifies game vs. app on its own.
Stats ao vivo
Live stats
CPU, RAM e disco livre direto na barra de status.
CPU, RAM and free disk right in the status bar.
PWA instalável
Installable PWA
Vira app na tela inicial, layout landscape compacto: até 4 botões por página.
Installs as a home-screen app, compact landscape layout: up to 4 buttons per page.
Export, import e auto-start
Export, import & auto-start
Backup de presets em JSON. Sobe sozinho no login, sem privilégios de admin.
JSON backup of all presets. Starts itself on login, no admin rights required.
Sem ORM, sem DI, sem abstração que sobra
No ORM, no DI, no abstraction that isn't earning its keep
A troca de Express pra Fastify foi deliberada: tipagem de ponta a ponta, schema de rota nativo, mais perto do que se usa em produção. A filosofia minimalista continua.
Switching from Express to Fastify was deliberate: end-to-end typing, native route schemas, closer to production-grade. The minimalist philosophy stays the same.
| CAMADA | LAYER | TECNOLOGIA | TECHNOLOGY | — | |
|---|---|---|---|---|---|
| Backend | Backend | Fastify + TypeScript | Node.js 20+ | ||
| Frontend | Frontend | JS puro (ES modules) | Plain JS (ES modules) | zero framework, zero build | zero framework, zero build |
| Automação | Automation | PowerShell | Win32 API via Add-Type | Win32 API via Add-Type | |
| Testes | Tests | node:test | tsx loader | ||
| Persistência | Persistence | JSON local | Local JSON | sem banco de dados | no database |
No ar em quatro comandos
Up and running in four commands
Precisa de Windows 10/11, Node.js 20+ e PowerShell — já vem no Windows.
Needs Windows 10/11, Node.js 20+ and PowerShell — already on Windows.
git clone https://github.com/obrenoalvim/rigdeck.git cd rigdeck npm install npm run build npm start # servidor sobe em http://localhost:4321# server starts at http://localhost:4321 # acesse pelo IP da máquina no celular: http://192.168.x.x:4321# reach it from your phone at your machine's IP: http://192.168.x.x:4321
O que o RigDeck não tenta ser
What RigDeck doesn't try to be
- WIN32 Só Windows. Todo controle de janela depende de Win32 API via PowerShell. Windows only. All window control depends on Win32 API via PowerShell.
- SEM AUTHNO AUTH Uma máquina, um usuário, uma rede local. Não exponha a porta 4321 pra internet sem VPN ou reverse proxy com auth. One machine, one user, one local network. Don't expose port 4321 to the internet without a VPN or an auth-guarded reverse proxy.
- EM MEMÓRIAIN-MEMORY Reiniciar o servidor apaga o rastreamento fino de PID/HWND. O fechamento cai de volta pra matar por nome de processo. Restarting the server clears fine-grained PID/HWND tracking. Closing falls back to killing by process name.
Clone, ajuste o preset, jogue.
Clone it, tune the preset, play.
Referência de arquitetura e base pronta pra quem quiser adaptar pra própria configuração.
An architecture reference and a working base for anyone who wants to adapt it to their own setup.