Skip to content

Homepage redesign, About Us page, and Help / FAQ page - #83

Merged
Max-Harold merged 4 commits into
mainfrom
feat/frontend-additions
Aug 6, 2026
Merged

Max-Harold merged 4 commits into
mainfrom
feat/frontend-additions

Conversation

@Max-Harold

Copy link
Copy Markdown
Contributor

Fills in the three public-facing pages. The homepage got a redesign, and /about and /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, honouring prefers-reduced-motion and falling back to a CSS gradient where WebGL is unavailable. The AUTOGRADER wordmark sits above a dark frosted-glass hero panel. Removes the leftover /test page 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 .glass panel with its opaque @supports fallback, .ghost-btn, and a .wordmark class holding the wordmark's glow filter — so it is shared rather than trapped in index.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 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 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:

  • The password special-character set genuinely excludes -, =, [, ], \, | and backtick, so Passw0rd- is rejected.
  • Output comparison ignores trailing whitespace and line endings but not spaces inside a line.
  • A non-zero exit status fails a test even when the output is correct.
  • If every test case on a question is hidden, the student sees no compile errors or stack traces at all — only 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 (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.

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 build clean. Dropping the unused tailwindcss import from about.css and FAQ.css (it claimed the same --color-* namespace as colors.css) took those stylesheets from ~20.7 kB to 4.3 kB and 5.0 kB.
  • The accordion was driven 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 no horizontal overflow at 480px.
  • Screenshots at 1280px, 1100px and 480px; WebGL-disabled fallback confirmed; homepage and About re-checked for regressions after the glass.css extraction 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:

  1. A re-sent invitation emails a new token but only persists it if no pending invite exists, so only the first invitation link ever works (service/auth.go:49-68).
  2. An expired or used password-reset link shows the user the literal string login failed, because the handler returns a 500 with that message for every service-layer failure (handler/auth.go:382-385).
  3. GetClassroomStudents sizes its result slice len(students)-1 assuming 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.tsbuildinfo is a TypeScript incremental-build artifact tracked in git, so it churns on every build. It probably belongs in .gitignore.

🤖 Generated with Claude Code

Max-Harold and others added 4 commits July 18, 2026 18:29
- 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>
@Max-Harold
Max-Harold merged commit 196cfc8 into main Aug 6, 2026
@Max-Harold
Max-Harold deleted the feat/frontend-additions branch August 6, 2026 17:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant