From ac4429d6d9fdfef7dffa35a8b4097f4c465245da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Tue, 2 Dec 2025 09:17:49 +0100 Subject: [PATCH] feat: new public website --- README.md | 2 +- apps/public/.gitignore | 2 - apps/public/Dockerfile | 94 - apps/public/README.md | 21 +- .../(content)/articles/[articleSlug]/page.tsx | 203 - apps/public/app/(content)/articles/page.tsx | 55 - apps/public/app/(content)/layout.tsx | 24 - apps/public/app/(content)/supporter/page.tsx | 288 - apps/public/app/api/search/route.ts | 4 - apps/public/app/docs/[[...slug]]/page.tsx | 67 - apps/public/app/docs/layout.tsx | 12 - apps/public/app/global.css | 224 - apps/public/app/layout.config.tsx | 66 - apps/public/app/layout.tsx | 75 - apps/public/app/manifest.ts | 22 - apps/public/app/not-found.tsx | 30 - apps/public/app/page.tsx | 36 - apps/public/app/test/page.tsx | 23 - apps/public/components.json | 20 - apps/public/components/Swirls.tsx | 36 - apps/public/components/feature.tsx | 160 - apps/public/components/footer.tsx | 158 - apps/public/components/hero-carousel.tsx | 145 - apps/public/components/hero-map.tsx | 20 - apps/public/components/hero.tsx | 138 - apps/public/components/line.tsx | 34 - apps/public/components/navbar.tsx | 135 - apps/public/components/section.tsx | 31 - apps/public/components/sections/faq.tsx | 141 - apps/public/components/sections/features.tsx | 321 - .../sections/features/events-feature.tsx | 272 - .../features/product-analytics-feature.tsx | 193 - .../sections/features/profiles-feature.tsx | 139 - apps/public/components/sections/pricing.tsx | 194 - apps/public/components/sections/sdks.tsx | 86 - apps/public/components/sections/stats.tsx | 93 - .../components/sections/testimonials.tsx | 113 - apps/public/components/why-openpanel.tsx | 87 - apps/public/components/world-map-string.ts | 6040 ----------------- apps/public/components/world-map.tsx | 154 - .../content/articles/bullmq-alternative.mdx | 2 +- .../content/compare/ackee-alternative.json | 507 ++ .../compare/amplitude-alternative.json | 470 ++ .../compare/appsflyer-alternative.json | 426 ++ .../compare/cabin-analytics-alternative.json | 478 ++ .../content/compare/countly-alternative.json | 518 ++ .../compare/crazy-egg-alternative.json | 420 ++ apps/public/content/compare/ensure.ts | 166 + .../content/compare/fathom-alternative.json | 471 ++ .../compare/fullstory-alternative.json | 430 ++ .../content/compare/funnelio-alternative.json | 476 ++ .../compare/goatcounter-alternative.json | 546 ++ .../compare/google-analytics-alternative.json | 465 ++ .../content/compare/heap-alternative.json | 430 ++ .../content/compare/matomo-alternative.json | 469 ++ .../microsoft-clarity-alternative.json | 495 ++ .../content/compare/mixpanel-alternative.json | 473 ++ .../compare/mouseflow-alternative.json | 426 ++ .../compare/pirsch-analytics-alternative.json | 472 ++ .../compare/plausible-alternative.json | 473 ++ .../content/compare/posthog-alternative.json | 458 ++ .../compare/simple-analytics-alternative.json | 476 ++ .../compare/smartlook-alternative.json | 410 ++ .../content/compare/umami-alternative.json | 506 ++ .../content/docs/(tracking)/how-it-works.mdx | 18 +- .../docs/(tracking)/sdks/javascript.mdx | 2 +- .../content/docs/(tracking)/sdks/kotlin.mdx | 4 +- .../docs/(tracking)/sdks/react-native.mdx | 2 +- .../content/docs/(tracking)/sdks/script.mdx | 4 +- .../content/docs/(tracking)/sdks/web.mdx | 2 +- apps/public/content/pages/pricing.mdx | 21 - apps/public/lib/source.ts | 25 - apps/public/lib/utils.ts | 6 - apps/public/package.json | 47 +- apps/public/postcss.config.mjs | 3 +- apps/public/public/hero-dark-1.webp | Bin 0 -> 242248 bytes apps/public/public/hero-dark.webp | Bin 0 -> 47036 bytes apps/public/public/hero-light-1.webp | Bin 0 -> 139894 bytes apps/public/public/hero-light.webp | Bin 0 -> 29068 bytes apps/public/public/logos/1.png | Bin 0 -> 1693 bytes apps/public/public/logos/2.png | Bin 0 -> 1702 bytes apps/public/public/logos/3.png | Bin 0 -> 1301 bytes apps/public/public/logos/4.png | Bin 0 -> 1061 bytes apps/public/public/logos/5.png | Bin 0 -> 1840 bytes apps/public/public/logos/6.png | Bin 0 -> 2633 bytes apps/public/public/logos/helpy-ui.png | Bin 9046 -> 5864 bytes apps/public/public/logos/kiddokitchen.png | Bin 35902 -> 18544 bytes apps/public/public/logos/maneken.jpg | Bin 9870 -> 0 bytes apps/public/public/logos/maneken.png | Bin 0 -> 10532 bytes apps/public/public/logos/midday.png | Bin 6530 -> 22551 bytes apps/public/public/logos/screenzen.avif | Bin 3129 -> 0 bytes apps/public/public/logos/screenzen.png | Bin 0 -> 14555 bytes apps/public/public/logos/tiptip.jpg | Bin 12320 -> 0 bytes apps/public/public/logos/tiptip.png | Bin 0 -> 14438 bytes apps/public/public/ogimage-empty.png | Bin 0 -> 11514 bytes apps/public/public/ogimage.jpg | Bin 212602 -> 0 bytes apps/public/public/ogimage.png | Bin 697467 -> 63995 bytes .../public/screenshots/dashboard-dark.png | Bin 0 -> 977310 bytes .../public/screenshots/dashboard-light.png | Bin 0 -> 1008152 bytes .../public/screenshots/overview-dark.png | Bin 0 -> 1523845 bytes .../public/screenshots/overview-light.png | Bin 0 -> 1578280 bytes .../public/screenshots/profile-dark.png | Bin 0 -> 1003263 bytes .../public/screenshots/profile-light.png | Bin 0 -> 1040060 bytes .../public/screenshots/realtime-dark.png | Bin 0 -> 1636753 bytes .../public/screenshots/realtime-light.png | Bin 0 -> 1670690 bytes .../public/public/screenshots/report-dark.png | Bin 0 -> 1142683 bytes .../public/screenshots/report-light.png | Bin 0 -> 1190352 bytes apps/public/source.config.ts | 27 +- .../app/(content)/[...pages]/page.tsx | 56 +- .../(content)/articles/[articleSlug]/page.tsx | 190 + .../src/app/(content)/articles/page.tsx | 54 + .../[slug]/_components/benefits-section.tsx | 53 + .../[slug]/_components/compare-faq.tsx | 52 + .../[slug]/_components/compare-hero.tsx | 52 + .../[slug]/_components/compare-toc.tsx | 59 + .../[slug]/_components/comparison-table.tsx | 109 + .../[slug]/_components/feature-comparison.tsx | 69 + .../[slug]/_components/features-showcase.tsx | 63 + .../[slug]/_components/highlights-grid.tsx | 57 + .../[slug]/_components/migration-section.tsx | 82 + .../[slug]/_components/pricing-comparison.tsx | 86 + .../[slug]/_components/pricing-section.tsx | 190 + .../[slug]/_components/problem-section.tsx | 38 + .../[slug]/_components/summary-comparison.tsx | 52 + .../_components/technical-comparison.tsx | 77 + .../[slug]/_components/trust-compliance.tsx | 110 + .../compare/[slug]/_components/use-cases.tsx | 26 + .../[slug]/_components/who-should-choose.tsx | 122 + .../compare/[slug]/_components/why-switch.tsx | 55 + .../src/app/(content)/compare/[slug]/page.tsx | 224 + .../compare/_components/compare-card.tsx | 49 + .../public/src/app/(content)/compare/page.tsx | 73 + apps/public/src/app/(content)/layout.tsx | 17 + .../public/src/app/(content)/pricing/page.tsx | 109 + .../src/app/(content)/supporter/page.tsx | 215 + .../(home)/_sections/analytics-insights.tsx | 70 + .../(home)/_sections/collaboration-chart.tsx | 171 + .../app/(home)/_sections/collaboration.tsx | 66 + .../src/app/(home)/_sections/cta-banner.tsx | 81 + .../src/app/(home)/_sections/data-privacy.tsx | 67 + apps/public/src/app/(home)/_sections/faq.tsx | 102 + apps/public/src/app/(home)/_sections/hero.tsx | 188 + .../illustrations/data-ownership.tsx | 113 + .../_sections/illustrations/privacy.tsx | 99 + .../illustrations/product-analytics.tsx | 101 + .../illustrations/web-analytics.tsx} | 80 +- .../src/app/(home)/_sections/pricing.tsx | 119 + apps/public/src/app/(home)/_sections/sdks.tsx | 30 + .../src/app/(home)/_sections/testimonials.tsx | 193 + .../app/(home)/_sections/why-openpanel.tsx | 82 + apps/public/src/app/(home)/layout.tsx | 17 + apps/public/src/app/(home)/page.tsx | 27 + .../public/{ => src}/app/api/[...op]/route.ts | 0 .../public/{ => src}/app/api/headers/route.ts | 0 apps/public/src/app/api/search/route.ts | 7 + apps/public/src/app/docs/[[...slug]]/page.tsx | 55 + apps/public/src/app/docs/layout.tsx | 11 + apps/public/src/app/global.css | 207 + apps/public/src/app/layout.tsx | 44 + apps/public/src/app/llms-full.txt/route.ts | 10 + apps/public/src/app/og/[...og]/route.tsx | 233 + apps/public/{ => src}/app/robots.txt | 1 + apps/public/{ => src}/app/sitemap.ts | 25 +- .../{ => src}/components/article-card.tsx | 0 .../{ => src}/components/battery-icon.tsx | 0 .../components/common-sdk-config.mdx | 0 .../{ => src}/components/competition.tsx | 0 .../components/device-id-warning.tsx | 0 apps/public/{ => src}/components/faq.tsx | 12 +- apps/public/src/components/feature-card.tsx | 76 + apps/public/{ => src}/components/figure.tsx | 0 .../public/{ => src}/components/flow-step.tsx | 2 +- apps/public/src/components/footer.tsx | 175 + .../src/components/get-started-button.tsx | 23 + .../{ => src}/components/github-button.tsx | 0 .../src/components/infinite-moving-cards.tsx | 99 + apps/public/{ => src}/components/logo.tsx | 0 apps/public/src/components/navbar.tsx | 216 + apps/public/src/components/perks.tsx | 18 + .../components/personal-data-warning.tsx | 0 .../{ => src}/components/pricing-slider.tsx | 14 +- apps/public/src/components/section.tsx | 81 + .../{ => src}/components/simple-chart.tsx | 2 +- apps/public/{ => src}/components/tag.tsx | 0 apps/public/{ => src}/components/toc.tsx | 15 +- .../{ => src}/components/twitter-card.tsx | 20 +- .../{ => src}/components/ui/accordion.tsx | 6 +- .../public/{ => src}/components/ui/button.tsx | 2 +- .../public/{ => src}/components/ui/slider.tsx | 0 .../{ => src}/components/ui/tooltip.tsx | 0 .../{ => src}/components/web-sdk-config.mdx | 0 apps/public/src/components/window-image.tsx | 73 + apps/public/src/lib/compare.ts | 213 + apps/public/{ => src}/lib/dark-mode.ts | 0 apps/public/{ => src}/lib/github.ts | 0 apps/public/src/lib/layout.shared.tsx | 39 + apps/public/src/lib/metadata.ts | 84 + apps/public/src/lib/source.ts | 73 + apps/public/src/lib/utils.ts | 16 + apps/public/src/mdx-components.tsx | 33 + apps/public/tailwind.config.js | 99 - apps/public/tsconfig.json | 29 +- packages/payments/package.json | 6 +- packages/sdks/_info/frameworks.tsx | 16 + pnpm-lock.yaml | 4245 ++++++------ test.ts | 41 + 206 files changed, 18415 insertions(+), 12433 deletions(-) delete mode 100644 apps/public/Dockerfile delete mode 100644 apps/public/app/(content)/articles/[articleSlug]/page.tsx delete mode 100644 apps/public/app/(content)/articles/page.tsx delete mode 100644 apps/public/app/(content)/layout.tsx delete mode 100644 apps/public/app/(content)/supporter/page.tsx delete mode 100644 apps/public/app/api/search/route.ts delete mode 100644 apps/public/app/docs/[[...slug]]/page.tsx delete mode 100644 apps/public/app/docs/layout.tsx delete mode 100644 apps/public/app/global.css delete mode 100644 apps/public/app/layout.config.tsx delete mode 100644 apps/public/app/layout.tsx delete mode 100644 apps/public/app/manifest.ts delete mode 100644 apps/public/app/not-found.tsx delete mode 100644 apps/public/app/page.tsx delete mode 100644 apps/public/app/test/page.tsx delete mode 100644 apps/public/components.json delete mode 100644 apps/public/components/Swirls.tsx delete mode 100644 apps/public/components/feature.tsx delete mode 100644 apps/public/components/footer.tsx delete mode 100644 apps/public/components/hero-carousel.tsx delete mode 100644 apps/public/components/hero-map.tsx delete mode 100644 apps/public/components/hero.tsx delete mode 100644 apps/public/components/line.tsx delete mode 100644 apps/public/components/navbar.tsx delete mode 100644 apps/public/components/section.tsx delete mode 100644 apps/public/components/sections/faq.tsx delete mode 100644 apps/public/components/sections/features.tsx delete mode 100644 apps/public/components/sections/features/events-feature.tsx delete mode 100644 apps/public/components/sections/features/product-analytics-feature.tsx delete mode 100644 apps/public/components/sections/features/profiles-feature.tsx delete mode 100644 apps/public/components/sections/pricing.tsx delete mode 100644 apps/public/components/sections/sdks.tsx delete mode 100644 apps/public/components/sections/stats.tsx delete mode 100644 apps/public/components/sections/testimonials.tsx delete mode 100644 apps/public/components/why-openpanel.tsx delete mode 100644 apps/public/components/world-map-string.ts delete mode 100644 apps/public/components/world-map.tsx create mode 100644 apps/public/content/compare/ackee-alternative.json create mode 100644 apps/public/content/compare/amplitude-alternative.json create mode 100644 apps/public/content/compare/appsflyer-alternative.json create mode 100644 apps/public/content/compare/cabin-analytics-alternative.json create mode 100644 apps/public/content/compare/countly-alternative.json create mode 100644 apps/public/content/compare/crazy-egg-alternative.json create mode 100644 apps/public/content/compare/ensure.ts create mode 100644 apps/public/content/compare/fathom-alternative.json create mode 100644 apps/public/content/compare/fullstory-alternative.json create mode 100644 apps/public/content/compare/funnelio-alternative.json create mode 100644 apps/public/content/compare/goatcounter-alternative.json create mode 100644 apps/public/content/compare/google-analytics-alternative.json create mode 100644 apps/public/content/compare/heap-alternative.json create mode 100644 apps/public/content/compare/matomo-alternative.json create mode 100644 apps/public/content/compare/microsoft-clarity-alternative.json create mode 100644 apps/public/content/compare/mixpanel-alternative.json create mode 100644 apps/public/content/compare/mouseflow-alternative.json create mode 100644 apps/public/content/compare/pirsch-analytics-alternative.json create mode 100644 apps/public/content/compare/plausible-alternative.json create mode 100644 apps/public/content/compare/posthog-alternative.json create mode 100644 apps/public/content/compare/simple-analytics-alternative.json create mode 100644 apps/public/content/compare/smartlook-alternative.json create mode 100644 apps/public/content/compare/umami-alternative.json delete mode 100644 apps/public/content/pages/pricing.mdx delete mode 100644 apps/public/lib/source.ts delete mode 100644 apps/public/lib/utils.ts create mode 100644 apps/public/public/hero-dark-1.webp create mode 100644 apps/public/public/hero-dark.webp create mode 100644 apps/public/public/hero-light-1.webp create mode 100644 apps/public/public/hero-light.webp create mode 100644 apps/public/public/logos/1.png create mode 100644 apps/public/public/logos/2.png create mode 100644 apps/public/public/logos/3.png create mode 100644 apps/public/public/logos/4.png create mode 100644 apps/public/public/logos/5.png create mode 100644 apps/public/public/logos/6.png delete mode 100644 apps/public/public/logos/maneken.jpg create mode 100644 apps/public/public/logos/maneken.png delete mode 100644 apps/public/public/logos/screenzen.avif create mode 100644 apps/public/public/logos/screenzen.png delete mode 100644 apps/public/public/logos/tiptip.jpg create mode 100644 apps/public/public/logos/tiptip.png create mode 100644 apps/public/public/ogimage-empty.png delete mode 100644 apps/public/public/ogimage.jpg create mode 100644 apps/public/public/screenshots/dashboard-dark.png create mode 100644 apps/public/public/screenshots/dashboard-light.png create mode 100644 apps/public/public/screenshots/overview-dark.png create mode 100644 apps/public/public/screenshots/overview-light.png create mode 100644 apps/public/public/screenshots/profile-dark.png create mode 100644 apps/public/public/screenshots/profile-light.png create mode 100644 apps/public/public/screenshots/realtime-dark.png create mode 100644 apps/public/public/screenshots/realtime-light.png create mode 100644 apps/public/public/screenshots/report-dark.png create mode 100644 apps/public/public/screenshots/report-light.png rename apps/public/{ => src}/app/(content)/[...pages]/page.tsx (57%) create mode 100644 apps/public/src/app/(content)/articles/[articleSlug]/page.tsx create mode 100644 apps/public/src/app/(content)/articles/page.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/benefits-section.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/compare-faq.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/compare-hero.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/compare-toc.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/comparison-table.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/feature-comparison.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/features-showcase.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/highlights-grid.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/migration-section.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/pricing-comparison.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/pricing-section.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/problem-section.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/summary-comparison.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/technical-comparison.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/trust-compliance.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/use-cases.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/who-should-choose.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/_components/why-switch.tsx create mode 100644 apps/public/src/app/(content)/compare/[slug]/page.tsx create mode 100644 apps/public/src/app/(content)/compare/_components/compare-card.tsx create mode 100644 apps/public/src/app/(content)/compare/page.tsx create mode 100644 apps/public/src/app/(content)/layout.tsx create mode 100644 apps/public/src/app/(content)/pricing/page.tsx create mode 100644 apps/public/src/app/(content)/supporter/page.tsx create mode 100644 apps/public/src/app/(home)/_sections/analytics-insights.tsx create mode 100644 apps/public/src/app/(home)/_sections/collaboration-chart.tsx create mode 100644 apps/public/src/app/(home)/_sections/collaboration.tsx create mode 100644 apps/public/src/app/(home)/_sections/cta-banner.tsx create mode 100644 apps/public/src/app/(home)/_sections/data-privacy.tsx create mode 100644 apps/public/src/app/(home)/_sections/faq.tsx create mode 100644 apps/public/src/app/(home)/_sections/hero.tsx create mode 100644 apps/public/src/app/(home)/_sections/illustrations/data-ownership.tsx create mode 100644 apps/public/src/app/(home)/_sections/illustrations/privacy.tsx create mode 100644 apps/public/src/app/(home)/_sections/illustrations/product-analytics.tsx rename apps/public/{components/sections/features/web-analytics-feature.tsx => src/app/(home)/_sections/illustrations/web-analytics.tsx} (67%) create mode 100644 apps/public/src/app/(home)/_sections/pricing.tsx create mode 100644 apps/public/src/app/(home)/_sections/sdks.tsx create mode 100644 apps/public/src/app/(home)/_sections/testimonials.tsx create mode 100644 apps/public/src/app/(home)/_sections/why-openpanel.tsx create mode 100644 apps/public/src/app/(home)/layout.tsx create mode 100644 apps/public/src/app/(home)/page.tsx rename apps/public/{ => src}/app/api/[...op]/route.ts (100%) rename apps/public/{ => src}/app/api/headers/route.ts (100%) create mode 100644 apps/public/src/app/api/search/route.ts create mode 100644 apps/public/src/app/docs/[[...slug]]/page.tsx create mode 100644 apps/public/src/app/docs/layout.tsx create mode 100644 apps/public/src/app/global.css create mode 100644 apps/public/src/app/layout.tsx create mode 100644 apps/public/src/app/llms-full.txt/route.ts create mode 100644 apps/public/src/app/og/[...og]/route.tsx rename apps/public/{ => src}/app/robots.txt (84%) rename apps/public/{ => src}/app/sitemap.ts (67%) rename apps/public/{ => src}/components/article-card.tsx (100%) rename apps/public/{ => src}/components/battery-icon.tsx (100%) rename apps/public/{ => src}/components/common-sdk-config.mdx (100%) rename apps/public/{ => src}/components/competition.tsx (100%) rename apps/public/{ => src}/components/device-id-warning.tsx (100%) rename apps/public/{ => src}/components/faq.tsx (72%) create mode 100644 apps/public/src/components/feature-card.tsx rename apps/public/{ => src}/components/figure.tsx (100%) rename apps/public/{ => src}/components/flow-step.tsx (97%) create mode 100644 apps/public/src/components/footer.tsx create mode 100644 apps/public/src/components/get-started-button.tsx rename apps/public/{ => src}/components/github-button.tsx (100%) create mode 100644 apps/public/src/components/infinite-moving-cards.tsx rename apps/public/{ => src}/components/logo.tsx (100%) create mode 100644 apps/public/src/components/navbar.tsx create mode 100644 apps/public/src/components/perks.tsx rename apps/public/{ => src}/components/personal-data-warning.tsx (100%) rename apps/public/{ => src}/components/pricing-slider.tsx (83%) create mode 100644 apps/public/src/components/section.tsx rename apps/public/{ => src}/components/simple-chart.tsx (96%) rename apps/public/{ => src}/components/tag.tsx (100%) rename apps/public/{ => src}/components/toc.tsx (66%) rename apps/public/{ => src}/components/twitter-card.tsx (84%) rename apps/public/{ => src}/components/ui/accordion.tsx (85%) rename apps/public/{ => src}/components/ui/button.tsx (80%) rename apps/public/{ => src}/components/ui/slider.tsx (100%) rename apps/public/{ => src}/components/ui/tooltip.tsx (100%) rename apps/public/{ => src}/components/web-sdk-config.mdx (100%) create mode 100644 apps/public/src/components/window-image.tsx create mode 100644 apps/public/src/lib/compare.ts rename apps/public/{ => src}/lib/dark-mode.ts (100%) rename apps/public/{ => src}/lib/github.ts (100%) create mode 100644 apps/public/src/lib/layout.shared.tsx create mode 100644 apps/public/src/lib/metadata.ts create mode 100644 apps/public/src/lib/source.ts create mode 100644 apps/public/src/lib/utils.ts create mode 100644 apps/public/src/mdx-components.tsx delete mode 100644 apps/public/tailwind.config.js create mode 100644 test.ts 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 ( -
-