diff --git a/package-lock.json b/package-lock.json index 7c6134c..4394618 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@tailwindcss/forms": "^0.5.7", "ioredis": "^5.4.1", "next": "14.2.13", + "next-plausible": "^3.12.4", "openai": "^4.65.0", "react": "^18", "react-dom": "^18" @@ -7691,6 +7692,20 @@ } } }, + "node_modules/next-plausible": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/next-plausible/-/next-plausible-3.12.4.tgz", + "integrity": "sha512-cD3+ixJxf8yBYvsideTxqli3fvrB7R4BXcvsNJz8Sm2X1QN039WfiXjCyNWkub4h5++rRs6fHhchUMnOuJokcg==", + "license": "MIT", + "funding": { + "url": "https://github.com/4lejandrito/next-plausible?sponsor=1" + }, + "peerDependencies": { + "next": "^11.1.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 ", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", diff --git a/package.json b/package.json index a4bbde1..f28ee41 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@tailwindcss/forms": "^0.5.7", "ioredis": "^5.4.1", "next": "14.2.13", + "next-plausible": "^3.12.4", "openai": "^4.65.0", "react": "^18", "react-dom": "^18" diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 62f7a71..61ce91f 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,3 +1,4 @@ +import PlausibleProvider from 'next-plausible' import React from 'react' import { env } from '@/lib/env' import type { Metadata } from 'next' @@ -17,6 +18,10 @@ export default function RootLayout({ }>) { return ( + + + + {children} ) diff --git a/src/app/page.tsx b/src/app/page.tsx index dcdb827..2eb2d54 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,5 @@ import Link from 'next/link' import React from 'react' -import Plausible from '@/components/Plausible' import { ConceptRepositorySQLite } from '@/concept/adapters/ConceptRepositorySQLite' export const dynamic = 'force-dynamic' @@ -15,38 +14,34 @@ export default async function LandingPage() { const totalConceptsCount = await getTotalConceptsCount() return ( - <> - - -
-

- Validate Your Product or Startup Idea Fast! -

- -
-

- Start by answering one question, and we'll tell you if we got - something valuable about your product idea and target audience. Step - by step guide to validate your idea super fast. -

-
- -
-

- We've analyzed {totalConceptsCount} ideas so - far! Let's see how we can help you today 🤗 -

-
- -
- - Take the First Step - -
+
+

+ Validate Your Product or Startup Idea Fast! +

+ +
+

+ Start by answering one question, and we'll tell you if we got + something valuable about your product idea and target audience. Step + by step guide to validate your idea super fast. +

- + +
+

+ We've analyzed {totalConceptsCount} ideas so + far! Let's see how we can help you today 🤗 +

+
+ +
+ + Take the First Step + +
+
) } diff --git a/src/app/start/page.tsx b/src/app/start/page.tsx index ec0b042..530e295 100644 --- a/src/app/start/page.tsx +++ b/src/app/start/page.tsx @@ -1,6 +1,5 @@ import React from 'react' import ConceptForm from '@/components/ConceptForm' -import Plausible from '@/components/Plausible' import { createIdeaLimiterKey, getLimits } from '@/lib/rateLimiter' export const dynamic = 'force-dynamic' @@ -15,36 +14,32 @@ export default async function StartPage({ const problem = searchParams.problem || '' return ( - <> - +
+ {limiter.isAllowed ? ( + <> +

+ Only One Question +

-
- {limiter.isAllowed ? ( - <> -

- Only One Question -

+ + + ) : ( + <> +

+ Unfortunately... +

- - - ) : ( - <> -

- Unfortunately... -

- -
-

- We provide {limiter.limit} free reports per hour, and the limit - has been reached by indie makers and founders. -
- Limits will be reset at {limiter.resetAt.toUTCString()}. Please - try again later. -

-
- - )} -
- +
+

+ We provide {limiter.limit} free reports per hour, and the limit + has been reached by indie makers and founders. +
+ Limits will be reset at {limiter.resetAt.toUTCString()}. Please + try again later. +

+
+ + )} +
) } diff --git a/src/app/supporters/page.tsx b/src/app/supporters/page.tsx index 01bc889..de5d43b 100644 --- a/src/app/supporters/page.tsx +++ b/src/app/supporters/page.tsx @@ -1,7 +1,6 @@ import Image from 'next/image' import Link from 'next/link' import React from 'react' -import Plausible from '@/components/Plausible' import Supporters from '../../../public/supporters.json' export const dynamic = 'force-dynamic' @@ -17,82 +16,77 @@ const SupportersPage: React.FC = () => { const supporters: Supporter[] = Supporters.sort(() => Math.random() - 0.5) return ( - <> - +
+
+

+ Meet the Supporters of CheckMVP ❤️ +

-
-
-

- Meet the Supporters of CheckMVP ❤️ -

+

+ These amazing individuals may not have directly contributed to + building CheckMVP, but their support has been invaluable to me on this + journey. Whether it was through sharing their thoughts, offering + feedback, testing first versions, or simply bringing positive energy, + they've played a key role in helping me grow and improve! +

+
-

- These amazing individuals may not have directly contributed to - building CheckMVP, but their support has been invaluable to me on - this journey. Whether it was through sharing their thoughts, - offering feedback, testing first versions, or simply bringing - positive energy, they've played a key role in helping me grow - and improve! -

-
- -
- {supporters.map((supporter, index) => ( -
+ {supporters.map((supporter, index) => ( +
+ + {`${supporter.name}'s + + +

- {`${supporter.name}'s + {supporter.name} +

+

+ {supporter.tagline} +

+
+ ))} +
-

- - {supporter.name} - -

-

- {supporter.tagline} -

-
- ))} - +
-
+
+

+ Want to be featured as a supporter? +

-
-

- Want to be featured as a supporter? -

- -

- - Drop me a message on X - -

-
+

+ + Drop me a message on X + +

- +
) } diff --git a/src/components/Plausible.tsx b/src/components/Plausible.tsx deleted file mode 100644 index fda29ce..0000000 --- a/src/components/Plausible.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import Script from 'next/script' -import { env } from '@/lib/env' - -const Plausible = () => { - if (process.env.NODE_ENV !== 'production') { - return - } - - return ( -