diff --git a/apps/www/components/SurveyResults/SurveyWordCloud.tsx b/apps/www/components/SurveyResults/SurveyWordCloud.tsx index c3744132535..faf0f63e89f 100644 --- a/apps/www/components/SurveyResults/SurveyWordCloud.tsx +++ b/apps/www/components/SurveyResults/SurveyWordCloud.tsx @@ -175,8 +175,8 @@ export function SurveyWordCloud({ )} - - {scramblingTexts[index].toUpperCase() || text.toUpperCase()} + + {scramblingTexts[index] || text} ))} diff --git a/apps/www/data/surveys/state-of-startups-2025.tsx b/apps/www/data/surveys/state-of-startups-2025.tsx index 7dbefd22a6f..f3e1d769c52 100644 --- a/apps/www/data/surveys/state-of-startups-2025.tsx +++ b/apps/www/data/surveys/state-of-startups-2025.tsx @@ -427,6 +427,261 @@ const stateOfStartupsData = { ], }, ], + participantsList: [ + { + company: 'Wasp', + url: 'https://wasp.sh/', + }, + { + company: 'Greptile', + url: 'https://www.greptile.com/', + }, + { + company: 'Zaymo', + url: 'https://zaymo.com', + }, + { + company: 'Jazzberry', + url: 'https://jazzberry.ai', + }, + { + company: 'Shor', + url: 'https://tryshor.com', + }, + + { + company: 'Mono', + url: 'https://www.mono.la', + }, + { + company: 'Affl.ai', + url: 'https://www.affil.ai', + }, + { + company: 'Docsum', + url: 'https://www.docsum.ai/', + }, + { + company: 'Hazel', + url: 'https://hazelai.com/', + }, + { + company: 'Rivet', + url: 'https://rivet.gg/', + }, + { + company: 'Trieve', + url: 'https://trieve.ai/', + }, + { + company: 'Artificial Societies', + url: 'https://societies.io/', + }, + { + company: 'Gauge', + url: 'https://withgauge.com/', + }, + { + company: 'Stardex', + url: 'https://www.stardex.com/', + }, + { + company: 'TrueClaim', + url: 'https://www.trytrueclaim.com/', + }, + { + company: 'Autosana', + url: 'https://autosana.ai/', + }, + { + company: 'Vespper', + url: 'https://vespper.com/', + }, + { + company: 'Curo', + url: 'https://www.curocharging.com/', + }, + { + company: 'Kombo', + url: 'https://kombo.dev/', + }, + { + company: 'Candle', + url: 'https://www.trycandle.app/', + }, + { + company: 'Trainloop', + url: 'http://trainloop.ai/', + }, + { + company: 'Replit', + url: 'https://replit.com/', + }, + { + company: 'Roe AI', + url: 'https://getroe.ai/', + }, + { + company: 'Kestral', + url: 'https://kestral.team/', + }, + { + company: 'Revyl', + url: 'https://www.revyl.ai/', + }, + { + company: 'Arva AI', + url: 'https://www.arva.ai/', + }, + { + company: 'Posthog', + url: 'https://www.posthog.com', + }, + { + company: 'Rootly', + url: 'https://rootly.com/', + }, + { + company: 'Throxy', + url: 'https://throxy.com/', + }, + { + company: 'Zapi', + url: 'https://heyzapi.com/', + }, + { + company: 'Leaping AI', + url: 'https://www.leapingai.com/', + }, + { + company: 'WarpBuild', + url: 'https://www.warpbuild.com/', + }, + { + company: 'Domu', + url: 'https://www.domu.ai/', + }, + { + company: 'Bilanc', + url: 'https://www.bilanc.co/', + }, + { + company: 'Miru', + url: 'https://www.miruml.com/', + }, + { + company: 'Repaint', + url: 'https://repaint.com/', + }, + { + company: 'Cubic', + url: 'https://cubic.dev/', + }, + { + company: 'CTGT', + url: 'https://www.ctgt.ai/', + }, + { + company: 'Integrated Reasoning', + url: 'https://integrated-reasoning.com/', + }, + { + company: 'Datafruit', + url: 'https://datafruit.dev/', + }, + { + company: 'mcp-use', + url: 'https://mcp-use.com/', + }, + { + company: 'Weave', + url: 'http://getweave.com/', + }, + { + company: 'Palmier', + url: 'https://www.palmier.io/', + }, + { + company: 'Rainmaker', + url: 'http://www.rainmaker.nyc/', + }, + { + company: 'Wasmer', + url: 'https://wasmer.io/', + }, + { + company: 'Artie', + url: 'https://www.artie.com/', + }, + { + company: 'Lumari', + url: 'https://www.lumari.io/', + }, + { + company: 'Hitpay', + url: 'https://www.hitpayapp.com/', + }, + { + company: 'Tempo', + url: 'https://www.tempo.new/', + }, + { + company: 'SalesPatriot', + url: 'https://www.salespatriot.com/', + }, + { + company: 'Surge', + url: 'https://surge.app/', + }, + { + company: 'Linum', + url: 'https://www.linum.ai/', + }, + { + company: 'Rebill', + url: 'https://www.rebill.com/', + }, + { + company: 'Careswift', + url: 'https://www.careswift.com/', + }, + { + company: 'Autumn', + url: 'https://useautumn.com/', + }, + { + company: 'Rollstack', + url: 'https://www.rollstack.com/', + }, + { + company: 'OpenNote', + url: 'https://opennote.com/', + }, + { + company: 'Coverage Cat', + url: 'https://www.coveragecat.com/', + }, + { + company: 'Flair Labs', + url: 'https://www.flairlabs.ai/', + }, + { + company: 'Percival', + url: 'https://www.percivaltech.com/', + }, + { + company: 'Morphik', + url: 'https://morphik.ai/', + }, + { + company: 'DrDroid', + url: 'https://drdroid.io/', + }, + { + company: 'Nautilus', + url: 'https://nautilus.co/', + }, + ], } export default stateOfStartupsData diff --git a/apps/www/pages/state-of-startups.tsx b/apps/www/pages/state-of-startups.tsx index 23ea51d3f12..d3f33fbc66e 100644 --- a/apps/www/pages/state-of-startups.tsx +++ b/apps/www/pages/state-of-startups.tsx @@ -1,5 +1,6 @@ import { useEffect, useRef, useState, forwardRef } from 'react' import { useRouter } from 'next/router' + import Link from 'next/link' import { NextSeo } from 'next-seo' @@ -165,6 +166,7 @@ function StateOfStartupsPage() { > setIsTocOpen(false)} className={cn( 'block px-6 py-2 text-xs transition-colors font-mono uppercase tracking-wider text-center text-foreground-light hover:text-brand-link hover:bg-brand-300/25', @@ -293,6 +295,7 @@ function StateOfStartupsPage() { ))} + ) @@ -300,12 +303,62 @@ function StateOfStartupsPage() { export default StateOfStartupsPage +// Component for the participants list +const ParticipantsList = () => { + const [shuffledParticipants, setShuffledParticipants] = useState(pageData.participantsList) + const [isShuffled, setIsShuffled] = useState(false) + + useEffect(() => { + // Shuffle the participants list after component mounts (client-side only) + const shuffled = [...pageData.participantsList] + // Fisher-Yates shuffle algorithm + for (let i = shuffled.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)) + ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]] + } + setShuffledParticipants(shuffled) + setIsShuffled(true) + }, []) + + return ( +
+
+

Thank you

+

+ A special thanks to the following companies for participating in this year’s survey. +

+
+
    + {shuffledParticipants.map((participant, index) => ( +
  • + + {participant.company} + +
  • + ))} +
+
+ ) +} + // Component for the 'Builders choose Supabase' CTA at the bottom of the page const CTABanner = forwardRef((props, ref) => { const sendTelemetryEvent = useSendTelemetryEvent() return (