diff --git a/apps/public/app/(content)/[...pages]/page.tsx b/apps/public/app/(content)/[...pages]/page.tsx index d74efb79..2005d683 100644 --- a/apps/public/app/(content)/[...pages]/page.tsx +++ b/apps/public/app/(content)/[...pages]/page.tsx @@ -79,7 +79,7 @@ export default async function Page({ dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
-
+

{page.data.title}

{page.data.description && (

diff --git a/apps/public/app/(content)/bajs/page.tsx b/apps/public/app/(content)/bajs/page.tsx new file mode 100644 index 00000000..b603e7e8 --- /dev/null +++ b/apps/public/app/(content)/bajs/page.tsx @@ -0,0 +1,86 @@ +import { url } from '@/app/layout.config'; +import { pageSource } from '@/lib/source'; +import type { Metadata } from 'next'; +import { notFound } from 'next/navigation'; +import Script from 'next/script'; + +export async function generateMetadata(): Promise { + const page = await pageSource.getPage(['pricing']); + + if (!page) { + return { + title: 'Page Not Found', + }; + } + + return { + title: page.data.title, + description: page.data.description, + alternates: { + canonical: url(page.url), + }, + openGraph: { + title: page.data.title, + description: page.data.description, + type: 'website', + url: url(page.url), + }, + twitter: { + card: 'summary_large_image', + title: page.data.title, + description: page.data.description, + }, + }; +} + +export default async function Page() { + const page = await pageSource.getPage(['pricing']); + const Body = page?.data.body; + + if (!page || !Body) { + return notFound(); + } + + // Create the JSON-LD data + const jsonLd = { + '@context': 'https://schema.org', + '@type': 'Article', + headline: page.data.title, + publisher: { + '@type': 'Organization', + name: 'OpenPanel', + logo: { + '@type': 'ImageObject', + url: url('/logo.png'), + }, + }, + mainEntityOfPage: { + '@type': 'WebPage', + '@id': url(page.url), + }, + }; + + return ( +

+ + +``` + +2. **Fire off your first event** + +```javascript +// Simple click +window.op('track', 'signup_button_clicked'); + +// Purchase with details +window.op('track', 'order_placed', { + orderId: 'ORD-20250617-001', + revenue: 49.95, + currency: 'EUR', +}); +``` + +That’s it—you’re capturing all the user interactions you need, cookie-free. \ No newline at end of file diff --git a/apps/public/content/articles/mixpanel-alternatives.mdx b/apps/public/content/articles/mixpanel-alternatives.mdx new file mode 100644 index 00000000..1c66db93 --- /dev/null +++ b/apps/public/content/articles/mixpanel-alternatives.mdx @@ -0,0 +1,115 @@ +--- +title: Mixpanel Alternatives +description: Our top open-source picks if you want to move away from Mixpanel +date: 2025-07-18 +tag: Comparison +team: OpenPanel Team +cover: /content/cover-mixpanel.jpg +--- + +> We have tried to keep this list as fair as possible, even though we compete with these tools. + +Analytics tools fall into two main groups: +- Web analytics gives you page views, sessions, referrers +- Product analytics shows what users do inside your product + +Mixpanel is best known for product analytics. Web tools like Google Analytics tell you about traffic, but a product analytics tool tells you how and when users use your features. + +We start with the key features you need. Then we give you three open-source options. + +## Key product analytics features + +1. **Event tracking** + Record any action—signups, clicks, purchases—to see how users behave. + +2. **Funnels** + Show each step in a process (for example signup → verify email → first purchase). Find where users drop off so you can improve that step. + +3. **Retention analysis** + Find out how many users come back over days or weeks: + - **N-day retention**: percent who return after N days + - **Rolling retention**: percent active in a set time period + - **Cohorts**: compare groups of users who signed up at the same time + +4. **User details** + Look at one user’s journey. This helps you fix issues and give users a better experience. + +5. **Flexible dashboards** + Build charts and reports to answer any question about your product. + +## How to choose an open-source alternative + +Look at these points when you compare tools: + +| Point | What to check | +|-------------------|--------------------------------------------------| +| License | True open source (MIT, Apache) or source-only | +| Resource needs | CPU and memory for running the tool | +| Features | Funnels, retention, user view, session replay | +| Setup | Easy install or complex pipeline | +| Maintenance | Updates, docs and community support | +| Integrations | SDKs for web, mobile, server; data exports | + +## 1. OpenPanel + +You guessed it right, of course we'll promote OpenPanel, it was made solely because we wanted an alternative to Mixpanel. We have used Mixpanel a lot but for a startup we didn't have the cash flow needed to pay the bills. We also didn't need all Mixpanel's features so we decided to build our own platform that combined web & product analytics into one simple, affordable and self-hostable platform. + +**License:** AGPL-3.0 license + +**What you get**: + - You get a very good web analytics overview (similar to Plausible, Simple Analytics) + - You can track custom events + - You can track users + - You can create any type of chart you want + - You can create funnels and conversions for A/B testing and improve your product + - You can create retention charts to understand how long your users stays + +**Good points**: + - Low cost and self-hostable + - Web and product analytics together + - Fast setup and clean interface + +**Drawbacks**: + - Fewer third-party integrations + - No session-replay or heatmaps yet + +## 2. PostHog + +A full-feature platform with both cloud and self-hosted options. + +**License:** MIT License (core) + Enterprise License (ee/) + +**What you get**: + - Funnels, trends, cohorts + - Session recordings, feature flags, A/B tests + - Plugins (Kafka, Snowflake exports) +**Good points**: + - Lots of features, active community + - Free up to 1 million events per month + - Good docs and tutorials + +**Drawbacks**: + - Self-host needs high CPU and RAM + - Cloud costs rise fast after 1M events + - Some learning needed for plugins + +## 3. Snowplow Analytics + +**Overview** +A tool that sends event data into your own data warehouse. + +**License:** Apache-2.0 license + +**What you get**: + - Open collectors and pipelines + - Works with Redshift, BigQuery, Snowflake + - Custom schemas via Iglu registry + +**Good points**: + - Full control of raw events + - Scales to billions of events + - Good for teams with data-warehouse skills + +**Drawbacks**: + - Setup is complex (Kafka, Spark, Hadoop) + - No built-in dashboards (need Looker or similar) \ No newline at end of file diff --git a/apps/public/content/pages/pricing.mdx b/apps/public/content/pages/pricing.mdx index 0b8fa7aa..56e01862 100644 --- a/apps/public/content/pages/pricing.mdx +++ b/apps/public/content/pages/pricing.mdx @@ -7,12 +7,15 @@ import Stats from '@/components/sections/stats'; import Testimonials from '@/components/sections/testimonials'; import Faq from '@/components/sections/faq'; -Experience transparent, usage-based pricing that grows with your needs. Simply choose your monthly event volume and pay accordingly - no surprises. +Our pricing model is simple, pick how many events you want and pay that amount. It doesn't matter what tier you're in, you should always be able to: -All features are included in every plan, with no hidden fees or artificial feature restrictions. What you see is what you get. +- Create as many reports you want +- Add as many websites you needs +- Invite all your co-workers +- You probably get the point
- +
\ No newline at end of file diff --git a/apps/public/content/pages/supporter.mdx b/apps/public/content/pages/supporter.mdx index 8c2f7762..a0879a18 100644 --- a/apps/public/content/pages/supporter.mdx +++ b/apps/public/content/pages/supporter.mdx @@ -7,8 +7,6 @@ import Stats from '@/components/sections/stats'; import Testimonials from '@/components/sections/testimonials'; import Faq from '@/components/sections/faq'; -Hey there! 👋 - TL;DR [**Become a supporter 🫶**](https://buy.polar.sh/polar_cl_Az1CruNFzQB2bYdMOZmGHqTevW317knWqV44W1FqZmV) First off, we want to say a massive thank you for even considering supporting OpenPanel. As an open-source project, every single supporter means the world to us. We're not a big corporation – just a small team passionate about building something useful for the developer community. diff --git a/apps/public/public/content/cookieless-analytics.jpg b/apps/public/public/content/cookieless-analytics.jpg new file mode 100644 index 00000000..6c4124d1 Binary files /dev/null and b/apps/public/public/content/cookieless-analytics.jpg differ diff --git a/apps/public/public/logos/helpy-ui.png b/apps/public/public/logos/helpy-ui.png new file mode 100644 index 00000000..ef00a184 Binary files /dev/null and b/apps/public/public/logos/helpy-ui.png differ diff --git a/apps/public/public/logos/kiddokitchen.png b/apps/public/public/logos/kiddokitchen.png new file mode 100644 index 00000000..5f65b020 Binary files /dev/null and b/apps/public/public/logos/kiddokitchen.png differ diff --git a/apps/public/public/logos/maneken.jpg b/apps/public/public/logos/maneken.jpg new file mode 100644 index 00000000..bf9c0029 Binary files /dev/null and b/apps/public/public/logos/maneken.jpg differ diff --git a/apps/public/public/logos/midday.png b/apps/public/public/logos/midday.png new file mode 100644 index 00000000..565c8684 Binary files /dev/null and b/apps/public/public/logos/midday.png differ diff --git a/apps/public/public/logos/screenzen.avif b/apps/public/public/logos/screenzen.avif new file mode 100644 index 00000000..8691bb5f Binary files /dev/null and b/apps/public/public/logos/screenzen.avif differ diff --git a/apps/public/public/logos/tiptip.jpg b/apps/public/public/logos/tiptip.jpg new file mode 100644 index 00000000..017afbb7 Binary files /dev/null and b/apps/public/public/logos/tiptip.jpg differ