diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 15f1d65..0000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,28 +0,0 @@
-module.exports = {
- root: true,
- env: {
- node: true
- },
- extends: [
- 'plugin:vue/essential',
- '@vue/standard'
- ],
- parserOptions: {
- parser: 'babel-eslint'
- },
- rules: {
- 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
- },
- overrides: [
- {
- files: [
- '**/__tests__/*.{j,t}s?(x)',
- '**/tests/unit/**/*.spec.{j,t}s?(x)'
- ],
- env: {
- jest: true
- }
- }
- ]
-}
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..bffb357
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4b58a71..0813681 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,42 +1,42 @@
-name: test, build and deploy site
-on: [push]
-jobs:
- cypress-run:
- runs-on: ubuntu-latest
- steps:
- - name: checkout
- uses: actions/checkout@v3
- - name: run e2e tests
- uses: cypress-io/github-action@v5
- with:
- start: npm run ci:e2e
- env:
- CYPRESS_baseUrl: http://localhost:8080/
- - uses: actions/upload-artifact@v3
- if: failure()
- with:
- name: cypress-screenshots
- path: ./cypress/videos/
- build:
- needs: cypress-run
- runs-on: ubuntu-latest
- if: github.ref == 'refs/heads/main'
- steps:
- - uses: actions/checkout@v3
- - name: setup node
- uses: actions/setup-node@v3
- with:
- node-version: '18.x'
- cache: 'npm'
- - name: build for static hosting
- run: |
- npm install
- npm run docs:build
- touch docs/.vitepress/dist/.nojekyll # https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/
- - name: deploy the site
- uses: crazy-max/ghaction-github-pages@v2
- with:
- build_dir: docs/.vitepress/dist/
- fqdn: ${{ secrets.SITE_FQDN }}
- env:
- GH_PAT: ${{ secrets.DEPLOYMENT_PAT }}
+# name: test, build and deploy site
+# on: [push]
+# jobs:
+# cypress-run:
+# runs-on: ubuntu-latest
+# steps:
+# - name: checkout
+# uses: actions/checkout@v3
+# - name: run e2e tests
+# uses: cypress-io/github-action@v5
+# with:
+# start: npm run ci:e2e
+# env:
+# CYPRESS_baseUrl: http://localhost:8080/
+# - uses: actions/upload-artifact@v3
+# if: failure()
+# with:
+# name: cypress-screenshots
+# path: ./cypress/videos/
+# build:
+# needs: cypress-run
+# runs-on: ubuntu-latest
+# if: github.ref == 'refs/heads/main'
+# steps:
+# - uses: actions/checkout@v3
+# - name: setup node
+# uses: actions/setup-node@v3
+# with:
+# node-version: '18.x'
+# cache: 'npm'
+# - name: build for static hosting
+# run: |
+# npm install
+# npm run docs:build
+# touch docs/.vitepress/dist/.nojekyll # https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/
+# - name: deploy the site
+# uses: crazy-max/ghaction-github-pages@v2
+# with:
+# build_dir: docs/.vitepress/dist/
+# fqdn: ${{ secrets.SITE_FQDN }}
+# env:
+# GH_PAT: ${{ secrets.DEPLOYMENT_PAT }}
diff --git a/.gitignore b/.gitignore
index 49eb00b..8651177 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,20 +1,39 @@
-.DS_Store
-node_modules
-/dist
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-/tests/e2e/videos/
-/tests/e2e/screenshots/
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+# testing
+/coverage
-# local env files
-.env.local
-.env.*.local
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
-# Log files
+# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-pnpm-debug.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
# Editor directories and files
.idea
@@ -25,24 +44,11 @@ pnpm-debug.log*
*.sln
*.sw?
-# Stores VSCode versions used for testing VSCode extensions
-.vscode-test
-
-# cypress
-cypress/videos/
-
-# latex build output
-public/*.aux
-public/*.out
-public/*.log
-
# python
__pycache__
-
-# vite build
-docs/.vitepress/dist/
-docs/.vitepress/cache/
+# Stores VSCode versions used for testing VSCode extensions
+.vscode-test
# cypress
cypress/videos
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..7f62b1f
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,29 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "chrome",
+ "request": "launch",
+ "name": "vuejs: chrome",
+ "url": "http://localhost:8080",
+ "webRoot": "${workspaceFolder}/src",
+ "breakOnLoad": true,
+ "sourceMapPathOverrides": {
+ "webpack:///src/*": "${webRoot}/*"
+ }
+ },
+ {
+ "type": "firefox",
+ "request": "launch",
+ "name": "vuejs: firefox",
+ "url": "http://localhost:8080",
+ "webRoot": "${workspaceFolder}/src",
+ "pathMappings": [
+ {
+ "url": "webpack:///src/",
+ "path": "${webRoot}/"
+ }
+ ]
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index dfeff23..627f5ac 100644
--- a/README.md
+++ b/README.md
@@ -1,80 +1,55 @@
-# clintp.xyz - my bio site ![test, build and deploy site](https://github.com/yuhonas/clintp.xyz/workflows/test,%20build%20and%20deploy%20site/badge.svg)
-
-![Site Preview](./gh-site-preview.avif)
+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
-This is a simple one page bio site that uses [vitepress](https://vitepress.dev/) with some basic CI/CD using [github actions](./.github/workflows/ci.yml) and a resume built using [latex](https://www.latex-project.org/)
-
-### Prerequisites
-
-### Site
-
-* Node.js 18.x
+First, run the development server:
-### Installing
-
-Install all our dependencies
-
-```
-$ npm install
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
```
-## Development
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-To run a local web server for development
+You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
-```
-$ npm run docs:dev
-```
+[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.ts`.
-## Running the tests
+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.
-### End-to-end tests
-```
-npm run ci:e2e
-```
+## Learn More
-## Building the site
+To learn more about Next.js, take a look at the following resources:
-To build a static website for hosting
-
-```
-npm run docs:build
-```
+- [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.
-## Deployment
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+## Deploy on Vercel
-This site is automatically built and deployed by [github actions](https://github.com/actions) to [Github Pages](https://pages.github.com/)
+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.
-## Building the resume
-
-My resume is built using [latex](https://www.latex-project.org/)
-
-![picture of latex envy](./gh-latexenvy.png)
-
-### Dependencies
-
-You will need [ basictex ](https://tug.org/mactex/morepackages.html) installed in order to produce a pdf
-or (what ever format you want)
-
-Install basictex using homebrew
-
-```
-$ brew install basictex
+## Top repos
+```bash
+curl -L \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/users/yuhonas/repos | jq '[sort_by(.stargazers_count) | reverse | limit(4; .[])]'
```
-The following packages are utilised in the latex document and will also need to be installed via latex's package manager
+## TODO
+Add timeline - https://matplotlib.org/stable/gallery/lines_bars_and_markers/timeline.html
-```
-$ tlmgr install moresize raleway ly1 fontawesome
-```
-
-To export it to pdf
-
-```
-$ npm resume:export
-```
+## Links
+* https://github.com/gauravghongde/social-icons
+* https://www.svgrepo.com/svg/342086/open-source-initiative
diff --git a/cypress/e2e/site.cy.js b/cypress/e2e/site.cy.js
index f8268b5..974bf6b 100644
--- a/cypress/e2e/site.cy.js
+++ b/cypress/e2e/site.cy.js
@@ -1,41 +1,54 @@
///
-context('site', () => {
+context("site", () => {
beforeEach(() => {
- cy.visit('/')
- })
-
- it('should have the correct meta title', () => {
- cy.title().should('eq', 'clintp.xyz | my bio in two mouse clicks or less')
- })
-
- it('should have the correct meta description', () => {
- cy.document().get('head meta[name="description"]')
- .should('have.attr', 'content', 'my bio in two mouse clicks or less')
- })
-
- it('should have the correct opening page title', () => {
- cy.get('h1').contains('clintp.xyz')
- })
-
- it('should have my email address somewhere so I can be contacted', () => {
- cy.contains('hello@clintp.xyz')
- })
-
- it('should have a working link to my resume', () => {
- cy.get('a').contains('Resume').should('have.attr', 'href', '/Resume_ClintPlummer_ENMR.pdf').then(($anchor) => {
- cy.request($anchor.attr('href')).its('status').should('eq', 200)
- })
- })
-
- it('should have a working link to my ipynb', () => {
- cy.get('a').contains('ipynb').should('have.attr', 'href', 'https://github.com/yuhonas/clintp.xyz/blob/main/docs/public/Resume_ClintPlummer_ENMR.ipynb').then(($anchor) => {
- cy.request($anchor.attr('href')).its('status').should('eq', 200)
- })
- })
-
- it('should have a link to my linkedin', () => {
- cy.get('a').contains('Linked-In').should('have.attr', 'href', 'https://www.linkedin.com/in/clint-plummer/')
- })
-
-})
+ cy.visit("/");
+ });
+
+ it("should have the correct meta title", () => {
+ cy.title().should("eq", "clintp.xyz | my bio in two mouse clicks or less");
+ });
+
+ it("should have the correct meta description", () => {
+ cy.document()
+ .get('head meta[name="description"]')
+ .should("have.attr", "content", "my bio in two mouse clicks or less");
+ });
+
+ it("should have the correct opening page title", () => {
+ cy.get("h1").contains("clintp.xyz");
+ });
+
+ it("should have my email address somewhere so I can be contacted", () => {
+ cy.contains("hello@clintp.xyz");
+ });
+
+ it("should have a working link to my resume", () => {
+ cy.get("a[href='/resume.clintp.docx']")
+ .should("exist")
+ .then(($anchor) => {
+ cy.request($anchor.attr("href")).its("status").should("eq", 200);
+ });
+ });
+
+ // it("should have a working link to my ipynb", () => {
+ // cy.get("a")
+ // .contains("ipynb")
+ // .should(
+ // "have.attr",
+ // "href",
+ // "https://github.com/yuhonas/clintp.xyz/blob/main/docs/public/Resume_ClintPlummer_ENMR.ipynb"
+ // )
+ // .then(($anchor) => {
+ // cy.request($anchor.attr("href")).its("status").should("eq", 200);
+ // });
+ // });
+
+ it("should have a working link to my linkedin", () => {
+ cy.get("a[href='https://www.linkedin.com/in/clint-plummer/']")
+ .should("exist")
+ .then(($anchor) => {
+ cy.request($anchor.attr("href")).its("status").should("eq", 200);
+ });
+ });
+});
diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
deleted file mode 100644
index 6cdf2d6..0000000
--- a/docs/.vitepress/config.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { defineConfig } from 'vitepress'
-
-// https://vitepress.dev/reference/site-config
-export default defineConfig({
- head: [
- ['link', { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Fira+Code:400,700&display=swap' }],
- ['link', { rel: 'icon', href: '/favicon.svg', type: 'image/svg+xml' }],
- ['link', { rel: 'apple-touch-icon', href: '/apple-touch-icon.png', sizes: '180x180' }],
- ['link', { rel: 'icon', href: '/favicon-32x32.png', type: 'image/png', sizes: '32x32' }],
- ['link', { rel: 'icon', href: '/favicon-16x16.png', type: 'image/png', sizes: '16x16' }],
- ['link', { rel: 'manifest', href: '/site.webmanifest' }],
- ['link', { rel: 'mask-icon', href: '/safari-pinned-tab.svg' }],
- ],
- title: "clintp.xyz",
- titleTemplate: 'clintp.xyz | :title',
- description: "my bio in two mouse clicks or less",
- themeConfig: {
- // https://vitepress.dev/reference/default-theme-config
- }
-})
diff --git a/docs/public/Resume_ClintPlummer_ENMR-2020.docx b/docs/public/Resume_ClintPlummer_ENMR-2020.docx
deleted file mode 100644
index 432b3df..0000000
Binary files a/docs/public/Resume_ClintPlummer_ENMR-2020.docx and /dev/null differ
diff --git a/docs/public/Resume_ClintPlummer_ENMR.out b/docs/public/Resume_ClintPlummer_ENMR.out
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/public/developercv.cls b/docs/public/developercv.cls
deleted file mode 100644
index 08fe9a0..0000000
--- a/docs/public/developercv.cls
+++ /dev/null
@@ -1,206 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Developer CV
-% LaTeX Class
-% Version 1.0 (28/1/19)
-%
-% This class originates from:
-% http://www.LaTeXTemplates.com
-%
-% Authors:
-% Jan Vorisek (jan@vorisek.me)
-% Based on a template by Jan Küster (info@jankuester.com)
-% Modified for LaTeX Templates by Vel (vel@LaTeXTemplates.com)
-%
-% License:
-% The MIT License (see included LICENSE file)
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------------------------------------------------------
-% CLASS CONFIGURATION
-%----------------------------------------------------------------------------------------
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{developercv}[2019/01/28 Developer CV class v1.0]
-
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}} % Pass through any options to the base class
-\ProcessOptions\relax % Process given options
-
-\LoadClass{extarticle} % Load the base class
-
-%----------------------------------------------------------------------------------------
-% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
-%----------------------------------------------------------------------------------------
-
-\setlength{\parindent}{0mm} % Suppress paragraph indentation
-
-\usepackage[hidelinks]{hyperref} % Required for links but hide the default boxes around links
-
-\newcommand{\lorem}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.} % Dummy text
-
-\pagestyle{empty} % No headers or footers
-
-\usepackage{moresize} % Provides more font size commands (\HUGE and \ssmall)
-
-%----------------------------------------------------------------------------------------
-% PAGE LAYOUT
-%----------------------------------------------------------------------------------------
-
-\usepackage{geometry} % Required for adjusting page dimensions and margins
-
-\geometry{
- paper=a4paper, % Paper size, change to letterpaper for US letter size
- top=1.75cm, % Top margin
- bottom=1.75cm, % Bottom margin
- left=2cm, % Left margin
- right=2cm, % Right margin
- headheight=0.75cm, % Header height
- footskip=1cm, % Space from the bottom margin to the baseline of the footer
- headsep=0.5cm, % Space from the top margin to the baseline of the header
- %showframe, % Uncomment to show how the type block is set on the page
-}
-
-%----------------------------------------------------------------------------------------
-% FONTS
-%----------------------------------------------------------------------------------------
-
-\usepackage[utf8]{inputenc} % Required for inputting international characters
-\usepackage[T1]{fontenc} % Output font encoding for international characters
-
-\usepackage[default]{raleway}
-%\usepackage[defaultsans]{droidsans}
-%\usepackage{cmbright}
-%\usepackage{fetamont}
-%\usepackage[default]{gillius}
-%\usepackage{roboto}
-
-\renewcommand*\familydefault{\sfdefault} % Force the sans-serif version of any font used
-
-%------------------------------------------------
-
-\usepackage{fontawesome} % Required for FontAwesome icons
-
-% Command to output an icon in a black square box with text to the right
-\newcommand{\icon}[3]{% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
- \vcenteredhbox{\colorbox{black}{\makebox(#2, #2){\textcolor{white}{\large\csname fa#1\endcsname}}}}% Icon and box
- \hspace{0.2cm}% Whitespace
- \vcenteredhbox{\textcolor{black}{#3}}% Text
-}
-
-%----------------------------------------------------------------------------------------
-% GRAPHICS DEFINITIONS
-%----------------------------------------------------------------------------------------
-
-\usepackage{tikz} % Required for creating the plots
-\usetikzlibrary{shapes, backgrounds}
-\tikzset{x=1cm, y=1cm} % Default tikz units
-
-% Command to vertically centre adjacent content
-\newcommand{\vcenteredhbox}[1]{% The only parameter is for the content to centre
- \begingroup%
- \setbox0=\hbox{#1}\parbox{\wd0}{\box0}%
- \endgroup%
-}
-
-%----------------------------------------------------------------------------------------
-% CHARTS
-%----------------------------------------------------------------------------------------
-
-\newcounter{barcount}
-
-% Environment to hold a new bar chart
-\newenvironment{barchart}[1]{ % The only parameter is the maximum bar width, in cm
- \newcommand{\barwidth}{0.35}
- \newcommand{\barsep}{0.2}
-
- % Command to add a bar to the bar chart
- \newcommand{\baritem}[2]{ % The first argument is the bar label and the second is the percentage the current bar should take up of the total width
- \pgfmathparse{##2}
- \let\perc\pgfmathresult
-
- \pgfmathparse{#1}
- \let\barsize\pgfmathresult
-
- \pgfmathparse{\barsize*##2/100}
- \let\barone\pgfmathresult
-
- \pgfmathparse{(\barwidth*\thebarcount)+(\barsep*\thebarcount)}
- \let\barx\pgfmathresult
-
- \filldraw[fill=black, draw=none] (0,-\barx) rectangle (\barone,-\barx-\barwidth);
-
- \node [label=180:\colorbox{black}{\textcolor{white}{##1}}] at (0,-\barx-0.175) {};
- \addtocounter{barcount}{1}
- }
- \begin{tikzpicture}
- \setcounter{barcount}{0}
-}{
- \end{tikzpicture}
-}
-
-%------------------------------------------------
-
-\newcounter{a}
-\newcounter{b}
-\newcounter{c}
-
-% Command to output a number of automatically-sized bubbles from a string in the format of '/
+
+
+
+
+
+ );
+}
diff --git a/pages/api/hello.ts b/pages/api/hello.ts
new file mode 100644
index 0000000..ea77e8f
--- /dev/null
+++ b/pages/api/hello.ts
@@ -0,0 +1,13 @@
+// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
+import type { NextApiRequest, NextApiResponse } from "next";
+
+type Data = {
+ name: string;
+};
+
+export default function handler(
+ req: NextApiRequest,
+ res: NextApiResponse,
+) {
+ res.status(200).json({ name: "John Doe" });
+}
diff --git a/pages/index.tsx b/pages/index.tsx
new file mode 100644
index 0000000..63f2a7b
--- /dev/null
+++ b/pages/index.tsx
@@ -0,0 +1,110 @@
+import { Inter } from "next/font/google"
+import Image from "next/image";
+import Link from "next/link";
+import Head from "next/head";
+import { Key } from "react";
+const font = Inter({ subsets: ["latin"] });
+
+const resume = require('../resume/resume.clintp.json');
+// console.log(resume)
+
+const Header = () => {
+ return (
+
+