From 5b7ccf0b671e2999b62befc729a3e517a0433728 Mon Sep 17 00:00:00 2001 From: Bertrand Yuan Date: Mon, 15 Dec 2025 23:48:10 +0800 Subject: initial commit -- the front-end prototype The initial code is base on Anirudh's work. More to see at: https://github.com/techwithanirudh/shadcn-blog Therefore, the code in this commit is under MIT license. --- src/app/(home)/_components/call-to-action.tsx | 23 +++++++ src/app/(home)/_components/hero.tsx | 98 +++++++++++++++++++++++++++ src/app/(home)/_components/posts.tsx | 40 +++++++++++ 3 files changed, 161 insertions(+) create mode 100644 src/app/(home)/_components/call-to-action.tsx create mode 100644 src/app/(home)/_components/hero.tsx create mode 100644 src/app/(home)/_components/posts.tsx (limited to 'src/app/(home)/_components') diff --git a/src/app/(home)/_components/call-to-action.tsx b/src/app/(home)/_components/call-to-action.tsx new file mode 100644 index 0000000..b75298e --- /dev/null +++ b/src/app/(home)/_components/call-to-action.tsx @@ -0,0 +1,23 @@ +import { NewsletterForm } from '@/components/newsletter-form'; +import { Section } from '@/components/section'; +import type React from 'react'; + +export function CTA(): React.ReactElement { + return ( +
+
+

+ Subscribe to the Newsletter +

+

+ Get the latest articles and updates delivered straight to your inbox. + No spam, unsubscribe anytime. +

+
+ +
+ +
+
+ ); +} diff --git a/src/app/(home)/_components/hero.tsx b/src/app/(home)/_components/hero.tsx new file mode 100644 index 0000000..8ac251b --- /dev/null +++ b/src/app/(home)/_components/hero.tsx @@ -0,0 +1,98 @@ +import { baseOptions, linkItems } from '@/app/layout.config'; +import { Icons } from '@/components/icons/icons'; +import { Section } from '@/components/section'; +import { buttonVariants } from '@/components/ui/button'; +import { cn } from '@/lib/utils'; +import { getLinks } from 'fumadocs-ui/layouts/shared'; +import * as motion from 'motion/react-client'; +import Image from 'next/image'; +import Link from 'next/link'; +import Balancer from 'react-wrap-balancer'; +import heroImage from '../../../../public/images/gradient-noise-purple-azure-light.png'; + +const Hero = () => { + const links = getLinks(linkItems, baseOptions.githubUrl); + const navItems = links.filter((item) => + ['nav', 'all'].includes(item.on ?? 'all'), + ); + + return ( +
+ + Hero Background + +
+ + + Full-Stack Developer & Tech Writer + +
+

+ I'm John Doe , a Full-Stack Developer. +

+

+ + I write about web development, software engineering, and the latest + technologies. I also create fun projects and tutorials to help you + learn and grow as a developer. + +

+ +
+ + Browse Posts + + + +
+ {navItems + .filter((item) => item.type === 'icon') + .map((item, i) => ( + + {item.icon} + {item.text} + + ))} +
+
+
+ ); +}; + +export default Hero; diff --git a/src/app/(home)/_components/posts.tsx b/src/app/(home)/_components/posts.tsx new file mode 100644 index 0000000..8c8dc33 --- /dev/null +++ b/src/app/(home)/_components/posts.tsx @@ -0,0 +1,40 @@ +import { Icons } from '@/components/icons/icons'; +import { PostCard } from '@/components/posts/post-card'; +import { Section } from '@/components/section'; +import { buttonVariants } from '@/components/ui/button'; +import type { Page } from '@/lib/source'; +import Link from 'next/link'; + +export default function Posts({ posts }: { posts: Page[] }) { + return ( +
+
+ {posts.map((post) => { + const date = new Date(post.data.date).toDateString(); + return ( + + ); + })} + + View More + + +
+
+ ); +} -- cgit v1.2.3