mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-09-12 13:48:58 +02:00
feat: rebuild the landing page around the product
The home page led with a text hero, a boxed stats strip, a numbered how-it-works list, a trust card and three Bootstrap featurettes with postage-stamp screenshots. It now shows the product first and stays flat: - Hero: copy on the left, the anonymize form in a browser frame on the right, one primary CTA plus a link to a real anonymized repository, and three reassurance points (free, read-only, expires). - Proof and live stats collapse into hairline strips with no cards; the stat bars keep their daily-delta charts and the "+N today" line. - Before/after example gets a section head and shows the actual XXXX-n masks, each labelled for screen readers. - "What you get" is one large screenshot with three vertical tabs (Anonymize, Review, Manage) instead of three columns. Tabs are real buttons with tablist/tab/tabpanel roles, roving tabindex and arrow-key navigation; the description and link sit outside the button. Signed-out visitors are sent to sign in rather than to a dashboard that redirects. - FAQ teaser with the three questions that come up most, linking into the FAQ anchors. - Phone layout: tabs become a strip above the screenshot with the selected description below it, stats go two-up, panes stack, the CTA fills the width, and horizontal overflow is clipped so the hero bleed can never cause sideways scrolling. Removes the dead how-it-works, trust, featurette and metrics styles and the legacy mobile hero font overrides that fought the new sizes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
b9189953d3
commit
88d8225f00
+83
-1
@@ -1386,7 +1386,9 @@ angular
|
||||
"$scope",
|
||||
"$http",
|
||||
"$location",
|
||||
function ($scope, $http, $location) {
|
||||
"$window",
|
||||
"$timeout",
|
||||
function ($scope, $http, $location, $window, $timeout) {
|
||||
if ($scope.user && !$scope.user.status) {
|
||||
$location.url("/dashboard");
|
||||
}
|
||||
@@ -1396,6 +1398,86 @@ angular
|
||||
}
|
||||
});
|
||||
|
||||
// "What you get": one screenshot, three tabs. The selected key drives
|
||||
// both the expanded description and the visible panel.
|
||||
$scope.features = [
|
||||
{
|
||||
key: "anonymize",
|
||||
num: "01",
|
||||
eyebrow: "Anonymize",
|
||||
title: "Double-anonymous,",
|
||||
accent: "your rules.",
|
||||
text:
|
||||
"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",
|
||||
cta: "Start an anonymization",
|
||||
href: "/anonymize",
|
||||
url: "anonymous.4open.science/anonymize",
|
||||
img: "/imgs/anonymize.png",
|
||||
alt: "The anonymize form: source repository, terms to redact, options and a live README preview",
|
||||
},
|
||||
{
|
||||
key: "review",
|
||||
num: "02",
|
||||
eyebrow: "Review",
|
||||
title: "Reviewers browse",
|
||||
accent: "the real thing.",
|
||||
text:
|
||||
"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",
|
||||
cta: "Open the example",
|
||||
href: "https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",
|
||||
target: "_self",
|
||||
url: "anonymous.4open.science/r/840c8c57-…",
|
||||
img: "/imgs/explorer.png",
|
||||
alt: "The repository explorer with a file tree and a rendered README",
|
||||
},
|
||||
{
|
||||
key: "manage",
|
||||
num: "03",
|
||||
eyebrow: "Manage",
|
||||
title: "One dashboard,",
|
||||
accent: "until the decision.",
|
||||
text:
|
||||
"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",
|
||||
cta: "Open the dashboard",
|
||||
href: "/dashboard",
|
||||
needsUser: true,
|
||||
url: "anonymous.4open.science/dashboard",
|
||||
img: "/imgs/dashboard.png",
|
||||
alt: "The dashboard listing anonymized repositories with status, views and expiry",
|
||||
},
|
||||
];
|
||||
$scope.feature = $scope.features[0].key;
|
||||
$scope.selectFeature = function (key) {
|
||||
$scope.feature = key;
|
||||
};
|
||||
// Signed-out visitors cannot open the dashboard; send them to sign in.
|
||||
$scope.featureHref = function (f) {
|
||||
return f.needsUser && !$scope.user ? "/github/login" : f.href;
|
||||
};
|
||||
$scope.featureTarget = function (f) {
|
||||
return f.needsUser && !$scope.user ? "_self" : f.target || undefined;
|
||||
};
|
||||
$scope.featureKeydown = function ($event, index) {
|
||||
const step = {
|
||||
ArrowDown: 1,
|
||||
ArrowRight: 1,
|
||||
ArrowUp: -1,
|
||||
ArrowLeft: -1,
|
||||
Home: "first",
|
||||
End: "last",
|
||||
}[$event.key];
|
||||
if (step === undefined) return;
|
||||
$event.preventDefault();
|
||||
const n = $scope.features.length;
|
||||
const next =
|
||||
step === "first" ? 0 : step === "last" ? n - 1 : (index + step + n) % n;
|
||||
$scope.feature = $scope.features[next].key;
|
||||
$timeout(() => {
|
||||
const el = $window.document.getElementById("feature-tab-" + $scope.feature);
|
||||
if (el) el.focus();
|
||||
});
|
||||
};
|
||||
|
||||
$scope.cards = [
|
||||
{ key: "repositories", total: 0, label: "repositories anonymized" },
|
||||
{ key: "users", total: 0, label: "researchers" },
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user