diff --git a/README.md b/README.md index 8a52de2f..036edc06 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![hero](apps/public/public/ogimage.jpg) +![hero](apps/public/public/ogimage.png)

Openpanel

diff --git a/apps/public/.gitignore b/apps/public/.gitignore index 55a12ae7..9e429e49 100644 --- a/apps/public/.gitignore +++ b/apps/public/.gitignore @@ -2,8 +2,6 @@ /node_modules # generated content -.contentlayer -.content-collections .source # test & build diff --git a/apps/public/Dockerfile b/apps/public/Dockerfile deleted file mode 100644 index 34617b1c..00000000 --- a/apps/public/Dockerfile +++ /dev/null @@ -1,94 +0,0 @@ -ARG NODE_VERSION=20.15.1 - -FROM --platform=linux/amd64 node:${NODE_VERSION}-slim AS base - -ARG DATABASE_URL -ENV DATABASE_URL=$DATABASE_URL - -ARG REDIS_URL -ENV REDIS_URL=$REDIS_URL - -ARG CLICKHOUSE_URL -ENV CLICKHOUSE_URL=$CLICKHOUSE_URL - -ENV PNPM_HOME="/pnpm" - -ENV PATH="$PNPM_HOME:$PATH" - -RUN corepack enable - -RUN apt update \ - && apt install -y curl \ - && curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n \ - && bash n $NODE_VERSION \ - && rm n \ - && npm install -g n - -WORKDIR /app - -COPY package.json package.json -COPY pnpm-lock.yaml pnpm-lock.yaml -COPY pnpm-workspace.yaml pnpm-workspace.yaml -COPY apps/public/package.json apps/public/package.json -COPY packages/db/package.json packages/db/package.json -COPY packages/redis/package.json packages/redis/package.json -COPY packages/queue/package.json packages/queue/package.json -COPY packages/common/package.json packages/common/package.json -COPY packages/constants/package.json packages/constants/package.json -COPY packages/validation/package.json packages/validation/package.json -COPY packages/sdks/sdk/package.json packages/sdks/sdk/package.json -COPY packages/sdks/_info/package.json packages/sdks/_info/package.json - -# BUILD -FROM base AS build - -WORKDIR /app/apps/public -RUN pnpm install --frozen-lockfile --ignore-scripts - -WORKDIR /app -COPY apps/public apps/public -COPY packages packages -COPY tooling tooling -RUN pnpm db:codegen - -WORKDIR /app/apps/public -RUN pnpm run build - -# PROD -FROM base AS prod - -WORKDIR /app/apps/public -RUN pnpm install --frozen-lockfile --prod --ignore-scripts - -# FINAL -FROM base AS runner - -COPY --from=build /app/package.json /app/package.json -COPY --from=prod /app/node_modules /app/node_modules -# Apps -COPY --from=build /app/apps/public /app/apps/public -# Apps node_modules -COPY --from=prod /app/apps/public/node_modules /app/apps/public/node_modules -# Packages -COPY --from=build /app/packages/db /app/packages/db -COPY --from=build /app/packages/redis /app/packages/redis -COPY --from=build /app/packages/common /app/packages/common -COPY --from=build /app/packages/queue /app/packages/queue -COPY --from=build /app/packages/constants /app/packages/constants -COPY --from=build /app/packages/validation /app/packages/validation -COPY --from=build /app/packages/sdks/sdk /app/packages/sdks/sdk -COPY --from=build /app/packages/sdks/_info /app/packages/sdks/_info -# Packages node_modules -COPY --from=prod /app/packages/db/node_modules /app/packages/db/node_modules -COPY --from=prod /app/packages/redis/node_modules /app/packages/redis/node_modules -COPY --from=prod /app/packages/common/node_modules /app/packages/common/node_modules -COPY --from=prod /app/packages/queue/node_modules /app/packages/queue/node_modules -COPY --from=prod /app/packages/validation/node_modules /app/packages/validation/node_modules - -RUN pnpm db:codegen - -WORKDIR /app/apps/public - -EXPOSE 3000 - -CMD ["pnpm", "start"] diff --git a/apps/public/README.md b/apps/public/README.md index 9cd7260e..bd503ad3 100644 --- a/apps/public/README.md +++ b/apps/public/README.md @@ -15,6 +15,25 @@ yarn dev Open http://localhost:3000 with your browser to see the result. +## Explore + +In the project, you can see: + +- `lib/source.ts`: Code for content source adapter, [`loader()`](https://fumadocs.dev/docs/headless/source-api) provides the interface to access your content. +- `lib/layout.shared.tsx`: Shared options for layouts, optional but preferred to keep. + +| Route | Description | +| ------------------------- | ------------------------------------------------------ | +| `app/(home)` | The route group for your landing page and other pages. | +| `app/docs` | The documentation layout and pages. | +| `app/api/search/route.ts` | The Route Handler for search. | + +### Fumadocs MDX + +A `source.config.ts` config file has been included, you can customise different options like frontmatter schema. + +Read the [Introduction](https://fumadocs.dev/docs/mdx) for further details. + ## Learn More To learn more about Next.js and Fumadocs, take a look at the following @@ -23,4 +42,4 @@ resources: - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -- [Fumadocs](https://fumadocs.vercel.app) - learn about Fumadocs +- [Fumadocs](https://fumadocs.dev) - learn about Fumadocs diff --git a/apps/public/app/(content)/articles/[articleSlug]/page.tsx b/apps/public/app/(content)/articles/[articleSlug]/page.tsx deleted file mode 100644 index 6346f49c..00000000 --- a/apps/public/app/(content)/articles/[articleSlug]/page.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import { url, getAuthor } from '@/app/layout.config'; -import { SingleSwirl } from '@/components/Swirls'; -import { ArticleCard } from '@/components/article-card'; -import { Logo } from '@/components/logo'; -import { SectionHeader } from '@/components/section'; -import { Toc } from '@/components/toc'; -import { Button } from '@/components/ui/button'; -import { articleSource } from '@/lib/source'; -import { ArrowLeftIcon } from 'lucide-react'; -import type { Metadata } from 'next'; -import Image from 'next/image'; -import Link from 'next/link'; -import { notFound } from 'next/navigation'; -import Script from 'next/script'; - -export async function generateMetadata({ - params, -}: { - params: Promise<{ articleSlug: string }>; -}): Promise { - const { articleSlug } = await params; - const article = await articleSource.getPage([articleSlug]); - const author = getAuthor(article?.data.team); - - if (!article) { - return { - title: 'Article Not Found', - }; - } - - return { - title: article.data.title, - description: article.data.description, - authors: [{ name: author.name }], - alternates: { - canonical: url(article.url), - }, - openGraph: { - title: article.data.title, - description: article.data.description, - type: 'article', - publishedTime: article.data.date.toISOString(), - authors: author.name, - images: url(article.data.cover), - url: url(article.url), - }, - twitter: { - card: 'summary_large_image', - title: article.data.title, - description: article.data.description, - images: url(article.data.cover), - }, - }; -} - -export default async function Page({ - params, -}: { - params: Promise<{ articleSlug: string }>; -}) { - const { articleSlug } = await params; - const article = await articleSource.getPage([articleSlug]); - const Body = article?.data.body; - const author = getAuthor(article?.data.team); - const goBackUrl = '/articles'; - - const relatedArticles = (await articleSource.getPages()) - .filter( - (item) => - item.data.tag === article?.data.tag && item.url !== article?.url, - ) - .sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); - - if (!Body) { - return notFound(); - } - - // Create the JSON-LD data - const jsonLd = { - '@context': 'https://schema.org', - '@type': 'Article', - headline: article?.data.title, - datePublished: article?.data.date.toISOString(), - author: { - '@type': 'Person', - name: author.name, - }, - publisher: { - '@type': 'Organization', - name: 'OpenPanel', - logo: { - '@type': 'ImageObject', - url: url('/logo.png'), - }, - }, - mainEntityOfPage: { - '@type': 'WebPage', - '@id': url(article.url), - }, - image: { - '@type': 'ImageObject', - url: url(article.data.cover), - }, - }; - - return ( -
-