diff --git a/app/[lang]/about/page.tsx b/app/[lang]/about/page.tsx index 8d08b366..61c6ca42 100644 --- a/app/[lang]/about/page.tsx +++ b/app/[lang]/about/page.tsx @@ -7,6 +7,7 @@ import { AppContent } from "@/components/ui/app-content" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Banner } from "@/components/banner" +import { Divider } from "@/components/divider" import { Icons } from "@/components/icons" import { PageHeader } from "@/components/page-header" import { useTranslation } from "@/app/i18n" @@ -21,7 +22,7 @@ export default async function AboutPage({ params: { lang } }: any) { }) ?? [] return ( -
+ - - - { - return { - label: principle?.title, - value: index.toString(), - children: ( - - {principle.description?.map( - (description: string, index: number) => { - return

{description}

- } - )} -
- ), - } - }), - ]} - /> -
+
+ + + { + return { + label: principle?.title, + value: index.toString(), + children: ( + + {principle.description?.map( + (description: string, index: number) => { + return

{description}

+ } + )} +
+ ), + } + }), + ]} + /> +
+
-
+ ) } diff --git a/app/[lang]/page.tsx b/app/[lang]/page.tsx index 1faf9b98..61826865 100644 --- a/app/[lang]/page.tsx +++ b/app/[lang]/page.tsx @@ -4,11 +4,13 @@ import Image from "next/image" import Link from "next/link" import PSELogo from "@/public/icons/archstar.webp" import { motion } from "framer-motion" +import { Divide } from "lucide-react" import { siteConfig } from "@/config/site" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Banner } from "@/components/banner" +import { Divider } from "@/components/divider" import { Icons } from "@/components/icons" import { PageHeader } from "@/components/page-header" import { ConnectWithUs } from "@/components/sections/ConnectWithUs" @@ -23,40 +25,44 @@ export default function IndexPage({ params: { lang } }: any) { return (
- - - - } - subtitle={t("headerSubtitle")} - image={ -
- pselogo -
- } - actions={ - - - - } - /> + + + + + } + subtitle={t("headerSubtitle")} + image={ +
+ pselogo +
+ } + actions={ + + + + } + /> -
@@ -84,7 +90,7 @@ export default function IndexPage({ params: { lang } }: any) { -
+
) } diff --git a/app/[lang]/programs/index.tsx b/app/[lang]/programs/index.tsx index 7fb9fd11..2a482459 100644 --- a/app/[lang]/programs/index.tsx +++ b/app/[lang]/programs/index.tsx @@ -14,7 +14,9 @@ import { Accordion } from "@/components/ui/accordion" import { AppContent } from "@/components/ui/app-content" import { Button } from "@/components/ui/button" import { Dropdown, DropdownProps } from "@/components/ui/dropdown" +import { Banner } from "@/components/banner" import { Card } from "@/components/cards/card" +import { Divider } from "@/components/divider" import { Icons } from "@/components/icons" import { PageHeader } from "@/components/page-header" import { useTranslation } from "@/app/i18n/client" @@ -92,29 +94,13 @@ const ProgramDetail = ({ const ProgramSections = ["coreProgram", "acceleratorProgram"] as const -const ChooseProgramItems: { label: string; value: string; href?: string }[] = [ - { - label: "Core Program", - value: "coreProgram", - href: siteConfig.links.coreProgram, - }, - { - label: "Accelerator Program", - value: "acceleratorProgram", - href: siteConfig.links.acceleratorProgram, - }, -] export const ProgramPageContent = ({ lang }: any) => { const { t } = useTranslation(lang, "programs-page") const { t: common } = useTranslation(lang, "common") const [activeId, setActiveId] = useState("") const [isManualScroll, setIsManualScroll] = useState(false) - const [selectedProgram, setSelectedProgram] = useState( - ChooseProgramItems[0].value - ) const SCROLL_OFFSET = -900 const sectionsRef = useRef | null>(null) - const [{ value: defaultProgramValue }] = ChooseProgramItems const howToApply: any = t("howToApply", { @@ -173,276 +159,192 @@ export const ProgramPageContent = ({ lang }: any) => { setTimeout(() => setIsManualScroll(false), 800) }, []) - const selectedProgramKey: string = - ChooseProgramItems?.find((item) => item.value === selectedProgram)?.label ?? - "" - const selectedProgramLabel = t(selectedProgramKey) + return ( + +
+ + } + /> +
+
+
+ +
+ +
+
+
+
+ +
+
+ + + + + + + + + + + + +
+
+ {coreProgramDescription?.map((description, index) => { + return ( + + {description} + + ) + })}
- {!selectedProgram ? ( - - ) : ( - - - - )}
- ) - } - /> - )} -
-
-
- -
-
-
-
- -
-
- - - - - - - - - - - - -
-
- {coreProgramDescription?.map((description, index) => { - return ( - - {description} +
+
+ + + {curriculum.map(({ title, items }, index) => ( +
+
+ + {t("common.week", { + week: index, + })} +
+ {title}
- ) - })} -
-
-
- - ), - value: "curriculum", - children: ( - - {curriculum.map(({ title, items }, index) => ( -
-
- - {t("common.week", { - week: index, - })} -
- {title} -
-
-
-
    - {items.map( - (label: string, index: number) => { - return
  • {label}
  • - } - )} -
-
-
- ))} -
- ), - }, - ]} - /> +
+
+
    + {items.map((label: string, index: number) => { + return
  • {label}
  • + })} +
+
+
+ ))} + +
+ +
+ +
, - value: "faq", - children: ( -
- { - return { - label: ( - - {question} - - ), - value: index.toString(), - children: ( - - ), - } - } - )} - /> -
- ), - }, - ]} + items={coreProgramFaq.map( + ({ question, answer }, index) => { + return { + label: ( + + {question} + + ), + value: index.toString(), + children: ( + + ), + } + } + )} />
- - -
- - +
{ })}
- , - value: "howToApply", - children: ( -
-
-
-
- - {t("howToApply.openTasks.title")} - -
    - {howToApply?.openTasks?.description?.map( - (task: string, index: number) => { - return ( -
  • -
    -
  • - ) - } - )} -
-
-
- - {t("howToApply.submitIdea.title")} - -
    - {howToApply?.submitIdea?.description?.map( - (task: string, index: number) => { - return ( -
  • -
    -
  • - ) - } - )} -
-
- - {t("howToApply.description")} - -
-
+
+ +
+
+
+
+ + {t("howToApply.openTasks.title")} + +
    + {howToApply?.openTasks?.description?.map( + (task: string, index: number) => { + return ( +
  • +
    +
  • + ) + } + )} +
- ), - }, - ]} - /> - - , - value: "faq", - children: ( -
- { - return { - label: ( - - {question} - - ), - value: index.toString(), - children: ( - - {answer} - - ), - } +
+ + {t("howToApply.submitIdea.title")} + +
    + {howToApply?.submitIdea?.description?.map( + (task: string, index: number) => { + return ( +
  • +
    +
  • + ) } )} - /> +
- ), - }, - ]} - /> + + {t("howToApply.description")} + +
+
+
+
+
+ +
+ { + return { + label: ( + + {question} + + ), + value: index.toString(), + children: ( + + {answer} + + ), + } + } + )} + /> +
+
-
- +
-
+ + + + + + ) } diff --git a/app/[lang]/programs/page.tsx b/app/[lang]/programs/page.tsx index 9573d77a..93ed4de3 100644 --- a/app/[lang]/programs/page.tsx +++ b/app/[lang]/programs/page.tsx @@ -17,5 +17,9 @@ export const metadata: Metadata = { } export default function ProgramsPage({ params: { lang } }: any) { - return + return ( +
+ +
+ ) } diff --git a/app/[lang]/projects/[id]/page.tsx b/app/[lang]/projects/[id]/page.tsx index 44f39d50..9d915266 100644 --- a/app/[lang]/projects/[id]/page.tsx +++ b/app/[lang]/projects/[id]/page.tsx @@ -5,9 +5,11 @@ import { projects } from "@/data/projects" import GithubVector from "@/public/social-medias/github-fill.svg" import GlobalVector from "@/public/social-medias/global-line.svg" import TwitterVector from "@/public/social-medias/twitter-fill.svg" +import { Divide } from "lucide-react" import { ProjectInterface } from "@/lib/types" import { Markdown } from "@/components/ui/markdown" +import { Divider } from "@/components/divider" import { Icons } from "@/components/icons" import DiscoverMoreProjects from "@/components/project/discover-more-projects" import { ProjectTags } from "@/components/project/project-detail-tags" @@ -63,91 +65,103 @@ export default async function ProjectDetailPage({ params }: PageProps) { const hasSocialLinks = Object.keys(currProject?.links ?? {}).length > 0 return ( -
-
-
-
-
- - - - {t("projectLibrary")} - - -
-

- {currProject.name} -

-

- {currProject.tldr} -

+
+ +
+
+
+
+ + + + {t("projectLibrary")} + + +
+

+ {currProject.name} +

+

+ {currProject.tldr} +

+
+ {hasSocialLinks && ( +
+ {github && ( + +
+ +

Github

+
+ + )} + {website && ( + +
+ +

Website

+
+ + )} + {twitter && ( + +
+ +

Twitter

+
+ + )} +
+ )} +
- {hasSocialLinks && ( -
- {github && ( - -
- -

Github

-
- - )} - {website && ( - -
- -

Website

-
- - )} - {twitter && ( - -
- -

Twitter

-
- + +
+
+ {`${currProject.name} + {!currProject?.image && ( + + {currProject?.imageAlt || currProject?.name} + )}
- )} -
-
- -
-
- {`${currProject.name} - {!currProject?.image && ( - - {currProject?.imageAlt || currProject?.name} - - )} -
- -
- {currProject.description} + +
+ {currProject.description} +
+
-
-
- + +
) } diff --git a/app/[lang]/projects/page.tsx b/app/[lang]/projects/page.tsx index d44ecfee..96c9ec03 100644 --- a/app/[lang]/projects/page.tsx +++ b/app/[lang]/projects/page.tsx @@ -6,6 +6,7 @@ import ProjectFiltersBar from "@/components/project/project-filters-bar" import { ProjectList } from "@/components/project/project-list" import { ProjectResultBar } from "@/components/project/project-result-bar" import { useTranslation } from "@/app/i18n" +import { Divider } from "@/components/divider" export const metadata: Metadata = { title: "Project Library", @@ -17,7 +18,7 @@ export default async function ProjectsPage({ params: { lang } }: any) { const { t } = await useTranslation(lang, "projects-page") return ( - <> +
- + ) } diff --git a/app/[lang]/resources/page.tsx b/app/[lang]/resources/page.tsx index c961b515..d654ad3a 100644 --- a/app/[lang]/resources/page.tsx +++ b/app/[lang]/resources/page.tsx @@ -11,6 +11,7 @@ import { AppContent } from "@/components/ui/app-content" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Banner } from "@/components/banner" +import { Divider } from "@/components/divider" import { Icons } from "@/components/icons" import { PageHeader } from "@/components/page-header" import { useTranslation } from "@/app/i18n/client" @@ -173,7 +174,7 @@ export default function ResourcePage({ params: { lang } }: LangProps) { const { t: common } = useTranslation(lang, "common") return ( -
+ } /> - -
-
- ( - - ), - ResourceCard: (props: ResourceCardProps) => ( - - ), - }} - /> -
-
-
-
- +
+ +
+
+ ( + + ), + ResourceCard: (props: ResourceCardProps) => ( + + ), + }} + /> +
-
-
+
+
+ +
+
+ +
@@ -254,6 +257,6 @@ export default function ResourcePage({ params: { lang } }: LangProps) { - + ) } diff --git a/app/i18n/locales/en/common.json b/app/i18n/locales/en/common.json index f3dc488d..5538d732 100644 --- a/app/i18n/locales/en/common.json +++ b/app/i18n/locales/en/common.json @@ -55,6 +55,7 @@ "sortBy": "Sort by: {{option}}", "tryItOut": "Try it out!", "learnMore": "Learn more", + "learnMoreDiscord": "Join our Discord to learn more about our programs and other educational opportunities!", "buildWithThisTool": "Build with this tool", "deepDiveResearch": "Dive deeper into the research", "searchProjectPlaceholder": "Search project title or keyword", diff --git a/app/i18n/locales/en/programs-page.json b/app/i18n/locales/en/programs-page.json index a7df600f..5ac3d14d 100644 --- a/app/i18n/locales/en/programs-page.json +++ b/app/i18n/locales/en/programs-page.json @@ -1,6 +1,6 @@ { - "title": "Join our programs", - "description": "Want to explore the world of programmable cryptography and learn how to make substantial contributions to open-source projects? Join our free programs to kickstart your journey!", + "title": "Get started with programmable cryptography", + "description": "PSE offers free educational programs to help you dive deep into Zero Knowledge Proofs, Fully Homomorphic Encryption, Multi-Party Computation and the latest in programmable cryptography. Whether you’re looking to learn the basics or start making open-source contributions, we have resources for your learning journey!", "common": { "faq": "FAQ", "curriculum": "Curriculum", diff --git a/components/banner.tsx b/components/banner.tsx index fda88301..babec28a 100644 --- a/components/banner.tsx +++ b/components/banner.tsx @@ -10,7 +10,7 @@ type BannerProps = { const Banner = ({ title, subtitle, children }: BannerProps) => { return ( -
+
diff --git a/components/divider.tsx b/components/divider.tsx new file mode 100644 index 00000000..d968a121 --- /dev/null +++ b/components/divider.tsx @@ -0,0 +1,18 @@ +import { HTMLAttributes } from "react" + +import { cn } from "@/lib/utils" + +const Section = ({ children, className }: HTMLAttributes) => { + return ( +
+ {children} +
+ ) +} + +const Divider = { + displayName: "Divider", + Section, +} + +export { Divider } diff --git a/components/page-header.tsx b/components/page-header.tsx index 0463be9a..62f05937 100644 --- a/components/page-header.tsx +++ b/components/page-header.tsx @@ -23,7 +23,7 @@ const PageHeader = ({ image, }: PageHeaderProps) => { return ( -
+
diff --git a/components/sections/WhatWeDo.tsx b/components/sections/WhatWeDo.tsx index d607a521..9e2f2474 100644 --- a/components/sections/WhatWeDo.tsx +++ b/components/sections/WhatWeDo.tsx @@ -34,7 +34,7 @@ export const WhatWeDo = ({ lang }: LangProps["params"]) => { ] return ( -
+
diff --git a/components/site-header.tsx b/components/site-header.tsx index f631d339..2d879dec 100644 --- a/components/site-header.tsx +++ b/components/site-header.tsx @@ -18,7 +18,7 @@ export function SiteHeader({ lang }: SiteHeaderProps) { const { MAIN_NAV, activeLanguageLabel } = useAppSettings(lang) return ( -
+
diff --git a/config/site.ts b/config/site.ts index 8ab6c51d..8aef3e50 100644 --- a/config/site.ts +++ b/config/site.ts @@ -23,7 +23,7 @@ export const siteConfig = { discordAnnouncementChannel: "https://discord.com/channels/943612659163602974/969614451089227876", acceleratorProgram: - "https://github.com/privacy-scaling-explorations/acceleration-program/issues/new?assignees=&labels=&projects=&template=propose-your-open-task.md&title=", + "https://github.com/privacy-scaling-explorations/acceleration-program", coreProgram: "https://docs.google.com/forms/d/e/1FAIpQLSendzYY0z_z7fZ37g3jmydvzS9I7OWKbY2JrqAnyNqeaBHvMQ/viewform", },