import React, { useState, useEffect, Suspense } from "react"; import { Flex, Heading, Text, Box, Image, ListItem, Button, Link, ListIcon, List, useBreakpointValue, Center, Fade, } from "@chakra-ui/react"; import { Grid, GridItem } from "@chakra-ui/react"; import { useUser, useAnalytics, useModals, useRouter } from "../src/core/hooks"; import { openPopupWidget, InlineWidget } from "react-calendly"; import TrustedBadge from "../src/components/TrustedBadge" import { getLayout } from "../src/layouts"; const TEXT_PROPS = { fontSize: ["lg", null, "xl"], fontWeight: "600", }; const HEADING_PROPS = { fontWeight: "700", fontSize: ["4xl", "5xl", "4xl", "5xl", "6xl", "7xl"], }; const TITLE_PROPS = { fontWeight: "700", fontSize: ["4xl", "5xl", "5xl", "5xl", "6xl", "120px"], }; const TRIPLE_PICS_PROPS = { fontSize: ["2xl", "3xl", "3xl", "3xl", "4xl", "4xl"], textAlign: "center", fontWeight: "500", py: 4, }; const TRIPLE_PICS_TEXT = { fontSize: ["lg", "xl", "xl", "xl", "2xl", "3xl"], textAlign: "center", fontWeight: "400", mb: ["2rem", "2rem", "0", null, "0"], }; const CARD_CONTAINER = { className: "CardContainer", w: "100%", mx: [0, 0, "2rem", null, "4rem"], alignSelf: ["center", null, "flex-start"], }; const IMAGE_CONTAINER = { className: "ImageContainer", h: ["10rem", "14rem", "14rem", "15rem", "18rem", "20rem"], justifyContent: "center", }; const AWS_PATH = "https://s3.amazonaws.com/static.simiotics.com/landing"; const assets = { background: `${AWS_PATH}/landing-background-2.png`, aviator: `${AWS_PATH}/aviator-2.svg`, icon1: `${AWS_PATH}/v2/Icon+1.svg`, icon2: `${AWS_PATH}/v2/Icon+2.svg`, icon3: `${AWS_PATH}/v2/Icon+3.svg`, icon4: `${AWS_PATH}/v2/Icon+4.svg`, icon5: `${AWS_PATH}/v2/Icon+5.svg`, icon6: `${AWS_PATH}/v2/Icon+6.svg`, activeloopLogo: `${AWS_PATH}/activeloop.svg`, aiIncubeLogo: `${AWS_PATH}/ai incube.svg`, b612Logo: `${AWS_PATH}/b612.svg`, harvardLogo: `${AWS_PATH}/harvard.svg`, mattermarkLogo: `${AWS_PATH}/mattermark.svg`, mixrankLogo: `${AWS_PATH}/mixrank.svg`, toolchainLogo: `${AWS_PATH}/toolchain.svg`, }; const Homepage = () => { const router = useRouter(); const buttonSize = useBreakpointValue({ base: "md", sm: "md", md: "md", lg: "lg", xl: "xl", "2xl": "xl", }); const ButtonRadius = "2xl"; const buttonWidth = ["100%", "100%", "40%", "45%", "45%", "45%"]; const buttonMinWidth = "10rem"; const { isInit } = useUser(); const { withTracking, MIXPANEL_EVENTS } = useAnalytics(); const { toggleModal } = useModals(); const [scrollDepth, setScrollDepth] = useState(0); const getScrollPrecent = ({ currentTarget }) => { const scroll_level = (100 * (currentTarget.scrollTop + currentTarget.clientHeight)) / currentTarget.scrollHeight; return scroll_level; }; const handleScroll = (e) => { const currentScroll = Math.ceil(getScrollPrecent(e) / 10); if (currentScroll > scrollDepth) { withTracking( setScrollDepth(currentScroll), MIXPANEL_EVENTS.HOMEPAGE_SCROLL_DEPTH, scrollDepth ); } }; const DoubleCTAButton = () => ( ); useEffect(() => { if ( router.nextRouter.asPath !== "/" && router.nextRouter.asPath.slice(0, 2) !== "/?" ) { router.replace(router.nextRouter.asPath, undefined, { shallow: true, }); } }, [isInit, router]); return ( handleScroll(e)} > Measure the success of your dev tool Get usage metrics and crash reports
{" "} {`Improve your users' experience`}
Bugout is on the fly to report your crashes
See what your users are experiencing with your library, API, or command line tool privacy is our prioriy Catch and fix bugs faster Learn about errors as they occur, with full stack traces. live metrics Understand your user engagement and retention Learn how users are using your tool, and how frequently. we make it simple for user Inform your product roadmap Understand which features people are actually using. We currently support Python, Javascript and Go!
Want us to support other programming languages?{" "}
Engage with your users on a deeper level live metrics Live dashboards See your users’ journeys as they happen privacy is our prioriy GDPR compliance Automatically handle GDPR-related user requests we make it simple for user Simple user consent flows Define principled user consent flows in only a few lines of code.
Loved by proactive teams{" "} 💙 Ready to learn more? Book office hours with Neeraj Kashyap ( @zomglings ), CEO of Bugout
{`Let's talk about:`} "- "} /> How to measure and improve the quality of your users’ experience "- "} /> Ethical data collection "- "} /> Developer tools best practices, pulling from our experience at OpenAI and Google (TensorFlow, Kubeflow, Google Cloud) Book now →  
 
); }; export async function getStaticProps() { const metaTags = { title: "Bugout: Measure the success of your dev tool", description: "Get usage metrics and crash reports. Improve your users' experience", keywords: "bugout, bugout-dev, bugout.dev, usage-metrics, analytics, dev-tool ,knowledge, docs, journal, entry, find-anything", url: "https://bugout.dev", image: "https://s3.amazonaws.com/static.simiotics.com/landing/aviator-2.svg", }; const assetPreload = Object.keys(assets).map((key) => { return { rel: "preload", href: assets[key], as: "image", }; }); const preconnects = [ { rel: "preconnect", href: "https://s3.amazonaws.com" }, { rel: "preconnect", href: "https://assets.calendly.com/" }, ]; const preloads = assetPreload.concat(preconnects); return { props: { metaTags, preloads }, }; } Homepage.layout = "default"; Homepage.getLayout = getLayout; export default Homepage;