custom component support for mdx
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
{
|
{
|
||||||
"extends": "next/core-web-vitals"
|
"extends": "next/core-web-vitals",
|
||||||
|
"rules": {
|
||||||
|
"import/no-anonymous-default-export": "off"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
79
app/about/me/content.mdx
Normal file
79
app/about/me/content.mdx
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# What I Do
|
||||||
|
|
||||||
|
## CREATE FULL STACK WEB APPLICATIONS
|
||||||
|
|
||||||
|
I have experience building web applications with and without back-end integrations.
|
||||||
|
|
||||||
|
I am comfortable conceptualizing and organizing complex structures, and as such, my projects tend to be natural in their structure and easy to maintain.
|
||||||
|
|
||||||
|
## COLLABORATIVE SOFTWARE ENGINEERING
|
||||||
|
|
||||||
|
I have consulted on small teams with:
|
||||||
|
|
||||||
|
- Dization, a Pittsburgh-based company developing an enterprise resource planning solution for small businesses
|
||||||
|
- Metazu Studio, a Nashville-based startup connecting clients with services in video production, AR/VR, social media, photography, and web design.
|
||||||
|
|
||||||
|
My work on these projects deals with managing the complexities of full-stack web engineering, as well as delivering beautiful user experiences to end customers.
|
||||||
|
|
||||||
|
## CREATIVE MINDED PROBLEM SOLVER
|
||||||
|
|
||||||
|
My background as a musician, composer, producer, and artistic collaborator provide me with a unique frame of reference for solving technical problems and adapting to dynamic environments.
|
||||||
|
|
||||||
|
## DATABASE OPERATIONS AND MANAGEMENT
|
||||||
|
|
||||||
|
My projects have featured both relational and non-relational databases, in particular PostgreSQL and MongoDB. I also have experience with various methods of connecting these to front-end applications.
|
||||||
|
|
||||||
|
# Education
|
||||||
|
|
||||||
|
## BACHELORS OF ARTS, MUSIC
|
||||||
|
|
||||||
|
Southern Methodist University, 2014 - 2017
|
||||||
|
|
||||||
|
Concentrations: Piano Performance, Music Composition, Music Theory
|
||||||
|
|
||||||
|
Minor: French Language and Culture
|
||||||
|
|
||||||
|
## SELF DIRECTED STUDY, WEB ENGINEERING
|
||||||
|
|
||||||
|
2021 - present
|
||||||
|
|
||||||
|
Codecademy Pro, Front End Engineer Career Path
|
||||||
|
|
||||||
|
Concentrations: React, Redux, Express, PostgreSQL
|
||||||
|
|
||||||
|
# Employment
|
||||||
|
|
||||||
|
## SOFTWARE ENGINEER
|
||||||
|
|
||||||
|
Dropper Studio | Nashville, TN
|
||||||
|
Mar 2023 - present
|
||||||
|
Relevant Duties: developing a full-stack web application for a client in the music industry.
|
||||||
|
|
||||||
|
- Next.js
|
||||||
|
- tRPC, MongoDB
|
||||||
|
- Integrating additional services (Redis, S3)
|
||||||
|
- Networking and cloud management (on premise)
|
||||||
|
- UI/UX Design
|
||||||
|
|
||||||
|
## FULL STACK ENGINEER, INTERN
|
||||||
|
|
||||||
|
Dization, Inc | Pittsburgh, PA (remote)
|
||||||
|
Sept 2022 - Mar 2023
|
||||||
|
Relevant Duties: contributing to the development of a full-stack enterprise resource planning application built using the LAMP stack hosted on AWS.
|
||||||
|
|
||||||
|
- Enterprise Resource Planning
|
||||||
|
- AWS
|
||||||
|
- System Design
|
||||||
|
- UI/UX Design
|
||||||
|
- Database management
|
||||||
|
|
||||||
|
## FULL STACK ENGINEER, INTERN
|
||||||
|
Dization, Inc | Pittsburgh, PA (remote)
|
||||||
|
Sept 2022 - present
|
||||||
|
Relevant Duties: contributing to the development of a full-stack enterprise resource planning application built using the LAMP stack hosted on AWS.
|
||||||
|
|
||||||
|
Enterprise Resource Planning
|
||||||
|
AWS
|
||||||
|
System Design
|
||||||
|
UI/UX Design
|
||||||
|
Database management
|
||||||
@@ -1,7 +1,2 @@
|
|||||||
export default function AboutMePage() {
|
'use client'
|
||||||
return (
|
export { default } from "./content.mdx"
|
||||||
<div>
|
|
||||||
<h1>About Me Page</h1>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|||||||
24
app/about/skills/content.mdx
Normal file
24
app/about/skills/content.mdx
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
Check out my skills, and some of the technologies I work with the most:
|
||||||
|
|
||||||
|
# Programming Languages
|
||||||
|
|
||||||
|
## JavaScript
|
||||||
|
|
||||||
|
- Typescript
|
||||||
|
- React / Next.js
|
||||||
|
- Redux
|
||||||
|
- tRPC
|
||||||
|
- Node.js
|
||||||
|
- Express.js
|
||||||
|
- ToneJS
|
||||||
|
- jQuery
|
||||||
|
- Jest
|
||||||
|
|
||||||
|
## Python
|
||||||
|
|
||||||
|
- Pandas
|
||||||
|
- Micropython
|
||||||
|
|
||||||
|
# Front End Skills
|
||||||
|
|
||||||
|
|
||||||
@@ -1,7 +1,2 @@
|
|||||||
export default function SkillsPage() {
|
'use client'
|
||||||
return (
|
export { default } from "./content.mdx"
|
||||||
<div>
|
|
||||||
<h1>Skills Page</h1>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ Software design at the confluence of efficiency, ingenuity, and artistry.
|
|||||||
|
|
||||||
Here are some things I've provided for my teams in the past:
|
Here are some things I've provided for my teams in the past:
|
||||||
|
|
||||||
- Connecting the dots
|
### Connecting the dots
|
||||||
- My strength lies in the big picture. My background as a composer of classical music has given me a lasting sense
|
|
||||||
for how to assemble the pieces of a project into a cohesive whole.
|
My strength lies in the big picture. My background as a composer of classical music has given me a lasting sense for how to assemble the pieces of a project into a cohesive whole.
|
||||||
- As a software engineer, this means:
|
|
||||||
- I'm comfortable living in the world between the front-end and back-end
|
As a software engineer, this means:
|
||||||
- I love solving emergent problems as a project's stack is expanding
|
|
||||||
|
- I'm comfortable living in the world between the front-end and back-end
|
||||||
|
- I love solving emergent problems as a project's stack is expanding
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
|
import Head from 'next/head'
|
||||||
import Navbar from '@/components/Navbar'
|
import Navbar from '@/components/Navbar'
|
||||||
import SiteTree from '@/components/SiteTree'
|
import SiteTree from '@/components/SiteTree'
|
||||||
import { MDXProvider } from '@mdx-js/react'
|
import { MDXProvider } from '@mdx-js/react'
|
||||||
import { Inter } from 'next/font/google'
|
import { Inter } from 'next/font/google'
|
||||||
|
import components from '@/components/mdx'
|
||||||
import './globals.css'
|
import './globals.css'
|
||||||
|
|
||||||
const inter = Inter({ subsets: ['latin'] })
|
const inter = Inter({ subsets: ['latin'] })
|
||||||
@@ -13,22 +15,22 @@ export const metadata = {
|
|||||||
description: 'Integrating artistry and technology to create beautiful software',
|
description: 'Integrating artistry and technology to create beautiful software',
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
||||||
children,
|
|
||||||
}: {
|
|
||||||
children: React.ReactNode
|
|
||||||
}) {
|
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<MDXProvider /* components={components} */>
|
<Head>
|
||||||
|
<title>{metadata.title}</title>
|
||||||
|
<meta name="description" content={metadata.description} />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
</Head>
|
||||||
<body className={inter.className}>
|
<body className={inter.className}>
|
||||||
<>
|
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<SiteTree />
|
<SiteTree />
|
||||||
|
<MDXProvider components={components}>
|
||||||
{children}
|
{children}
|
||||||
</>
|
|
||||||
</body>
|
|
||||||
</MDXProvider>
|
</MDXProvider>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
'use client'
|
||||||
import Content from "./content.mdx"
|
import Content from "./content.mdx"
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
|
|||||||
@@ -1,5 +1,44 @@
|
|||||||
import { ReactNode } from "react";
|
import { v4 } from "uuid"
|
||||||
|
|
||||||
export const P1TAG = ({ children }: { children: ReactNode }) => (
|
type ElementType<Key extends keyof JSX.IntrinsicElements> = React.FC<JSX.IntrinsicElements[Key]>
|
||||||
<h1>{children}</h1>
|
type FormattedTags = {
|
||||||
|
[Key in keyof JSX.IntrinsicElements]: ElementType<Key>
|
||||||
|
}
|
||||||
|
|
||||||
|
const H1TAG: ElementType<"h1"> = ({ children }) => { return (
|
||||||
|
<h1 key={v4()} className="text-4xl text-red-500">{children}</h1>
|
||||||
|
)}
|
||||||
|
|
||||||
|
const H2Tag: ElementType<"h2"> = ({ children }) => (
|
||||||
|
<h2 key={v4()}>{children}</h2>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const H3Tag: ElementType<"h3"> = ({ children }) => (
|
||||||
|
<h3 key={v4()}>{children}</h3>
|
||||||
|
)
|
||||||
|
|
||||||
|
const H4Tag: ElementType<"h4"> = ({ children }) => (
|
||||||
|
<h4 key={v4()}>{children}</h4>
|
||||||
|
)
|
||||||
|
|
||||||
|
const PTag: ElementType<"p"> = ({ children }) => (
|
||||||
|
<p key={v4()}>{children}</p>
|
||||||
|
)
|
||||||
|
|
||||||
|
const LiTag: ElementType<"li"> = ({ children }) => (
|
||||||
|
<li key={v4()}>{children}</li>
|
||||||
|
)
|
||||||
|
|
||||||
|
const BrTag: ElementType<"br"> = () => (
|
||||||
|
<br key={v4()} />
|
||||||
|
)
|
||||||
|
|
||||||
|
export default {
|
||||||
|
"h1": H1TAG,
|
||||||
|
"h2": H2Tag,
|
||||||
|
"h3": H3Tag,
|
||||||
|
"h4": H4Tag,
|
||||||
|
"p": PTag,
|
||||||
|
"li": LiTag,
|
||||||
|
"br": BrTag
|
||||||
|
} satisfies Partial<FormattedTags>
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ const withMDX = require('@next/mdx')({
|
|||||||
// https://github.com/remarkjs/remark-gfm#install
|
// https://github.com/remarkjs/remark-gfm#install
|
||||||
remarkPlugins: [require("remark-prism")],
|
remarkPlugins: [require("remark-prism")],
|
||||||
rehypePlugins: [],
|
rehypePlugins: [],
|
||||||
// If you use `MDXProvider`, uncomment the following line.
|
providerImportSource: "@mdx-js/react",
|
||||||
// providerImportSource: "@mdx-js/react",
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -18,9 +17,6 @@ const withMDX = require('@next/mdx')({
|
|||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
|
pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
|
||||||
reactStrictMode: true,
|
reactStrictMode: true,
|
||||||
experimental: {
|
|
||||||
appDir: true,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = withMDX(nextConfig);
|
module.exports = withMDX(nextConfig);
|
||||||
|
|||||||
Reference in New Issue
Block a user