You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							55 lines
						
					
					
						
							1.3 KiB
						
					
					
				| import { type Metadata } from 'next/types';
 | |
| import { allPosts } from 'contentlayer/generated';
 | |
| import { compareDesc } from 'date-fns';
 | |
| import { FileText } from 'lucide-react';
 | |
| 
 | |
| import { blogConfig } from '@/config';
 | |
| import { Button } from '@/components/button';
 | |
| import { HeroSection } from '@/components/hero-section';
 | |
| import { PostCard } from '@/components/post-card';
 | |
| 
 | |
| const { title, description } = blogConfig.pages.home;
 | |
| 
 | |
| const ogImage = {
 | |
|   url: `${blogConfig.url}/og`,
 | |
| };
 | |
| 
 | |
| export const metadata: Metadata = {
 | |
|   title,
 | |
|   description,
 | |
|   openGraph: {
 | |
|     type: 'website',
 | |
|     url: blogConfig.url,
 | |
|     title,
 | |
|     description,
 | |
|     images: [ogImage],
 | |
|   },
 | |
|   twitter: {
 | |
|     description,
 | |
|     images: ogImage,
 | |
|     card: 'summary_large_image',
 | |
|   },
 | |
| };
 | |
| 
 | |
| export default function Home() {
 | |
|   const latestPosts = allPosts
 | |
|     .sort((a, b) => compareDesc(new Date(a.date), new Date(b.date)))
 | |
|     .slice(0, 3);
 | |
| 
 | |
|   return (
 | |
|     <div className="flex h-full flex-col space-y-4 px-6 pb-12 sm:px-12">
 | |
|       <HeroSection />
 | |
|       <section className="flex w-full flex-col space-y-4">
 | |
|         {latestPosts.map((post) => (
 | |
|           <PostCard key={post._id} post={post} />
 | |
|         ))}
 | |
|         <Button
 | |
|           href="/posts"
 | |
|           label="Все статьи"
 | |
|           className="place-self-end"
 | |
|           icon={<FileText className="h-4 w-4" />}
 | |
|         />
 | |
|       </section>
 | |
|     </div>
 | |
|   );
 | |
| }
 | |
| 
 |