Repository navigation
Strip landing page to essentials, move detail to sub-pages - #23
drmowinckels wants to merge 11 commits into
Conversation
|
✅ Preview deployed at https://23--capro-uio.netlify.app |
Correction on the Hugo version noteThe PR description says the 0.145.0 (CI) vs 0.167.0 (local) gap "should be fine" and that the preview build would confirm it. The build passing did not confirm it — it produced different, wrong output, and I only caught it by checking the deployed URLs rather than the build status. What broke: the Fix (95cf942): the alias now lives only on the default-language file, which both versions resolve to This is the second time the same class of issue has bitten in this PR — the first was front-matter Takeaway for reviewing this PR: a green check means the build did not error, not that the output is right. The deployed URLs are worth spot-checking. |
d87f7c4 to
8d7de57
Compare
✅ Accessibility: no issuesaxe-core over 19 routes × 2 viewports (one page per layout), plus 69 manual checks. All 69 manual checks passed. Automated tooling catches roughly a third of accessibility problems. A clean run is a floor, not a ceiling. |
The landing page stacked all 12 sections, so visitors could not quickly see what CAPRO does or how to get in touch. It is now hero, "How we can help", and contact; everything else moved to its own page. New section pages reusing the existing partials: /services service detail + feature + CTA /about about + skills + funfacts + CTA /team team + CTA /portfolio works + testimonials /pricing cost estimates + CTA /news unchanged list Nav links are now real pages instead of #anchors, so each page is linkable and the active state works. Copy (en + no): - Hero says what CAPRO is and who it is for, with two buttons. - About replaces "We're Creative"/"We're Professional" with concrete statements. - Services gained a short: one-liner, which is what the six landing cards show. - Contact's hardcoded English paragraph moved into the language files, and the booking URL is now an explicit booking: param rather than being scraped out of prose. Structure: - content/service -> content/services. Front-matter url: is not language-prefixed, so the Norwegian page collided with the English one at /services/; renaming the section fixes it properly. - feature, skill, funfacts, cta and testimonial each built an empty page at their own URL. They are now build.render: false, which drops 18 junk URLs from the sitemap while still feeding the partials. - Extracted helpers/section-title.html, helpers/section-intro.html and helpers/link.html, replacing blocks duplicated across 8 partials. - Pricing's "Book a time" pointed at #book, which exists nowhere; it now resolves to the contact section per language. - Removed dead partials (news, empty map), dead CSS (btn-hero, contact-icon) and the now-unused viewAllPost string. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The section rename left /service/ returning 404. It was a thin, childless list page, but it was indexable, so send it to the new URL instead of breaking any existing link. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Drops the "Happy Clients / Projects completed / Cups of Coffee" section and everything only it used: the funfacts partial and content, counter.js, the .counter-card styles and the background image. counter.js was concatenated into the site-wide JS bundle, so this also takes it off every page. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The alias was set on both language files. CI pins Hugo 0.145.0, which does not language-prefix aliases on non-default languages, so the Norwegian entry claimed the root /service/ and overwrote the English one: /service/ redirected to /no/services/ and /no/service/ was never built. Local Hugo 0.167 prefixes it and hid the problem. Keep the alias only on the default language, which both versions agree resolves to /service/. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Seven top-level items made the nav a list to read rather than scan. They are now grouped by the question a visitor is asking: What we do -> Services, Our work, Prices Who we are -> The team, About CAPRO, News Contact -> stays top level; it is the action, not a category Three top-level items instead of seven. Dropdowns open on click, not hover: hover menus are awkward on touch and unpredictable on the way to a neighbouring item. Escape closes and returns focus to the button, clicking outside closes, tabbing out closes, and aria-expanded tracks state. A parent shows as active when one of its children is the current page. On mobile the groups render already open as labelled sections. Making someone tap to reveal three links is cost without benefit at this size. Renames for the grouped labels: Portfolio -> Our work, About us -> About CAPRO, Team -> The team. "Portfolio" reads as a design-studio word; "our work" is what it actually is. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three changes that turned out to be one:
Team is back on the landing page as a compact strip — faces, names and
one role each, linking to the full profiles. Not the full bio cards:
the testimonials name individuals, so the people are a reason to get
in touch, but they should not cost three screens to say so. The
landing page is now hero, how we can help, the team, contact.
/about/ is gone. Its three statements ("A team inside the university",
"Engineers who have done research", "You own what we build") are real
trust content, so rather than delete them with the page they moved to
/team/, which now genuinely is the who-we-are page. The about section
is data-only (build.render false), the same pattern the other detail
sections use. /about/ was a live URL, so it aliases to /team/ — on the
default language only, since Hugo 0.145 does not language-prefix
aliases and the Norwegian entry would claim the root path.
Nav drops to three: What we do (Services, Our work, Prices), News,
Contact. With the team on the landing page the "Who we are" group had
nothing left but News, and a one-item dropdown is not a menu.
Booking is replaced by email. The reclaim.ai link is not in use; the
address is capro-contact@psykologi.uio.no and it is now the one
action in the contact section. The address itself is the link text
rather than a "book a consultation" button — people want to read and
copy an address, not fire a mail client they may not use.
Footer gains links to team, services, news and contact, so /team/ is
reachable from every page now that it is not in the nav.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The first version invented a circular-portrait component, so the site said "team" two different ways: bordered square cards on /team/ and circles on the landing page. The height concern was real but it argued for showing less, not for looking different. Now a .team-card--compact variant of the same component: same border, same square grayscale photo, same hover, bio dropped and meta tightened. Removes the bespoke people.css entirely. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
axe-core 4.14 (WCAG 2.0/2.1/2.2 A+AA plus best-practice) over 14 routes in both languages, at desktop and mobile, including the open nav dropdown and open mobile menu. 91 violations across 5 types, now zero. Contrast (WCAG 1.4.3, serious) --color-primary as a text colour is 3.10:1 on dark and 2.68:1 on grey, below AA. Every text use now takes --color-primary-text (5.29 / 4.58); background and border uses are unchanged. --color-light is 4.09:1 on grey, so small text using it moves to --color-muted. Chroma's monokai comment colour is 3.03:1 on its own background; github-dark clears it at 6.15:1. Links in prose (WCAG 1.4.1, serious) Body-copy links were distinguished by colour alone at 1.36:1 against surrounding text. Now underlined. Headings List pages had no h1 at all; the first section title on a page is now promoted to h1, and item headings inside it move to h2 so levels never skip. Team profiles made the generic "About Member" label the only heading and the person's name an h3 — the name is now the h1 and the label is no longer a heading. One news post started at h3. Landmarks and bypass The banner sat outside <main>. Added a skip link, which was missing entirely (WCAG 2.4.1). Robustness .reveal starts at opacity 0 and is shown by scroll-reveal.js, so content was gated on JavaScript and on the observer firing. It is now visible immediately under prefers-reduced-motion, with a <noscript> fallback. Verified separately: skip link is the first tab stop and visible on focus, no keyboard trap, focus indicators on all interactive elements, reduced-motion honoured, no horizontal scroll at 320px or 200% zoom, alt text and lang on every page. Note: section-title writes its two heading levels out in full because Go's html/template cannot compute an output context for a dynamic element name and silently renders nothing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The generated file conflicted during the rebase; its sources merged cleanly, so this is just the rebuilt output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two false failures surfaced when the gate first ran against the grouped nav, and a check that cries wolf is one people learn to ignore. It probed the first match of each selector, which for `header nav a` is a link inside a closed dropdown: display:none computes to outline-style:none. It now probes the first visible match, and checks the dropdown's own links separately with the panel open. Opening that panel with a click then reported the links as having no focus ring, because :focus-visible stops matching once the input modality is pointer. It opens the panel with the keyboard instead, which is the case that actually matters. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three files carried formatting from before Prettier landed on main. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8d7de57 to
bde2752
Compare
Summary
Responds to the feedback from @markus and José Luis: people were not getting what CAPRO is, what it does, or how to use it. The landing page stacked all 12 sections, so "what do you do" competed with pricing, skills, fun facts and testimonials.
The landing page is now hero → How we can help → contact. Everything else moved to its own page, in the spirit of the 7T facility's landing → user-information split that Markus linked.
/#anchorjumps on one page#contactNew pages, all reusing the existing section partials:
/services— full service detail + feature + CTA/about— about + skills + funfacts + CTA/team— team + CTA/portfolio— works + testimonials/pricing— cost estimates + CTA/news— unchangedCopy changes (en + no)
short:one-liner — that's what the six landing-page cards show.Copy is a first pass and the point of the preview — wording is yours to redline.
Structural fixes
content/service→content/services. I first used a front-matterurl:, but that is not language-prefixed and the Norwegian page silently collided with the English one at the same path. Renaming the section is the correct fix.feature,skill,funfacts,cta,testimonialeach built an empty page at their own URL. Nowbuild.render: false— content still feeds the partials, 18 junk URLs leave the sitemap.#book, which exists nowhere in the site. Now resolves to the contact section, per language.helpers/section-title.html,helpers/section-intro.html,helpers/link.html— these blocks were duplicated across 8 partials.sections/news.html, the emptysections/map.html,.btn-heroand.contact-iconCSS, the now-unusedviewAllPoststring.Test plan
CI builds the site and deploys the preview, so that's covered. What CI does not check:
/aboutin elsewhere./no/pages — I wrote that copy, a native read would be good.Two things I deliberately did not do:
.hugo_version) while I built locally on 0.167. Thebuild:front-matter key replaced_buildin exactly 0.145.0, so it should be fine, but the preview build is the real check.🤖 Generated with Claude Code