← All posts

Tutorials

Customize ChatGPT / Claude / Gemini UI — wider chats, better fonts, hide upsells

You spend 4 hours a day in ChatGPT, Claude or Gemini. Each one's default UI makes choices aimed at the newcomer: narrow message bubbles (~700px on a 1920px monitor), thin sans-serif in code blocks (you squint to tell l from 1), "Upgrade to Pro" banner begging for a subscription. All fixable in 5 minutes with JustZix. CSS rules + JS observers, saved once, work forever. No tracking, no accounts, no "powered by" gimmicks.

ChatGPT (chat.openai.com / chatgpt.com) — 3 CSS rules

Domain match: *://chatgpt.com/* and *://chat.openai.com/* (legacy domain).

1. Wider message bubbles (max-width 1200px)

/* ChatGPT default: max-width ~768px. Power user on 1080p+ = wasted */
.text-message, [data-message-author-role] > div {
  max-width: min(1200px, 92vw) !important;
}
/* Prompt input container too */
form .stretch, form[data-type="unified-composer"] {
  max-width: min(1200px, 92vw) !important;
}

2. Monospace for code blocks (Fira Code with ligatures)

pre code, code, .markdown code, .prose code {
  font-family: 'Fira Code', 'JetBrains Mono', ui-monospace, monospace !important;
  font-variant-ligatures: contextual !important;
  font-size: 14px !important;
  line-height: 1.6 !important;
}
/* Bigger padding inside code blocks = easier reading */
pre {
  padding: 16px !important;
  border-radius: 8px !important;
}

3. Hide "Upgrade to Plus" banner + suggestion chips

/* Banner at top of sidebar "Upgrade your plan" */
nav a[href*="upgrade"], nav button[aria-label*="Upgrade"],
[data-testid="upgrade-button"], [class*="upgrade-banner"] {
  display: none !important;
}
/* Suggested prompts grid above the input — clutter for power users */
[class*="suggestions"], [class*="prompt-card"] {
  display: none !important;
}

Claude.ai — wide chat + keep the sidebar

Domain: *://claude.ai/*. Claude defaults to a 720px max-width chat even on 4K. Let's fix it:

/* Main conversation area */
.h-screen [class*="max-w-"], main [class*="max-w-3xl"],
[data-testid="conversation"] > div {
  max-width: min(1180px, 90vw) !important;
}
/* Code blocks — Claude already has monospace, but too small and no ligatures */
pre, code {
  font-family: 'Fira Code', 'JetBrains Mono', ui-monospace, monospace !important;
  font-variant-ligatures: contextual !important;
}
pre {
  font-size: 13px !important;
  line-height: 1.55 !important;
}
/* Artifact panel (right side panel) wider when open */
[data-testid="artifact-panel"] {
  width: 50% !important;
  min-width: 600px !important;
}

Bonus: Ctrl+Enter sends the message (default Enter = newline in Claude's textarea). If you prefer just Enter:

// JS rule on claude.ai
document.addEventListener('keydown', (e) => {
  if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && e.target.tagName === 'TEXTAREA') {
    // Only when the textarea has any text (allows Enter in empty textarea)
    if (e.target.value.trim()) {
      e.preventDefault();
      const sendBtn = document.querySelector('button[aria-label*="end"], button[type="submit"]');
      if (sendBtn) sendBtn.click();
    }
  }
}, true);

Gemini (gemini.google.com) — least forgivable default

Domain: *://gemini.google.com/*. Gemini has the worst default — chat boxed into ~640px on a 4K, with low contrast.

/* Wider chat */
[class*="conversation-container"], chat-window, main {
  max-width: min(1240px, 92vw) !important;
}
[class*="user-query"], [class*="model-response"] {
  max-width: 100% !important;
}

/* Better text contrast — Gemini default is #5f6368 on #ffffff (3.5:1, fails WCAG AA) */
.markdown, [class*="response-content"] {
  color: #202124 !important;
}

/* Code block colours — Gemini has low-contrast syntax highlighting */
pre code .keyword, pre code .token.keyword { color: #d73a49 !important; }
pre code .string,  pre code .token.string  { color: #032f62 !important; }
pre code .comment, pre code .token.comment { color: #6a737d !important; font-style: italic !important; }

Use case 1 — TOGGLE3 to switch width

Sometimes narrow (you're reading long-form), sometimes wide (code). TOGGLE3 with 3 states:

// Action TOGGLE3 "📐 Width"
states[0] = { label: 'Narrow', value: '760' }
states[1] = { label: 'Wide',   value: '1180' }
states[2] = { label: 'Max',    value: '92vw' }

// Code:
document.documentElement.style.setProperty('--jz-chat-width',
  value.endsWith('vw') ? value : value + 'px');

And the CSS rule uses that variable:

main, [class*="conversation"] {
  max-width: var(--jz-chat-width, 1180px) !important;
}

3 clicks = 3 widths. Per-domain memory keeps your last choice.

Use case 2 — SLIDER for font-size control

Code blocks too small = squinting. SLIDER 10-20px:

// Action SLIDER "🔤 Code size"
min: 10, max: 20, step: 1, defaultValue: 14, unit: 'px'

code: |
  document.documentElement.style.setProperty('--jz-code-size', value + 'px');

CSS rule:

pre, code, pre code { font-size: var(--jz-code-size, 14px) !important; }

Drag the slider → live preview. Perfect during screen-share with your team (zoom up to 18-20px, easy to read from a distance).

Use case 3 — Output Console as a prompt journal

Very specific power-user trick: log every message you send to Output Console for a prompt history:

// JS rule
const observer = new MutationObserver((mutations) => {
  for (const m of mutations) {
    for (const node of m.addedNodes) {
      if (node.nodeType !== 1) continue;
      const userMsg = node.matches('[data-message-author-role="user"]')
        ? node : node.querySelector('[data-message-author-role="user"]');
      if (userMsg && !userMsg.dataset.jzLogged) {
        userMsg.dataset.jzLogged = '1';
        const txt = userMsg.textContent.trim().slice(0, 200);
        JUSTZIX.log(`[prompt] ${txt}${txt.length === 200 ? '…' : ''}`);
      }
    }
  }
});
observer.observe(document.body, { childList: true, subtree: true });
JUSTZIX.info('Prompt journal active.');

Open an Output Console pane snapped to the side → you see history of your prompts (truncated to 200 chars). Copy-paste to a document at end of day. Zero off-server tracking.

Pitfalls

What's next

The 3 most-used AI chat apps, one JustZix setup per app. Check also related:

Install JustZix — paste the rules from this post and AI chat apps will look exactly how you want them. No account, no server, no tracking.

Rate this post

No ratings yet — be the first.

Try it yourself

Install JustZix and paste any snippet from this article. Two minutes from zero to a working rule across all your devices.

Get JustZix

Features · How it works · Examples · Use cases