diff --git a/scripts/mdxImportGen.js b/scripts/mdxImportGen.js index dff37905e..abc3ae842 100644 --- a/scripts/mdxImportGen.js +++ b/scripts/mdxImportGen.js @@ -12,7 +12,7 @@ const getComponentsInDir = (dir, components = []) => { subdirectories.push(f) continue } - if (!indexFileInDir && f.includes('index')) { + if (!indexFileInDir && f.includes('index') && !f.includes('css')) { indexFileInDir = true } } diff --git a/src/components/CallToAction/images/book.svg b/src/components/CallToAction/images/book.svg new file mode 100644 index 000000000..84bd45eaf --- /dev/null +++ b/src/components/CallToAction/images/book.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/CallToAction/images/calendar.svg b/src/components/CallToAction/images/calendar.svg new file mode 100644 index 000000000..5cca1b060 --- /dev/null +++ b/src/components/CallToAction/images/calendar.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/CallToAction/images/check.svg b/src/components/CallToAction/images/check.svg new file mode 100644 index 000000000..fc3a21300 --- /dev/null +++ b/src/components/CallToAction/images/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/CallToAction/images/github.svg b/src/components/CallToAction/images/github.svg new file mode 100644 index 000000000..179f03b2f --- /dev/null +++ b/src/components/CallToAction/images/github.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/components/CallToAction/images/handbook.svg b/src/components/CallToAction/images/handbook.svg new file mode 100644 index 000000000..fa5b86c23 --- /dev/null +++ b/src/components/CallToAction/images/handbook.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/CallToAction/images/roadmap.svg b/src/components/CallToAction/images/roadmap.svg new file mode 100644 index 000000000..c738de8cc --- /dev/null +++ b/src/components/CallToAction/images/roadmap.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/CallToAction/images/rocket.svg b/src/components/CallToAction/images/rocket.svg new file mode 100644 index 000000000..191ac6ab6 --- /dev/null +++ b/src/components/CallToAction/images/rocket.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/CallToAction/index.tsx b/src/components/CallToAction/index.tsx new file mode 100644 index 000000000..513b056c8 --- /dev/null +++ b/src/components/CallToAction/index.tsx @@ -0,0 +1,92 @@ +// @todo - add/use to, href, and onClick props + +import React from 'react' +import { Link } from 'gatsby' + +import { CornerBrackets } from '../CornerBrackets' + +import rocketImg from './images/rocket.svg' +import calendarImg from './images/calendar.svg' +import githubImg from './images/github.svg' +import handbookImg from './images/handbook.svg' +import roadmapImg from './images/roadmap.svg' +import checkImg from './images/check.svg' +import bookImg from './images/book.svg' + +interface CallToActionProps { + onClick?: void + className?: string + type?: string + icon?: string + children: any + width?: string + href?: string + to?: string + displayBrackets?: boolean +} + +const icons = { + rocket: rocketImg, + calendar: calendarImg, + github: githubImg, + handbook: handbookImg, + roadmap: roadmapImg, + check: checkImg, + book: bookImg, + none: null, +} + +const buttonTypeClasses = { + secondary: + 'bg-transparent border-3 border-white border-opacity-30 text-white mt-2 hover:bg-white hover:bg-opacity-10 hover:text-white', + primary: + 'brackets rounded-sm bg-primary border-primary text-white hover:border-primary-dark hover:bg-primary-dark hover:text-white', + custom: '', +} + +export const CallToAction = ({ + className = '', + type = 'primary', + icon = 'none', + children, + width = '64', + href, + to, + onClick, + displayBrackets = false, +}: CallToActionProps) => { + const iconNode = icons[icon] ? ( +
+ Get started with PostHog +
+ ) : null + + const brackets = type === 'primary' || displayBrackets ? : null + + const widthClass = `w-${width}` + const baseClasses = `p-2 ${widthClass} uppercase rounded-sm inline-flex items-center justify-between select-none text-base font-gosha relative` + const classList = [baseClasses, buttonTypeClasses[type], className].join(' ') + + const innerHtml = ( + <> + {brackets} + {iconNode} +
{children}
+ + + ) + + return href ? ( + + {innerHtml} + + ) : to ? ( + + {innerHtml} + + ) : ( + + ) +} diff --git a/src/components/ContributorAvatars/index.js b/src/components/ContributorAvatars/index.js new file mode 100644 index 000000000..1da20575a --- /dev/null +++ b/src/components/ContributorAvatars/index.js @@ -0,0 +1,204 @@ +import React from 'react' + +export const ContributorAvatars = () => { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} diff --git a/src/components/CornerBrackets/index.tsx b/src/components/CornerBrackets/index.tsx new file mode 100644 index 000000000..179bcca71 --- /dev/null +++ b/src/components/CornerBrackets/index.tsx @@ -0,0 +1,44 @@ +import React from 'react' + +import buttonBracketImg from '../LandingPage/images/rounded-corner.svg' +import purpleishButtonBracketImg from '../LandingPage/images/rounded-corner-purpleish.svg' + +const supportedColors = { + white: buttonBracketImg, + purpleish: purpleishButtonBracketImg, +} + +const spacingClasses = { + md: 2, + lg: 4, +} + +export const CornerBrackets = ({ spacing = 'md', color = 'white' }: { spacing?: string; color?: string }) => { + const img = supportedColors[color] + const spacingClass = spacingClasses[spacing] + + return ( + <> + button bracket + button bracket + button bracket + button bracket + + ) +} diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx index 2afbacc93..58c0f3cc6 100644 --- a/src/components/Footer/Footer.tsx +++ b/src/components/Footer/Footer.tsx @@ -3,6 +3,7 @@ import { Link } from 'gatsby' import { useValues } from 'kea' import { layoutLogic } from '../../logic/layoutLogic' +import { NewsletterForm } from '../NewsletterForm' import logo from '../../images/posthog-hog-transparent.svg' interface FooterListItemProps { @@ -28,7 +29,7 @@ const FooterListItem = ({ to = '', border = true, href = '', children }: FooterL } const FooterSubCategory = ({ children }: { children: any }) => ( -
{children}
+
{children}
) const FooterCategory = ({ children, title }: { children: any; title: string }) => { @@ -50,12 +51,14 @@ const FooterCategory = ({ children, title }: { children: any; title: string }) = ) } -export const Footer = ({ onPostPage }: { onPostPage: boolean }) => { +export const Footer = ({ onPostPage, showNewsletter = false }: { onPostPage: boolean; showNewsletter?: boolean }) => { + const newsletterSignup = showNewsletter ? : null const { websiteTheme } = useValues(layoutLogic) const bgClass = onPostPage && websiteTheme === 'dark' ? 'bg-darkmode-purple' : 'bg-footer' return (
+ {newsletterSignup}
@@ -66,6 +69,9 @@ export const Footer = ({ onPostPage }: { onPostPage: boolean }) => { Product suite + Trends + Funnels + Retention Session replay Feature Flags @@ -160,17 +166,17 @@ export const Footer = ({ onPostPage }: { onPostPage: boolean }) => {
- © 2021 PostHog, Inc. + © 2021 PostHog, Inc.
Privacy Terms diff --git a/src/components/Footer/index.js b/src/components/Footer/index.js index d27183f52..9a8a89a1a 100644 --- a/src/components/Footer/index.js +++ b/src/components/Footer/index.js @@ -1,4 +1,4 @@ -import Footer from './Footer' +import { Footer } from './Footer' export default Footer export { Footer } diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index 8f51ed229..bc8bab20d 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -15,7 +15,7 @@ interface NavbarLinkProps { } const NavbarLink = ({ to, href, children, textLight, className = '' }: NavbarLinkProps) => { - const baseClasses = 'opacity-80 hover:opacity-100 px-4 py-2 font-semibold tracking-wider '.concat(className) + const baseClasses = 'opacity-80 hover:opacity-100 px-4 py-2 text-xs font-semibold '.concat(className) const classList = textLight ? `text-white hover:text-white ${baseClasses}` : `text-black hover:text-black ${baseClasses}` @@ -38,7 +38,7 @@ const NavbarLink = ({ to, href, children, textLight, className = '' }: NavbarLin const PrimaryCta = ({ children, className = '' }: { children: any; className?: string }) => { const { setIsGetStartedModalOpen } = useActions(layoutLogic) - const classList = `button-primary ${className}` + const classList = `button-primary ${className} border-none` return (
  • @@ -60,7 +60,7 @@ export const Header = ({ onPostPage }: { onPostPage: boolean }) => { const layoutWidth = onPostPage ? 'w-full px-4' : 'w-11/12 mx-auto' return ( -
    +
    logo @@ -84,7 +84,7 @@ export const Header = ({ onPostPage }: { onPostPage: boolean }) => { -
      +
        Get Started {
      -
    @@ -145,7 +145,7 @@ export const Header = ({ onPostPage }: { onPostPage: boolean }) => { Login - Get Started + Get Started ) : null}
    diff --git a/src/components/Header/index.js b/src/components/Header/index.js index 3f34bdf74..57e94a707 100644 --- a/src/components/Header/index.js +++ b/src/components/Header/index.js @@ -1,4 +1,4 @@ -import Header from './Header' +import { Header } from './Header' export default Header export { Header } diff --git a/src/components/LandingPage/Features/index.js b/src/components/LandingPage/Features/index.js new file mode 100644 index 000000000..8a0f9d5ee --- /dev/null +++ b/src/components/LandingPage/Features/index.js @@ -0,0 +1,32 @@ +import React from 'react' + +import oldWayImg from '../images/platform-old-way.svg' +import newWayImg from '../images/platform-new-way.svg' + +export const Features = () => { + return ( +
    +
    +

    A single platform that does it all

    +

    + PostHog eliminates the need for multiple tools that weren’t built to work together. +

    + +
    +
    +
    The old way
    + The old way +
    + +
    +
    The new way
    + The new way +

    + Our all-in-one solution was built from the ground up to seamlessly work together. +

    +
    +
    +
    +
    + ) +} diff --git a/src/components/LandingPage/Hero/index.js b/src/components/LandingPage/Hero/index.js new file mode 100644 index 000000000..55ed3055c --- /dev/null +++ b/src/components/LandingPage/Hero/index.js @@ -0,0 +1,45 @@ +import React from 'react' +import { ProductFeatureIcons } from '../ProductFeatureIcons' +import { SocialProof } from '../SocialProof' +import { CallToAction } from '../../CallToAction' + +export const Hero = () => { + return ( +
    +
    +
    +

    More than product analytics

    +

    + PostHog is an{' '} + + open source platform + {' '} + + designed to help you understand customers, quantify value, and ship new features faster. + +

    +
    + +
    + +
    + +
    + + Get Started + + + Book a demo + +
    + + +
    +
    + ) +} diff --git a/src/components/LandingPage/PrivateCloud/index.js b/src/components/LandingPage/PrivateCloud/index.js new file mode 100644 index 000000000..e104fa5f7 --- /dev/null +++ b/src/components/LandingPage/PrivateCloud/index.js @@ -0,0 +1,108 @@ +import React from 'react' +import { CallToAction } from '../../CallToAction' +import { Roadmap } from '../Roadmap' +import { CornerBrackets } from '../../CornerBrackets' +import { ContributorAvatars } from '../../ContributorAvatars' + +import checkImg from '../images/green-check.svg' + +const FeatureBenefit = ({ feature, benefit }) => { + return ( +
    + {feature} +
    +
    {feature}
    +
    {benefit}
    +
    +
    + ) +} + +export const PrivateCloud = () => { + return ( +
    +
    +

    Host on your own private cloud

    +

    + Optionally host PostHog yourself with a private cloud deployment - a great solution for + privacy-conscious and compliance-oriented companies. +

    + +
    + + + + + + +
    + +
    +
    +
    +

    Open-source to our core

    +

    + Our workflow, strategy, internal policies, handbook, and brand book are public and open + source. +

    + + + + Browse GitHub + + + Explore Handbook + +
    + +
    + + +
    +

    + Here’s a handful of the 263 people we have to thank for our + success. +

    +

    Based on contributions to PostHog Github libraries

    +
    +
    +
    +
    +
    + +
    + ) +} diff --git a/src/components/LandingPage/ProductFeatureIcons/index.tsx b/src/components/LandingPage/ProductFeatureIcons/index.tsx new file mode 100644 index 000000000..2d557d300 --- /dev/null +++ b/src/components/LandingPage/ProductFeatureIcons/index.tsx @@ -0,0 +1,46 @@ +import React from 'react' + +import analyticsImg from '../images/ProductFeatureIcons/analytics.svg' +import heatmapsImg from '../images/ProductFeatureIcons/heatmaps.svg' +import sessionReplayImg from '../images/ProductFeatureIcons/session-replay.svg' +import featureFlagsImg from '../images/ProductFeatureIcons/feature-flags.svg' +import abTestingImg from '../images/ProductFeatureIcons/ab-testing.svg' +import userFeedbackImg from '../images/ProductFeatureIcons/user-feedback.svg' +import revenueTrackingImg from '../images/ProductFeatureIcons/revenue-tracking.svg' + +interface ProductIconData { + label: string + icon: string + expectedLaunchDate?: string +} + +const ProductFeatureIcon = ({ label, icon, expectedLaunchDate }: ProductIconData) => { + const opacity = expectedLaunchDate ? 'opacity-50' : 'opacity-100' + const expectedLabel = expectedLaunchDate ? ( + {expectedLaunchDate} + ) : null + + return ( +
    +
    + {label} +
    + {label} +
    {expectedLabel}
    +
    + ) +} + +export const ProductFeatureIcons = () => { + return ( +
    + + + + + + + +
    + ) +} diff --git a/src/components/LandingPage/RecentBlogPosts/images/blog-post.png b/src/components/LandingPage/RecentBlogPosts/images/blog-post.png new file mode 100644 index 000000000..a4d3f2013 Binary files /dev/null and b/src/components/LandingPage/RecentBlogPosts/images/blog-post.png differ diff --git a/src/components/LandingPage/RecentBlogPosts/index.js b/src/components/LandingPage/RecentBlogPosts/index.js new file mode 100644 index 000000000..221af3029 --- /dev/null +++ b/src/components/LandingPage/RecentBlogPosts/index.js @@ -0,0 +1,93 @@ +import React from 'react' +import { Link } from 'gatsby' + +import { CallToAction } from '../../CallToAction' +import blogPostImg from './images/blog-post.png' + +export const RecentBlogPosts = () => { + return ( +
    +
    +

    News & Blog

    +

    Follow our journey as we grow

    + +
    +
    +
    + +
    + +
    + Latest post + +
    A story about pivots
    + +

    PostHog has pivoted a lot.

    + +

    + After 5 pivots in 6 months, we got into YCombinator last year, pivoted again whilst we + were there and have now gone from the first commit to thousands of deployments, a team + across 10 countries and $12M raised, in well under a year. We've a long way to go, but + we're delighted at how it has gone so far. +

    + +

    This is that story and what we learned from it.

    + + + Continue reading + +
    +
    + +
    + Popular articles + + + PostHog Raises $12 Million in Funding Led by GV and Y Combinator + 8 min read + + + + PostHog Joins Hacktoberfest 2020 + 8 min read + + + + Should open source projects track you? + 8 min read + + + + Building an All-Remote Company from Scratch + 8 min read + +
    +
    + +
    + + Visit Blog + +
    +
    +
    + ) +} diff --git a/src/components/LandingPage/Roadmap/index.js b/src/components/LandingPage/Roadmap/index.js new file mode 100644 index 000000000..a719a6f32 --- /dev/null +++ b/src/components/LandingPage/Roadmap/index.js @@ -0,0 +1,40 @@ +import React from 'react' +import mountainsImg from '../images/mountains.png' +import sunImg from '../images/sun.png' +import cityImg from '../images/city.png' +import timelineImg from '../images/timeline.png' +import { CallToAction } from '../../CallToAction' + +export const Roadmap = () => ( +
    +
    +
    +
    +

    Getting better every day

    +

    + We built a ton in 2020. We’re going to build even more in 2021.
    + Everything we build is based off your feedback. +

    + + + Explore Roadmap + +
    + + + +
    + +
    + + +
    +
    +
    +) diff --git a/src/components/LandingPage/SocialProof/index.js b/src/components/LandingPage/SocialProof/index.js new file mode 100644 index 000000000..cb41008a9 --- /dev/null +++ b/src/components/LandingPage/SocialProof/index.js @@ -0,0 +1,45 @@ +import React from 'react' + +import { CornerBrackets } from '../../CornerBrackets' + +import airbalticLogo from '../images/SocialProofLogos/airbaltic.svg' +import dataikuLogo from '../images/SocialProofLogos/dataiku.svg' +import landmarkLogo from '../images/SocialProofLogos/landmark.svg' +import tinkoffLogo from '../images/SocialProofLogos/webiny.svg' +import hasuraLogo from '../images/SocialProofLogos/hasura.svg' +import spacexLogo from '../images/SocialProofLogos/spacex.svg' +import ycombinatorLogo from '../images/SocialProofLogos/ycombinator.svg' +import staplesLogo from '../images/SocialProofLogos/staples.svg' +import webinyLogo from '../images/SocialProofLogos/webiny.svg' + +const Logo = ({ logo, alt }) => {alt} + +export const SocialProof = () => { + return ( +
    +
    + + + + + +
    +
    + + + + +
    + +
    + +

    + PostHog is what I always wanted a Product Analytics SaaS to be. Private cloud option so GDPR becomes + way more manageable, features built based on direct community feedback, focus on simplicity and + usefulness over vanity features...Great job people! +

    + @benjackwhite +
    +
    + ) +} diff --git a/src/components/LandingPage/Tutorials/index.js b/src/components/LandingPage/Tutorials/index.js new file mode 100644 index 000000000..935d55b18 --- /dev/null +++ b/src/components/LandingPage/Tutorials/index.js @@ -0,0 +1,72 @@ +import React from 'react' +import { Link } from 'gatsby' +import { CallToAction } from '../../CallToAction' +import featuresImg from '../images/safe-features.png' +import userBehaviorImg from '../images/user-behavior.png' +import funnelsImg from '../images/funnels.png' + +export const Tutorials = () => { + return ( +
    +
    +

    Hop aboard

    +

    + Don’t get left behind. Join 2,700 companies using PostHog. +

    + +
    + + Get Started + + + Book a demo + +
    +
    + +
    +

    Tutorials

    +

    Our developers highlight some of the functionality inside PostHog.

    + +

    Popular tutorials

    + +
    + + How to safely rollout new features + + How to Safely Rollout New Features + 7 min read + + + + Visualizing User Behavior - Toolbar + + Visualizing User Behavior - Toolbar + 6 min read + + + + Analyzing Your Conversion with Funnels + + Analyzing Your Conversion with Funnels + 8 min read + +
    + + + See all tutorials + 13 + +
    +
    + ) +} diff --git a/src/components/LandingPage/images/ProductFeatureIcons/ab-testing.svg b/src/components/LandingPage/images/ProductFeatureIcons/ab-testing.svg new file mode 100644 index 000000000..8e183fdce --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/ab-testing.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/ProductFeatureIcons/analytics.svg b/src/components/LandingPage/images/ProductFeatureIcons/analytics.svg new file mode 100644 index 000000000..cb9e18e59 --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/analytics.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/ProductFeatureIcons/feature-flags.svg b/src/components/LandingPage/images/ProductFeatureIcons/feature-flags.svg new file mode 100644 index 000000000..ef3ff89e7 --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/feature-flags.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/ProductFeatureIcons/heatmaps.svg b/src/components/LandingPage/images/ProductFeatureIcons/heatmaps.svg new file mode 100644 index 000000000..b5714b50d --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/heatmaps.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/ProductFeatureIcons/revenue-tracking.svg b/src/components/LandingPage/images/ProductFeatureIcons/revenue-tracking.svg new file mode 100644 index 000000000..da0dc4a0b --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/revenue-tracking.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/ProductFeatureIcons/session-replay.svg b/src/components/LandingPage/images/ProductFeatureIcons/session-replay.svg new file mode 100644 index 000000000..334190c44 --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/session-replay.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/ProductFeatureIcons/user-feedback.svg b/src/components/LandingPage/images/ProductFeatureIcons/user-feedback.svg new file mode 100644 index 000000000..194571969 --- /dev/null +++ b/src/components/LandingPage/images/ProductFeatureIcons/user-feedback.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/airbaltic.svg b/src/components/LandingPage/images/SocialProofLogos/airbaltic.svg new file mode 100644 index 000000000..b436bd6dc --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/airbaltic.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/dataiku.svg b/src/components/LandingPage/images/SocialProofLogos/dataiku.svg new file mode 100644 index 000000000..8bfd4e27e --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/dataiku.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/hasura.svg b/src/components/LandingPage/images/SocialProofLogos/hasura.svg new file mode 100644 index 000000000..bfbf659e5 --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/hasura.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/landmark.svg b/src/components/LandingPage/images/SocialProofLogos/landmark.svg new file mode 100644 index 000000000..730936875 --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/landmark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/spacex.svg b/src/components/LandingPage/images/SocialProofLogos/spacex.svg new file mode 100644 index 000000000..a48d5d130 --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/spacex.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/staples.svg b/src/components/LandingPage/images/SocialProofLogos/staples.svg new file mode 100644 index 000000000..f8fb9c510 --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/staples.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/tinkoff.svg b/src/components/LandingPage/images/SocialProofLogos/tinkoff.svg new file mode 100644 index 000000000..e1b54ddaa --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/tinkoff.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/webiny.svg b/src/components/LandingPage/images/SocialProofLogos/webiny.svg new file mode 100644 index 000000000..411031681 --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/webiny.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/SocialProofLogos/ycombinator.svg b/src/components/LandingPage/images/SocialProofLogos/ycombinator.svg new file mode 100644 index 000000000..aa0503bbe --- /dev/null +++ b/src/components/LandingPage/images/SocialProofLogos/ycombinator.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/brackets.svg b/src/components/LandingPage/images/brackets.svg new file mode 100644 index 000000000..7fe3ddf8f --- /dev/null +++ b/src/components/LandingPage/images/brackets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/city.png b/src/components/LandingPage/images/city.png new file mode 100644 index 000000000..f6aeeaeb5 Binary files /dev/null and b/src/components/LandingPage/images/city.png differ diff --git a/src/components/LandingPage/images/clouds.png b/src/components/LandingPage/images/clouds.png new file mode 100644 index 000000000..503f99368 Binary files /dev/null and b/src/components/LandingPage/images/clouds.png differ diff --git a/src/components/LandingPage/images/funnels.png b/src/components/LandingPage/images/funnels.png new file mode 100644 index 000000000..2d5c932c1 Binary files /dev/null and b/src/components/LandingPage/images/funnels.png differ diff --git a/src/components/LandingPage/images/green-check.svg b/src/components/LandingPage/images/green-check.svg new file mode 100644 index 000000000..bf9014296 --- /dev/null +++ b/src/components/LandingPage/images/green-check.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/hero-bg.svg b/src/components/LandingPage/images/hero-bg.svg new file mode 100644 index 000000000..3b7d04b91 --- /dev/null +++ b/src/components/LandingPage/images/hero-bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/moon.svg b/src/components/LandingPage/images/moon.svg new file mode 100644 index 000000000..3f0768f4d --- /dev/null +++ b/src/components/LandingPage/images/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/mountains.png b/src/components/LandingPage/images/mountains.png new file mode 100644 index 000000000..ecec3ed9a Binary files /dev/null and b/src/components/LandingPage/images/mountains.png differ diff --git a/src/components/LandingPage/images/mountains.svg b/src/components/LandingPage/images/mountains.svg new file mode 100644 index 000000000..0a06a588b --- /dev/null +++ b/src/components/LandingPage/images/mountains.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/pipes.svg b/src/components/LandingPage/images/pipes.svg new file mode 100644 index 000000000..63061d2df --- /dev/null +++ b/src/components/LandingPage/images/pipes.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/components/LandingPage/images/platform-new-way.svg b/src/components/LandingPage/images/platform-new-way.svg new file mode 100644 index 000000000..2eb1fadd8 --- /dev/null +++ b/src/components/LandingPage/images/platform-new-way.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/platform-old-way.svg b/src/components/LandingPage/images/platform-old-way.svg new file mode 100644 index 000000000..03ae25436 --- /dev/null +++ b/src/components/LandingPage/images/platform-old-way.svg @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/roadmap.svg b/src/components/LandingPage/images/roadmap.svg new file mode 100644 index 000000000..55b8c61c9 --- /dev/null +++ b/src/components/LandingPage/images/roadmap.svg @@ -0,0 +1,633 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingPage/images/rocket.svg b/src/components/LandingPage/images/rocket.svg new file mode 100644 index 000000000..7a506021a --- /dev/null +++ b/src/components/LandingPage/images/rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/rounded-corner-purpleish.svg b/src/components/LandingPage/images/rounded-corner-purpleish.svg new file mode 100644 index 000000000..9bbf66b1c --- /dev/null +++ b/src/components/LandingPage/images/rounded-corner-purpleish.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/LandingPage/images/rounded-corner.svg b/src/components/LandingPage/images/rounded-corner.svg new file mode 100644 index 000000000..f058732e0 --- /dev/null +++ b/src/components/LandingPage/images/rounded-corner.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/LandingPage/images/safe-features.png b/src/components/LandingPage/images/safe-features.png new file mode 100644 index 000000000..497f4fbd9 Binary files /dev/null and b/src/components/LandingPage/images/safe-features.png differ diff --git a/src/components/LandingPage/images/subway.svg b/src/components/LandingPage/images/subway.svg new file mode 100644 index 000000000..018660395 --- /dev/null +++ b/src/components/LandingPage/images/subway.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/sun.png b/src/components/LandingPage/images/sun.png new file mode 100644 index 000000000..edc82d36b Binary files /dev/null and b/src/components/LandingPage/images/sun.png differ diff --git a/src/components/LandingPage/images/sun.svg b/src/components/LandingPage/images/sun.svg new file mode 100644 index 000000000..77aa8ada9 --- /dev/null +++ b/src/components/LandingPage/images/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/timeline.png b/src/components/LandingPage/images/timeline.png new file mode 100644 index 000000000..0e50434ff Binary files /dev/null and b/src/components/LandingPage/images/timeline.png differ diff --git a/src/components/LandingPage/images/timeline.svg b/src/components/LandingPage/images/timeline.svg new file mode 100644 index 000000000..252797b2e --- /dev/null +++ b/src/components/LandingPage/images/timeline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/LandingPage/images/user-behavior.png b/src/components/LandingPage/images/user-behavior.png new file mode 100644 index 000000000..41904ce3d Binary files /dev/null and b/src/components/LandingPage/images/user-behavior.png differ diff --git a/src/components/LandingPage/styles/index.scss b/src/components/LandingPage/styles/index.scss new file mode 100644 index 000000000..a36e6a946 --- /dev/null +++ b/src/components/LandingPage/styles/index.scss @@ -0,0 +1,271 @@ +.hero { + background: url(../images/hero-bg.svg), linear-gradient(180deg, #220f3f 0%, #2c1e60 100%); + background-position: center center; + background-repeat: repeat-x; + position: relative; + + &:before { + background: url(../images/rocket.svg); + bottom: -10%; + content: ''; + display: none; + height: 939px; + position: absolute; + left: 3%; + width: 174px; + + @media (min-width: 640px) { + display: block; + } + } + + &:after { + background: url(../images/moon.svg); + content: ''; + height: 539px; + position: absolute; + right: -10%; + top: -1%; + width: 539px; + zoom: 0.5; + + @media (min-width: 640px) { + top: -5%; + zoom: 1; + } + } +} + +@keyframes animateIn100 { + 0% { + opacity: 0; + top: 10px; + } + + 85% { + opacity: 1; + } + 100% { + opacity: 1; + top: 0; + } +} + +@keyframes animateIn50 { + 0% { + opacity: 0; + top: 10px; + } + + 85% { + opacity: 0.5; + } + 100% { + opacity: 0.5; + top: 0; + } +} + +.primary-navbar button { + transition: none; +} + +.product-features { + grid-template-columns: repeat(4, 1fr); + + @media (min-width: 640px) and (max-width: 1023px) { + grid-template-columns: repeat(4, 115px); + } + + @media (min-width: 1024px) { + grid-template-columns: repeat(7, 115px); + } + + > div { + &.opacity-100 { + animation: animateIn100 0.5s ease; + } + + &.opacity-50 { + animation: animateIn50 0.5s ease; + } + + animation-fill-mode: forwards !important; + position: relative; + opacity: 0; + //width: 115px; + + &:nth-child(1) { + animation-delay: 0.15s; + } + &:nth-child(2) { + animation-delay: 0.3s; + } + &:nth-child(3) { + animation-delay: 0.45s; + } + &:nth-child(4) { + animation-delay: 0.6s; + } + &:nth-child(5) { + animation-delay: 0.75s; + } + &:nth-child(6) { + animation-delay: 0.9s; + } + &:nth-child(7) { + animation-delay: 1.05s; + } + &:nth-child(8) { + animation-delay: 1.2s; + } + } +} + +.spotlight { + background: linear-gradient(180deg, #2c1e60 0%, #30246d 100%); +} + +.bg-pipes { + background: url(../images/pipes.svg), linear-gradient(180deg, #2b114d 0%, #2a235b 100%); + background-size: contain; + background-position: top center; + background-repeat: no-repeat; +} + +.social-proof { + background: linear-gradient(180deg, #2c1e60 0%, #30246d 100%); +} + +.lp-features { + background: linear-gradient(180deg, #2c1e60 0%, #3c3288 100%); +} + +.recent-blog-posts { + background: linear-gradient(180deg, #2a235b 0%, #08042f 100%); +} + +.private-cloud { + background: url(../images/clouds.png), linear-gradient(180deg, #3c3288 0%, #b75184 100%); + background-size: cover; +} + +.scene-wrapper { + position: relative; + + .text-wrapper { + @media (max-width: 639px) { + background: linear-gradient(180deg, #b55174 0%, #cb7084 100%); + margin-top: 40%; + } + + @media (min-width: 640px) { + margin-top: 10%; + } + } +} + +.city-wrapper { + @media (min-width: 1024px) and (max-width: 1400px) { + padding-bottom: 4vw; + } +} + +.mountains { + @media (max-width: 599px) { + margin-top: -110%; + } + @media (max-width: 639px) { + margin-top: -90%; + } + @media (min-width: 640px) { + margin-top: -30%; + } + @media (min-width: 1024px) { + margin-top: -25%; + } + @media (min-width: 2200px) { + margin-top: -22%; + } + @media (min-width: 2800px) { + margin-top: -20%; + } + width: 100%; +} + +.sun { + height: 1259px; + @media (max-width: 1023px) { + // left: -400px; + } + @media (min-width: 1024px) { + // left: -200px; + } + @media (min-width: 2800px) { + // left: 25%; + } + // top: -700px; + left: calc(50% - 830px); + max-width: none; + position: absolute; + top: calc(-630px + (-10vw / 2)); // don't ask + width: 1260px; +} + +.timeline-wrapper { + @media (max-width: 1440px) { + height: 595px; // leave room for scrollbar + } + height: 580px; + overflow-x: auto; + overflow-y: hidden; + position: relative; + z-index: 20; + + @media (max-width: 639px) { + margin-top: 55%; + zoom: 0.75; + } + @media (min-width: 640px) { + margin-top: -30%; + } + + @media (min-width: 1440px) { + height: 0; + padding-bottom: 40.28%; + } + + @media (min-width: 1280px) { + // margin-top: -26%; + // padding-bottom: 34.6%; + // position: relative; + + // .timeline { + // height: 100%; + // left: 0; + // position: absolute; + // top: 0; + // width: 100%; + // } + } + + @media (min-width: 1440px) { + // overflow-x: hidden; + } +} + +.timeline, +.city { + height: auto; + left: 0; + min-width: 1440px; + max-width: none; + position: absolute; + top: 0; + width: 100%; +} + +.timeline { + max-width: none; + // width: 1440px; +} diff --git a/src/components/Layout/Layout.scss b/src/components/Layout/Layout.scss index 90dd70218..cc48933b2 100644 --- a/src/components/Layout/Layout.scss +++ b/src/components/Layout/Layout.scss @@ -12,13 +12,15 @@ font-family: 'Good Sans'; src: url('/fonts/GoodSans-Medium.woff') format('woff'); src: url('/fonts/GoodSans-Medium.woff2') format('woff2'); + font-weight: normal; } /* Good Sans Bold */ @font-face { - font-family: 'Good Sans Bold'; + font-family: 'Good Sans'; src: url('/fonts/GoodSans-Bold.woff') format('woff'); src: url('/fonts/GoodSans-Bold.woff2') formt('woff2'); + font-weight: bold; } html { @@ -202,7 +204,6 @@ textarea { html { font: 112.5%/1.45em georgia, serif; box-sizing: border-box; - overflow-y: scroll; } * { box-sizing: inherit; @@ -216,13 +217,14 @@ html { body { color: hsla(0, 0%, 0%, 0.8); font-family: 'Good Sans', Helvetica, Arial, sans-serif !important; - font-weight: normal; - word-wrap: break-word; font-kerning: normal; + font-feature-settings: 'kern', 'liga', 'clig', 'calt'; -moz-font-feature-settings: 'kern', 'liga', 'clig', 'calt'; -ms-font-feature-settings: 'kern', 'liga', 'clig', 'calt'; -webkit-font-feature-settings: 'kern', 'liga', 'clig', 'calt'; - font-feature-settings: 'kern', 'liga', 'clig', 'calt'; + font-weight: normal; + overflow-x: hidden; + word-wrap: break-word; } img { max-width: 100%; @@ -247,7 +249,7 @@ h1 { color: inherit; font-weight: bold; text-rendering: optimizeLegibility; - font-size: 42px; + font-size: 48px; line-height: 150%; font-family: 'Gosha Sans', Helvetica, Arial, Sans-Serif; } @@ -264,7 +266,7 @@ h2 { color: inherit; font-weight: bold; text-rendering: optimizeLegibility; - font-size: 36px; + font-size: 40px; line-height: normal; font-family: 'Gosha Sans', Helvetica, Arial, Sans-Serif; font-style: normal; diff --git a/src/components/NewsletterForm/index.js b/src/components/NewsletterForm/index.js index 02587ccf6..ca3bf373c 100644 --- a/src/components/NewsletterForm/index.js +++ b/src/components/NewsletterForm/index.js @@ -1,5 +1,5 @@ import React from 'react' -import './style.scss' +import { CallToAction } from '../CallToAction' export class NewsletterForm extends React.Component { constructor(props) { @@ -17,55 +17,67 @@ export class NewsletterForm extends React.Component { render() { return ( -
    - -
    -
    +
    +
    -
    - - - {/* real people should not fill this in and expect good things - do not remove this or risk form bot signups*/} - -
    - -
    +
    +
    Your inbox but better...
    +

    + Our newsletter keeps you up to date on what great things we are doing here at PostHog, + and trust me you don’t want to miss a thing. +

    +

    + Plus if you decide that these emails aren’t brightening your day, you can unsubscribe at + any time, no hard feelings. +

    - + +
    +
    +
    + Join our newsletter + + + {/* real people should not fill this in and expect good things - do not remove this or risk form bot signups*/} + +
    + + Join the List + +
    +
    +
    +
    +
    ) diff --git a/src/components/NewsletterForm/style.scss b/src/components/NewsletterForm/style.scss deleted file mode 100644 index 59989858d..000000000 --- a/src/components/NewsletterForm/style.scss +++ /dev/null @@ -1,4 +0,0 @@ -.newsletter-form-wrapper { - background-color: #ffffff !important; - max-width: 80vw; -} diff --git a/src/mdxGlobalComponents.js b/src/mdxGlobalComponents.js index c5f4a566d..ff154afb3 100644 --- a/src/mdxGlobalComponents.js +++ b/src/mdxGlobalComponents.js @@ -2,9 +2,12 @@ import { BasicHedgehogImage } from './components/BasicHedgehogImage' import { BlogFooter } from './components/BlogFooter' +import { CallToAction } from './components/CallToAction' import { CodeBlock } from './components/CodeBlock' import { CompensationCalculator } from './components/CompensationCalculator' import { Container } from './components/Container' +import { ContributorAvatars } from './components/ContributorAvatars' +import { CornerBrackets } from './components/CornerBrackets' import { DarkModeToggle } from './components/DarkModeToggle' import { DemoScheduler } from './components/DemoScheduler' import { DocsPageSurvey } from './components/DocsPageSurvey' @@ -14,6 +17,14 @@ import { FeaturesNav } from './components/FeaturesNav' import { Footer } from './components/Footer' import { GetStartedModal } from './components/GetStartedModal' import { HiddenSection } from './components/HiddenSection' +import { Features } from './components/LandingPage/Features' +import { Hero } from './components/LandingPage/Hero' +import { PrivateCloud } from './components/LandingPage/PrivateCloud' +import { ProductFeatureIcons } from './components/LandingPage/ProductFeatureIcons' +import { RecentBlogPosts } from './components/LandingPage/RecentBlogPosts' +import { Roadmap } from './components/LandingPage/Roadmap' +import { SocialProof } from './components/LandingPage/SocialProof' +import { Tutorials } from './components/LandingPage/Tutorials' import { NewsletterForm } from './components/NewsletterForm' import { OtherFeaturesBlock } from './components/OtherFeaturesBlock' import { PageHeader } from './components/PageHeader' @@ -33,9 +44,12 @@ import { TableOfContents } from './components/TableOfContents' export const shortcodes = { BasicHedgehogImage, BlogFooter, + CallToAction, CodeBlock, CompensationCalculator, Container, + ContributorAvatars, + CornerBrackets, DarkModeToggle, DemoScheduler, DocsPageSurvey, @@ -45,6 +59,14 @@ export const shortcodes = { Footer, GetStartedModal, HiddenSection, + Features, + Hero, + PrivateCloud, + ProductFeatureIcons, + RecentBlogPosts, + Roadmap, + SocialProof, + Tutorials, NewsletterForm, OtherFeaturesBlock, PageHeader, diff --git a/src/pages/index.js b/src/pages/index.js index f2a1e897d..a46fdfa68 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,282 +1,31 @@ -import React, { useState, useEffect, Suspense } from 'react' -import Button from 'antd/lib/button' -import 'antd/lib/button/style/css' -import './styles/index.scss' -import posthogComputer from '../images/computer-dashboard-4.svg' -import improveMobile from '../images/improve-mobile.svg' -import improveRetention from '../images/retro-retention-box.svg' -import improvePaths from '../images/retro-paths-box.svg' -import improveFunnels from '../images/retro-funnels-box.png' -import enterprise01 from '../images/retro-self-managed.svg' -import enterprise02 from '../images/enterprise-02.svg' -import enterprise03 from '../images/enterprise-03.svg' -import coolHedgehog from '../images/cool-hedgehog.svg' -import retroAutocapture from '../images/retro-autocapture.svg' -import trafficFlow from '../images/retro-how-traffic-flows.svg' -import visualizeTrends from '../images/retro-product-trends.svg' -import retroFlagsImg from '../images/retro-feature-flags.svg' -import selfHostedImg from '../images/self-host.svg' -import sessionRecordingImg from '../images/session-recording-3.svg' -import { SEO } from 'components/seo' -import Layout from 'components/Layout' -import { FeaturedSectionTextLeft } from 'components/Sections/FeaturedSectionTextLeft' -import { FeaturedSectionTextRight } from 'components/Sections/FeaturedSectionTextRight' -import { FeaturedSectionTripleImage } from 'components/Sections/FeaturedSectionTripleImage' -import { Spacer } from 'components/Spacer' -import { DesignedForYourStackBlock } from 'components/Sections/DesignedForYourStackBlock' -import { useActions } from 'kea' -import { layoutLogic } from '../logic/layoutLogic' +import React from 'react' -const UserLogosCarousel = React.lazy(() => import('../components/UserLogosCarousel')) +import { Header } from '../components/Header' +import { Hero } from '../components/LandingPage/Hero' +import { Features } from '../components/LandingPage/Features' +import { PrivateCloud } from '../components/LandingPage/PrivateCloud' +import { Tutorials } from '../components/LandingPage/Tutorials' +import { RecentBlogPosts } from '../components/LandingPage/RecentBlogPosts' +import { Footer } from '../components/Footer/Footer' -function IndexPage() { - const [carouselAvailable, setCarouselAvailable] = useState(false) - const { setIsGetStartedModalOpen } = useActions(layoutLogic) +import { SEO } from '../components/seo' - useEffect(() => { - if (window && !carouselAvailable) { - setCarouselAvailable(true) - } - }, []) - - const CarouselFallback = () =>
    +import '../components/LandingPage/styles/index.scss' +const IndexPage = () => { return ( -
    -
    - - -
    -
    -
    -

    - A complete product analytics stack, to deploy on your infrastructure. -

    -
    - -
    -
    - - Join 2,700 companies
    using PostHog. -
    - -
    - - - Schedule Demo - -
    -
    - -
    - -
    -
    -
    -
    - -

    Used At

    - {carouselAvailable ? ( - }> - - - ) : ( - - )} - - - - - - - - - - - - -
    - -
    - - -
    - -
    - - - {/* Why posthog */} -
    -
    -

    PostHog versus Self-Build

    -
    -
    -

    Data Lake

    -
    -

    Suitable for scalability

    -

    You own your own data

    -

    Resource-intensive

    -

    Requires technical knowledge

    -

    You have to build your own features

    -

    Diverts effort from your core business

    -
    -
    -
    -

    Deploying Posthog

    -
    -

    Suitable for scalability

    -

    You own your own data

    -

    Ready to use immediately

    -

    Regular updates

    -

    Feature-rich

    -

    Can be integrated with a data lake

    -
    -
    -
    -
    - -
    -
    -
    - - {/* posthog for enterprise */} - -
    -
    -

    PostHog for Enterprise

    -
    -
    -
    -

    Self-managed

    - enterprise-01 -
    -

    - PostHog can be deployed in your cloud, for painless adoption and onboarding, - with full underlying data access. -

    -
    -
    -
    -

    Unlimited volume

    - enterprise-02 -
    -

    PostHog is built to scale. That includes our open core pricing model.

    -
    -
    -
    -

    Support

    - enterprise-03 -
    -

    - PostHog's team can offer instance monitoring, updates and help with supporting - integrations. -

    -
    -
    -
    -
    - - - -

    - Self-host our free-forever open source offering or start tracking your product - instantly with PostHog Cloud. -

    -
    - - - - -
    -
    - } - /> - -
    +
    + +
    + + + + + +
    ) } diff --git a/src/pages/styles/features.scss b/src/pages/styles/features.scss index a0a97bb57..a86ceb0a5 100644 --- a/src/pages/styles/features.scss +++ b/src/pages/styles/features.scss @@ -11,12 +11,12 @@ @media screen and (max-width: 834px) { h1, h2 { - font-size: 24px !important; - line-height: 32px !important; + font-size: 40px !important; + line-height: 1.2em !important; } p { font-size: 16px !important; - line-height: 32px !important; + line-height: 1.5em !important; } } diff --git a/src/styles/global.css b/src/styles/global.css index dc6f7e9c8..2203d602d 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -22,16 +22,22 @@ ul { list-style: disc; } -.button-primary { - background: rgba(255, 99, 39, 0.9); - border-color: rgba(255, 99, 39, 0.9); +.bg-primary { + background: linear-gradient(91.54deg, rgba(255, 99, 39, 0.9) 0%, rgba(248, 88, 27, 0.9) 100%); +} +.bg-primary-dark { + background: rgba(218, 72, 16, 0.9); + border-color: rgba(218, 72, 16, 0.9); +} + +.button-primary { box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.05); backdrop-filter: blur(2px); text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.1); transition: 0.25s ease all; - @apply px-4 py-2 font-gosha inline-block rounded font-semibold border text-base-larger text-white hover:text-white uppercase; + @apply bg-primary px-4 py-2 font-gosha inline-block rounded font-semibold border text-base-larger text-white hover:text-white uppercase; } .button-primary:hover, @@ -45,6 +51,54 @@ ul { background: linear-gradient(180deg, #200c39 0%, #220f3f 100%); } +.bg-neon { + position: relative; +} + +.bg-neon:after { + background: conic-gradient( + from 180deg at 50% 50%, + #f7a501 0deg, + rgba(255, 17, 17, 0.614583) 78.75deg, + rgba(252, 10, 228, 0.773124) 140.63deg, + rgba(184, 41, 251, 0.817651) 189.38deg, + rgba(252, 10, 228, 0.773124) 238.12deg, + rgba(255, 17, 17, 0.614583) 300deg, + #f7a501 360deg + ), + rgba(255, 255, 255, 0.8); + border-radius: 20px; + bottom: -8px; + content: ''; + position: absolute; + left: -8px; + right: -8px; + top: -8px; + z-index: 1; +} + +.bg-neon:before { + background: conic-gradient( + from 180deg at 50% 50%, + #f7a501 0deg, + rgba(255, 17, 17, 0.614583) 78.75deg, + rgba(252, 10, 228, 0.773124) 140.63deg, + rgba(184, 41, 251, 0.817651) 189.38deg, + rgba(252, 10, 228, 0.773124) 238.12deg, + rgba(255, 17, 17, 0.614583) 300deg, + #f7a501 360deg + ), + rgba(255, 255, 255, 0.8); + bottom: 0; + content: ''; + filter: blur(30px); + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} + .bg-darkmode-purple { background: #220f3f !important; } @@ -56,3 +110,13 @@ ul { .bg-footer { background: #08042f; } + +.contributor-images > a { + @apply rounded p-1; +} + +.contributor-images > a > img { + margin-bottom: 0 !important; + + @apply rounded; +} diff --git a/tailwind.config.js b/tailwind.config.js index 7e0afb93a..8393b4de6 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,23 @@ module.exports = { - purge: ['./src/**/*.{js,jsx,ts,tsx}'], + purge: { + content: ['./src/**/*.{js,jsx,ts,tsx}'], + options: { + safelist: [ + 'w-full', + 'w-56', + 'w-64', + 'w-72', + '-mt-2', + '-ml-2', + '-mr-2', + '-mb-2', + '-mt-4', + '-mr-4', + '-mb-4', + '-ml-4', + ], + }, + }, darkMode: false, // or 'media' or 'class' theme: { extend: { @@ -7,11 +25,26 @@ module.exports = { gosha: ['Gosha Sans', 'Arial', 'Helvetica', 'sans-serif'], }, fontSize: { + '2xs': '0.65rem', 'base-larger': '15px', }, + colors: { + primary: 'rgba(255, 99, 39, 0.9)', + 'primary-dark': 'rgba(218, 72, 16, 0.9)', + purpleish: '#802f6a', + 'purpleish-dark': '#72286E', + orange: '#FFB877', + }, minHeight: { 780: '780px', }, + borderRadius: { + sm: '4px', + lg: '20px', + }, + borderWidth: { + 3: '3px', + }, }, }, variants: {