Skip to content

Commit

Permalink
more skills descriptions
Browse files Browse the repository at this point in the history
  • Loading branch information
jgettings committed Oct 2, 2024
1 parent 2ddb6d5 commit fd06c57
Show file tree
Hide file tree
Showing 25 changed files with 1,080 additions and 189 deletions.
1 change: 1 addition & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ module.exports = {
'react/no-unescaped-entities': 'off',
'react/jsx-one-expression-per-line': 'off',
'react/jsx-wrap-multilines': 'off',
'react/require-default-props': 'off',
// turned off because they were conflicting with prettier
'no-confusing-arrow': 'off',
'implicit-arrow-linebreak': 'off',
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,14 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-icons": "^5.3.0",
"react-markdown": "^9.0.1",
"react-scroll-parallax": "^3.4.5",
"react-simple-maps": "^3.0.0",
"swr": "^2.2.5",
"tailwind-merge": "^2.5.2",
"usehooks-ts": "^3.1.0",
"vite": "^5.4.6",
"vite-plugin-markdown": "^2.2.0",
"zod": "^3.23.8"
},
"devDependencies": {
Expand Down
11 changes: 0 additions & 11 deletions src/App.test.tsx

This file was deleted.

2 changes: 1 addition & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import Footer from 'components/Footer';
import Basics from 'pages/Basics';
import ScrollPages from 'components/ScrollPages';
import ResumeTimeline from 'pages/ResumeTimeline';
import theme from './flowbite-theme';
import Skills from 'pages/Skills';
import theme from './flowbite-theme';

const App: React.FC = () => (
<Flowbite theme={{ theme }}>
Expand Down
41 changes: 41 additions & 0 deletions src/components/ErrorBoundary.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* eslint-disable react/destructuring-assignment */
/* eslint-disable no-console */
import { Component, ErrorInfo, ReactNode } from 'react';

interface Props {
showErrorMessage?: boolean;
children?: ReactNode;
}

interface State {
hasError: boolean;
}

class ErrorBoundary extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = { hasError: false };
}

public static getDerivedStateFromError(): State {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}

public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
console.error('Uncaught error:', error, errorInfo);
}

public render() {
if (this.state.hasError && this.props.showErrorMessage) {
return <h1>Sorry.. there was an error</h1>;
}
if (this.state.hasError) {
return null;
}

return this.props.children;
}
}

export default ErrorBoundary;
70 changes: 37 additions & 33 deletions src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,43 @@ const Footer: React.FC = () => {
const isDesktop = useMediaQuery('(min-width: 768px)');

return (
<footer className="p-8 text-center md:fixed md:bottom-8 md:left-8 md:z-30 md:p-0 md:text-left">
<figure>
<Popover
placement={isDesktop ? 'right' : 'top'}
trigger="click"
arrow={false}
content={
<figcaption>
<Card className="m-0 min-w-96 [&>*]:gap-2 [&>*]:p-4">
<p className="my-2 text-xs">
{isDesktop ? 'Left: ' : 'Below: '}
Jen at Hálsanefshellir Cave, Iceland
</p>
<p className="my-2 text-xs">
<em>Background:</em> Niagara Gorge, downstream of Niagara
Falls near the Whirlpool Rapids on the US side
</p>
</Card>
</figcaption>
}
>
<button type="button" title="click for photo info">
<Avatar
tabIndex={0}
img="images/avatar.jpg"
rounded
size="xl"
alt="Jen - close up of face, in a cave on a black sand beach in Iceland"
/>
</button>
</Popover>
</figure>
</footer>
<>
<footer className="p-8 text-center md:fixed md:bottom-8 md:left-8 md:z-30 md:p-0 md:text-left">
<figure>
<Popover
placement={isDesktop ? 'right' : 'top'}
trigger="click"
arrow={false}
content={
<figcaption>
<Card className="m-0 min-w-96 [&>*]:gap-2 [&>*]:p-4">
<p className="my-2 text-xs">
{isDesktop ? 'Left: ' : 'Below: '}
Jen at Hálsanefshellir Cave, Iceland
</p>
<p className="my-2 text-xs">
<em>Background:</em> Niagara Gorge, downstream of Niagara
Falls near the Whirlpool Rapids on the US side
</p>
</Card>
</figcaption>
}
>
<button type="button" title="click for photo info">
<Avatar
tabIndex={0}
img="images/avatar.jpg"
rounded
size="xl"
alt="Jen - close up of face, in a cave on a black sand beach in Iceland"
/>
</button>
</Popover>
</figure>
</footer>
{/* Add space so you can always scroll to see bottom content */}
<div className="md:h-72" />
</>
);
};

Expand Down
21 changes: 21 additions & 0 deletions src/components/LoadingSkeleton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { twMerge } from 'tailwind-merge';

type LoadingSkeletonProps = {
className?: string;
};

/**
* https://flowbite.com/docs/components/skeleton/
*/
const LoadingSkeleton: React.FC<LoadingSkeletonProps> = ({ className }) => (
<div role="status" className={twMerge('max-w-sm animate-pulse', className)}>
<div className="mb-2.5 h-2 max-w-[360px] rounded-full bg-gray-200 dark:bg-gray-700" />
<div className="mb-2.5 h-2 rounded-full bg-gray-200 dark:bg-gray-700" />
<div className="mb-2.5 h-2 max-w-[330px] rounded-full bg-gray-200 dark:bg-gray-700" />
<div className="mb-2.5 h-2 max-w-[300px] rounded-full bg-gray-200 dark:bg-gray-700" />
<div className="h-2 max-w-[360px] rounded-full bg-gray-200 dark:bg-gray-700" />
<span className="sr-only">Loading</span>
</div>
);

export default LoadingSkeleton;
60 changes: 38 additions & 22 deletions src/data/resume.json
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,8 @@
"JS",
"React",
"ReactJS",
"Redux",
"Reakit",
"Yarn",
"NPM",
"Storybook",
Expand All @@ -431,14 +433,16 @@
"GraphQL",
"Apollo GraphQL",
"Recoil",
"Storybook",
"Webpack",
"Babel.js",
"eslint",
"prettier",
"ESLint",
"Prettier",
"CSS Modules",
"styled components",
"Material UI"
"Styled Components",
"Material UI",
"Formik",
"Yup",
"React Hook Form"
]
},
{
Expand All @@ -449,6 +453,7 @@
"CSS",
"JavaScript",
"JS",
"Twitter Bootstrap",
"PHP",
"React",
"AngularJS",
Expand All @@ -470,14 +475,10 @@
"React",
"React Testing Library",
"eslint/jsx-a11y",
"WCAG"
"WCAG",
"VoiceOver"
]
},
{
"name": "Agile",
"level": "Proficient",
"keywords": ["Jira", "Scrum", ""]
},
{
"name": "Automated Testing",
"level": "Master",
Expand All @@ -493,16 +494,17 @@
"Mocha",
"jUnit",
"Mockito",
"what is the c# one called?",
"Selenium",
"Cucumber",
"SpecFlow",
"Storyshots",
"Snapshot testing"
"Snapshot testing",
"NUnit",
"XUnit"
]
},
{
"name": "Devops - should I call this something else?",
"name": "Devops",
"level": "Competent",
"keywords": [
"Azure",
Expand All @@ -512,7 +514,10 @@
"GCP",
"Firebase",
"Kubernetes",
"Docker"
"Docker",
"Git",
"Github",
"Bitbucket"
],
"dev environment?": [
"Webpack",
Expand All @@ -522,26 +527,33 @@
"Gulp",
"Grunt",
"Gradle",
"Capistrano"
"Capistrano",
"Git",
"Mercurial",
"Maven",
"Artifactory"
],
"other tools?": [
"Pendo",
"Google Analytics",
"Launch Darkly",
"FullStory",
"Sentry",
"Segment",
"Maven",
"Artifactory"
"Segment"
]
},
{
"name": "Third Party APIs",
"level": "Competent",
"keywords": ["Google Maps", "Shopify", "definitely more things here"]
"keywords": [
"Google Maps",
"Shopify",
"Slackbot",
"definitely more things here"
]
},
{
"name": "Cloud",
"name": "Cloud Native",
"level": "Competent",
"keywords": [
"Azure Functions",
Expand All @@ -565,7 +577,11 @@
"JSP",
"Kotlin",
"Python",
"Django"
"Django",
"Swagger",
"REST",
"GraphQL",
"Apollo GraphQL"
]
},
{
Expand Down
1 change: 1 addition & 0 deletions src/data/skills/API_Development.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
apiapiapiapiapi
1 change: 1 addition & 0 deletions src/data/skills/Automated_Testing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I tend to wind up being the person on the team who is always pushing for more meaningful tests. I don't just want code coverage metrics though, I want tests that will ensure that specific issues do not reoccur and tests that make development easier. A lot of times this means adding end-to-end tests or figuring out how to write a test around a clunky piece of legacy code that no one wants to touch. I've also found a lot of value in writing scripts to create test data in the dev database on a few different occasions, which has helped me in developing a feature but also helps the team maintain that feature and others as the test data is expanded to more use cases.
1 change: 1 addition & 0 deletions src/data/skills/Cloud_Native.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fluffy clouds
3 changes: 3 additions & 0 deletions src/data/skills/Devops.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- I always try to fix any local setup things or automations that will make my life easier and hopefully help others as well
- Campus labs azure
- Being at startups for the past 4 years I've also wound up having some ownership over other tooling as well...
1 change: 1 addition & 0 deletions src/data/skills/Mobile_Development.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
get off your damn phone
3 changes: 3 additions & 0 deletions src/data/skills/React.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
I started using React in 2016 when the team I was on at Campus Labs decided to switch. I began the migration alone, with some guidance from other teams that had already made the switch, and later taught others how to use React. From there I went on to fully frontend roles at Crisp and Wagmo, both using React nearly 100% of the time.

I've worked with class components and _Redux_ for state management but I've also worked a lot with functional components, hooks, and context for global state. For most of the apps I've worked on it's made more sense to persist everything on the backend and use _React Query_ or _Apollo GraphQL_ to access that data.
1 change: 1 addition & 0 deletions src/data/skills/Third_Party_APIs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hello
1 change: 1 addition & 0 deletions src/data/skills/Web_Accessibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
When I worked at Campus Labs, our design team was constantly trying to improve the accessibility of our platform and I learned a lot of basics from working with them on fixes. When I moved on to smaller startups, I became the voice for improving accessibility as the relative expert and learned even more in trying to teach these practices to others. I think it is most important to add some static checking like `eslint/jsx-a11y` to catch some basic issues. And using something like _React Testing Library_ as it is documented gets you very far in making accessible components. I've also learned the basics of using VoiceOver on Mac to test accessibility more completely.
1 change: 1 addition & 0 deletions src/data/skills/Web_Development.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I learned HTML and JavaScript in high school and tinkered with websites throughout college. Professionally, I've almost always worked on webapps - either MVC backend with a lightweight frontend or a RESTful/GraphQL backend with a full frontend framework. I've been through all of the browser compatibility issues of the early 2000's and working with plain javascript without a framework enough to understand the fundamentals very well.
4 changes: 2 additions & 2 deletions src/flowbite-theme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const theme: CustomFlowbiteTheme = {
base: 'aspect-square object-cover border-2 border-white',
},
size: {
xl: 'w-60',
xl: 'w-60 md:w-40 xl:w-60',
},
},
},
Expand All @@ -38,7 +38,7 @@ const theme: CustomFlowbiteTheme = {
},
title: {
base: 'flex w-full items-center justify-between p-5 text-left font-medium text-gray-500 first:rounded-t-lg last:rounded-b-lg dark:text-gray-400',

heading: 'flex w-full gap-2 justify-between',
flush: {
off: 'hover:bg-gray-100 dark:hover:bg-gray-800',
},
Expand Down
Loading

0 comments on commit fd06c57

Please sign in to comment.