mirror of
https://github.com/r-freeman/portfolio.git
synced 2025-06-27 18:10:21 +00:00
Clean up stuff
All checks were successful
Build And Publish / BuildAndPublish (push) Successful in 3m9s
All checks were successful
Build And Publish / BuildAndPublish (push) Successful in 3m9s
This commit is contained in:
parent
f6331e435a
commit
400e199c15
@ -3,7 +3,7 @@ import {Feed} from 'feed'
|
||||
import {getAllArticles} from '@/lib/getAllArticles'
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
let siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? ""
|
||||
let siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? ''
|
||||
let articles = await getAllArticles()
|
||||
let author = {
|
||||
name: 'Ryan Freeman',
|
||||
|
@ -86,7 +86,7 @@ export default async function Reading() {
|
||||
title: 'HTML and CSS',
|
||||
author: 'Jon Duckett',
|
||||
url: 'https://www.goodreads.com/book/show/10361330-html-and-css?from_search=true&from_srp=true&qid=OKIiricQbD&rank=1'
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
return (
|
||||
|
@ -5,8 +5,8 @@ export default function robots(): MetadataRoute.Robots {
|
||||
rules: {
|
||||
userAgent: '*',
|
||||
allow: '/',
|
||||
disallow: '/private/',
|
||||
disallow: '/private/'
|
||||
},
|
||||
sitemap: 'https://ryanfreeman.dev/sitemap.xml',
|
||||
sitemap: 'https://ryanfreeman.dev/sitemap.xml'
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
export function formatDate(dateString: string) {
|
||||
return new Date(`${dateString}T00:00:00Z`).toLocaleDateString('en-IE', {
|
||||
return new Date(`${dateString}`).toLocaleDateString('en-IE', {
|
||||
day: 'numeric',
|
||||
month: 'long',
|
||||
year: 'numeric',
|
||||
timeZone: 'UTC',
|
||||
timeZone: 'UTC'
|
||||
})
|
||||
}
|
||||
|
@ -8,13 +8,13 @@ async function importArticle(articleFilename: string) {
|
||||
return {
|
||||
slug: articleFilename.replace(/(\/page)?\.mdx$/, ''),
|
||||
...meta,
|
||||
component,
|
||||
component
|
||||
}
|
||||
}
|
||||
|
||||
export async function getAllArticles(dateDesc = true) {
|
||||
let articleFilenames = await glob(['*.mdx', '*/page.mdx'], {
|
||||
cwd: path.join(process.cwd(), './app/writing'),
|
||||
cwd: path.join(process.cwd(), './app/writing')
|
||||
})
|
||||
|
||||
let articles = await Promise.all(articleFilenames.map(importArticle))
|
||||
|
@ -3,7 +3,7 @@ import fetcher from '@/lib/fetcher'
|
||||
|
||||
const GITHUB_ACCESS_TOKEN = process.env.GITHUB_ACCESS_TOKEN
|
||||
const GITHUB_USERNAME = process.env.GITHUB_USERNAME
|
||||
const GITHUB_GRAPHQL = "https://api.github.com/graphql"
|
||||
const GITHUB_GRAPHQL = 'https://api.github.com/graphql'
|
||||
|
||||
type PinnedReposResponse = {
|
||||
data: {
|
||||
|
@ -3,9 +3,9 @@ import fetch from 'node-fetch'
|
||||
const SPOTIFY_CLIENT_ID = process.env.SPOTIFY_CLIENT_ID
|
||||
const SPOTIFY_CLIENT_SECRET = process.env.SPOTIFY_CLIENT_SECRET
|
||||
const SPOTIFY_REFRESH_TOKEN = process.env.SPOTIFY_REFRESH_TOKEN
|
||||
const SPOTIFY_TOKEN = "https://accounts.spotify.com/api/token"
|
||||
const SPOTIFY_CURRENTLY_PLAYING = "https://api.spotify.com/v1/me/player/currently-playing"
|
||||
const SPOTIFY_RECENTLY_PLAYED = "https://api.spotify.com/v1/me/player/recently-played"
|
||||
const SPOTIFY_TOKEN = 'https://accounts.spotify.com/api/token'
|
||||
const SPOTIFY_CURRENTLY_PLAYING = 'https://api.spotify.com/v1/me/player/currently-playing'
|
||||
const SPOTIFY_RECENTLY_PLAYED = 'https://api.spotify.com/v1/me/player/recently-played'
|
||||
|
||||
const basic = Buffer.from(`${SPOTIFY_CLIENT_ID}:${SPOTIFY_CLIENT_SECRET}`).toString('base64')
|
||||
|
||||
@ -22,7 +22,7 @@ const getAccessToken = async () => {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Basic ${basic}`,
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
body: new URLSearchParams({
|
||||
'grant_type': 'refresh_token',
|
||||
|
@ -9,10 +9,10 @@ import {Heading} from './components/ui/Heading'
|
||||
// This file is required to use MDX in `app` directory.
|
||||
export function useMDXComponents(components: MDXComponents): MDXComponents {
|
||||
return {
|
||||
h2: ({children}) => <Heading as='h2'>{children}</Heading>,
|
||||
h3: ({children}) => <Heading as='h3'>{children}</Heading>,
|
||||
h2: ({children}) => <Heading as="h2">{children}</Heading>,
|
||||
h3: ({children}) => <Heading as="h3">{children}</Heading>,
|
||||
// Allows customizing built-in components, e.g. to add styling.
|
||||
// h1: ({ children }) => <h1 style={{ fontSize: "100px" }}>{children}</h1>,
|
||||
...components,
|
||||
...components
|
||||
}
|
||||
}
|
@ -33,7 +33,7 @@ export default {
|
||||
'6xl': ['3.75rem', {lineHeight: '1'}],
|
||||
'7xl': ['4.5rem', {lineHeight: '1'}],
|
||||
'8xl': ['6rem', {lineHeight: '1'}],
|
||||
'9xl': ['8rem', {lineHeight: '1'}],
|
||||
'9xl': ['8rem', {lineHeight: '1'}]
|
||||
},
|
||||
typography: (theme: any) => ({
|
||||
invert: {
|
||||
@ -57,8 +57,8 @@ export default {
|
||||
'--tw-prose-pre-bg': 'var(--tw-prose-invert-pre-bg)',
|
||||
'--tw-prose-pre-border': 'var(--tw-prose-invert-pre-border)',
|
||||
'--tw-prose-th-borders': 'var(--tw-prose-invert-th-borders)',
|
||||
'--tw-prose-td-borders': 'var(--tw-prose-invert-td-borders)',
|
||||
},
|
||||
'--tw-prose-td-borders': 'var(--tw-prose-invert-td-borders)'
|
||||
}
|
||||
},
|
||||
DEFAULT: {
|
||||
css: {
|
||||
@ -107,37 +107,37 @@ export default {
|
||||
lineHeight: theme('lineHeight.7'),
|
||||
'> *': {
|
||||
marginTop: theme('spacing.10'),
|
||||
marginBottom: theme('spacing.10'),
|
||||
marginBottom: theme('spacing.10')
|
||||
},
|
||||
p: {
|
||||
marginTop: theme('spacing.7'),
|
||||
marginBottom: theme('spacing.7'),
|
||||
marginBottom: theme('spacing.7')
|
||||
},
|
||||
|
||||
// Headings
|
||||
'h2, h3': {
|
||||
color: 'var(--tw-prose-headings)',
|
||||
fontWeight: theme('fontWeight.semibold'),
|
||||
fontWeight: theme('fontWeight.semibold')
|
||||
},
|
||||
h2: {
|
||||
fontSize: theme('fontSize.xl')[0],
|
||||
lineHeight: theme('lineHeight.7'),
|
||||
marginTop: theme('spacing.20'),
|
||||
marginBottom: theme('spacing.4'),
|
||||
marginBottom: theme('spacing.4')
|
||||
},
|
||||
h3: {
|
||||
fontSize: theme('fontSize.base')[0],
|
||||
lineHeight: theme('lineHeight.7'),
|
||||
marginTop: theme('spacing.16'),
|
||||
marginBottom: theme('spacing.4'),
|
||||
marginBottom: theme('spacing.4')
|
||||
},
|
||||
':is(h2, h3) + *': {
|
||||
marginTop: 0,
|
||||
marginTop: 0
|
||||
},
|
||||
|
||||
// Images
|
||||
img: {
|
||||
borderRadius: theme('borderRadius.3xl'),
|
||||
borderRadius: theme('borderRadius.3xl')
|
||||
},
|
||||
|
||||
// Inline elements
|
||||
@ -148,15 +148,15 @@ export default {
|
||||
textDecorationColor: 'var(--tw-prose-underline)',
|
||||
transitionProperty: 'color, text-decoration-color',
|
||||
transitionDuration: theme('transitionDuration.150'),
|
||||
transitionTimingFunction: theme('transitionTimingFunction.in-out'),
|
||||
transitionTimingFunction: theme('transitionTimingFunction.in-out')
|
||||
},
|
||||
'a:hover': {
|
||||
color: 'var(--tw-prose-links-hover)',
|
||||
textDecorationColor: 'var(--tw-prose-underline-hover)',
|
||||
textDecorationColor: 'var(--tw-prose-underline-hover)'
|
||||
},
|
||||
strong: {
|
||||
color: 'var(--tw-prose-bold)',
|
||||
fontWeight: theme('fontWeight.semibold'),
|
||||
fontWeight: theme('fontWeight.semibold')
|
||||
},
|
||||
code: {
|
||||
display: 'inline-block',
|
||||
@ -166,13 +166,13 @@ export default {
|
||||
backgroundColor: 'var(--tw-prose-code-bg)',
|
||||
borderRadius: theme('borderRadius.lg'),
|
||||
paddingLeft: theme('spacing.1'),
|
||||
paddingRight: theme('spacing.1'),
|
||||
paddingRight: theme('spacing.1')
|
||||
},
|
||||
'a code': {
|
||||
color: 'inherit',
|
||||
color: 'inherit'
|
||||
},
|
||||
':is(h2, h3) code': {
|
||||
fontWeight: theme('fontWeight.bold'),
|
||||
fontWeight: theme('fontWeight.bold')
|
||||
},
|
||||
|
||||
// Quotes
|
||||
@ -180,7 +180,7 @@ export default {
|
||||
paddingLeft: theme('spacing.6'),
|
||||
borderLeftWidth: theme('borderWidth.2'),
|
||||
borderLeftColor: 'var(--tw-prose-quote-borders)',
|
||||
fontStyle: 'italic',
|
||||
fontStyle: 'italic'
|
||||
},
|
||||
|
||||
// Figures
|
||||
@ -188,44 +188,44 @@ export default {
|
||||
color: 'var(--tw-prose-captions)',
|
||||
fontSize: theme('fontSize.sm')[0],
|
||||
lineHeight: theme('lineHeight.6'),
|
||||
marginTop: theme('spacing.3'),
|
||||
marginTop: theme('spacing.3')
|
||||
},
|
||||
'figcaption > p': {
|
||||
margin: 0,
|
||||
margin: 0
|
||||
},
|
||||
|
||||
// Lists
|
||||
ul: {
|
||||
listStyleType: 'disc',
|
||||
listStyleType: 'disc'
|
||||
},
|
||||
ol: {
|
||||
listStyleType: 'decimal',
|
||||
listStyleType: 'decimal'
|
||||
},
|
||||
'ul, ol': {
|
||||
paddingLeft: theme('spacing.6'),
|
||||
paddingLeft: theme('spacing.6')
|
||||
},
|
||||
li: {
|
||||
marginTop: theme('spacing.6'),
|
||||
marginBottom: theme('spacing.6'),
|
||||
paddingLeft: theme('spacing[3.5]'),
|
||||
paddingLeft: theme('spacing[3.5]')
|
||||
},
|
||||
'li::marker': {
|
||||
fontSize: theme('fontSize.sm')[0],
|
||||
fontWeight: theme('fontWeight.semibold'),
|
||||
fontWeight: theme('fontWeight.semibold')
|
||||
},
|
||||
'ol > li::marker': {
|
||||
color: 'var(--tw-prose-counters)',
|
||||
color: 'var(--tw-prose-counters)'
|
||||
},
|
||||
'ul > li::marker': {
|
||||
color: 'var(--tw-prose-bullets)',
|
||||
color: 'var(--tw-prose-bullets)'
|
||||
},
|
||||
'li :is(ol, ul)': {
|
||||
marginTop: theme('spacing.4'),
|
||||
marginBottom: theme('spacing.4'),
|
||||
marginBottom: theme('spacing.4')
|
||||
},
|
||||
'li :is(li, p)': {
|
||||
marginTop: theme('spacing.3'),
|
||||
marginBottom: theme('spacing.3'),
|
||||
marginBottom: theme('spacing.3')
|
||||
},
|
||||
|
||||
// Code blocks
|
||||
@ -238,7 +238,7 @@ export default {
|
||||
padding: theme('spacing.8'),
|
||||
overflowX: 'auto',
|
||||
border: '1px solid',
|
||||
borderColor: 'var(--tw-prose-pre-border)',
|
||||
borderColor: 'var(--tw-prose-pre-border)'
|
||||
},
|
||||
'pre code': {
|
||||
display: 'inline',
|
||||
@ -247,7 +247,7 @@ export default {
|
||||
fontWeight: 'inherit',
|
||||
backgroundColor: 'transparent',
|
||||
borderRadius: 0,
|
||||
padding: 0,
|
||||
padding: 0
|
||||
},
|
||||
|
||||
// Horizontal rules
|
||||
@ -258,8 +258,8 @@ export default {
|
||||
borderColor: 'var(--tw-prose-hr)',
|
||||
'@screen lg': {
|
||||
marginLeft: `calc(${theme('spacing.12')} * -1)`,
|
||||
marginRight: `calc(${theme('spacing.12')} * -1)`,
|
||||
},
|
||||
marginRight: `calc(${theme('spacing.12')} * -1)`
|
||||
}
|
||||
},
|
||||
|
||||
// Tables
|
||||
@ -267,54 +267,54 @@ export default {
|
||||
width: '100%',
|
||||
tableLayout: 'auto',
|
||||
textAlign: 'left',
|
||||
fontSize: theme('fontSize.sm')[0],
|
||||
fontSize: theme('fontSize.sm')[0]
|
||||
},
|
||||
thead: {
|
||||
borderBottomWidth: '1px',
|
||||
borderBottomColor: 'var(--tw-prose-th-borders)',
|
||||
borderBottomColor: 'var(--tw-prose-th-borders)'
|
||||
},
|
||||
'thead th': {
|
||||
color: 'var(--tw-prose-headings)',
|
||||
fontWeight: theme('fontWeight.semibold'),
|
||||
verticalAlign: 'bottom',
|
||||
paddingBottom: theme('spacing.2'),
|
||||
paddingBottom: theme('spacing.2')
|
||||
},
|
||||
'thead th:not(:first-child)': {
|
||||
paddingLeft: theme('spacing.2'),
|
||||
paddingLeft: theme('spacing.2')
|
||||
},
|
||||
'thead th:not(:last-child)': {
|
||||
paddingRight: theme('spacing.2'),
|
||||
paddingRight: theme('spacing.2')
|
||||
},
|
||||
'tbody tr': {
|
||||
borderBottomWidth: '1px',
|
||||
borderBottomColor: 'var(--tw-prose-td-borders)',
|
||||
borderBottomColor: 'var(--tw-prose-td-borders)'
|
||||
},
|
||||
'tbody tr:last-child': {
|
||||
borderBottomWidth: 0,
|
||||
borderBottomWidth: 0
|
||||
},
|
||||
'tbody td': {
|
||||
verticalAlign: 'baseline',
|
||||
verticalAlign: 'baseline'
|
||||
},
|
||||
tfoot: {
|
||||
borderTopWidth: '1px',
|
||||
borderTopColor: 'var(--tw-prose-th-borders)',
|
||||
borderTopColor: 'var(--tw-prose-th-borders)'
|
||||
},
|
||||
'tfoot td': {
|
||||
verticalAlign: 'top',
|
||||
verticalAlign: 'top'
|
||||
},
|
||||
':is(tbody, tfoot) td': {
|
||||
paddingTop: theme('spacing.2'),
|
||||
paddingBottom: theme('spacing.2'),
|
||||
paddingBottom: theme('spacing.2')
|
||||
},
|
||||
':is(tbody, tfoot) td:not(:first-child)': {
|
||||
paddingLeft: theme('spacing.2'),
|
||||
paddingLeft: theme('spacing.2')
|
||||
},
|
||||
':is(tbody, tfoot) td:not(:last-child)': {
|
||||
paddingRight: theme('spacing.2'),
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
},
|
||||
paddingRight: theme('spacing.2')
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
} satisfies Config
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user