diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml
new file mode 100644
index 0000000..eb431af
--- /dev/null
+++ b/.github/workflows/nextjs.yml
@@ -0,0 +1,95 @@
+# Sample workflow for building and deploying a Next.js site to GitHub Pages
+#
+# To get started with Next.js see: https://nextjs.org/docs/getting-started
+#
+name: Deploy Next.js site to Pages
+
+on:
+ # Runs on pushes targeting the default branch
+ push:
+ branches: ["master"]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ # Build job
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ - name: Detect package manager
+ id: detect-package-manager
+ run: |
+ if [ -f "${{ github.workspace }}/yarn.lock" ]; then
+ echo "manager=yarn" >> $GITHUB_OUTPUT
+ echo "command=install" >> $GITHUB_OUTPUT
+ echo "runner=yarn" >> $GITHUB_OUTPUT
+ exit 0
+ elif [ -f "${{ github.workspace }}/package.json" ]; then
+ echo "manager=npm" >> $GITHUB_OUTPUT
+ echo "command=ci" >> $GITHUB_OUTPUT
+ echo "runner=npx --no-install" >> $GITHUB_OUTPUT
+ exit 0
+ else
+ echo "Unable to determine package manager"
+ exit 1
+ fi
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: "16"
+ cache: ${{ steps.detect-package-manager.outputs.manager }}
+ - name: Setup Pages
+ uses: actions/configure-pages@v3
+ with:
+ # Automatically inject basePath in your Next.js configuration file and disable
+ # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
+ #
+ # You may remove this line if you want to manage the configuration yourself.
+ static_site_generator: next
+ - name: Restore cache
+ uses: actions/cache@v3
+ with:
+ path: |
+ .next/cache
+ # Generate a new cache whenever packages or source files change.
+ key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
+ # If source files changed but packages didn't, rebuild from a prior cache.
+ restore-keys: |
+ ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-
+ - name: Install dependencies
+ run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
+ - name: Build with Next.js
+ run: ${{ steps.detect-package-manager.outputs.runner }} next build
+ - name: Static HTML export with Next.js
+ run: ${{ steps.detect-package-manager.outputs.runner }} next export
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v1
+ with:
+ path: ./out
+
+ # Deployment job
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v2
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 9bea433..8f322f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,35 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/README.md b/README.md
index 8ec6bbe..ca8a3a2 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,38 @@
-# Jordan-Morrison.Github.io
-Jordan Morrison's Landing Page
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
+
+[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
+
+The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/components/atoms/StackList.js b/components/atoms/StackList.js
new file mode 100644
index 0000000..63fc74a
--- /dev/null
+++ b/components/atoms/StackList.js
@@ -0,0 +1,19 @@
+import techStacks from '../data/techStacks.json';
+import styles from '@/styles/StackList.module.css';
+
+export default function StackList(props) {
+ let techStack = null;
+ techStack = props.techStack.map(tech => {
+ return techStacks.find((stack) => stack.name == tech);
+ });
+
+ return (
+
+ {techStack && techStack.map(tech =>
+
+
+ {tech.name}
+ )}
+
+ )
+}
\ No newline at end of file
diff --git a/components/atoms/slide.js b/components/atoms/slide.js
new file mode 100644
index 0000000..3969ca4
--- /dev/null
+++ b/components/atoms/slide.js
@@ -0,0 +1,10 @@
+import styles from '@/styles/Slide.module.css';
+
+export default function Slide(props) {
+
+ return (
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/dataLiteracyAssessment.md b/components/data/FUTURE PROJECTS/dataLiteracyAssessment.md
new file mode 100644
index 0000000..2dc6426
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/dataLiteracyAssessment.md
@@ -0,0 +1,10 @@
+---
+title: Data Literacy Assessment
+techStack: []
+index: 999
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/dataPatterns.md b/components/data/FUTURE PROJECTS/dataPatterns.md
new file mode 100644
index 0000000..9453dd9
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/dataPatterns.md
@@ -0,0 +1,10 @@
+---
+title: Data Patterns
+techStack: []
+index: 1002
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/digitalOpenLearning.md b/components/data/FUTURE PROJECTS/digitalOpenLearning.md
new file mode 100644
index 0000000..3747fa6
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/digitalOpenLearning.md
@@ -0,0 +1,10 @@
+---
+title: Digital Open Learning
+techStack: []
+index: 1000
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/geoLoco.md b/components/data/FUTURE PROJECTS/geoLoco.md
new file mode 100644
index 0000000..6be8f79
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/geoLoco.md
@@ -0,0 +1,10 @@
+---
+title: GeoLoco
+techStack: []
+index: 999
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/highPeakCreatives.md b/components/data/FUTURE PROJECTS/highPeakCreatives.md
new file mode 100644
index 0000000..e3cc0b3
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/highPeakCreatives.md
@@ -0,0 +1,10 @@
+---
+title: High Peak Creatives
+techStack: []
+index: 999
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/personalizer.md b/components/data/FUTURE PROJECTS/personalizer.md
new file mode 100644
index 0000000..b911cf7
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/personalizer.md
@@ -0,0 +1,10 @@
+---
+title: Personalizer
+techStack: []
+index: 999
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/reactChildLock.md b/components/data/FUTURE PROJECTS/reactChildLock.md
new file mode 100644
index 0000000..ce45e9f
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/reactChildLock.md
@@ -0,0 +1,10 @@
+---
+title: React Child Lock
+techStack: []
+index: 999
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/swipeyJS.md b/components/data/FUTURE PROJECTS/swipeyJS.md
new file mode 100644
index 0000000..11dc966
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/swipeyJS.md
@@ -0,0 +1,10 @@
+---
+title: Swipey.js
+techStack: []
+index: 999
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/FUTURE PROJECTS/vExpo.md b/components/data/FUTURE PROJECTS/vExpo.md
new file mode 100644
index 0000000..233531d
--- /dev/null
+++ b/components/data/FUTURE PROJECTS/vExpo.md
@@ -0,0 +1,10 @@
+---
+title: vExpo
+techStack: []
+index: 1001
+images: [
+
+]
+---
+
+Enter description here
\ No newline at end of file
diff --git a/components/data/projects/adventCalendar.md b/components/data/projects/adventCalendar.md
new file mode 100644
index 0000000..e900537
--- /dev/null
+++ b/components/data/projects/adventCalendar.md
@@ -0,0 +1,21 @@
+---
+title: Advent Calendar
+techStack: ["Node.js", "MongoDB", "JavaScript", "HTML", "CSS"]
+index: 40
+images: [
+ {
+ url: /images/projects/adventCalendar/loginScreen.jpg,
+ altTxt: a screenshot of the advent calendar login screen
+ },
+ {
+ url: /images/projects/adventCalendar/adventCalendar.jpg,
+ altTxt: a screenshot showcasing the advent calendar
+ },
+ {
+ url: /images/projects/adventCalendar/christmasDay.jpg,
+ altTxt: a screenshot of Christmas day in the advent calendar app
+ }
+]
+---
+
+This advent calendar was a gift for my family and everyday of December, up until Christmas it would give them a hint as to what their presents were going to be. The calendar was full of animations with snow constantly falling and gift wrap when opening a new day on the calendar. This project also featured a backend with email & password authentication using Firebase. This protected any leaks as only data up and until that day would be sent to the app from the server.
\ No newline at end of file
diff --git a/components/data/projects/busrides.md b/components/data/projects/busrides.md
new file mode 100644
index 0000000..7652311
--- /dev/null
+++ b/components/data/projects/busrides.md
@@ -0,0 +1,17 @@
+---
+title: Busrides
+techStack: ["Next.js", "React", "Node.js", "JavaScript", "HTML", "CSS", "Adobe XD", "React Native"]
+index: 0
+images: [
+ {
+ url: /images/projects/busrides/home.png,
+ altTxt: a screenshot of the Busrides home page
+ },
+ {
+ url: /images/projects/busrides/authorDetails.png,
+ altTxt: a screenshot of the author details page in Busrides
+ }
+]
+---
+
+Introducing Busrides: As the lead developer and designer, I transformed Busrides into a dynamic micro-learning platform with a name inspired by those fleeting moments on a bus ride to work when one can acquire new knowledge. Originally a modest WordPress site with a handful of users, I embarked on a comprehensive redesign, exploring alternative headless CMS options, and ultimately rebuilding the platform using Next.js and Ghost CMS. Along the way, I introduced engaging events, including an advent calendar filled with daily data insights and an interactive Easter egg hunt that led users across the site. Thanks to these enhancements and the platform's new design, Busrides experienced remarkable growth, attracting over 10,000 users monthly. Recognized for my technical and communication skills, I was offered a full-time, indeterminate position, where I not only met with business owners to translate objectives into code but also excelled in writing clear and accessible documentation, earning praise from non-technical team members. Busrides has evolved into a thriving hub for learning, made possible by this transformative journey.
\ No newline at end of file
diff --git a/components/data/projects/gcTortilla.md b/components/data/projects/gcTortilla.md
new file mode 100644
index 0000000..1272c89
--- /dev/null
+++ b/components/data/projects/gcTortilla.md
@@ -0,0 +1,25 @@
+---
+title: GC-Tortilla
+techStack: [React]
+index: 31
+images: [
+ {
+ url: /images/projects/gcTortilla/defaultSplashScreen.png,
+ altTxt: a screenshot of the default splash screen component in the GC-Tortilla library
+ },
+ {
+ url: /images/projects/gcTortilla/logoSplashScreen.png,
+ altTxt: a screenshot showing a customized version of the splash screen component in GC-Tortilla
+ },
+ {
+ url: /images/projects/gcTortilla/headerAndFooter.png,
+ altTxt: a screenshot showcasing the header and footer components in GC-Tortilla
+ },
+ {
+ url: /images/projects/gcTortilla/npm.png,
+ altTxt: a screenshot of GC-Tortilla on NPM
+ }
+]
+---
+
+[GC-Tortilla](https://www.npmjs.com/package/gc-tortilla) is a React library designed to help speed up the development of Government of Canada applications by providing pre-approved branded components. All elements in the components are fully customizable so they can be used by different teams with their own branding as needed. With GC-Tortilla you get a Splash Screen, Header Brand Bar and a Footer all of which are brand ready. The splash screen is unique in that it will use LocalStorage so that once the user set's their initial language preference they will not be forced to re-visit the splash screen every time they access the app. You can utilize all components pre-packaged together by importing GC-Tortilla or you have the option to import GCSplashScreen, GCHeader and GCFooter separately to use them on their own. This library is hosted on NPM and showcases my ability to write clear & concise documentation.
\ No newline at end of file
diff --git a/components/data/projects/lightningTutoring.md b/components/data/projects/lightningTutoring.md
new file mode 100644
index 0000000..93b18a2
--- /dev/null
+++ b/components/data/projects/lightningTutoring.md
@@ -0,0 +1,33 @@
+---
+title: Lightning Tutoring
+techStack: ["Adobe XD"]
+index: 60
+images: [
+ {
+ url: /images/projects/lightningTutoring/browseTutorsDark.jpg,
+ altTxt: a screenshot showcasing a list of available tutors in dark mode on Lightning Tutoring
+ },
+ {
+ url: /images/projects/lightningTutoring/tutorDetailsDark.jpg,
+ altTxt: a screenshot of the tutor details screen in dark mode on Lightning Tutoring
+ },
+ {
+ url: /images/projects/lightningTutoring/bookTutorDark.jpg,
+ altTxt: a screenshot of the tutor booking screen in dark mode on Lightning Tutoring
+ },
+ {
+ url: /images/projects/lightningTutoring/browseTutorsLight.jpg,
+ altTxt: a screenshot showcasing a list of available tutors in light mode on Lightning Tutoring
+ },
+ {
+ url: /images/projects/lightningTutoring/tutorDetailsLight.jpg,
+ altTxt: a screenshot of the tutor details screen in light mode on Lightning Tutoring
+ },
+ {
+ url: /images/projects/lightningTutoring/bookTutorLight.jpg,
+ altTxt: a screenshot of the tutor booking screen in light mode on Lightning Tutoring
+ }
+]
+---
+
+Lightning was a design project to create a tutoring app prototype. The goal here was to design the app to match the native iOS theme. Taking elements from various parts of iOS, I was able to come up with a clean and clear design. I then took the time to create a dark themed version, while still maintaining the iOS look and feel.
\ No newline at end of file
diff --git a/components/data/projects/masvMobile.md b/components/data/projects/masvMobile.md
new file mode 100644
index 0000000..2a690f2
--- /dev/null
+++ b/components/data/projects/masvMobile.md
@@ -0,0 +1,29 @@
+---
+title: MASV Mobile
+techStack: ["Swift", "Figma"]
+index: 70
+images: [
+ {
+ url: /images/projects/masvMobile/portalSelection.jpg,
+ altTxt: a screenshot of the portal list view in MASV Mobile
+ },
+ {
+ url: /images/projects/masvMobile/masvPortal.jpg,
+ altTxt: a screenshot of the MASV portal in MASV Mobile
+ },
+ {
+ url: /images/projects/masvMobile/masvPortalTransferComplete.jpg,
+ altTxt: a screenshot showing a completed file transfer in the MASV portal
+ },
+ {
+ url: /images/projects/masvMobile/disneyPortal.jpg,
+ altTxt: a screenshot of the Disney portal in MASV Mobile
+ },
+ {
+ url: /images/projects/masvMobile/disneyPortalTransferComplete.jpg,
+ altTxt: a screenshot showing a completed file transfer in the Disney portal
+ }
+]
+---
+
+MASV Mobile is a team based applied research project through Algonquin College, being built for [MASV](https://massive.io) to compliment their existing products. The goal for the app was to support MASV Portals, which are setup by companies & creative professionals who wish to crowdsource files. Portals are custom branded to reflect the hosting party, and can be accessed by users to upload files. My role was project lead, where I led our team of six throughout the entire design and development process. I worked closely with the team in all aspects as we designed & developed the app.
\ No newline at end of file
diff --git a/components/data/projects/more.md b/components/data/projects/more.md
new file mode 100644
index 0000000..1d92d60
--- /dev/null
+++ b/components/data/projects/more.md
@@ -0,0 +1,7 @@
+---
+title: Many more!
+techStack: ["Node.js", "JavaScript", "HTML", "CSS", "MongoDB", "Adobe XD", "Figma", "Swift", "React", "React Native", "Next.js"]
+index: 999999
+---
+
+Between client projects and private repos, I have many more examples that I’d love to be able to show you! If you’d like to see more of my work please don’t hesitate to contact me. You can reach me through any means listed at the top of the page, or via email or phone as listed on my [resume](/Jordan%20Morrison%20Resume.pdf).
\ No newline at end of file
diff --git a/components/data/projects/openCall.md b/components/data/projects/openCall.md
new file mode 100644
index 0000000..21abd56
--- /dev/null
+++ b/components/data/projects/openCall.md
@@ -0,0 +1,29 @@
+---
+title: Open Call
+techStack: ["React", "JavaScript", "HTML", "CSS"]
+index: 10
+images: [
+ {
+ url: /images/projects/openCall/home.png,
+ altTxt: a screenshot of the Open Call home page
+ },
+ {
+ url: /images/projects/openCall/contribute.png,
+ altTxt: a screenshot showing how to contribute to the Open Call catalogue with a short description of the project
+ },
+ {
+ url: /images/projects/openCall/about.png,
+ altTxt: a screenshot about page in Open Call
+ },
+ {
+ url: /images/projects/openCall/faq.png,
+ altTxt: a screenshot of the FAQ page in Open Call
+ },
+ {
+ url: /images/projects/openCall/successStories.png,
+ altTxt: a screenshot showing the success stories catalogue in Open Call
+ }
+]
+---
+
+Open Call was a project initiated and quickly built during the heart of the COVID-19 pandemic, serving as a lifeline to smaller organizations and municipalities by providing them with essential COVID-19 related tools and resources. Collaborating with the Canadian Digital Service, Code for Canada and the Canada School of Public Service, I volunteered outside of my normal duties, taking on the role of lead developer for this crucial initiative. Open Call functioned as a comprehensive catalog of valuable COVID-related resources, tools and APIs powered by a simple yet powerful backend built on the Google sheets API - easily enabling non-technical staff to add new resources. My dedication and impact was so significant that it led to being scouted by the Chief Medical Officer of Canada, Dr. Theresa Tam to contribute to the development of a data management tool for handling the influx of COVID-19 data her team was receiving. The tool has since been decommissioned and with the API being taken down, the loading indicator now spins where the catalogue items were.
\ No newline at end of file
diff --git a/components/data/projects/photographyPortfolio.md b/components/data/projects/photographyPortfolio.md
new file mode 100644
index 0000000..d4d07df
--- /dev/null
+++ b/components/data/projects/photographyPortfolio.md
@@ -0,0 +1,41 @@
+---
+title: Photography Portfolio
+techStack: [Next.js, React, JavaScript, HTML, CSS]
+index: 30
+images: [
+ {
+ url: /images/projects/photographyPortfolio/home_light.png,
+ altTxt: a screenshot of the homepage for Jordan Morrison's photography portfolio
+ },
+ {
+ url: /images/projects/photographyPortfolio/photoGrid_light.png,
+ altTxt: a screenshot of the photo grid showcasing Jordan Morrison's photography work
+ },
+ {
+ url: /images/projects/photographyPortfolio/photoView_light.png,
+ altTxt: a screenshot of the fullscreen photo view on Jordan Morrison's photography portfolio
+ },
+ {
+ url: /images/projects/photographyPortfolio/contact_light.png,
+ altTxt: a screenshot of the contact page on Jordan Morrison's photography portfolio
+ },
+ {
+ url: /images/projects/photographyPortfolio/home_dark.png,
+ altTxt: a screenshot of the homepage in dark mode for Jordan Morrison's photography portfolio
+ },
+ {
+ url: /images/projects/photographyPortfolio/photoGrid_dark.png,
+ altTxt: a screenshot of the photo grid in dark mode showcasing Jordan Morrison's photography work
+ },
+ {
+ url: /images/projects/photographyPortfolio/photoView_dark.png,
+ altTxt: a screenshot of the fullscreen photo view in dark mode on Jordan Morrison's photography portfolio
+ },
+ {
+ url: /images/projects/photographyPortfolio/contact_dark.png,
+ altTxt: a screenshot of the contact page in dark mode on Jordan Morrison's photography portfolio
+ }
+]
+---
+
+Built as my own portfolio, [jordanmorrison.ca](https://jordanmorrison.ca) is a simple yet captivating website utilizing the latest web technologies. With millions of views on my social media it was important to create the site with lightweightness in mind as as the magnitude of visitors could quickly drive up hosting costs. With this, I'm proud to say I've done just that as the site remains online at near zero cost. Feature wise the site has a custom photo grid component, showcasing a selection of my photos along with a dynamic dark mode that automatically adjusts according to the user's browser and device settings. While simple, this site helps to create an immersive and visually stunning experience for visitors to explore my photographic work all while staying lightweight to keep costs down.
\ No newline at end of file
diff --git a/components/data/projects/pokedexGo.md b/components/data/projects/pokedexGo.md
new file mode 100644
index 0000000..e75cded
--- /dev/null
+++ b/components/data/projects/pokedexGo.md
@@ -0,0 +1,29 @@
+---
+title: Pokédex Go
+techStack: ["Node.js", "JavaScript", "HTML", "CSS"]
+index: 50
+images: [
+ {
+ url: /images/projects/pokedexGo/pokemonScreen.png,
+ altTxt: a screenshot of the Pokémon list view in Pokédex Go
+ },
+ {
+ url: /images/projects/pokedexGo/detailsScreen.png,
+ altTxt: a screenshot showcasing the stats of a Pikachu in Pokédex Go
+ },
+ {
+ url: /images/projects/pokedexGo/newsPopup.png,
+ altTxt: a screenshot of the news screen in Pokédex Go
+ },
+ {
+ url: /images/projects/pokedexGo/compareSelectScreen.png,
+ altTxt: a screenshot showcasing the layout for the compare Pokémon selection screen in in Pokédex Go
+ },
+ {
+ url: /images/projects/pokedexGo/compareScreen.png,
+ altTxt: a screenshot comparing Pokémon in Pokédex Go
+ }
+]
+---
+
+Starting out as a simple assignment, Pokédex Go grew into a large side project. We were to build a basic app with a list and detail view. I chose to base my app on the popular game Pokémon Go, creating a wiki like app for players. After submitting my assignment I began adding more features and screens, integrating tools like Google Analytics and added a JSON server used to detect updates and news items. I then rolled out the app by advertising on social media and began having daily users!
\ No newline at end of file
diff --git a/components/data/projects/winterludeApp.md b/components/data/projects/winterludeApp.md
new file mode 100644
index 0000000..24f71dd
--- /dev/null
+++ b/components/data/projects/winterludeApp.md
@@ -0,0 +1,29 @@
+---
+title: Winterlude App
+techStack: ["Adobe XD"]
+index: 80
+images: [
+ {
+ url: /images/projects/winterludeApp/home.jpg,
+ altTxt: a screenshot of the homepage for the Winterlude App
+ },
+ {
+ url: /images/projects/winterludeApp/hamburgerMenu.jpg,
+ altTxt: a screenshot of the Winterlude App menu
+ },
+ {
+ url: /images/projects/winterludeApp/events.jpg,
+ altTxt: a screenshot of the activities screen for the Winterlude App
+ },
+ {
+ url: /images/projects/winterludeApp/eventDetails.jpg,
+ altTxt: a screenshot showcasing the layout for the activity details page in the Winterlude App
+ },
+ {
+ url: /images/projects/winterludeApp/map.jpg,
+ altTxt: a screenshot of the map view in the Winterlude App
+ }
+]
+---
+
+This was an assignment in one of my design courses at Algonquin College. We were to design an app for [Winterlude](https://www.canada.ca/en/canadian-heritage/campaigns/winterlude.html), a large winter festival that takes place in Ottawa. The prototype was built using Adobe XD, and features a handful of screens.
\ No newline at end of file
diff --git a/components/data/socials.json b/components/data/socials.json
new file mode 100644
index 0000000..f641591
--- /dev/null
+++ b/components/data/socials.json
@@ -0,0 +1,27 @@
+[
+ {
+ "icon": "instagram",
+ "link": "https://www.instagram.com/morrison_jordan/",
+ "altTxt": "View Jordan Morrison's Instagram"
+ },
+ {
+ "icon": "x",
+ "link": "https://twitter.com/J0rdan_Morrison",
+ "altTxt": "See Jordan Morrison on X"
+ },
+ {
+ "icon": "github",
+ "link": "https://github.com/Jordan-Morrison",
+ "altTxt": "Check out Jordan Morrison on GitHub"
+ },
+ {
+ "icon": "linkedin",
+ "link": "https://www.linkedin.com/in/jordan--morrison/",
+ "altTxt": "Connect with Jordan Morrison on LinkedIn"
+ },
+ {
+ "icon": "resume",
+ "link": "./Jordan Morrison Resume.pdf",
+ "altTxt": "View or download a copy of Jordan Morrison's resume"
+ }
+]
\ No newline at end of file
diff --git a/components/data/techStacks.json b/components/data/techStacks.json
new file mode 100644
index 0000000..aa9c9cf
--- /dev/null
+++ b/components/data/techStacks.json
@@ -0,0 +1,46 @@
+[
+ {
+ "name": "JavaScript",
+ "icon": "/images/techIcons/javaScript.png"
+ },
+ {
+ "name": "React",
+ "icon": "/images/techIcons/react.png"
+ },
+ {
+ "name": "React Native",
+ "icon": "/images/techIcons/react.png"
+ },
+ {
+ "name": "Node.js",
+ "icon": "/images/techIcons/nodejs.png"
+ },
+ {
+ "name": "Next.js",
+ "icon": "/images/techIcons/nextjs.png"
+ },
+ {
+ "name": "MongoDB",
+ "icon": "/images/techIcons/mongoDB.png"
+ },
+ {
+ "name": "Adobe XD",
+ "icon": "/images/techIcons/adobeXD.png"
+ },
+ {
+ "name": "HTML",
+ "icon": "/images/techIcons/html.png"
+ },
+ {
+ "name": "CSS",
+ "icon": "/images/techIcons/css.png"
+ },
+ {
+ "name": "Swift",
+ "icon": "/images/techIcons/swift.png"
+ },
+ {
+ "name": "Figma",
+ "icon": "/images/techIcons/figma.png"
+ }
+]
\ No newline at end of file
diff --git a/components/icons/selection.json b/components/icons/selection.json
new file mode 100644
index 0000000..bf612f8
--- /dev/null
+++ b/components/icons/selection.json
@@ -0,0 +1 @@
+{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M414.058 762.952l-388.686-388.688c-18.746-18.746-18.746-49.138 0-67.882l45.334-45.334c18.714-18.714 49.044-18.75 67.802-0.080l309.492 308.042 309.49-308.042c18.758-18.67 49.088-18.634 67.802 0.080l45.334 45.334c18.746 18.746 18.746 49.138 0 67.882l-388.684 388.688c-18.746 18.744-49.138 18.744-67.884 0z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["chevron-down-solid"]},"attrs":[{}],"properties":{"order":14,"id":1,"name":"chevron-down","prevSize":32,"code":59653},"setIdx":0,"setId":5,"iconIdx":0},{"icon":{"paths":["M1056 64h-960c-53 0-96 43-96 96v704c0 53 43 96 96 96h960c53 0 96-43 96-96v-704c0-53-43-96-96-96zM1056 864h-960v-704h960v704zM416 512c70.6 0 128-57.4 128-128s-57.4-128-128-128-128 57.4-128 128 57.4 128 128 128zM236.8 768h358.4c24.8 0 44.8-17.2 44.8-38.4v-38.4c0-63.6-60.2-115.2-134.4-115.2-21.6 0-37.4 16-89.6 16-53.8 0-66.8-16-89.6-16-74.2 0-134.4 51.6-134.4 115.2v38.4c0 21.2 20 38.4 44.8 38.4zM720 640h224c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zM720 512h224c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zM720 384h224c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16z"],"attrs":[{}],"width":1152,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["address-card-regular"]},"attrs":[{}],"properties":{"order":11,"id":0,"name":"resume","prevSize":32,"code":59652},"setIdx":0,"setId":5,"iconIdx":1},{"icon":{"paths":["M384 384h177.106v90.782h2.532c24.64-44.194 84.958-90.782 174.842-90.782 186.946 0 221.52 116.376 221.52 267.734v308.266h-184.61v-273.278c0-65.184-1.334-149.026-96.028-149.026-96.148 0-110.82 70.986-110.82 144.292v278.012h-184.542v-576z","M64 384h192v576h-192v-576z","M256 224c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["linkedin","brand","social"],"grid":16},"attrs":[{},{},{}],"properties":{"order":1,"id":0,"name":"linkedin","prevSize":32,"code":59648},"setIdx":1,"setId":4,"iconIdx":0},{"icon":{"paths":["M512 0c-139.093 0-156.459 0.64-211.072 3.072-54.528 2.56-91.648 11.136-124.288 23.808-33.664 13.056-62.251 30.592-90.709 59.051s-46.037 57.003-59.051 90.709c-12.672 32.64-21.291 69.76-23.808 124.288-2.56 54.613-3.072 71.979-3.072 211.072s0.64 156.459 3.072 211.072c2.56 54.485 11.136 91.648 23.808 124.288 13.056 33.621 30.592 62.251 59.051 90.709 28.459 28.416 57.003 46.037 90.709 59.051 32.683 12.629 69.803 21.291 124.288 23.808 54.613 2.56 71.979 3.072 211.072 3.072s156.459-0.64 211.072-3.072c54.485-2.56 91.648-11.179 124.288-23.808 33.621-13.056 62.251-30.635 90.709-59.051 28.416-28.459 46.037-56.96 59.051-90.709 12.629-32.64 21.291-69.803 23.808-124.288 2.56-54.613 3.072-71.979 3.072-211.072s-0.64-156.459-3.072-211.072c-2.56-54.485-11.179-91.691-23.808-124.288-13.056-33.664-30.635-62.251-59.051-90.709-28.459-28.459-56.96-46.037-90.709-59.051-32.64-12.672-69.803-21.291-124.288-23.808-54.613-2.56-71.979-3.072-211.072-3.072zM512 92.16c136.661 0 152.96 0.683 206.933 3.029 49.92 2.347 77.013 10.624 95.019 17.707 23.979 9.259 40.96 20.352 58.965 38.229 17.877 17.92 28.971 34.944 38.229 58.923 6.997 18.005 15.36 45.099 17.621 95.019 2.432 54.016 2.987 70.229 2.987 206.933s-0.64 152.96-3.157 206.933c-2.603 49.92-10.923 77.013-17.963 95.019-9.557 23.979-20.437 40.96-38.357 58.965-17.877 17.877-35.157 28.971-58.88 38.229-17.92 6.997-45.44 15.36-95.36 17.621-54.357 2.432-70.357 2.987-207.317 2.987-137.003 0-153.003-0.64-207.317-3.157-49.963-2.603-77.483-10.923-95.403-17.963-24.277-9.557-40.96-20.437-58.837-38.357-17.963-17.877-29.44-35.157-38.4-58.88-7.040-17.92-15.317-45.44-17.92-95.36-1.92-53.76-2.603-70.357-2.603-206.677 0-136.363 0.683-153.003 2.603-207.403 2.603-49.92 10.88-77.397 17.92-95.317 8.96-24.32 20.437-40.96 38.4-58.923 17.877-17.877 34.56-29.397 58.837-38.315 17.92-7.083 44.843-15.403 94.763-17.963 54.4-1.92 70.4-2.56 207.317-2.56zM512 249.088c-145.28 0-262.912 117.76-262.912 262.912 0 145.28 117.76 262.912 262.912 262.912 145.28 0 262.912-117.76 262.912-262.912 0-145.28-117.76-262.912-262.912-262.912zM512 682.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM846.763 238.72c0 33.92-27.563 61.44-61.44 61.44-33.92 0-61.44-27.563-61.44-61.44s27.563-61.397 61.44-61.397c33.835-0.043 61.44 27.52 61.44 61.397z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["instagram"],"grid":16,"colorPermutations":{}},"attrs":[],"properties":{"order":1,"id":2,"name":"instagram","prevSize":32,"code":59649},"setIdx":2,"setId":3,"iconIdx":0},{"icon":{"paths":["M512 12.672c-282.88 0-512 229.248-512 512 0 226.261 146.688 418.133 350.080 485.76 25.6 4.821 34.987-11.008 34.987-24.619 0-12.16-0.427-44.373-0.64-87.040-142.421 30.891-172.459-68.693-172.459-68.693-23.296-59.093-56.96-74.88-56.96-74.88-46.379-31.744 3.584-31.104 3.584-31.104 51.413 3.584 78.421 52.736 78.421 52.736 45.653 78.293 119.851 55.68 149.12 42.581 4.608-33.109 17.792-55.68 32.427-68.48-113.707-12.8-233.216-56.832-233.216-253.013 0-55.893 19.84-101.547 52.693-137.387-5.76-12.928-23.040-64.981 4.48-135.509 0 0 42.88-13.739 140.8 52.48 40.96-11.392 84.48-17.024 128-17.28 43.52 0.256 87.040 5.888 128 17.28 97.28-66.219 140.16-52.48 140.16-52.48 27.52 70.528 10.24 122.581 5.12 135.509 32.64 35.84 52.48 81.493 52.48 137.387 0 196.693-119.68 240-233.6 252.587 17.92 15.36 34.56 46.763 34.56 94.72 0 68.523-0.64 123.563-0.64 140.203 0 13.44 8.96 29.44 35.2 24.32 204.843-67.157 351.403-259.157 351.403-485.077 0-282.752-229.248-512-512-512z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["github"],"grid":16},"attrs":[{}],"properties":{"order":1,"id":1,"name":"github","prevSize":32,"code":59650},"setIdx":2,"setId":3,"iconIdx":1},{"icon":{"paths":["M778.411 96h141.141l-308.352 352.427 362.752 479.573h-284.032l-222.464-290.859-254.549 290.859h-141.227l329.813-376.96-347.989-455.040h291.243l201.088 265.856zM728.875 843.52h78.208l-504.832-667.477h-83.925z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["x","twitter"],"grid":16},"attrs":[{}],"properties":{"order":6,"id":0,"name":"x","prevSize":32,"code":59651},"setIdx":2,"setId":3,"iconIdx":2}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon"},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16,"showGrid":false}}
\ No newline at end of file
diff --git a/components/molecules/NavButtons.js b/components/molecules/NavButtons.js
new file mode 100644
index 0000000..19978c0
--- /dev/null
+++ b/components/molecules/NavButtons.js
@@ -0,0 +1,24 @@
+import zenScroll from 'zenscroll';
+import IcomoonReact from 'icomoon-react';
+import iconSet from "@/components/icons/selection.json";
+import styles from '@/styles/NavButtons.module.css';
+
+export default function NavButtons() {
+
+ return (
+
+ )
+}
\ No newline at end of file
diff --git a/components/organisms/Footer.js b/components/organisms/Footer.js
new file mode 100644
index 0000000..ab0585c
--- /dev/null
+++ b/components/organisms/Footer.js
@@ -0,0 +1,20 @@
+import IcomoonReact from "icomoon-react";
+import data from '../data/socials.json';
+import iconSet from "../icons/selection.json";
+import styles from '@/styles/Footer.module.css';
+
+export default function Footer() {
+
+ return (
+