diff --git a/bun.lockb b/bun.lockb index 1503e02..0985a2a 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/data/works/brook-code-theme.mdx b/data/works/brook-code-theme.mdx new file mode 100644 index 0000000..b5d2a17 --- /dev/null +++ b/data/works/brook-code-theme.mdx @@ -0,0 +1,5 @@ +--- +tags: ['developers', 'designer'] +--- + +# Hero diff --git a/next.config.ts b/next.config.ts index b3eb1c0..a689337 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,10 +1,7 @@ import { NextConfig } from 'next' -import createMDX from '@next/mdx' -import remarkGfm from 'remark-gfm' const nextConfig: NextConfig = { experimental: { - mdxRs: true, optimizePackageImports: ['@flaticon/flaticon-uicons'], }, pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'], @@ -16,14 +13,7 @@ const nextConfig: NextConfig = { ], }, skipTrailingSlashRedirect: true, - transpilePackages: ['next-mdx-remote'], + transpilePackages: [], } -const withMDX = createMDX({ - options: { - remarkPlugins: [remarkGfm], - rehypePlugins: [], - }, -}) - -export default withMDX(nextConfig) +export default nextConfig diff --git a/package.json b/package.json index cb22991..180922e 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint:check": "next lint", @@ -15,34 +15,27 @@ "dependencies": { "@flaticon/flaticon-uicons": "^3.3.1", "@hookform/resolvers": "^3.9.0", - "@mdx-js/loader": "^3.1.0", - "@mdx-js/react": "^3.1.0", - "@next/mdx": "15.0.3", "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-hover-card": "^1.1.1", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", + "@tailwindcss/forms": "^0.5.9", "@tanstack/react-query": "^5.62.0", - "@types/mdx": "^2.0.13", "@vercel/analytics": "^1.3.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "date-fns": "^4.1.0", - "framer-motion": "^11.3.21", - "geist": "^1.3.1", "lenis": "^1.1.6", "next": "15.0.3", - "next-mdx-remote": "^5.0.0", "next-themes": "^0.4.3", - "plaiceholder": "^3.0.0", "posthog-js": "^1.194.0", "react": "19.0.0-rc-66855b96-20241106", "react-dom": "19.0.0-rc-66855b96-20241106", "react-hook-form": "^7.52.2", - "remark-gfm": "^4.0.0", "sonner": "^1.5.0", "tailwind-merge": "^2.4.0", + "tailwindcss-animate": "^1.0.7", "zod": "^3.23.8" }, "devDependencies": { diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx index 9ca5716..8ea6882 100644 --- a/src/app/global-error.tsx +++ b/src/app/global-error.tsx @@ -1,10 +1,9 @@ 'use client' import '@shared/styles/globals.css' -import { GeistSans } from 'geist/font/sans' -import { GeistMono } from 'geist/font/mono' import { Button } from '@shared/components/ui/button' import { CenteredLayout } from '@shared/components//common/centered-layout' +import * as fonts from '@shared/fonts' export default function GlobalError({ reset, @@ -16,7 +15,7 @@ export default function GlobalError({ diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 4fd5373..9e5a44e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,8 +3,6 @@ import type { Metadata } from 'next' import '@shared/styles/globals.css' import config from '@shared/libs/config' import { Analytics as VercelAnalytics } from '@vercel/analytics/react' -import { GeistSans } from 'geist/font/sans' -import { GeistMono } from 'geist/font/mono' import { AnimationProvider } from '@shared/providers/animation-provider' import { ThemeProvider } from '@shared/providers/theme-provider' import Header from '@shared/components/common/header' @@ -13,6 +11,7 @@ import { Toaster } from '@shared/components/ui/toast' import { CenteredLayout } from '@shared/components/common/centered-layout' import { PosthogProvider } from '@shared/providers/posthog-provider' import { QueryProvider } from '@shared/providers/query-provider' +import * as fonts from '@shared/fonts' export const metadata: Metadata = { applicationName: 'Nyoman Sunima', @@ -48,7 +47,7 @@ export default function RootLayout({ diff --git a/src/app/works/[slug]/page.tsx b/src/app/works/[slug]/page.tsx new file mode 100644 index 0000000..acdc513 --- /dev/null +++ b/src/app/works/[slug]/page.tsx @@ -0,0 +1,25 @@ +import * as React from 'react' +import { Metadata } from 'next' +import * as defaultMetadata from '@shared/libs/shared-metadata' + +export const metadata: Metadata = { + title: 'Works', + description: + 'See all of my works including projects, apps, products, case studies, idea and playground', + openGraph: { + ...defaultMetadata.openGraph, + title: 'Works', + description: + 'See all of my works including projects, apps, products, case studies, idea and playground', + }, + twitter: { + ...defaultMetadata.twitter, + title: 'Works', + description: + 'See all of my works including projects, apps, products, case studies, idea and playground', + }, +} + +export default function WorksDetailPage(): React.ReactElement { + return
+} diff --git a/src/features/works/index.ts b/src/features/works/index.ts index f85817c..9bb1a87 100644 --- a/src/features/works/index.ts +++ b/src/features/works/index.ts @@ -1,3 +1,3 @@ -export * from './item' -export * from './list' +export * from './work-item' +export * from './work-list-section' export * from './coming-soon' diff --git a/src/shared/components/animation/transition.tsx b/src/shared/components/animation/transition.tsx index 3e194fa..381d141 100644 --- a/src/shared/components/animation/transition.tsx +++ b/src/shared/components/animation/transition.tsx @@ -1,7 +1,6 @@ 'use client' import * as React from 'react' -import { motion } from 'framer-motion' interface PageTransitionProps { children: React.ReactNode @@ -11,18 +10,8 @@ export function PageTransition({ children, }: PageTransitionProps): React.ReactElement { return ( - +
{children} - +
) } diff --git a/src/shared/components/ui/accordion.tsx b/src/shared/components/ui/accordion.tsx index f7274b6..e4bd791 100644 --- a/src/shared/components/ui/accordion.tsx +++ b/src/shared/components/ui/accordion.tsx @@ -3,7 +3,6 @@ import * as React from 'react' import * as AccordionPrimitive from '@radix-ui/react-accordion' import { mergeClass } from '@shared/utils/helper' -import { motion } from 'framer-motion' const Accordion = AccordionPrimitive.Root @@ -51,18 +50,7 @@ const AccordionContent = React.forwardRef< className="overflow-hidden text-sm text-foreground/70 !leading-relaxed transition-all duration-700" {...props} > - - {children} - +
{children}
)) diff --git a/src/shared/fonts/index.ts b/src/shared/fonts/index.ts new file mode 100644 index 0000000..76c2142 --- /dev/null +++ b/src/shared/fonts/index.ts @@ -0,0 +1,14 @@ +import { Inter, DM_Mono } from 'next/font/google' + +export const inter = Inter({ + display: 'swap', + subsets: ['latin'], + variable: '--font-inter', +}) + +export const dmMono = DM_Mono({ + display: 'swap', + subsets: ['latin'], + variable: '--font-dm-mono', + weight: ['300', '400', '500'], +}) diff --git a/src/shared/libs/connection-instance.ts b/src/shared/libs/connection-instance.ts index 0279621..29eff47 100644 --- a/src/shared/libs/connection-instance.ts +++ b/src/shared/libs/connection-instance.ts @@ -1,4 +1,4 @@ -import { promises as fs } from 'fs' +import fs from 'fs/promises' import fsPath from 'path' type FetchRequestInit = Omit & { diff --git a/src/shared/utils/image.ts b/src/shared/utils/image.ts deleted file mode 100644 index c9285d3..0000000 --- a/src/shared/utils/image.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as fs from 'fs/promises' -import { getPlaiceholder } from 'plaiceholder' - -interface CreateImageBlur { - url: string -} - -export async function createImageBlur({ - url, -}: CreateImageBlur): Promise { - // Check if the images is static or the dynamic images from url - const isDynamicImage = url.includes('https://') || url.includes('http://') - let blurImage - - if (isDynamicImage) { - const buffer = await fetch(url) - .then((res) => res.arrayBuffer()) - .then((res) => Buffer.from(res)) - - blurImage = (await getPlaiceholder(buffer)).base64 - } else { - const buffer = await fs.readFile(`${process.cwd()}/public${url}`) - blurImage = (await getPlaiceholder(buffer)).base64 - } - - return blurImage -} diff --git a/tailwind.config.ts b/tailwind.config.ts index f4a766f..713c306 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,4 +1,7 @@ import type { Config } from 'tailwindcss' +import form from '@tailwindcss/forms' +import typography from '@tailwindcss/typography' +import animation from 'tailwindcss-animate' const config: Config = { content: [ @@ -8,8 +11,8 @@ const config: Config = { darkMode: ['selector'], theme: { fontFamily: { - sans: ['var(--font-geist-sans)'], - mono: ['var(--font-geist-mono)'], + sans: ['var(--font-inter)'], + mono: ['var(--font-dm-mono)'], }, screens: { tablet: '640px', @@ -42,7 +45,7 @@ const config: Config = { }, }, }, - plugins: [require('@tailwindcss/typography')], + plugins: [typography, form, animation], } export default config