Chat fills the space next to the sidebar (no more dead strip)

The conversation column was max-w-3xl and centred, which on a 1280 window
left a ~140px empty strip between the rail and the messages - "the chat
cuts off weirdly". It now uses the library's container (max-w-6xl,
lg:px-10) and the composer's content padding matches, so the chat starts
right next to the sidebar and every row shares one left edge.

Contrast 0 findings, chat 102/102, mobile 126/126, i18n 13/13,
native 33/33. Version 0.5.0 (the 0.4.9 rollover), SW -> freezmo-v74.
This commit is contained in:
Martin Dvořák 2026-10-14 08:12:55 +00:00
commit e2676be080
5 changed files with 13 additions and 4 deletions

View file

@ -1411,6 +1411,13 @@ Things I chose while building, with the reasoning:
pre-blurred wallpaper — the scene is clearly visible through the glass, and the
pixel-contrast scan still passes.
83. **The chat fills the space next to the sidebar.** The conversation column was `max-w-3xl`
centred, which on a 1280 window left a ~140px dead strip between the rail and the messages —
"the chat cuts off weirdly". It now uses the library's container (`max-w-6xl`, `lg:px-10`) and
the composer's content is padded to match, so the conversation starts right next to the sidebar
(measured: column left = 268 = the rail's edge at 1280) and every row — messages, table, action
chips, input, chips, note — shares one left edge.
82. **First run offers the choice: free Ollama or a paid provider.** The gate (user-key installs)
now shows Ollama with a "Free" badge as the headline option, and below it an "or · Use a paid
provider instead" button that opens the same provider rows as Settings — with the framing that

View file

@ -599,7 +599,9 @@ export function ChatScreen() {
<div ref={scrollRef} onScroll={onScroll} className="chat-scroll h-full overflow-y-auto overscroll-contain">
<div
className={cn(
"mx-auto w-full max-w-3xl space-y-4 px-4 py-4",
// The same container as the library page: the conversation starts
// right next to the sidebar, not centred in a narrower strip.
"mx-auto w-full max-w-6xl space-y-4 px-4 py-4 lg:px-10 lg:py-6",
messages.length === 0 && "flex min-h-full flex-col justify-center",
)}
>

View file

@ -70,7 +70,7 @@ export function Composer({
const canSend = online && !busy && value.trim().length > 0;
return (
<div className="border-t border-[var(--glass-border)] bg-[var(--glass-bg)] px-3 pb-safe pt-2 backdrop-blur-xl">
<div className="border-t border-[var(--glass-border)] bg-[var(--glass-bg)] px-4 pb-safe pt-2 backdrop-blur-xl lg:px-10">
{attachments.length > 0 ? (
<ul className="mb-2 flex flex-wrap gap-1.5">
{attachments.map((entry, index) => (

View file

@ -1,6 +1,6 @@
{
"name": "freezmo",
"version": "0.4.9",
"version": "0.5.0",
"private": true,
"license": "GPL-3.0-only",
"scripts": {

View file

@ -9,7 +9,7 @@
*
* Bumping CACHE_VERSION is how a new deploy invalidates old assets.
*/
const CACHE_VERSION = "freezmo-v73";
const CACHE_VERSION = "freezmo-v74";
const SHELL_CACHE = `${CACHE_VERSION}-shell`;
const ASSET_CACHE = `${CACHE_VERSION}-assets`;