Files
devplacepy/pyproject.toml
T
retoorandClaude Sonnet 5 d88b3cea8e Make sticky sidebar/rail columns independently scrollable
Every sidebar/rail column across the app (feed's left filter panel and
right rail, post detail's left/right rails, profile's sidebar, the
leaderboard's two rails, the dashboard sidebar, and the DeepSearch
citations pane) is `position: sticky` with no max-height or overflow
of its own. When a column's content is taller than the viewport, it
doesn't scroll with the page while pinned - it renders past the
bottom of the screen, unreachable until it "un-sticks" and flies past
during a fast page scroll. Confirmed live: the docs nav sidebar alone
is ~4300px of links against a ~900px viewport.

Each sticky column now gets a max-height matched to its own top
offset, `overflow-y: auto`, `overscroll-behavior: contain`, and a
hidden scrollbar (scrollbar-width/-ms-overflow-style/::-webkit-
scrollbar), the same invisible-scroll recipe already used by the
messages page. Purely additive CSS - no template changes, since every
target already had a distinguishing class.

Fixing the shared `.sidebar-card` component in sidebar.css covers
feed, admin, docs, gists, projects, battles, quizzes, and every
/tools/* page in one place. Also caught and fixed a latent bug along
the way: post.css already neutralized nested `.sidebar-card`s inside
`.post-page-sidebar` (position: static) to stop them independently
double-sticking, but the identical setup on the quiz page
(`.feed-right` wrapping the scoreboard's two `.sidebar-card`s) never
got that override - added the matching `.feed-right .sidebar-card`
rule.

Verified live with Playwright at a squeezed viewport height on feed,
post, profile, leaderboard, docs, and the quiz scoreboard: every
column's scrollTop reaches its true end independently, the center
column never moves, and no scrollbar is visible in any screenshot.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vnp7vzE4hvsytMo5YjszJm
2026-09-08 20:48:54 +02:00

62 lines
1.3 KiB
TOML

[project]
name = "devplacepy"
version = "1.0.11"
description = "DevPlace - The Developer Social Network"
requires-python = ">=3.12"
dependencies = [
"fastapi",
"uvicorn[standard]",
"jinja2",
"python-multipart",
"dataset",
"passlib[bcrypt]",
"python-dotenv",
"aiofiles",
"httpx[http2]",
"curl_cffi",
"brotli",
"zstandard",
"cryptography",
"PyJWT",
"multiavatar",
"locust",
"Pillow",
"imagehash",
"uuid_utils",
"mistune",
"emoji",
"pypdf",
"playwright",
"playwright-stealth",
"chromadb",
"weasyprint",
"cairosvg",
"sqlglot",
"curl_cffi",
"faker",
"defusedxml",
]
[project.scripts]
devplace = "devplacepy.cli:main"
devii = "devplacepy.services.devii.cli:main"
devplace-xmlrpc = "devplacepy.services.xmlrpc.server:main"
[project.optional-dependencies]
dev = ["pytest", "playwright", "requests", "coverage"]
bots = ["playwright", "faker"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.pytest.ini_options]
testpaths = ["tests/unit", "tests/api", "tests/e2e"]
python_files = ["*.py"]
addopts = "--tb=line -rf -p no:xdist"
filterwarnings = [
"ignore:'crypt' is deprecated",
"ignore:Using `httpx` with `starlette.testclient` is deprecated",
"ignore:invalid escape sequence",
]