Repository navigation
feat(design): refined civic-editorial pass on 15 remaining public pages + RefinedPage shell - #408
Merged
Merged
Conversation
…es + RefinedPage shell Adds src/components/design/RefinedPage.js (RefinedPage, PageMasthead, BackLink, Prose, LinkRow, CtaBand) and an .ohx-prose class in refined.js so simple content pages share one calm shell instead of per-page MUI sx. Migrated: /404, /contact (form logic, reCAPTCHA, ?type= prefill and the mentor/judge read-first dialog unchanged), /feedback, /about/why and /about/why/[title], /about/privacy-policy (fixed LAST_UPDATED instead of today's date), /hack/liability-waiver, /hack/photo-release, /praise/[id], /hack/[event_id]/results, /hack/results, and the four /about/success-stories/<slug> case studies — now data objects rendered by SuccessStoryLayout, which also fixes their og:url (pointed at a non-existent /success-stories/… path), adds canonical + Article/Breadcrumb JSON-LD, and drops the duplicate manual pageview() call. Head/SEO meta, getStaticProps/Paths and GA events are preserved on every page. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
Summary
Follow-up to the judging work: the pages that were still on the old look (assorted MUI Papers,
LayoutContainer/TitleContainerfrom the retired nonprofit styles, gradient CTAs) now use the refined civic-editorial design that covers the rest of the site. Presentation only — every page keeps itsHeadmeta,getStaticProps/getStaticPaths, JSON-LD and GA events; where SEO plumbing was wrong it was fixed (see below).New shared pieces (
src/components/design/)RefinedPage.js—RefinedPage(RefinedRoot +.ohx-wrapsection that clears the 64px NavBar),PageMasthead(eyebrow → the page's one<h1>with an optional italic accent → lead),BackLink,Prose,LinkRow(one primary + soft links),CtaBand(navy closing band)..ohx-proseinrefined.js— long-form typography (Frauncesh2/h3, 70ch measure, accent list markers, navy links) that also restyles MUITypographyinside it, so the existing/about/whyarticle bodies read correctly.Pages migrated (15)
/404— random sleeping image in a reserved 4:3 card, one primary CTA;404_errorGA event kept./contact— form logic untouched (validation, reCAPTCHA,?type=/?hearts=prefill,contact_form_submit/_errorevents). MUI fields underrefinedFormTheme; 2:1 layout on desktop, stacked on phones. Fixed a pre-existing bug: the "Common inquiries" quick picks for Mentor/Judge now go through the same read-the-guide-first dialog as the dropdown./feedback,/about/why,/about/why/[title](the 10src/components/content/*Content.jsbodies now usecomponent="h2"and no inline 14px so they inherit the prose scale)./about/privacy-policy(the "Last updated" line printed today's date on every visit; it is now the date the text last changed, Oct 8 2026),/hack/liability-waiver,/hack/photo-release— legal text verbatim./praise/[id],/hack/[event_id]/results,/hack/results— chrome only;HackathonResults/HackathonFunnelunchanged, with reserved heights so thessr:falsewidgets don't shift the page./about/success-stories/<slug>case studies are now plainstorydata objects rendered bysrc/components/SuccessStories/SuccessStoryLayout.js. Text is preserved field for field. Fixed on the way: theirog:urlpointed at a non-existent/success-stories/…path, twoog:images 404'd (now CDN images), no canonical, no JSON-LD (Article + BreadcrumbList viaserializeJsonLd), and two pages fired a duplicate manualpageview()./about/success-storiesindex: dropped the no-op<RefinedFonts/>, fixed a card grid that clipped at 375px, replaced its 404'ingog:image.Still not refined (listed in CLAUDE.md for the next batch): the SEO pillar pages (
/coding-for-nonprofits,/hackathon-for-social-good,/hackathon-judge-opportunities,/hackathon-judging-criteria,/volunteer/professional-development-volunteering,/about/hackers/software-engineering-career-path,/about/locations/asu-tempe-arizona), the tutorial pages (/about/judges/overview,/about/mentors/overview,/judge/overview),/about/hearts,/community-champions,/blog/[blog_id],/cert,/hack/[event_id]/{media,agenda},/store/*. Intentionally left bespoke: the 12-years report, the style guide, print pages, the planning board.Verification
npx jest --ci: 77 suites, 564 passed.npx eslinton every touched file: clean.npm run buildagainst the local backend: exit 0 (after the review fixes).<h1>, results reserved heights +en-USnumber formatting, success-stories index, 404priority, BackLink arrowaria-hidden).Test plan (please click through)
/contact— desktop: form left (wider) and aside right; phone: stacked, no horizontal scroll. Pick Mentor Opportunities from the dropdown and from the "Common inquiries" pills → both open the "read the Mentor Guide first" dialog; Cancel leaves the field unset, Continue sets it. Pick Hackathon Information → the "we have a page for that" note appears. Submit empty → inline errors; submit valid → "Thank you for reaching out." Open/contact?type=claim_reward&hearts=12→ type preselected and the message prefilled./about/why→ cards per career stage with topic links and two highlight tags each; the "Make an impact" grid links work. Open any article (e.g./about/why/open-source-contribution): image + title masthead, highlights card, body in Fraunces headings / 17px text (not tiny 14px), related-topic buttons, login block at the bottom./about/privacy-policy,/hack/liability-waiver,/hack/photo-release— narrow prose column, numbered/bulleted lists with terracotta markers, one primary "Become a sponsor" plus two text links at the bottom. Privacy "Last updated: October 8, 2026"./about/success-stories/matthews-crossing-data-automation(and the other three): masthead, overview facts, challenge/solution cards, resources (open in new tab), impact band, navy CTA band. View source:<link rel="canonical" href="https://www.ohack.dev/about/success-stories/…">,og:urlmatching, twoapplication/ld+jsonblocks. Saving One Life and Vidyodaya show their demo video in a 16:9 card./about/success-storiesindex at 375px wide: cards no longer clipped./hack/fall-2026/resultsand/hack/results: masthead + stat row, results/funnel widgets render below without the page jumping; back links work./praise/<id>from the praise board:<h1>reads "X praised Y", card below, "← Praise board" link./feedbacklogged out → login block; logged in → navy band linking to/myfeedback./nope) → refined 404 with the sleeping image, homepage CTA, "let us know" link to/contact?type=technical.🤖 Generated with Claude Code