Add portal project page & images

This commit is contained in:
Xevion
2022-12-30 18:08:54 -06:00
parent ffe8cbbf46
commit db214aab66
12 changed files with 92 additions and 14 deletions

BIN
public/portal/admin.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

View File

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

BIN
public/portal/checkin.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

BIN
public/portal/event.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

BIN
public/portal/events.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
public/portal/filters.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

BIN
public/portal/login.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 KiB

BIN
public/portal/profile.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
public/portal/status.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -17,7 +17,7 @@ export async function getStaticProps() {
const projects: Project[] = [ const projects: Project[] = [
{ {
title: "Portal", title: "Portal",
banner: "/portal.jpeg", banner: "/banner.jpeg",
location: "/portal", location: "/portal",
longDescription: "An advanced membership & event management system for my university's premier computer science organization.", longDescription: "An advanced membership & event management system for my university's premier computer science organization.",
shortDescription: "Advanced membership & event management system for students", shortDescription: "Advanced membership & event management system for students",

View File

@@ -12,7 +12,7 @@ const PhototagPage: NextPage = () => {
</Head> </Head>
<AppWrapper> <AppWrapper>
<div className="bg-zinc-900 text-zinc-50 w-full overflow-auto h-full min-h-screen flex justify-center"> <div className="bg-zinc-850 text-zinc-50 w-full overflow-auto h-full min-h-screen flex justify-center">
<div className="relative my-10 p-3 px-6 w-full max-w-screen-md"> <div className="relative my-10 p-3 px-6 w-full max-w-screen-md">
<div className="pb-2 flex justify-between"> <div className="pb-2 flex justify-between">
<div className="text-2xl font-semibold"> <div className="text-2xl font-semibold">
@@ -29,20 +29,17 @@ const PhototagPage: NextPage = () => {
className="!relative pointer-events-none min-h-[10rem] rounded-md object-cover"/> className="!relative pointer-events-none min-h-[10rem] rounded-md object-cover"/>
</div> </div>
<div className="mt-3 w-full prose prose-invert prose-lg"> <div className="mt-3 w-full prose prose-invert prose-lg">
<p>
<p>Phototag is a powerful tool that helps you quickly and easily add rich, descriptive tags to Phototag is a powerful tool that helps you quickly and easily add rich, descriptive tags to
your your photos. Using Google&apos;s Vision API, Phototag automatically generates tags based on
photos. Using Google&apos;s Vision API, Phototag automatically generates tags based on the visual the visual content of your photos, making it easier than ever to organize and find your
content photos.
of your photos, making it easier than ever to organize and find your photos.</p> </p>
<p> <p>
With support for IPTC metadata and Adobe XMP Sidecar files, you can easily integrate With support for IPTC metadata and Adobe XMP Sidecar files, you can easily integrate
Phototag Phototag into your existing workflow on Windows. Whether you&apos;re a professional
into photographer or a casual snapshot taker, Phototag is the perfect tool for adding clarity and
your existing context to your photos.
workflow on Windows. Whether you&apos;re a professional photographer or a casual snapshot taker,
Phototag
is the perfect tool for adding clarity and context to your photos.
</p> </p>
<ul className="md:columns-2"> <ul className="md:columns-2">
<li>Simple, but configurable</li> <li>Simple, but configurable</li>

81
src/pages/portal.tsx Normal file
View File

@@ -0,0 +1,81 @@
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/events.png", <> A page listing all current events. <br/> 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. <br/> 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 PhototagPage: NextPage = () => {
return <>
<Head>
<title>Portal | Xevion.dev</title>
</Head>
<AppWrapper>
<div className="bg-zinc-850 text-zinc-50 w-full overflow-auto h-full min-h-screen flex justify-center">
<div className="relative my-10 p-3 px-6 w-full max-w-screen-md">
<div className="pb-2 flex justify-between">
<div className="text-3xl font-semibold">
Portal
</div>
<div className="flex items-center justify-end space-x-1.5">
<Link href="https://github.com/UTSA-ACM/Portal" target="_blank">
<BsGithub className="w-6 h-6 hover:text-zinc-200"/>
</Link>
</div>
</div>
<div className="relative">
<Link href="https://portal.acmutsa.org/">
<Image fill sizes="100vw" src="/portal/banner.jpeg" alt=""
className="!relative pointer-events-none min-h-[10rem] rounded-md object-cover"/>
</Link>
</div>
<div className="mt-3 w-full prose prose-invert prose-lg">
<p>
Created in service of our membership, Portal was designed as a approachable membership
portal
for our users so we could <b>track membership</b>, <b>advertise events</b> and replace our
existing <b>database solution</b>.
</p>
<ul className="md:columns-2">
<li>Fast - built to serve thousands</li>
<li>Cheap - minimize costs</li>
<li>Open Source - help us improve</li>
<li>Cutting Edge - the latest technology</li>
</ul>
<h3>Screenshots</h3>
<div className="relative space-y-3">
{images.map(([src, description]) => {
return <div key={src} className="flex flex-col justify-center w-full">
<Image fill sizes="100vw" src={src} alt=""
className="shadow-lg !my-1 !relative pointer-events-none min-h-[10rem] rounded-md object-cover"/>
<span
className="text-center text-base">{description}</span>
</div>
}
)}
</div>
</div>
</div>
</div>
</AppWrapper>
</>
}
export default PhototagPage;