Case Studies /

← Back to Case Studies

import path from 'path'; import ReactMarkdown from 'react-markdown'; import matter from 'gray-matter'; import fs from 'fs'; import Head from 'next/head'; import Navbar from '../../components/navbar'; import Footer from '../../components/footer'; import React, { useState } from 'react'; import Link from 'next/link';

export async function getStaticProps() { const fileNames = fs.readdirSync(path.join(process.cwd(), 'pages', 'casestudies')); const markdownFiles = await Promise.all( fileNames.map(async (fileName) => { if (fileName !== '[slug].js' && fileName !== '.DS_Store' && fileName !== 'index.js') { const filePath = path.join(process.cwd(), 'pages', 'casestudies', fileName); const fileContent = await fs.promises.readFile(filePath, 'utf-8'); const { data, content } = matter(fileContent); return { data: data || {}, content, slug: fileName.replace('.mdx', '') }; } }) );

return { props: { markdownFiles: markdownFiles.filter(Boolean), // Remove any null values }, }; }

function StudiesPage({ markdownFiles }) { const [selectedFile, setSelectedFile] = useState(null);

const handleClick = (index) => { if (selectedFile === index) { setSelectedFile(null); } else { setSelectedFile(index); } };

return ( <div> <Head> <title>Logan Speck</title> <meta name="description" content="Digital marketing and web development" /> <link rel="icon" href="/favicon.ico" /> </Head> <Navbar /> <div className="max-w-screen-xl px-4 py-16 sm:px-6 lg:px-8 mx-auto min-h-screen"> <div className="max-w-xl"> <h2 className="text-3xl font-bold sm:text-4xl">Case Studies</h2> <p className="mt-4 mb-4">Just the highlights.</p> </div> <div className="grid grid-cols-3 gap-4 rounded-md"> {markdownFiles .filter((file) => file) // Remove any null values .map((file, index) => ( <div key={index} className="p-4 border"> <Link href={/casestudies/${encodeURIComponent(file.slug)}}> <a> <h2>{file.data.title}</h2> </a> </Link> {file.data.tags && Array.isArray(file.data.tags) && ( <ul> {file.data.tags.map((tag, tagIndex) => ( <li class="mr-1 mb-1 inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10" key={tagIndex}>{tag}</li>

                ))}
              </ul>
            )}
          </div>
        ))}
    </div>
  </div>
  <Footer />
</div>

); }

export default StudiesPage;