Homepage redesign, About Us page, and Help / FAQ page - #83
Merged
Merged
Conversation
- Add animated WebGL noise background (brand-blue palette, mouse-reactive, calm flow) with a CSS-gradient fallback - Rebuild homepage: top-aligned wordmark with glow, frosted-glass hero, auth-aware Login/Dashboard CTA, and FAQ/About links - Lift navbar above the fixed background canvas - Remove the /test page across frontend, routing, and Go embed Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: AI-Assisted <ai@4js.com>
/about was a stub reading "Page under development", linked from both the navbar and the homepage hero. Replace it with a real page that explains what Autograder is, the problem it solves, and who built it. Extract the homepage's visual language into web/src/glass.css so it is reusable: the .glass frosted panel and its opaque @supports fallback, the .ghost-btn, and a new .wordmark class holding the wordmark's glow filter and SVG sizing. index.css imports it instead of defining it, and keeps only the homepage-specific #logo-main width. The homepage renders unchanged. The About page reuses NoiseBackground, Navbar, Logo, and BlueButton as-is. The hero pairs an ABOUT eyebrow with the same AUTOGRADER wordmark at 620px rather than the homepage's 920px, so it reads as a section header. Six frosted panels follow, then the login/dashboard CTA. about.css drops the homepage's overflow:hidden for a scrolling body -- the shader canvas is position:fixed, so it stays put -- and adds a media query at 800px to collapse the two-up row and the language tiles. It also drops the unused tailwindcss import, which claimed the same --color-* namespace as colors.css, and imports colors.css, which the page and the shader's CSS fallback both need for their tokens. Page copy deliberately omits claims the code does not support: nsjail is in the grader image but disabled in grader.py, so only Docker isolation, non-root execution, per-test-case timeouts, and output caps are claimed; bash test cases and the Rust/Scheme runner branches are unreachable, so the page says four languages and never counts test-case types. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
/faq was the last stub in the app, rendering "Page under development" while being linked from four places: the navbar on every page, the homepage hero, the About page footer, and the signup form's "Why am I here?" link. That last one means the page has a reader with no account yet, holding an invitation email, so the content opens with onboarding rather than grading internals. 36 questions across four sections -- getting started, using Autograder as a student, understanding your results, and instructors/TAs. Every answer is drawn from the code rather than assumed, including the ones users are most likely to get wrong: the password special-character set really does exclude hyphen and equals, output comparison ignores trailing whitespace but not spaces inside a line, a non-zero exit status fails a test even with correct output, and a question whose test cases are all hidden shows the student no compile errors at all. Per-user decision, the page documents real limitations plainly instead of omitting them: there is no join code, no CSV grade export, no student-facing submission history, no shell test cases, and no email beyond invitations and password resets. Outright defects are left out; they should be filed instead. Add FaqItem, a small accordion local to the page. The repo has five expand/collapse implementations but none fit -- ExpandPanel's API carries a grade percentage and its CSS assumes a light background, and all five put onClick on a div with no aria-expanded or keyboard handling. FaqItem uses a real button with aria-expanded/aria-controls and useId, and open state is lifted to the page so one "Expand all" control can drive every row, which is what keeps find-in-page usable. FAQ.css mirrors about.css and reuses .glass/.wordmark/.ghost-btn from glass.css so the two pages read as siblings. It drops the unused tailwindcss import, which claimed the same --color-* namespace as colors.css, taking the built stylesheet from 20.7 kB to 5.0 kB. FAQ.html linked ./login.css, which has never existed in that directory; point it at ./FAQ.css. Also correct four claims on the About page that the code does not support, so the two pages stop contradicting each other: banner selection is an unimplemented placeholder, the assignment UI exposes only draft and visible (edit mode is unreachable), question points were dropped from the schema and are the sum of test-case points, and submission history is instructor-only. Verified by driving the accordion over the DevTools Protocol: 25 checks covering click open/close, Enter and Space on a focused question, unique aria-controls resolution across all 36 rows, the focus ring, expand-all in both directions, and absence of horizontal overflow at 480px. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fills in the three public-facing pages. The homepage got a redesign, and
/aboutand/faq— both of which shipped as "Page under development" stubs while being linked from the navbar on every page — are now real pages.What's in it
Homepage redesign (
829cfde) — a WebGL simplex-noise shader background (NoiseBackground) with a mouse-follow parallax, honouringprefers-reduced-motionand falling back to a CSS gradient where WebGL is unavailable. The AUTOGRADER wordmark sits above a dark frosted-glass hero panel. Removes the leftover/testpage from all three places it was wired (Vite input,go:embed, Echo route).Animated logo and classroom popup fix (
6da65d5).About page (
68240cf) — a scrolling page of frosted panels: why the platform exists, what instructors and students each get, a four-step walkthrough of how grading works, the four supported languages, and who built it.This commit also extracts the homepage's visual language into
web/src/glass.css— the.glasspanel with its opaque@supportsfallback,.ghost-btn, and a.wordmarkclass holding the wordmark's glow filter — so it is shared rather than trapped inindex.css.Help / FAQ page (
d438727) — 36 questions across four sections: getting started, using Autograder as a student, understanding your results, and instructors/TAs.Adds
FaqItem, a small accordion local to the page. The repo already has five expand/collapse implementations but none fit:ExpandPanel's API carries a grade percentage and its CSS assumes a light background, and all five putonClickon a<div>with noaria-expandedor keyboard handling.FaqItemuses a real<button>witharia-expanded/aria-controlsanduseId, and open state is lifted to the page so one "Expand all" control can drive every row — which is what keeps find-in-page usable on an accordion.Notes for review
The FAQ content is drawn from the code, not assumed. The answers worth checking are the ones users are most likely to get wrong today:
-,=,[,],\,|and backtick, soPassw0rd-is rejected.FAILED (0/n points).The page documents current limitations plainly rather than omitting them: there is no join code, no CSV grade export, no student-facing submission history, no shell test cases, and no email beyond invitations and password resets. Outright defects are deliberately left out of the copy (see below).
Four claims on the About page are corrected in the FAQ commit, so the two pages don't contradict each other: banner selection is an unimplemented placeholder popup, the assignment UI exposes only Draft and Visible (
editmode is unreachable), question points were dropped from the schema and are the sum of test-case points, and submission history is instructor-only.Claims deliberately kept off both pages, because the code doesn't currently back them: nsjail sandboxing is built into the grader image but hard-disabled at
grader.py:55, so the 256 MB memory cap isn't enforced. Copy claims only Docker isolation, non-root execution, per-test-case timeouts, and the output cap — all of which genuinely happen. Also no HTTPS, CSRF, or licensing claims.Verification
yarn buildclean. Dropping the unusedtailwindcssimport fromabout.cssandFAQ.css(it claimed the same--color-*namespace ascolors.css) took those stylesheets from ~20.7 kB to 4.3 kB and 5.0 kB.EnterandSpaceon a focused question, uniquearia-controlsresolution across all 36 rows, the focus ring, expand-all in both directions, and no horizontal overflow at 480px.glass.cssextraction and the copy edits.Follow-ups worth filing separately
Three real defects surfaced while researching the FAQ. None are touched here and none are documented on the page:
service/auth.go:49-68).login failed, because the handler returns a 500 with that message for every service-layer failure (handler/auth.go:382-385).GetClassroomStudentssizes its result slicelen(students)-1assuming the caller is in the list, so it panics with a 500 for an admin who isn't a member of the classroom (service/classroom.go:219-228).Also:
web/tsconfig.app.tsbuildinfois a TypeScript incremental-build artifact tracked in git, so it churns on every build. It probably belongs in.gitignore.🤖 Generated with Claude Code