diff --git a/lib/blog.ts b/lib/blog.ts new file mode 100644 index 0000000..54370de --- /dev/null +++ b/lib/blog.ts @@ -0,0 +1,74 @@ +import glob from "fast-glob"; + +interface Blog { + title: string; + description: string; + author: { + name: string; + src: string; + }; + date: string; + image?: string; +} + +export interface BlogWithSlug extends Blog { + slug: string; +} + +// Hardcoded blog data to avoid MDX export issues at build time +// This prevents "createContext only works in Client Components" errors +const blogData: Record = { + "refactoring-ui-book-review": { + author: { name: "Alice Johnson", src: "/avatar.webp" }, + date: "2023-11-15", + title: "Refactoring UI Book Review", + description: "A comprehensive review of the popular design book 'Refactoring UI' and its practical applications in modern web development.", + image: "https://images.unsplash.com/photo-1506880018603-83d5b814b5a6?w=800&h=400&fit=crop" + }, + "rust-vs-go-for-backend": { + author: { name: "Bob Smith", src: "/avatar.webp" }, + date: "2023-11-10", + title: "Rust vs Go for Backend Development", + description: "An in-depth comparison of Rust and Go for building scalable backend services.", + image: "https://images.unsplash.com/photo-1461749280684-dccba630e2f6?w=800&h=400&fit=crop" + }, + "best-react-libraries-2024": { + author: { name: "Charlie Davis", src: "/avatar.webp" }, + date: "2023-11-05", + title: "Best React Libraries in 2024", + description: "Discover the most useful React libraries and tools that will boost your productivity in 2024.", + image: "https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=800&h=400&fit=crop" + } +}; + +export async function getAllBlogs() { + // Still use glob to find existing blog files + let blogFilenames = await glob("*/page.mdx", { + cwd: "./app/blog", + }); + + // Map filenames to blog data + const blogs = blogFilenames.map(filename => { + const slug = filename.replace(/(\/page)?\.mdx$/, ""); + const blog = blogData[slug]; + + if (!blog) { + // Fallback data if blog not found in hardcoded data + return { + slug, + title: slug.replace(/-/g, " ").replace(/\b\w/g, l => l.toUpperCase()), + description: "Blog article", + author: { name: "Author", src: "/avatar.webp" }, + date: new Date().toISOString().split('T')[0], + image: "" + }; + } + + return { + slug, + ...blog + }; + }); + + return blogs.sort((a, z) => +new Date(z.date) - +new Date(a.date)); +} \ No newline at end of file