import React, { useState, Suspense, useEffect, useLayoutEffect } from "react"; import { Fade, Flex, Heading, Box, Center, chakra, Stack, Link, useMediaQuery, Grid, Text, GridItem, SimpleGrid, Image as ChakraImage, } from "@chakra-ui/react"; import dynamic from "next/dynamic"; import useUser from "../src/core/hooks/useUser"; import useModals from "../src/core/hooks/useModals"; import useRouter from "../src/core/hooks/useRouter"; import { MIXPANEL_PROPS, MIXPANEL_EVENTS, } from "../src/core/providers/AnalyticsProvider/constants"; import { AWS_ASSETS_PATH } from "../src/core/constants"; import mixpanel from "mixpanel-browser"; const ConnectedButtons = dynamic( () => import("../src/components/ConnectedButtons"), { ssr: false, } ); const HEADING_PROPS = { fontWeight: "700", fontSize: ["4xl", "5xl", "4xl", "5xl", "6xl", "7xl"], }; const assets = { background720: `${AWS_ASSETS_PATH}/background720.png`, background1920: `${AWS_ASSETS_PATH}/background720.png`, background2880: `${AWS_ASSETS_PATH}/background720.png`, background3840: `${AWS_ASSETS_PATH}/background720.png`, minedTransactions: `${AWS_ASSETS_PATH}/Ethereum+mined+transactions.png`, pendingTransactions: `${AWS_ASSETS_PATH}/Ethereum+pending+transactions.png`, priceInformation: `${AWS_ASSETS_PATH}/Price+information.png`, socialMediaPosts: `${AWS_ASSETS_PATH}/Social+media+posts.png`, cryptoTraders: `${AWS_ASSETS_PATH}/crypto+traders.png`, comicWhite: `${AWS_ASSETS_PATH}/moonstream-comic-white.png`, smartDevelopers: `${AWS_ASSETS_PATH}/smart+contract+developers.png`, }; const Homepage = () => { const [background, setBackground] = useState("background720"); const [backgroundLoaded720, setBackgroundLoaded720] = useState(false); const [backgroundLoaded1920, setBackgroundLoaded1920] = useState(false); const [backgroundLoaded2880, setBackgroundLoaded2880] = useState(false); const [backgroundLoaded3840, setBackgroundLoaded3840] = useState(false); const router = useRouter(); const { isInit } = useUser(); const { toggleModal } = useModals(); const [ isLargerThan720px, isLargerThan1920px, isLargerThan2880px, isLargerThan3840px, ] = useMediaQuery([ "(min-width: 720px)", "(min-width: 1920px)", "(min-width: 2880px)", "(min-width: 3840px)", ]); useEffect(() => { assets["background720"] = `${AWS_ASSETS_PATH}/background720.png`; assets["background1920"] = `${AWS_ASSETS_PATH}/background1920.png`; assets["background2880"] = `${AWS_ASSETS_PATH}/background2880.png`; assets["background3840"] = `${AWS_ASSETS_PATH}/background3840.png`; }, []); useLayoutEffect(() => { if (backgroundLoaded3840) { setBackground("background3840"); } else if (backgroundLoaded2880) { setBackground("background2880"); } else if (backgroundLoaded1920) { setBackground("background1920"); } else { setBackground("background720"); } }, [ isLargerThan720px, isLargerThan1920px, isLargerThan2880px, isLargerThan3840px, backgroundLoaded720, backgroundLoaded1920, backgroundLoaded2880, backgroundLoaded3840, ]); useEffect(() => { if ( router.nextRouter.asPath !== "/" && router.nextRouter.asPath.slice(0, 2) !== "/?" && router.nextRouter.asPath.slice(0, 2) !== "/#" && router.nextRouter.asPath.slice(0, 11) !== "/index.html" ) { console.warn("redirect attempt.."); if (typeof window !== "undefined") { console.warn("window present:", window.location.pathname); router.replace(router.nextRouter.asPath, router.nextRouter.asPath, { shallow: false, }); } } }, [isInit, router]); useLayoutEffect(() => { const imageLoader720 = new Image(); imageLoader720.src = `${AWS_ASSETS_PATH}/background720.png`; imageLoader720.onload = () => { setBackgroundLoaded720(true); }; }, []); useLayoutEffect(() => { const imageLoader1920 = new Image(); imageLoader1920.src = `${AWS_ASSETS_PATH}/background1920.png`; imageLoader1920.onload = () => { setBackgroundLoaded1920(true); }; }, []); useLayoutEffect(() => { const imageLoader2880 = new Image(); imageLoader2880.src = `${AWS_ASSETS_PATH}/background2880.png`; imageLoader2880.onload = () => { setBackgroundLoaded2880(true); }; }, []); useLayoutEffect(() => { const imageLoader3840 = new Image(); imageLoader3840.src = `${AWS_ASSETS_PATH}/background3840.png`; imageLoader3840.onload = () => { setBackgroundLoaded3840(true); }; }, []); return ( Open source blockchain analytics Product analytics for Web3. Moonstream helps you understand exactly how people are using your smart contracts. We believe that the blockchain is for everyone. This requires complete transparency. That’s why all our software is{" "} open source See how your smart contracts are being used from: Ethereum mined transactions Ethereum pending transactions Centralized exchanges Social media posts
Moonstream is meant for you if
{ mixpanel.get_distinct_id() && mixpanel.track(`${MIXPANEL_EVENTS.BUTTON_CLICKED}`, { [`${MIXPANEL_PROPS.BUTTON_NAME}`]: `Connected buttons: scroll to analytics`, }); }, }} button1={{ label: "TX pool real time data", speed: 9, // link: "/#txpool", onClick: () => { mixpanel.get_distinct_id() && mixpanel.track(`${MIXPANEL_EVENTS.BUTTON_CLICKED}`, { [`${MIXPANEL_PROPS.BUTTON_NAME}`]: `Connected buttons: scroll to txpool`, }); }, }} button2={{ label: "Exchange price stream", speed: 6, // link: "/#exchanges", onClick: () => { mixpanel.get_distinct_id() && mixpanel.track(`${MIXPANEL_EVENTS.BUTTON_CLICKED}`, { [`${MIXPANEL_PROPS.BUTTON_NAME}`]: `Connected buttons: scroll to exchanges`, }); }, }} button3={{ label: "Social media posts", speed: 3, // link: "/#smartDeveloper", onClick: () => { mixpanel.get_distinct_id() && mixpanel.track(`${MIXPANEL_EVENTS.BUTTON_CLICKED}`, { [`${MIXPANEL_PROPS.BUTTON_NAME}`]: `Connected buttons: scroll to developer`, }); }, }} />
Want to find out more? Reach out to us on{" "} { mixpanel.get_distinct_id() && mixpanel.track( `${MIXPANEL_EVENTS.BUTTON_CLICKED}`, { [`${MIXPANEL_PROPS.BUTTON_NAME}`]: `Join our discord`, } ); }} isExternal href={"https://discord.gg/K56VNUQGvA"} > Discord {" "} or{" "} { mixpanel.get_distinct_id() && mixpanel.track( `${MIXPANEL_EVENTS.BUTTON_CLICKED}`, { [`${MIXPANEL_PROPS.BUTTON_NAME}`]: `Early access CTA: developer want to find more button`, } ); toggleModal("hubspot-developer"); }} > request early access
); }; export async function getStaticProps() { const metaTags = { title: "Moonstream.to: All your crypto data in one stream", description: "From the Ethereum transaction pool to Elon Musk’s latest tweets get all the crypto data you care about in one stream.", keywords: "blockchain, crypto, data, trading, smart contracts, ethereum, solana, transactions, defi, finance, decentralized", url: "https://www.moonstream.to", image: `${AWS_ASSETS_PATH}/crypto+traders.png`, }; const assetPreload = Object.keys(assets).map((key) => { return { rel: "preload", href: assets[key], as: "image", }; }); const preconnects = [{ rel: "preconnect", href: "https://s3.amazonaws.com" }]; const preloads = assetPreload.concat(preconnects); return { props: { metaTags, preloads }, }; } export default Homepage;