import type { NextPage } from "next"; import Head from "next/head"; import Image from "next/image"; import { BsGithub } from "react-icons/bs"; import Link from "next/link"; import AppWrapper from "../components/AppWrapper"; import type { ReactNode } from "react"; const images: [string, string | ReactNode][] = [ ["/portal/home.jpeg", "The home page."], [ "/portal/events.png", <> {" "} A page listing all current events.
Initial data is cached for performance, but becomes dynamic when filtered. , ], [ "/portal/admin.png", "A secure admin panel for our officers to view, filter & edit members & events.", ], ["/portal/event.png", "The view of a specific event."], ["/portal/checkin.png", "The check-in view."], [ "/portal/filters.png", "Organization filtering options. Dynamic semester filtering & event sorting is also available.", ], ["/portal/login.png", "The login. Fast form validation, seamless login."], [ "/portal/profile.png", <> The member profile view; fully editable on both desktop & mobile.
{" "} Seamless editing of profiles for users. Full validation available. , ], [ "/portal/status.png", "Members can check their progress towards becoming full members & view what events they attended.", ], ]; const PortalPage: NextPage = () => { return ( <> Portal | Xevion.dev
Portal

Created in service of our membership, Portal was designed as a approachable membership portal for our users so we could{" "} track membership, advertise events and replace our existing database solution.

  • Fast - built to serve thousands
  • Cheap - minimize costs
  • Open Source - help us improve
  • Cutting Edge - the latest technology

Screenshots

{images.map(([src, description]) => { return (
{description}
); })}
); }; export default PortalPage;