Let me check your existing seo-editor script first, so the commands I give you fit what's already there.
Readseed-seo-editor.js
You don't need a new script — scripts/seed-seo-editor.js already does exactly this. Since seo@handysquad.in exists in admin_users, it takes the update branch and rotates the password via the Admin API (line 67), which is safer than raw SQL: no plaintext in query history, and it goes through GoTrue properly.
Local DB
1. Add these to .env (already gitignored — nothing to commit):
SEO_EMAIL=seo@handysquad.in
SEO_NAME=SEO Engineer
SEO_PASSWORD=<your-new-strong-password>
2. Run it:
node scripts/seed-seo-editor.js
Expected output: SEO editor user updated: seo@handysquad.in (id: …) — password/name refreshed.
Production / hosted Supabase
Your .env points at local (127.0.0.1:54321), so the above only changes the local user. For the real project, put the prod values in a separate gitignored file — say .env.prod — with SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, SEO_EMAIL, SEO_NAME, SEO_PASSWORD, then preload it:
node -r dotenv/config scripts/seed-seo-editor.js dotenv_config_path=.env.prod
Preloading works because dotenv doesn't overwrite variables that are already set, so the script's own .config() call won't pull your local values back in. This keeps the service-role key out of shell history and out of the process list.
Verify
git check-ignore -v .env .env.prod
Then confirm the account row is intact:
SELECT email, role, is_active FROM admin_users WHERE email = 'seo@handysquad.in';
Finally, sign in to the CMS as seo@handysquad.in to confirm the new password works end to end.
Two things to watch
SEO_NAME is overwritten, not preserved. Line 79 updates name, role and is_active alongside the password. Your current row reads SEO Engineer — set SEO_NAME to exactly that unless you want it renamed. It also force-resets role to seo_editor and is_active to true, which is almost certainly what you want, but it's not a password-only operation.
The password must be strong or the script refuses to run. Line 32 enforces 12+ characters with a lowercase, an uppercase, a digit and a symbol — deliberately, because the Admin API bypasses GoTrue's configured policy and these accounts are brute-forceable straight against the auth API.
If you'd rather not touch .env at all, the Dashboard route still works: Authentication → Users → seo@handysquad.in → Reset password.
in web siote ficx tisbug add correct max w and break word ior text o all make teh deisgn correct
Clear bug — that's one unbroken 400-character "word" with no spaces, so it can't wrap and blows out the container. Let me reproduce it locally first, then fix.
Ran 2 commands, used 2 tools
Reproduced, and it's worse than it looks: the unbreakable string stretched the entire page to 5341px against a 1280px viewport — a horizontal scrollbar on the whole site, not just clipped text.
The key detail: overflow-wrap: break-word alone wouldn't fix this, because it doesn't reduce the element's intrinsic min-content width, so the container would still stretch. anywhere does.
Editedglobals.css+17-0
Now the section title, which sits outside .about-content, and the FAQ body for consistency.
Edited 2 files, used a tool+13-2
Edited 2 files
make syer that whar evcer teh contenst or images or whatever adde in teh text editior for that all shoulk be inside teh ciontaner and correct that teh add pr to developemnyt'
Ran page script
Page overflow gone (1280 = 1280), section back to 642px. Now let me stress-test everything the editor can produce — images, wide tables, long URLs, nested lists.
Ran 3 commands, used 2 tools
Everything is contained and the page no longer overflows. But the image didn't load, so that case isn't actually proven — let me check.
Ran a command, used a tool
That's loading="lazy" doing its job — the image is below the fold. Let me scroll it into view to force the load and measure a real rendered image.
Used 2 tools
A 1440px image now renders at exactly 594px with aspect ratio preserved. Let me confirm mobile too.
Used 2 tools
Page holds at 375px with no overflow. The THEAD/TR exceeding 343px are inside the table — let me confirm the table scrolls internally rather than breaking the page.
Ran page script
Table fits the container (343px) and scrolls internally (411px content) — correct: wide tables scroll in their own box instead of breaking the page.
Restoring the demo content and reverting the viewport.
Ran 3 commands, used a tool
Lint clean (only the pre-existing dangerouslySetInnerHTML warning, same as the sibling FAQ component). Committing and pushing to the open PR.
Ran 3 commands (1 failed)
PR Handy-sQuad/hq-website-2025#317 is already merged — you merged it while I was working. I need to check whether my overflow fix made it in, or landed on the branch after the merge.
Checked if overflow fix reached development
Confirmed — PR Handy-sQuad/hq-website-2025#317 merged at 11:15 with only the original commit 5e4afe9. My overflow fix 9fe0ec3 is not in development — it landed on the branch after you merged. It needs its own PR.
Ran 3 commands
Fixed and raised — but one thing you need to know:
You merged PR Handy-sQuad/hq-website-2025#317 before my fix landed, so the overflow fix was stranded on the already-merged branch. I've put it on a fresh branch off the updated development and opened hq-website-2025#319. Without that, the fix would never have reached development.
The bug
Not just clipped text — an unbroken run with no spaces also sets the element's min-content width, so it stretched the section and gave the entire site a horizontal scrollbar. Your 400-character Seo@12345678… string pushed the document to 5341px against a 1280px viewport.
The important subtlety: overflow-wrap: break-word would not have fixed this. It wraps the text but doesn't reduce intrinsic min-content width, so the container still stretches. Only anywhere does both. break-word is kept ahead of it as the older-Safari fallback.
Verified in the browser, desktop and mobile
Case | Result |
|---|
400-char unbroken token | page 1280px, no overflow (was 5341px) |
200-char bare URL | wraps inside container |
Long unbroken title | wraps; 343px on mobile |
1440px image | renders at 594px, aspect preserved |
12-column table | fits container, scrolls in its own box |
Nested lists, blockquote | contained |
At 375px the page holds at exactly 375px with no child escaping its container.
I also applied the same guard to FAQ answers — same editor, same exposure, same latent bug.
Two notes:
I did not add an automated test for this. Overflow is a layout property and the website repo has no browser-based test runner (vitest/jsdom computes no layout), so a unit test would assert nothing real. The verification above is browser measurement, which is why I've put the numbers in the PR.
Your (77,1) "About AC Annual Maintenance Plans" content is untouched. I restored the Kochi demo row after stress-testing, and stopped the dev server on 7702.
Open PRs: website#319 (this fix), hq-cms#162 (CMS feature), hq-cms#163 (login fix).