Skip to content

fix(frontend): stop hero grid columns overflowing on narrow viewports - #1874

Merged
LucasSantana-Dev merged 3 commits into
mainfrom
fix/landing-hero-grid-overflow
Jul 27, 2026
Merged

LucasSantana-Dev merged 3 commits into
mainfrom
fix/landing-hero-grid-overflow

Conversation

@reag-dev

@reag-dev reag-dev commented Jul 24, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Both Hero grid items (headline column and RepoCard column) lacked min-w-0, so CSS Grid's default min-width:auto kept them from shrinking below their content. The RepoCard's git-clone block used truncate (white-space:nowrap) inside a flex row without min-w-0, giving it a ~500px intrinsic minimum that inflated the shared grid track below the lg breakpoint and pushed the headline column past the viewport width.

Adds min-w-0 to both grid item wrappers and min-w-0 flex-1 to the clone element so it actually truncates. Verified with headless Playwright across 320-1280px viewports: no horizontal overflow left.

Checklist

  • [ X ] Tests pass locally
  • [ X ] CHANGELOG.md updated (if user-facing)
  • [ X ] TypeScript builds cleanly

Closes issue #1825


Summary by cubic

Fixes #1825 by preventing the landing hero grid from overflowing on small screens. Lets both columns and the clone command shrink, removing horizontal scroll.

  • Bug Fixes
    • Add min-w-0 to both hero grid item wrappers.
    • Make the clone <code> element min-w-0 flex-1 so truncate works inside the flex row.

Written for commit 92daa49fd63697acf630a8a242246ace247a15f2. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Bug Fixes
    • Improved layout behavior in the landing page hero and repository card to better support shrinking/truncation.
    • Long “git clone” commands now truncate correctly instead of overflowing their container.

Both Hero grid items (headline column and RepoCard column) lacked
min-w-0, so CSS Grid's default min-width:auto kept them from shrinking
below their content. The RepoCard's git-clone <code> block used
`truncate` (white-space:nowrap) inside a flex row without min-w-0,
giving it a ~500px intrinsic minimum that inflated the shared grid
track below the lg breakpoint and pushed the headline column past the
viewport width.

Adds min-w-0 to both grid item wrappers and min-w-0 flex-1 to the
clone <code> element so it actually truncates. Verified with headless
Playwright across 320-1280px viewports: no horizontal overflow left.
@coderabbitai

coderabbitai Bot commented Jul 24, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The Landing page adds min-w-0 to Hero and repository card motion containers, and adds min-w-0 flex-1 to the repository clone command’s code element.

Changes

Landing layout updates

Layer / File(s) Summary
Constrain Landing content sizing
packages/frontend/src/pages/Landing.tsx
Hero and repository card wrappers now use min-w-0; the clone command uses min-w-0 flex-1 alongside truncate.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The change addresses #1825 by fixing mobile landing-page overflow in the hero area and improving truncation behavior.
Out of Scope Changes check ✅ Passed No unrelated changes are evident; the edits are narrowly focused on responsive overflow fixes in Landing.tsx.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: fixing hero grid overflow on narrow viewports in the frontend.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/landing-hero-grid-overflow

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Failed to generate code suggestions for PR

@github-actions

github-actions Bot commented Jul 24, 2026 •

Copy link
Copy Markdown
Warnings
⚠️

User-facing change without a CHANGELOG.md update. Add a line under ## [Unreleased] if this should appear in release notes. (Or apply the skip-changelog label if this PR does not affect end users.)

Generated by 🚫 dangerJS against 92daa49

@github-actions

Copy link
Copy Markdown

Size Change: -2 B (0%)

Total Size: 497 kB

📦 View Changed
Filename Size Change
packages/frontend/dist/assets/AddStyledRoleForm-BEE2ZCF7.js 0 B -3.11 kB (removed) 🏆
packages/frontend/dist/assets/AddStyledRoleForm-qKgxe9ID.js 3.11 kB +3.11 kB (new file) 🆕
packages/frontend/dist/assets/Admin-BAlyP75U.js 0 B -2.3 kB (removed) 🏆
packages/frontend/dist/assets/Admin-Dkvy34dz.js 2.3 kB +2.3 kB (new file) 🆕
packages/frontend/dist/assets/AdminSupport-B3yWnPN_.js 0 B -1.6 kB (removed) 🏆
packages/frontend/dist/assets/AdminSupport-BG__rh2J.js 1.6 kB +1.6 kB (new file) 🆕
packages/frontend/dist/assets/AutoMessages-cnO6mn_s.js 0 B -2.65 kB (removed) 🏆
packages/frontend/dist/assets/AutoMessages-DK7GD_Zw.js 2.65 kB +2.65 kB (new file) 🆕
packages/frontend/dist/assets/AutoMod-BeWPhKNW.js 4.19 kB +4.19 kB (new file) 🆕
packages/frontend/dist/assets/AutoMod-mWrO1a7t.js 0 B -4.19 kB (removed) 🏆
packages/frontend/dist/assets/badge-BZJ32zOT.js 505 B +505 B (new file) 🆕
packages/frontend/dist/assets/badge-QDMYdkSz.js 0 B -504 B (removed) 🏆
packages/frontend/dist/assets/BatchJobs-DnuWs00p.js 0 B -3.71 kB (removed) 🏆
packages/frontend/dist/assets/BatchJobs-rMGGTqMS.js 3.72 kB +3.72 kB (new file) 🆕
packages/frontend/dist/assets/Card-Dj2Rv1aK.js 0 B -506 B (removed) 🏆
packages/frontend/dist/assets/Card-FteFZP7L.js 507 B +507 B (new file) 🆕
packages/frontend/dist/assets/Changelog-WHkn-vAt.js 59.1 kB +59.1 kB (new file) 🆕
packages/frontend/dist/assets/Changelog-z-E2YtuQ.js 0 B -59.1 kB (removed) 🏆
packages/frontend/dist/assets/CommandsConfig-BAHmiUpf.js 0 B -1.5 kB (removed) 🏆
packages/frontend/dist/assets/CommandsConfig-ixMSf6gH.js 1.5 kB +1.5 kB (new file) 🆕
packages/frontend/dist/assets/Config-BWd5cw5Y.js 0 B -1.91 kB (removed) 🏆
packages/frontend/dist/assets/Config-Fc_426li.js 1.91 kB +1.91 kB (new file) 🆕
packages/frontend/dist/assets/CustomCommands-CHdZU1IF.js 0 B -2.12 kB (removed) 🏆
packages/frontend/dist/assets/CustomCommands-sbChOprl.js 2.12 kB +2.12 kB (new file) 🆕
packages/frontend/dist/assets/DashboardOverview-BGGmQj-4.js 0 B -3.95 kB (removed) 🏆
packages/frontend/dist/assets/DashboardOverview-BSTVo2Va.js 3.95 kB +3.95 kB (new file) 🆕
packages/frontend/dist/assets/dialog-DsE8yc0c.js 959 B +959 B (new file) 🆕
packages/frontend/dist/assets/dialog-wLg2sHqY.js 0 B -959 B (removed) 🏆
packages/frontend/dist/assets/Docs-CRRiJJIG.js 0 B -17.6 kB (removed) 🏆
packages/frontend/dist/assets/Docs-YkfA11Gs.js 17.6 kB +17.6 kB (new file) 🆕
packages/frontend/dist/assets/DocsShell-DbutxEHV.js 1.42 kB +1.42 kB (new file) 🆕
packages/frontend/dist/assets/DocsShell-DVgdj2Zt.js 0 B -1.42 kB (removed) 🏆
packages/frontend/dist/assets/EmbedBuilder-D7_tpCxe.js 0 B -3.28 kB (removed) 🏆
packages/frontend/dist/assets/EmbedBuilder-DgzkqDfl.js 3.28 kB +3.28 kB (new file) 🆕
packages/frontend/dist/assets/Features-Bu3hbyn6.js 756 B +756 B (new file) 🆕
packages/frontend/dist/assets/Features-Y5is7DHA.js 0 B -756 B (removed) 🏆
packages/frontend/dist/assets/GuildAutomation-DGLYVcC8.js 2.88 kB +2.88 kB (new file) 🆕
packages/frontend/dist/assets/GuildAutomation-DYEzbkp8.js 0 B -2.89 kB (removed) 🏆
packages/frontend/dist/assets/index-CHILfJWI.js 70.9 kB +70.9 kB (new file) 🆕
packages/frontend/dist/assets/index-D7U7iXN7.js 0 B -70.9 kB (removed) 🏆
packages/frontend/dist/assets/input-Cffgk108.js 0 B -464 B (removed) 🏆
packages/frontend/dist/assets/input-DqA_O444.js 466 B +466 B (new file) 🆕
packages/frontend/dist/assets/label-BUTtvo-W.js 0 B -475 B (removed) 🏆
packages/frontend/dist/assets/label-BwgfwvLm.js 475 B +475 B (new file) 🆕
packages/frontend/dist/assets/Landing-DICWCzDp.js 5.21 kB +5.21 kB (new file) 🆕
packages/frontend/dist/assets/Landing-iBRJW67X.js 0 B -5.2 kB (removed) 🏆
packages/frontend/dist/assets/LastFm-CFuqs3KO.js 0 B -1.74 kB (removed) 🏆
packages/frontend/dist/assets/LastFm-CWxLfgmT.js 1.74 kB +1.74 kB (new file) 🆕
packages/frontend/dist/assets/Levels-BQFeK-4I.js 0 B -2.27 kB (removed) 🏆
packages/frontend/dist/assets/Levels-ByPEUEuR.js 2.27 kB +2.27 kB (new file) 🆕
packages/frontend/dist/assets/Login-BXGqqK3d.js 0 B -2.5 kB (removed) 🏆
packages/frontend/dist/assets/Login-KiXTHlwM.js 2.5 kB +2.5 kB (new file) 🆕
packages/frontend/dist/assets/Lyrics-BeGnpERT.js 0 B -1.34 kB (removed) 🏆
packages/frontend/dist/assets/Lyrics-DJVJVYTF.js 1.34 kB +1.34 kB (new file) 🆕
packages/frontend/dist/assets/Moderation-CMjDMybp.js 0 B -3.78 kB (removed) 🏆
packages/frontend/dist/assets/Moderation-Diep5NVc.js 3.77 kB +3.77 kB (new file) 🆕
packages/frontend/dist/assets/Music-CS9qn6xx.js 0 B -5.96 kB (removed) 🏆
packages/frontend/dist/assets/Music-CZRQsqeY.js 5.97 kB +5.97 kB (new file) 🆕
packages/frontend/dist/assets/MusicConfig-B9rxwALm.js 0 B -1.68 kB (removed) 🏆
packages/frontend/dist/assets/MusicConfig-wpLHxgVl.js 1.68 kB +1.68 kB (new file) 🆕
packages/frontend/dist/assets/PreferredArtists-CJGrAtBc.js 0 B -3.72 kB (removed) 🏆
packages/frontend/dist/assets/PreferredArtists-CK_Zuxr-.js 3.72 kB +3.72 kB (new file) 🆕
packages/frontend/dist/assets/PrivacyPolicy-DbAeCrob.js 1.77 kB +1.77 kB (new file) 🆕
packages/frontend/dist/assets/PrivacyPolicy-heFcIEhC.js 0 B -1.77 kB (removed) 🏆
packages/frontend/dist/assets/ReactionRoles-BwvIgtIb.js 0 B -7.04 kB (removed) 🏆
packages/frontend/dist/assets/ReactionRoles-CRAqt9Np.js 7.04 kB +7.04 kB (new file) 🆕
packages/frontend/dist/assets/RoleGroups-BlLjO3-G.js 2.24 kB +2.24 kB (new file) 🆕
packages/frontend/dist/assets/RoleGroups-D8KWuW4s.js 0 B -2.24 kB (removed) 🏆
packages/frontend/dist/assets/Roles-71pKVMn8.js 3.34 kB +3.34 kB (new file) 🆕
packages/frontend/dist/assets/Roles-Ck0wh3qx.js 0 B -3.34 kB (removed) 🏆
packages/frontend/dist/assets/SectionHeader-BUnL3md4.js 0 B -893 B (removed) 🏆
packages/frontend/dist/assets/SectionHeader-DncMstRT.js 894 B +894 B (new file) 🆕
packages/frontend/dist/assets/select-B4l8i-4d.js 0 B -1.23 kB (removed) 🏆
packages/frontend/dist/assets/select-CaLcr8hI.js 1.23 kB +1.23 kB (new file) 🆕
packages/frontend/dist/assets/ServerLogs-BZDZaAGg.js 3.04 kB +3.04 kB (new file) 🆕
packages/frontend/dist/assets/ServerLogs-DiOMLjGI.js 0 B -3.04 kB (removed) 🏆
packages/frontend/dist/assets/ServerSettings-D-IritVe.js 0 B -3.99 kB (removed) 🏆
packages/frontend/dist/assets/ServerSettings-zaT_kHxw.js 3.98 kB +3.98 kB (new file) 🆕
packages/frontend/dist/assets/ServersPage-BM9ARsjx.js 0 B -3.04 kB (removed) 🏆
packages/frontend/dist/assets/ServersPage-DCw2KfUj.js 3.04 kB +3.04 kB (new file) 🆕
packages/frontend/dist/assets/Skeleton-CgHXQU2m.js 235 B +235 B (new file) 🆕
packages/frontend/dist/assets/Skeleton-QB6rjqS_.js 0 B -235 B (removed) 🏆
packages/frontend/dist/assets/Spotify-jJiLhEa6.js 1.75 kB +1.75 kB (new file) 🆕
packages/frontend/dist/assets/Spotify-wB84LvpX.js 0 B -1.75 kB (removed) 🏆
packages/frontend/dist/assets/Starboard-9lW5r96x.js 1.82 kB +1.82 kB (new file) 🆕
packages/frontend/dist/assets/Starboard-D5-AAVLe.js 0 B -1.82 kB (removed) 🏆
packages/frontend/dist/assets/StatTile-CiQoyUlc.js 0 B -639 B (removed) 🏆
packages/frontend/dist/assets/StatTile-MpnSwgh9.js 639 B +639 B (new file) 🆕
packages/frontend/dist/assets/Support-5xZEEYBD.js 0 B -1.56 kB (removed) 🏆
packages/frontend/dist/assets/Support-D_eiA6KH.js 1.55 kB +1.55 kB (new file) 🆕
packages/frontend/dist/assets/switch-Bl_yAhXD.js 544 B +544 B (new file) 🆕
packages/frontend/dist/assets/switch-BZvcGQLc.js 0 B -544 B (removed) 🏆
packages/frontend/dist/assets/TermsOfService-B9TKsJwx.js 0 B -1.6 kB (removed) 🏆
packages/frontend/dist/assets/TermsOfService-CyBpC1CZ.js 1.6 kB +1.6 kB (new file) 🆕
packages/frontend/dist/assets/TrackHistory-B8rRFWbD.js 2.31 kB +2.31 kB (new file) 🆕
packages/frontend/dist/assets/TrackHistory-sZ1yS5P5.js 0 B -2.31 kB (removed) 🏆
packages/frontend/dist/assets/TwitchNotifications-CSX6S_9R.js 2.43 kB +2.43 kB (new file) 🆕
packages/frontend/dist/assets/TwitchNotifications-W2fIZ4_q.js 0 B -2.43 kB (removed) 🏆
packages/frontend/dist/assets/useActiveHeading-CMx_mJ-e.js 1.36 kB +1.36 kB (new file) 🆕
packages/frontend/dist/assets/useActiveHeading-DGTUjzUB.js 0 B -1.36 kB (removed) 🏆
packages/frontend/dist/assets/useFeatures-_x2nF1jG.js 2.06 kB +2.06 kB (new file) 🆕
packages/frontend/dist/assets/useFeatures-CFYiGOAO.js 0 B -2.06 kB (removed) 🏆
ℹ️ View Unchanged
Filename Size
packages/frontend/dist/assets/api-CtLilru1.js 4 kB
packages/frontend/dist/assets/index-DY6JagVQ.css 17.6 kB
packages/frontend/dist/assets/legalNav-B6k3CWsW.js 274 B
packages/frontend/dist/assets/rolldown-runtime-Cyuzqnbw.js 471 B
packages/frontend/dist/assets/routeMeta-BZjtwMbs.js 595 B
packages/frontend/dist/assets/sentry-DhXOA89y.js 3.76 kB
packages/frontend/dist/assets/usePageMetadata-DTv-6eVb.js 327 B
packages/frontend/dist/assets/vendor-forms-C-bof8GF.js 25.9 kB
packages/frontend/dist/assets/vendor-radix-qkfmDH9H.js 39.9 kB
packages/frontend/dist/assets/vendor-react-B7C34xnu.js 55.7 kB
packages/frontend/dist/assets/vendor-state-Kvbn3gqw.js 25.2 kB
packages/frontend/dist/assets/vendor-ui-BBN61NBD.js 66.2 kB

compressed-size-action

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 1 file

Auto-approved: CSS-only fix adding min-w-0 to grid items and code element to stop grid overflow. Bounded, clearly beneficial layout fix with no operational or behavioral side effects.

Re-trigger cubic

LucasSantana-Dev added a commit that referenced this pull request Jul 26, 2026
CI runs `npm ci --legacy-peer-deps --ignore-scripts` on npm 11.16.0, which
re-resolves in-range ranges against the registry and then rejects the lock:

  Invalid: lock file's eslint@10.7.0 does not satisfy eslint@10.8.0
  Invalid: lock file's @eslint/config-helpers@0.6.0 does not satisfy 0.7.0

Nothing in the repo asks for 10.8.0. Those versions were published after the
last lock refresh, and root package.json carries eslint ^10.4.0. Same class
as #1809. Sibling PR #1874 passed this job on 2026-07-24, before the release.

Refreshed with the npm version CI uses, --package-lock-only. Two versions
moved, nothing added, and the six removals are dev-only eslint transitives
under packages/frontend that dedupe now that frontend and root agree.

axios stays nested at packages/shared/node_modules, so the Dockerfile fix in
this PR is still required.

@LucasSantana-Dev LucasSantana-Dev left a comment •

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this, Renan. Nice catch on the root cause: flex items default to min-width: auto and refuse to shrink below their content, which is why the truncate further down was silently doing nothing. min-w-0 on the flex child is the right fix, and adding flex-1 to the <code> so it actually claims the row is the correct companion change. Happy with it as-is.

One thing to be aware of before we merge, and it's a coordination problem on my side rather than anything you did:

#1865 touches the same element. It also edits the RepoCard <code> in Landing.tsx:

  • yours: min-w-0 flex-1 truncate text-lucky-text-body
  • #1865: min-w-0 truncate text-lucky-text-body

They'll conflict, and #1865's version drops flex-1. If that one lands second we'd quietly lose part of your fix, so I'll sequence these deliberately and make sure flex-1 survives.

On the red checks: none of them are yours. Security was a repo-wide gate that could never pass (it audited devDependencies and one production chain has no fix at all), and kimi-review fails on every PR in the repo because an API key isn't set. I've fixed the first in #1876 and filed #1877 for the second. Once #1876 lands, a rebase should get you green with no changes here.

@LucasSantana-Dev

Copy link
Copy Markdown
Owner

Heads-up: the CI blockers I mentioned are fixed on main now (#1876, merged as ca410d2c).

What that clears:

  • Security — it ran npm audit --audit-level=high across devDependencies and could never pass, which is why it was red on every PR including this one. It now audits production deps only, with an explicit allowlist pinned to individual advisory ids.
  • npm ci / Build — shared / Quality Gates — main's lockfile was stale and npm@12's stricter ci rejected it (lock file's eslint@10.7.0 does not satisfy eslint@10.8.0). Resynced.
  • compressed-size — it installs the base branch too, so it was failing on main's lockfile rather than on your changes.
  • kimi-review — removed in ci: remove kimi-review until an api key is set #1884; the API key was never set, so it failed on every PR in the repo.

Please rebase onto main and push. The auto-update workflow only touches branches whose authors enabled auto-merge, so it deliberately won't rewrite yours. A rebase should turn the checks green without any change to your code.

The review feedback above is separate and still stands.

@LucasSantana-Dev LucasSantana-Dev left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: approve with nits

The CSS mechanics are correct and precisely targeted at the root cause, matching an established codebase idiom.

P2 — missing regression test: no automated coverage for a bug that already shipped once (#1825 is still open). The repo has the exact infrastructure — a Playwright e2e suite with tests/e2e/responsive.spec.ts — but nothing asserts document.documentElement.scrollWidth <= window.innerWidth on the landing route (the responsive suite only covers authenticated dashboard pages). The PR's "verified with headless Playwright" check isn't committed anywhere, so the next hero edit can silently regress. A ~10-line spec asserting no horizontal overflow at 320/375/768px would close the loop.

P3 (nit): Landing.tsx:477 — truncating the clone command means the full URL is unreadable on narrow viewports. The adjacent copy button (handleCopy writes the full command) mitigates this, so a title attribute is optional polish.

What's good: root-cause fix, not a symptom patch — grid items default to min-width: auto, and truncate (white-space: nowrap) inside the flex row gave the <code> an intrinsic minimum it could never shrink below; min-w-0 on both grid items plus min-w-0 flex-1 on the code element breaks exactly that chain (the flex-1 is the detail people usually miss). No prop-ordering hazard: className='min-w-0' precedes the animation spreads and neither contains a className key. Follows the codebase's own idiom (27+ existing min-w-0 flex-1 uses), and the rest of RepoCard has no other wide children.

@LucasSantana-Dev

Copy link
Copy Markdown
Owner

A note from the maintainer side: sorry this PR waited as long as it did for a proper review, and sorry for the rounds of branch updates and re-running checks today. The churn was on our side, not yours.

Your PRs exposed real gaps in how this repo handled external contributions: CI runs sat in a silent approval queue, some gates could never pass on fork PRs (SonarCloud, danger), and the team had no notification when external PRs arrived. Those are all fixed as of today:

  • CI auto-approves for returning contributors, no more waiting on a manual click.
  • All gates now pass on fork PRs (SonarCloud skips gracefully without a token, danger runs and comments correctly).
  • The team gets notified the moment an external PR is opened.

Your branch is up to date and the full suite is green. Thanks for the patience and for the contribution. External contributors are very welcome here.

@sonarqubecloud

Copy link
Copy Markdown

@LucasSantana-Dev
LucasSantana-Dev merged commit ce5cea0 into main Jul 27, 2026
42 checks passed
@LucasSantana-Dev
LucasSantana-Dev deleted the fix/landing-hero-grid-overflow branch July 27, 2026 20:33
LucasSantana-Dev added a commit that referenced this pull request Jul 27, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>2.38.0</summary>

##
[2.38.0](v2.37.3...v2.38.0)
(2026-07-27)


### Features

* **bot:** add /ticket-setup for support category and agent role
([#1863](#1863))
([3f4af39](3f4af39))
* **frontend:** per-action loading and connection gating on music
controls
([#1866](#1866))
([2dda60f](2dda60f))
* **frontend:** show stale progress when music SSE lags
([#1867](#1867))
([4952e73](4952e73))
* **music:** surface recommendationReason in nowplaying and queue
([#1864](#1864))
([960fd62](960fd62))
* **ops:** blue/green zero-downtime deploys — Phase 1 web tier
([#1786](#1786))
([f5f7597](f5f7597))


### Bug Fixes

* **docker:** make compose stack boot from a fresh .env
([#1674](#1674))
([babe0ef](babe0ef))
* **docker:** treat an empty db password as missing in compose guards
([#1881](#1881))
([718c0ad](718c0ad))
* **frontend:** make landing page usable at mobile widths
([#1865](#1865))
([6190350](6190350))
* **frontend:** stop hero grid columns overflowing on narrow viewports
([#1874](#1874))
([ce5cea0](ce5cea0))
* **invite:** add /invite where cloudflare pages reads it
([#1895](#1895))
([0528f66](0528f66))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
This was referenced Oct 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants