No description
  • C++ 98.6%
  • CMake 1.2%
  • Shell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tronax bac658e6c1
Initial release: native multi-view AI workspace (frameless multi-browser GUI)
OmniGrid is a C++20 / Qt6 (Widgets + QtWebEngineWidgets) desktop application
that displays several AI chat web sessions (ChatGPT, Claude, Perplexity,
Gemini, Grok, DeepSeek, Le Chat, HuggingChat, Copilot, local WebUIs, or any
custom URL) simultaneously in resizable split/grid layouts.

Window chrome
- Frameless window (Qt::FramelessWindowHint) with a fully custom 40 px
  titlebar: app icon, centered workspace title, quick-add button, layout
  preset menu, provider-settings button, and minimize/maximize/close
  controls (close turns red on hover; all controls animate their hover fill
  via QVariantAnimation since QSS cannot transition).
- Native window behaviour on the custom chrome: titlebar drag uses
  startSystemMove() with a manual X11 fallback, double-click toggles
  maximize/restore, and all eight window edges/corners resize via
  startSystemResize() with the proper SizeVer/SizeHor/SizeFDiag/SizeBDiag
  cursors.

Layout engine (GridContainer)
- Nested QSplitter grids with presets 1x1, 1x2, 2x1, 2x2 and an AutoFit
  mode; every row/column is freely resizable and flex ratios are preserved
  across relayouts.
- Unused cells render as clickable "Add session" placeholder cards, so
  adding/removing tiles never forces a full relayout.

Web tiles (TileWidget)
- Slim 26 px header per tile: live favicon (with colored letter fallback),
  elided page title, and back / forward / reload / mute / unload / close
  buttons; target=_blank and window.open navigations are kept inside the
  tile.
- The active tile is marked with a 1.5 px cyan accent border; unloading
  suspends the page (QWebEnginePage::Discarded), dims it with an overlay
  and any navigation wakes it again.

Session and cookie isolation (ProfileManager)
- Per-tile session mode: Shared (one persistent profile for all views),
  Isolated (persistent cookie/cache storage per tile with stable storage
  keys across restarts) or Private (in-memory only).
- Chromium-accurate user agent, download handling to ~/Downloads.

Workspace persistence (WorkspaceStore)
- Open tiles, their session modes, tile ids, layout mode and splitter
  ratios are saved to workspace.json on quit and on every structural
  change; the next start restores exactly the last session and navigates
  each tile to its provider's home page.

Configurable providers (ProviderStore + ProviderDialog)
- All AI providers are user-configurable in-app (gear button / Ctrl+,):
  built-ins can be renamed, re-pointed or hidden; custom providers with
  name, URL and accent color can be added, edited and deleted. The store
  persists to providers.json and feeds the quick launcher.

Quick launcher (QuickLauncher, Ctrl+K / Ctrl+T / "+" button)
- Command-palette style modal: fuzzy filtering over all configured
  providers, direct URL entry, session-mode and target-tile selection, and
  one-click layout presets.

Design system (Theme)
- Charcoal/slate dark palette (#121316/#18191E backgrounds, #1E2026/#23252E
  surfaces, #2C2F38/#353842 borders, #38bdf8/#0ea5e9 accents) applied via
  app-wide QSS and QPalette; all icons are drawn programmatically with
  QPainter so the binary ships without asset files.

Keyboard shortcuts: Ctrl+1..4 focus tile, Ctrl+T add tile, Ctrl+W close
tile, Ctrl+R reload, F11 fullscreen, Ctrl+K quick launcher, Ctrl+, provider
settings, Ctrl+Q quit.

Build: ./build.sh (CMake >= 3.21, Qt 6.6+, C++20). Includes a desktop file
for system installation and a README covering usage and data locations.
2026-10-18 15:13:44 +02:00
packaging Initial release: native multi-view AI workspace (frameless multi-browser GUI) 2026-10-18 15:13:44 +02:00
src Initial release: native multi-view AI workspace (frameless multi-browser GUI) 2026-10-18 15:13:44 +02:00
.gitignore Initial release: native multi-view AI workspace (frameless multi-browser GUI) 2026-10-18 15:13:44 +02:00
build.sh Initial release: native multi-view AI workspace (frameless multi-browser GUI) 2026-10-18 15:13:44 +02:00
CMakeLists.txt Initial release: native multi-view AI workspace (frameless multi-browser GUI) 2026-10-18 15:13:44 +02:00
README.md Initial release: native multi-view AI workspace (frameless multi-browser GUI) 2026-10-18 15:13:44 +02:00

OmniGrid

Native multi-view AI workspace — a frameless multi-browser desktop app that shows several AI chat sessions (ChatGPT, Claude, Perplexity, Gemini, local WebUIs, …) side by side in resizable split/grid layouts.

Built with C++20 / Qt 6 (Widgets + QtWebEngineWidgets) and CMake.

OmniGrid C++20

Features

  • Frameless window with custom titlebar (40 px): app icon, centered workspace title, quick-add + button, layout preset menu, and minimize / maximize / close controls (close turns red on hover, all with animated hover states). Dragging the titlebar moves the window, double-click toggles maximize, all window edges/corners resize with proper cursors.
  • Layout engine — nested QSplitter grids: 1×1, 1×2, 2×1, 2×2 and an auto-fit mode; every row/column is freely resizable by dragging the splitter handles (flex ratios are preserved across relayouts).
  • View tiles — each tile is a card with a slim 26 px header: favicon + title, back / forward / reload / mute / unload(zZ) / close buttons, and a 1.5 px cyan accent border marking the active tile. Unloading suspends the page (frees CPU) and dims it with an overlay; any navigation wakes it.
  • Session & cookie isolation — per tile: Shared (one persistent profile), Isolated (per-tile persistent cookie/cache storage) or Private (in-memory only). Chosen per session from the launcher.
  • Workspace persistence — open tiles, their session modes, the layout and splitter ratios are saved on quit (and on every change) to workspace.json. On the next start the same AI sessions are restored, each loading its provider's home page. Isolated profiles keep their storage keys stable, so logins survive restarts.
  • Configurable providers — gear button in the titlebar (or Ctrl+,) opens the provider manager: rename/re-point/hide the built-ins and add your own (name, URL, accent color), e.g. local WebUIs. Everything is persisted to providers.json and immediately available in the quick launcher.
  • Quick launcher (Ctrl+K) — type to filter all configured AI services (ChatGPT, Claude, Perplexity, Gemini, Grok, DeepSeek, Le Chat, HuggingChat, Copilot, plus your own) or enter any URL; choose target tile and session mode; layout presets included.
  • Keyboard-first: Ctrl+1..4 focus tile, Ctrl+T add tile, Ctrl+W close tile, Ctrl+R reload, F11 fullscreen, Ctrl+, provider settings, Ctrl+Q quit.

Build

./build.sh            # configure + build (Release) into build/
./build/omnigrid      # run

Requirements: Qt 6.6+ with qt6-base, qt6-tools, qt6-webengine, qt6-webchannel (on Arch: pacman -S qt6-base qt6-tools qt6-webengine), CMake ≥ 3.21 and a C++20 compiler.

Project layout

src/
├── main.cpp                  app bootstrap
├── theme/                    palette, dark QSS, QPainter icons, HoverButton
├── app/
│   ├── MainWindow            frameless window, edge-resize, shortcuts
│   └── TitleBar              custom titlebar + window controls
└── views/
    ├── GridContainer         splitter grid engine + empty-cell placeholders
    ├── TileWidget            web tile (slim header + QWebEngineView)
    ├── ProfileManager        shared / isolated / private QWebEngineProfiles
    ├── QuickLauncher         Ctrl+K command palette
    └── ServiceRegistry       predefined AI services

Notes

  • Web session data lives under ~/.local/share/OmniGrid/OmniGrid/profiles/ (shared/, isolated-tN/); workspace state in workspace.json, provider configuration in providers.json (same directory). Private sessions never touch the disk.
  • A desktop file is provided in packaging/omnigrid.desktop.
  • If your desktop environment binds Ctrl+K globally (some KDE setups do), use the + button or Ctrl+T to open the same launcher.