feat: Implement blog home and post components with sidebar and pagination

- Added BlogHome component for displaying posts with sorting options (latest/popular).
- Integrated Sidebar with About, Hot Posts, Tags, and Misskey Iframe components.
- Created BlogPost component to render individual posts with metadata and content.
- Developed GravatarAvatar component for user avatars.
- Implemented Markdown rendering with syntax highlighting and custom code blocks.
- Added pagination component for navigating through posts.
- Enhanced login form with OpenID Connect options and email/password authentication.
- Utility functions for generating post URLs and calculating reading time.
This commit is contained in:
2025-07-30 00:18:32 +08:00
parent 1b29d50ba4
commit 92c2a58e80
23 changed files with 196 additions and 63 deletions

View File

@ -2,9 +2,9 @@
import { motion } from 'framer-motion'
import { usePathname } from 'next/navigation'
import { Navbar } from '@/components/navbar'
import { Navbar } from '@/components/layout/navbar'
import { BackgroundProvider } from '@/contexts/background-context'
import Footer from '@/components/footer'
import Footer from '@/components/layout/footer'
export default function RootLayout({
children,

View File

@ -1,6 +1,6 @@
import { getPostById } from '@/api/post'
import { cookies } from 'next/headers'
import BlogPost from '@/components/blog-post'
import BlogPost from '@/components/blog-post/blog-post'
interface Props {
params: Promise<{ id: string }>

View File

@ -1,6 +1,6 @@
"use client";
import BlogHome from "@/components/blog-home";
import BlogHome from "@/components/blog-home/blog-home";
export default function Page(){

View File

@ -122,7 +122,7 @@
}
html, body {
transition: background-color 0.3s, color 0.3s !important;
transition: background-color 0.2s !important;
}
.sonner-toast {

View File

@ -1,6 +1,6 @@
import Image from 'next/image'
import { Suspense } from 'react'
import { LoginForm } from '@/components/login-form'
import { LoginForm } from '@/components/login/login-form'
import config from '@/config'
function LoginPageContent() {