improvement(landing): fixed icons for tweets, added typeform, added logo

This commit is contained in:
Emir Karabeg
2025-05-06 02:42:28 -07:00
parent 266c6e3a2e
commit a1c75653d0
21 changed files with 183 additions and 99 deletions
+89 -34
View File
@@ -1,6 +1,7 @@
'use client'
import { useEffect, useState } from 'react'
import Image from 'next/image'
import Link from 'next/link'
import { useRouter } from 'next/navigation'
import { AnimatePresence, motion } from 'framer-motion'
@@ -75,8 +76,16 @@ const mobileButtonVariants = {
// --- End Framer Motion Variants ---
// Component for Navigation Links
const NavLinks = ({ mobile, currentPath }: { mobile?: boolean; currentPath?: string }) => {
const links = [
const NavLinks = ({
mobile,
currentPath,
onContactClick,
}: {
mobile?: boolean
currentPath?: string
onContactClick?: () => void
}) => {
const navigationLinks = [
// { href: "/", label: "Marketplace" },
...(currentPath !== '/' ? [{ href: '/', label: 'Home' }] : []),
{ href: 'https://docs.simstudio.ai/', label: 'Docs', external: true },
@@ -84,22 +93,26 @@ const NavLinks = ({ mobile, currentPath }: { mobile?: boolean; currentPath?: str
{ href: 'https://github.com/simstudioai/sim', label: 'Contributors', external: true },
]
// Common CSS class for navigation items
const navItemClass = `text-white/60 hover:text-white/100 text-base ${
mobile ? 'p-2.5 text-lg font-medium text-left' : 'p-1.5'
} rounded-md transition-colors duration-200 block md:inline-block`
return (
<>
{links.map((link) => {
{navigationLinks.map((link) => {
const linkElement = (
<motion.div variants={mobile ? mobileNavItemVariants : undefined} key={link.label}>
<Link
href={link.href}
className={`text-white/60 hover:text-white/100 text-base ${
mobile ? 'p-2.5 text-lg font-medium text-left' : 'p-1.5'
} rounded-md transition-colors duration-200 block md:inline-block`}
className={navItemClass}
{...(link.external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}
>
{link.label}
</Link>
</motion.div>
)
// Wrap the motion.div with SheetClose if mobile
return mobile ? (
<SheetClose asChild key={link.label}>
@@ -109,6 +122,34 @@ const NavLinks = ({ mobile, currentPath }: { mobile?: boolean; currentPath?: str
linkElement
)
})}
{/* Enterprise button with the same action as contact */}
{onContactClick &&
(mobile ? (
<SheetClose asChild key="enterprise">
<motion.div variants={mobileNavItemVariants}>
<Link
href="https://form.typeform.com/to/jqCO12pF"
target="_blank"
rel="noopener noreferrer"
className={navItemClass}
>
Enterprise
</Link>
</motion.div>
</SheetClose>
) : (
<motion.div variants={mobile ? mobileNavItemVariants : undefined} key="enterprise">
<Link
href="https://form.typeform.com/to/jqCO12pF"
target="_blank"
rel="noopener noreferrer"
className={navItemClass}
>
Enterprise
</Link>
</motion.div>
))}
</>
)
}
@@ -117,9 +158,15 @@ interface NavClientProps {
children: React.ReactNode
initialIsMobile?: boolean
currentPath?: string
onContactClick?: () => void
}
export default function NavClient({ children, initialIsMobile, currentPath }: NavClientProps) {
export default function NavClient({
children,
initialIsMobile,
currentPath,
onContactClick,
}: NavClientProps) {
const [mounted, setMounted] = useState(false)
const [isMobile, setIsMobile] = useState(initialIsMobile ?? false)
const [isSheetOpen, setIsSheetOpen] = useState(false)
@@ -140,7 +187,9 @@ export default function NavClient({ children, initialIsMobile, currentPath }: Na
return (
<nav className="absolute top-1 left-0 right-0 z-30 px-4 py-8">
<div className="max-w-7xl mx-auto flex justify-between items-center relative">
<div className="flex-1"></div>
<div className="flex-1">
<div className="w-[32px] h-[32px]"></div>
</div>
<div className="flex-1 flex justify-end">
<div className="w-[43px] h-[43px]"></div>
</div>
@@ -152,7 +201,15 @@ export default function NavClient({ children, initialIsMobile, currentPath }: Na
return (
<nav className="absolute top-1 left-0 right-0 z-30 px-4 py-8">
<div className="max-w-7xl mx-auto flex justify-between items-center relative">
<div className="flex-1">{/* <div className="text-xl text-white">sim studio</div> */}</div>
{!isMobile && (
<div className="flex-1 flex items-center">
<div className="inline-block">
<Link href="/" className="inline-flex">
<Image src="/sim.svg" alt="Sim Logo" width={42} height={42} />
</Link>
</div>
</div>
)}
{!isMobile && (
<motion.div
@@ -161,12 +218,12 @@ export default function NavClient({ children, initialIsMobile, currentPath }: Na
initial="hidden"
animate="visible"
>
<NavLinks currentPath={currentPath} />
<NavLinks currentPath={currentPath} onContactClick={onContactClick} />
</motion.div>
)}
{isMobile && <div className="flex-1"></div>}
<div className="flex-1 flex justify-end">
<div className="flex-1 flex justify-end items-center">
<div className={`flex items-center ${isMobile ? 'gap-2' : 'gap-3'}`}>
{!isMobile && (
<>
@@ -176,18 +233,15 @@ export default function NavClient({ children, initialIsMobile, currentPath }: Na
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.3, ease: 'easeOut', delay: 0.4 }}
>
<Button
onClick={() =>
window.open(
'https://calendly.com/emir-simstudio/15min',
'_blank',
'noopener,noreferrer'
)
}
className="bg-[#701ffc] hover:bg-[#802FFF] h-[43px] font-medium text-base py-2 px-6 text-neutral-100 font-geist-sans transition-colors duration-200"
<Link
href="https://form.typeform.com/to/jqCO12pF"
target="_blank"
rel="noopener noreferrer"
>
Contact
</Button>
<Button className="bg-[#701ffc] hover:bg-[#802FFF] h-[43px] font-medium text-base py-2 px-6 text-neutral-100 font-geist-sans transition-colors duration-200">
Contact
</Button>
</Link>
</motion.div>
</>
)}
@@ -228,7 +282,11 @@ export default function NavClient({ children, initialIsMobile, currentPath }: Na
initial="hidden"
animate="visible"
>
<NavLinks mobile currentPath={currentPath} />
<NavLinks
mobile
currentPath={currentPath}
onContactClick={onContactClick}
/>
{children && (
<motion.div variants={mobileNavItemVariants}>
<SheetClose asChild>{children}</SheetClose>
@@ -236,18 +294,15 @@ export default function NavClient({ children, initialIsMobile, currentPath }: Na
)}
<motion.div variants={mobileButtonVariants} className="mt-auto pt-6">
<SheetClose asChild>
<Button
onClick={() =>
window.open(
'https://calendly.com/emir-simstudio/15min',
'_blank',
'noopener,noreferrer'
)
}
className="w-full bg-[#701ffc] hover:bg-[#802FFF] font-medium py-6 text-base text-white shadow-lg shadow-[#701ffc]/20 transition-colors duration-200"
<Link
href="https://form.typeform.com/to/jqCO12pF"
target="_blank"
rel="noopener noreferrer"
>
Contact
</Button>
<Button className="w-full bg-[#701ffc] hover:bg-[#802FFF] font-medium py-6 text-base text-white shadow-lg shadow-[#701ffc]/20 transition-colors duration-200">
Contact
</Button>
</Link>
</SheetClose>
</motion.div>
</motion.div>
+39 -29
View File
@@ -7,7 +7,11 @@ import { getFormattedGitHubStars } from '../actions/github'
import GitHubStarsClient from './github-stars-client'
import NavClient from './nav-client'
export default function NavWrapper() {
interface NavWrapperProps {
onOpenTypeformLink: () => void
}
export default function NavWrapper({ onOpenTypeformLink }: NavWrapperProps) {
// Use a client-side component to wrap the navigation
// This avoids trying to use server-side UA detection
// which has compatibility challenges
@@ -38,34 +42,40 @@ export default function NavWrapper() {
}, [])
return (
<AnimatePresence mode="wait">
{!isLoaded ? (
<motion.div
key="loading"
initial={{ opacity: 0 }}
animate={{ opacity: 0.5 }}
exit={{ opacity: 0 }}
className="absolute top-1 left-0 right-0 z-30 px-4 py-8"
>
<div className="max-w-7xl mx-auto flex justify-between items-center relative">
<div className="flex-1"></div>
<div className="flex-1 flex justify-end">
<div className="w-[43px] h-[43px]"></div>
<>
<AnimatePresence mode="wait">
{!isLoaded ? (
<motion.div
key="loading"
initial={{ opacity: 0 }}
animate={{ opacity: 0.5 }}
exit={{ opacity: 0 }}
className="absolute top-1 left-0 right-0 z-30 px-4 py-8"
>
<div className="max-w-7xl mx-auto flex justify-between items-center relative">
<div className="flex-1"></div>
<div className="flex-1 flex justify-end">
<div className="w-[43px] h-[43px]"></div>
</div>
</div>
</div>
</motion.div>
) : (
<motion.div
key="loaded"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.3 }}
>
<NavClient initialIsMobile={initialIsMobile} currentPath={pathname}>
<GitHubStarsClient stars={starCount} />
</NavClient>
</motion.div>
)}
</AnimatePresence>
</motion.div>
) : (
<motion.div
key="loaded"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.3 }}
>
<NavClient
initialIsMobile={initialIsMobile}
currentPath={pathname}
onContactClick={onOpenTypeformLink}
>
<GitHubStarsClient stars={starCount} />
</NavClient>
</motion.div>
)}
</AnimatePresence>
</>
)
}
@@ -8,7 +8,11 @@ import { DiscordIcon, GithubIcon, xIcon as XIcon } from '@/components/icons'
import { Button } from '@/components/ui/button'
import useIsMobile from '../hooks/useIsMobile'
function Footer() {
interface FooterProps {
onOpenTypeformLink: () => void
}
function Footer({ onOpenTypeformLink }: FooterProps) {
const router = useRouter()
const { isMobile, mounted } = useIsMobile()
@@ -32,13 +36,7 @@ function Footer() {
className="bg-[#B5A1D4] text-[#1C1C1C] w-fit hover:bg-[#bdaecb] transition-colors duration-500"
size={'lg'}
variant={'secondary'}
onClick={() =>
window.open(
'https://calendly.com/emir-simstudio/15min',
'_blank',
'noopener,noreferrer'
)
}
onClick={onOpenTypeformLink}
>
Get Started
</Button>
@@ -199,13 +197,7 @@ function Footer() {
className="bg-[#B5A1D4] text-[#1C1C1C] w-fit hover:bg-[#bdaecb] transition-colors duration-500"
size={'lg'}
variant={'secondary'}
onClick={() =>
window.open(
'https://calendly.com/emir-simstudio/15min',
'_blank',
'noopener,noreferrer'
)
}
onClick={onOpenTypeformLink}
>
Get Started
</Button>
@@ -11,63 +11,63 @@ const X_TESTIMONIALS = [
username: '@GithubProjects',
viewCount: '90.4k',
tweetUrl: 'https://x.com/GithubProjects/status/1906383555707490499',
profileImage: 'https://pbs.twimg.com/profile_images/1679831765744259073/hoVtsOZ9_400x400.jpg',
profileImage: '/twitter/github-projects.jpg',
},
{
text: 'A very good looking agent workflow builder 🔥 and open source!',
username: '@xyflowdev',
viewCount: '2,771',
viewCount: '3,246',
tweetUrl: 'https://x.com/xyflowdev/status/1909501499719438670',
profileImage: 'https://pbs.twimg.com/profile_images/1719655365011238912/RX4seDV2_400x400.jpg',
profileImage: '/twitter/xyflow.jpg',
},
{
text: "🚨 BREAKING: This startup just dropped the fastest way to build AI agents.\n\nThis Figma-like canvas to build agents will blow your mind.\n\nHere's why this is the best tool for building AI agents:",
username: '@hasantoxr',
viewCount: '508k',
viewCount: '515k',
tweetUrl: 'https://x.com/hasantoxr/status/1912909502036525271',
profileImage: 'https://pbs.twimg.com/profile_images/1906880573140070400/wYssvs_v_400x400.jpg',
profileImage: '/twitter/hasan.jpg',
},
{
text: 'omfggggg this is the zapier of agent building\n\ni always believed that building agents and using ai should not be limited to technical people. i think this solves just that\n\nthe fact that this is also open source makes me so optimistic about the future of building with ai :)))\n\ncongrats @karabegemir & @typingwala !!!',
username: '@nizzyabi',
viewCount: '6,269',
tweetUrl: 'https://x.com/nizzyabi/status/1907864421227180368',
profileImage: '/nizzy.jpg',
profileImage: '/twitter/nizzy.jpg',
},
{
text: "One of the best products I've seen in the space, and the hustle and grind I've seen from @karabegemir and @typingwala is insane. Sim Studio is positioned to build something game-changing, and there's no better team for the job.\n\nCongrats on the launch 🚀 🎊 great things ahead!",
username: '@firestorm776',
viewCount: '956',
tweetUrl: 'https://x.com/firestorm776/status/1907896097735061598',
profileImage: 'https://pbs.twimg.com/profile_images/1507556591419207685/sNvH2OGg_400x400.jpg',
profileImage: '/twitter/samarth.jpg',
},
{
text: 'lfgg got access to @simstudioai via @zerodotemail 😎',
username: '@nizzyabi',
viewCount: '1,585',
tweetUrl: 'https://x.com/nizzyabi/status/1910482357821595944',
profileImage: '/nizzy.jpg',
profileImage: '/twitter/nizzy.jpg',
},
{
text: 'Feels like we\'re finally getting a "Photoshop moment" for AI devs—visual, intuitive, and fast enough to keep up with ideas mid-flow.',
username: '@syamrajk',
viewCount: '2,643',
tweetUrl: 'https://x.com/syamrajk/status/1912911980110946491',
profileImage: 'https://pbs.twimg.com/profile_images/1912907755339522048/EeyUbije_400x400.jpg',
profileImage: '/twitter/syamrajk.jpg',
},
{
text: "🚨 BREAKING: This startup just dropped the fastest way to build AI agents.\n\nThis Figma-like canvas to build agents will blow your mind.\n\nHere's why this is the best tool for building AI agents:",
username: '@lazukars',
viewCount: '47.4k',
tweetUrl: 'https://x.com/lazukars/status/1913136390503600575',
profileImage: 'https://pbs.twimg.com/profile_images/1721431652964904961/T5j6xmxi_400x400.png',
profileImage: '/twitter/lazukars.png',
},
{
text: 'The use cases are endless. Great work @simstudioai',
username: '@daniel_zkim',
viewCount: '103',
tweetUrl: 'https://x.com/daniel_zkim/status/1907891273664782708',
profileImage: 'https://pbs.twimg.com/profile_images/1895341179186692096/XXdBixf6_400x400.jpg',
profileImage: '/twitter/daniel.jpg',
},
]
+8 -2
View File
@@ -1,3 +1,5 @@
'use client'
import NavWrapper from './components/nav-wrapper'
import Blogs from './components/sections/blogs'
import Features from './components/sections/features'
@@ -7,9 +9,13 @@ import Integrations from './components/sections/integrations'
import Testimonials from './components/sections/testimonials'
export default function Landing() {
const handleOpenTypeformLink = () => {
window.open('https://form.typeform.com/to/jqCO12pF', '_blank')
}
return (
<main className="bg-[#0C0C0C] relative min-h-screen font-geist-sans">
<NavWrapper />
<NavWrapper onOpenTypeformLink={handleOpenTypeformLink} />
<Hero />
<Testimonials />
@@ -18,7 +24,7 @@ export default function Landing() {
{/* <Blogs /> */}
{/* Footer */}
<Footer />
<Footer onOpenTypeformLink={handleOpenTypeformLink} />
</main>
)
}
+12 -6
View File
@@ -1,8 +1,8 @@
import type { Metadata, Viewport } from 'next'
import { createLogger } from '@/lib/logs/console-logger'
import { TelemetryConsentDialog } from '@/app/telemetry-consent-dialog'
import './globals.css'
import { ZoomPrevention } from './zoom-prevention'
import { TelemetryConsentDialog } from '@/app/telemetry-consent-dialog'
const logger = createLogger('RootLayout')
@@ -92,9 +92,9 @@ export const metadata: Metadata = {
siteName: 'Sim Studio',
images: [
{
url: '/sim.png',
url: '/social/facebook.png',
width: 1200,
height: 630,
height: 600,
alt: 'Sim Studio',
},
],
@@ -104,7 +104,7 @@ export const metadata: Metadata = {
title: 'Sim Studio',
description:
'Build agents in seconds with a drag and drop workflow builder. Streamline your automation processes, boost productivity, and create custom workflows.',
images: ['/sim.png'],
images: ['/social/twitter.png'],
creator: '@simplicity',
site: '@simstudio',
},
@@ -142,10 +142,16 @@ export default function RootLayout({ children }: { children: React.ReactNode })
<head>
{/* Additional meta tags for sharing */}
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:height" content="600" />
<meta name="twitter:image:width" content="1200" />
<meta name="twitter:image:height" content="675" />
<meta name="twitter:image:alt" content="Sim Studio" />
<meta property="og:image:alt" content="Sim Studio" />
<link rel="image_src" href="/sim.png" />
<link rel="image_src" href="/social/facebook.png" />
{/* Instagram image meta */}
<meta property="og:image" content="/social/instagram.png" />
<meta property="og:image:width" content="1080" />
<meta property="og:image:height" content="1080" />
</head>
<body suppressHydrationWarning>
<ZoomPrevention />
+1 -1
View File
@@ -73,7 +73,7 @@
"lenis": "^1.2.3",
"lucide-react": "^0.469.0",
"mammoth": "^1.9.0",
"next": "^15.2.4",
"next": "^15.3.1",
"next-themes": "^0.4.6",
"openai": "^4.91.1",
"pdf-parse": "^1.1.1",
+1 -1
View File
@@ -88,7 +88,7 @@
"lenis": "^1.2.3",
"lucide-react": "^0.469.0",
"mammoth": "^1.9.0",
"next": "^15.2.4",
"next": "^15.3.1",
"next-themes": "^0.4.6",
"openai": "^4.91.1",
"pdf-parse": "^1.1.1",
+7
View File
@@ -0,0 +1,7 @@
<svg width="119" height="67" viewBox="0 0 119 67" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="119" height="67" rx="6" fill="#701FFC"/>
<path d="M40.8 27.4023H25.2C22.3281 27.4023 20 29.7305 20 32.6023V40.4023C20 43.2742 22.3281 45.6023 25.2 45.6023H40.8C43.6719 45.6023 46 43.2742 46 40.4023V32.6023C46 29.7305 43.6719 27.4023 40.8 27.4023Z" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M32.9994 22.2C34.4354 22.2 35.5994 21.0359 35.5994 19.6C35.5994 18.1641 34.4354 17 32.9994 17C31.5635 17 30.3994 18.1641 30.3994 19.6C30.3994 21.0359 31.5635 22.2 32.9994 22.2Z" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M33.0004 22.9062V26.5M29.1006 37.7953V35.1953M36.9006 35.1953V37.7953" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M71.4034 31.6314L68.5163 32.1428C68.3956 31.7734 68.2038 31.4219 67.9411 31.0881C67.6854 30.7543 67.3374 30.4808 66.897 30.2678C66.4567 30.0547 65.9063 29.9482 65.2457 29.9482C64.3438 29.9482 63.5909 30.1506 62.9872 30.5554C62.3835 30.9531 62.0817 31.468 62.0817 32.1001C62.0817 32.647 62.2841 33.0874 62.6889 33.4212C63.0938 33.755 63.7472 34.0284 64.6491 34.2415L67.2486 34.8381C68.7543 35.1861 69.8764 35.7223 70.6151 36.4467C71.3537 37.1712 71.723 38.1122 71.723 39.2699C71.723 40.25 71.4389 41.1236 70.8707 41.8906C70.3097 42.6506 69.5249 43.2472 68.5163 43.6804C67.5149 44.1136 66.3537 44.3303 65.0327 44.3303C63.2003 44.3303 61.7053 43.9396 60.5476 43.1584C59.3899 42.37 58.6797 41.2514 58.4169 39.8026L61.4957 39.3338C61.6875 40.1364 62.0817 40.7436 62.6783 41.1555C63.2749 41.5604 64.0526 41.7628 65.0114 41.7628C66.0554 41.7628 66.8899 41.5462 67.5149 41.1129C68.1399 40.6726 68.4524 40.1364 68.4524 39.5043C68.4524 38.9929 68.2607 38.5632 67.8771 38.2152C67.5007 37.8672 66.9219 37.6044 66.1406 37.4268L63.3707 36.8196C61.8438 36.4716 60.7145 35.9176 59.983 35.1577C59.2585 34.3977 58.8963 33.4354 58.8963 32.2706C58.8963 31.3047 59.1662 30.4595 59.706 29.7351C60.2457 29.0107 60.9915 28.446 61.9432 28.0412C62.8949 27.6293 63.9851 27.4233 65.2138 27.4233C66.9822 27.4233 68.3743 27.8068 69.3899 28.5739C70.4055 29.3338 71.0767 30.353 71.4034 31.6314ZM75.2253 44V27.6364H78.4107V44H75.2253ZM76.834 25.1115C76.28 25.1115 75.8042 24.9268 75.4064 24.5575C75.0158 24.1811 74.8205 23.7337 74.8205 23.2152C74.8205 22.6896 75.0158 22.2422 75.4064 21.8729C75.8042 21.4964 76.28 21.3082 76.834 21.3082C77.388 21.3082 77.8603 21.4964 78.2509 21.8729C78.6486 22.2422 78.8475 22.6896 78.8475 23.2152C78.8475 23.7337 78.6486 24.1811 78.2509 24.5575C77.8603 24.9268 77.388 25.1115 76.834 25.1115ZM82.696 44V27.6364H85.7536V30.2997H85.956C86.2969 29.3977 86.8544 28.6946 87.6286 28.1903C88.4027 27.679 89.3295 27.4233 90.4091 27.4233C91.5028 27.4233 92.419 27.679 93.1577 28.1903C93.9034 28.7017 94.4538 29.4048 94.8089 30.2997H94.9794C95.37 29.4261 95.9915 28.7301 96.8438 28.2116C97.696 27.6861 98.7116 27.4233 99.8906 27.4233C101.375 27.4233 102.586 27.8885 103.523 28.8189C104.468 29.7493 104.94 31.152 104.94 33.027V44H101.755V33.3253C101.755 32.2173 101.453 31.4148 100.849 30.9176C100.246 30.4205 99.5249 30.1719 98.6868 30.1719C97.6499 30.1719 96.8438 30.4915 96.2685 31.1307C95.6932 31.7628 95.4055 32.576 95.4055 33.5703V44H92.2308V33.1229C92.2308 32.2351 91.9538 31.5213 91.3999 30.9815C90.8459 30.4418 90.125 30.1719 89.2372 30.1719C88.6335 30.1719 88.076 30.3317 87.5646 30.6513C87.0604 30.9638 86.652 31.4006 86.3395 31.9616C86.0341 32.5227 85.8814 33.1726 85.8814 33.9112V44H82.696Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

+8
View File
@@ -0,0 +1,8 @@
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="50" height="50" rx="6" fill="#701FFC"/>
<path d="M34.1455 20.073H16.0364C12.7026 20.073 10 22.7756 10 26.1094V35.1639C10 38.4977 12.7026 41.2003 16.0364 41.2003H34.1455C37.4792 41.2003 40.1818 38.4977 40.1818 35.1639V26.1094C40.1818 22.7756 37.4792 20.073 34.1455 20.073Z" fill="#701FFC" stroke="white" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M25.0924 14.0364C26.7593 14.0364 28.1106 12.6851 28.1106 11.0182C28.1106 9.35129 26.7593 8 25.0924 8C23.4255 8 22.0742 9.35129 22.0742 11.0182C22.0742 12.6851 23.4255 14.0364 25.0924 14.0364Z" fill="#701FFC" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M25.0915 14.856V19.0277V14.856ZM20.5645 32.1398V29.1216V32.1398ZM29.619 29.1216V32.1398V29.1216Z" fill="#701FFC"/>
<path d="M25.0915 14.856V19.0277M20.5645 32.1398V29.1216M29.619 29.1216V32.1398" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="25" cy="11" r="2" fill="#701FFC"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB