Cut unneccessary pages and features to simplify site.
This commit is contained in:
		
							
								
								
									
										0
									
								
								data/blog/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										0
									
								
								data/blog/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -88,18 +88,6 @@ export default function PostLayout({ frontMatter, authorDetails, next, prev, chi
 | 
			
		||||
            </div>
 | 
			
		||||
            <footer>
 | 
			
		||||
              <div className="divide-gray-200 text-sm font-medium leading-5 dark:divide-gray-700 xl:col-start-1 xl:row-start-2 xl:divide-y">
 | 
			
		||||
                {tags && (
 | 
			
		||||
                  <div className="py-4 xl:py-8">
 | 
			
		||||
                    <h2 className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">
 | 
			
		||||
                      Tags
 | 
			
		||||
                    </h2>
 | 
			
		||||
                    <div className="flex flex-wrap">
 | 
			
		||||
                      {tags.map((tag) => (
 | 
			
		||||
                        <Tag key={tag} text={tag} />
 | 
			
		||||
                      ))}
 | 
			
		||||
                    </div>
 | 
			
		||||
                  </div>
 | 
			
		||||
                )}
 | 
			
		||||
                {(next || prev) && (
 | 
			
		||||
                  <div className="flex justify-between py-4 xl:block xl:space-y-8 xl:py-8">
 | 
			
		||||
                    {prev && (
 | 
			
		||||
 | 
			
		||||
@ -1,21 +0,0 @@
 | 
			
		||||
import { MDXLayoutRenderer } from '@/components/MDXComponents'
 | 
			
		||||
import { getFileBySlug } from '@/lib/mdx'
 | 
			
		||||
 | 
			
		||||
const DEFAULT_LAYOUT = 'AuthorLayout'
 | 
			
		||||
 | 
			
		||||
export async function getStaticProps() {
 | 
			
		||||
  const authorDetails = await getFileBySlug('authors', ['default'])
 | 
			
		||||
  return { props: { authorDetails } }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function About({ authorDetails }) {
 | 
			
		||||
  const { mdxSource, frontMatter } = authorDetails
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <MDXLayoutRenderer
 | 
			
		||||
      layout={frontMatter.layout || DEFAULT_LAYOUT}
 | 
			
		||||
      mdxSource={mdxSource}
 | 
			
		||||
      frontMatter={frontMatter}
 | 
			
		||||
    />
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
@ -5,7 +5,7 @@ import siteMetadata from '@/data/siteMetadata'
 | 
			
		||||
import { getAllFilesFrontMatter } from '@/lib/mdx'
 | 
			
		||||
import formatDate from '@/lib/utils/formatDate'
 | 
			
		||||
 | 
			
		||||
const MAX_DISPLAY = 5
 | 
			
		||||
const MAX_DISPLAY = 10
 | 
			
		||||
 | 
			
		||||
export async function getStaticProps() {
 | 
			
		||||
  const posts = await getAllFilesFrontMatter('workshop')
 | 
			
		||||
@ -26,7 +26,7 @@ export default function Home({ posts }) {
 | 
			
		||||
        <ul className="divide-y divide-gray-200 dark:divide-gray-700">
 | 
			
		||||
          {!posts.length && 'No posts found.'}
 | 
			
		||||
          {posts.slice(0, MAX_DISPLAY).map((frontMatter) => {
 | 
			
		||||
            const { slug, date, title, summary, tags, exercise } = frontMatter
 | 
			
		||||
            const { slug, date, title, summary, exercise } = frontMatter
 | 
			
		||||
            return (
 | 
			
		||||
              <li key={slug} className="py-12">
 | 
			
		||||
                <article>
 | 
			
		||||
@ -48,11 +48,6 @@ export default function Home({ posts }) {
 | 
			
		||||
                              {title}
 | 
			
		||||
                            </Link>
 | 
			
		||||
                          </h2>
 | 
			
		||||
                          <div className="flex flex-wrap">
 | 
			
		||||
                            {tags.map((tag) => (
 | 
			
		||||
                              <Tag key={tag} text={tag} />
 | 
			
		||||
                            ))}
 | 
			
		||||
                          </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div className="prose text-gray-500 max-w-none dark:text-gray-400">
 | 
			
		||||
                          {summary}
 | 
			
		||||
@ -64,7 +59,7 @@ export default function Home({ posts }) {
 | 
			
		||||
                          className="text-primary-800 dark:text-primary-700 hover:text-primary-900 dark:hover:text-primary-400"
 | 
			
		||||
                          aria-label={`Read "${title}"`}
 | 
			
		||||
                        >
 | 
			
		||||
                          Read more →
 | 
			
		||||
                          Get started →
 | 
			
		||||
                        </Link>
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
@ -1,44 +0,0 @@
 | 
			
		||||
import Link from '@/components/Link'
 | 
			
		||||
import { PageSEO } from '@/components/SEO'
 | 
			
		||||
import Tag from '@/components/Tag'
 | 
			
		||||
import siteMetadata from '@/data/siteMetadata'
 | 
			
		||||
import { getAllTags } from '@/lib/tags'
 | 
			
		||||
import kebabCase from '@/lib/utils/kebabCase'
 | 
			
		||||
 | 
			
		||||
export async function getStaticProps() {
 | 
			
		||||
  const tags = await getAllTags('workshop')
 | 
			
		||||
 | 
			
		||||
  return { props: { tags } }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function Tags({ tags }) {
 | 
			
		||||
  const sortedTags = Object.keys(tags).sort((a, b) => tags[b] - tags[a])
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <PageSEO title={`Tags - ${siteMetadata.author}`} description="Things I write about" />
 | 
			
		||||
      <div className="flex flex-col items-start justify-start divide-y divide-gray-200 dark:divide-gray-700 md:justify-center md:items-center md:divide-y-0 md:flex-row md:space-x-6 md:mt-24">
 | 
			
		||||
        <div className="pt-6 pb-8 space-x-2 md:space-y-5">
 | 
			
		||||
          <h1 className="text-3xl font-extrabold leading-9 tracking-tight text-gray-900 dark:text-gray-100 sm:text-4xl sm:leading-10 md:text-6xl md:leading-14 md:border-r-2 md:px-6">
 | 
			
		||||
            Tags
 | 
			
		||||
          </h1>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="flex flex-wrap max-w-lg">
 | 
			
		||||
          {Object.keys(tags).length === 0 && 'No tags found.'}
 | 
			
		||||
          {sortedTags.map((t) => {
 | 
			
		||||
            return (
 | 
			
		||||
              <div key={t} className="mt-2 mb-2 mr-5">
 | 
			
		||||
                <Tag text={t} />
 | 
			
		||||
                <Link
 | 
			
		||||
                  href={`/tags/${kebabCase(t)}`}
 | 
			
		||||
                  className="-ml-2 text-sm font-semibold text-gray-600 uppercase dark:text-gray-300"
 | 
			
		||||
                >
 | 
			
		||||
                  {` (${tags[t]})`}
 | 
			
		||||
                </Link>
 | 
			
		||||
              </div>
 | 
			
		||||
            )
 | 
			
		||||
          })}
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </>
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
@ -1,53 +0,0 @@
 | 
			
		||||
import { TagSEO } from '@/components/SEO'
 | 
			
		||||
import siteMetadata from '@/data/siteMetadata'
 | 
			
		||||
import ListLayout from '@/layouts/ListLayout'
 | 
			
		||||
import generateRss from '@/lib/generate-rss'
 | 
			
		||||
import { getAllFilesFrontMatter } from '@/lib/mdx'
 | 
			
		||||
import { getAllTags } from '@/lib/tags'
 | 
			
		||||
import kebabCase from '@/lib/utils/kebabCase'
 | 
			
		||||
import fs from 'fs'
 | 
			
		||||
import path from 'path'
 | 
			
		||||
 | 
			
		||||
const root = process.cwd()
 | 
			
		||||
 | 
			
		||||
export async function getStaticPaths() {
 | 
			
		||||
  const tags = await getAllTags('workshop')
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    paths: Object.keys(tags).map((tag) => ({
 | 
			
		||||
      params: {
 | 
			
		||||
        tag,
 | 
			
		||||
      },
 | 
			
		||||
    })),
 | 
			
		||||
    fallback: false,
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function getStaticProps({ params }) {
 | 
			
		||||
  const allPosts = await getAllFilesFrontMatter('workshop')
 | 
			
		||||
  const filteredPosts = allPosts.filter(
 | 
			
		||||
    (post) => post.draft !== true && post.tags.map((t) => kebabCase(t)).includes(params.tag)
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  // rss
 | 
			
		||||
  const rss = generateRss(filteredPosts, `tags/${params.tag}/feed.xml`)
 | 
			
		||||
  const rssPath = path.join(root, 'public', 'tags', params.tag)
 | 
			
		||||
  fs.mkdirSync(rssPath, { recursive: true })
 | 
			
		||||
  fs.writeFileSync(path.join(rssPath, 'feed.xml'), rss)
 | 
			
		||||
 | 
			
		||||
  return { props: { posts: filteredPosts, tag: params.tag } }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function Tag({ posts, tag }) {
 | 
			
		||||
  // Capitalize first letter and convert space to dash
 | 
			
		||||
  const title = tag[0].toUpperCase() + tag.split(' ').join('-').slice(1)
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <TagSEO
 | 
			
		||||
        title={`${tag} - ${siteMetadata.author}`}
 | 
			
		||||
        description={`${tag} tags - ${siteMetadata.author}`}
 | 
			
		||||
      />
 | 
			
		||||
      <ListLayout posts={posts} title={title} />
 | 
			
		||||
    </>
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
@ -3,7 +3,7 @@ import siteMetadata from '@/data/siteMetadata'
 | 
			
		||||
import ListLayout from '@/layouts/ListLayout'
 | 
			
		||||
import { PageSEO } from '@/components/SEO'
 | 
			
		||||
 | 
			
		||||
export const POSTS_PER_PAGE = 5
 | 
			
		||||
export const POSTS_PER_PAGE = 10
 | 
			
		||||
 | 
			
		||||
export async function getStaticProps() {
 | 
			
		||||
  const posts = await getAllFilesFrontMatter('workshop')
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user