diff --git a/apps/formbricks-com/components/home/GitHubSponsorship.tsx b/apps/formbricks-com/components/home/GitHubSponsorship.tsx index eb914d323e..5185bc06a2 100644 --- a/apps/formbricks-com/components/home/GitHubSponsorship.tsx +++ b/apps/formbricks-com/components/home/GitHubSponsorship.tsx @@ -1,5 +1,3 @@ -import PHIcon from "@/images/formtribe/ph-logo.png"; -import Image from "next/image"; import Link from "next/link"; export const GitHubSponsorship: React.FC = () => { @@ -38,7 +36,7 @@ export const GitHubSponsorship: React.FC = () => {

- Product Hunt Logo + {/* Product Hunt Logo */}
diff --git a/apps/formbricks-com/components/home/Hero.tsx b/apps/formbricks-com/components/home/Hero.tsx index ff4f371ca8..b6f396c51e 100644 --- a/apps/formbricks-com/components/home/Hero.tsx +++ b/apps/formbricks-com/components/home/Hero.tsx @@ -27,11 +27,11 @@ export const Hero: React.FC = ({}) => {

- The Open Source Survey Suite + Prviacy-first Experience Management

- Run link surveys, in-app surveys and email surveys in one app —{" "} + Turn customer insights into irresistible experiences —{" "} all privacy-first.

@@ -92,7 +92,7 @@ export const Hero: React.FC = ({}) => { router.push("https://app.formbricks.com/auth/signup"); plausible("Hero_CTA_CreateSurvey"); }}> - Create survey + Get started - -
- -
- - - -
-
- -
- -
-
-
- - - - ); -}; - -export default CommunityPage; diff --git a/apps/formbricks-com/pages/community/ContributorGrid.tsx b/apps/formbricks-com/pages/community/ContributorGrid.tsx new file mode 100644 index 0000000000..0596cd1362 --- /dev/null +++ b/apps/formbricks-com/pages/community/ContributorGrid.tsx @@ -0,0 +1,44 @@ +import Image from "next/image"; +import Link from "next/link"; +import { FaGithub } from "react-icons/fa6"; + +type Contributor = { + githubId: string; + imgUrl: string; + name: string; +}; + +type GridComponentProps = { + contributors: Contributor[]; +}; + +const ContributorGrid: React.FC = ({ contributors }) => { + return ( +
+ {contributors?.map((contributor, index) => ( +
+ +
+ +

+ {contributor.githubId} +

+
+ {contributor.name} + +
+ ))} +
+ ); +}; + +export default ContributorGrid; diff --git a/apps/formbricks-com/pages/community/HallOfFame.tsx b/apps/formbricks-com/pages/community/HallOfFame.tsx new file mode 100644 index 0000000000..d8a21770f1 --- /dev/null +++ b/apps/formbricks-com/pages/community/HallOfFame.tsx @@ -0,0 +1,93 @@ +import DeputyBadge from "@/images/formtribe/deputy-batch.png"; +import LegendBadge from "@/images/formtribe/legend-batch.png"; +import PrimeBadge from "@/images/formtribe/prime-batch.png"; +import RookieBadge from "@/images/formtribe/rookie-batch.png"; +import Image from "next/image"; +import Link from "next/link"; + +interface Member { + name: string; + githubId: string; + level: string; + imgUrl: string; +} + +interface RoadmapProps { + members: Member[]; +} + +interface BadgeSectionProps { + badgeImage: any; + level: string; + members: Member[]; + className: string; // New property for styling +} + +const BadgeSection: React.FC = ({ badgeImage, level, members, className }) => { + const filteredMembers = members?.filter((member) => member.level === level); + + return ( +
+ {`${level} +
+ {filteredMembers?.length > 0 ? ( + filteredMembers?.map((member) => ( + + {member.githubId} + {member.name} + + )) + ) : ( +
No Legends around yet 👀
+ )} +
+
+ ); +}; + +export const HallOfFame: React.FC = ({ members }) => { + return ( +
+ + + + +
+ ); +}; + +export default HallOfFame; diff --git a/apps/formbricks-com/pages/formtribe/HeaderTribe.tsx b/apps/formbricks-com/pages/community/HeaderTribe.tsx similarity index 69% rename from apps/formbricks-com/pages/formtribe/HeaderTribe.tsx rename to apps/formbricks-com/pages/community/HeaderTribe.tsx index 614fd9f8cc..445743c3a0 100644 --- a/apps/formbricks-com/pages/formtribe/HeaderTribe.tsx +++ b/apps/formbricks-com/pages/community/HeaderTribe.tsx @@ -1,15 +1,15 @@ -import Logo from "@/images/formtribe/formtribe-logo.png"; -import { Popover, PopoverContent, PopoverTrigger } from "@formbricks/ui/Popover"; +import footerLogoDark from "@/images/logo/footerlogo-dark.svg"; import { Button } from "@formbricks/ui/Button"; +import { Popover, PopoverContent, PopoverTrigger } from "@formbricks/ui/Popover"; import { Bars3Icon } from "@heroicons/react/24/solid"; import Image from "next/image"; import Link from "next/link"; import { useState } from "react"; const navigation = [ - { name: "How it works", href: "#how" }, - { name: "Prizes", href: "#prizes" }, - { name: "Leaderboard", href: "#leaderboard" }, + { name: "Roadmap", href: "#roadmap" }, + { name: "Levels", href: "#levels" }, + { name: "Hall of Fame", href: "#hof" }, { name: "FAQ", href: "#faq" }, ]; @@ -17,33 +17,30 @@ export default function HeaderLight() { const [mobileNavMenuOpen, setMobileNavMenuOpen] = useState(false); return ( -
+
FormTribe - Formtribe Logo + Formbricks Logo + className="ml-6 mt-1 text-sm text-slate-300 hover:scale-105"> Star us ⭐
{/* Desktop Menu */} -
+
{navigation.map((navItem) => ( {navItem.name} ))} -
@@ -52,17 +49,17 @@ export default function HeaderLight() { setMobileNavMenuOpen(!mobileNavMenuOpen)}> - + - +
{navigation.map((navItem) => (
setMobileNavMenuOpen(false)} className="flex items-center space-x-2 rounded-md p-2"> - {navItem.name} + {navItem.name}
))} diff --git a/apps/formbricks-com/pages/formtribe/LayoutTribe.tsx b/apps/formbricks-com/pages/community/LayoutTribe.tsx similarity index 69% rename from apps/formbricks-com/pages/formtribe/LayoutTribe.tsx rename to apps/formbricks-com/pages/community/LayoutTribe.tsx index e98252b343..2f892ff6d3 100644 --- a/apps/formbricks-com/pages/formtribe/LayoutTribe.tsx +++ b/apps/formbricks-com/pages/community/LayoutTribe.tsx @@ -10,14 +10,10 @@ interface LayoutProps { export default function Layout({ title, description, children }: LayoutProps) { return ( -
+
- { -
- {children} -
- } +
{children}
); diff --git a/apps/formbricks-com/pages/community/LevelCard.tsx b/apps/formbricks-com/pages/community/LevelCard.tsx new file mode 100644 index 0000000000..ea2c82075a --- /dev/null +++ b/apps/formbricks-com/pages/community/LevelCard.tsx @@ -0,0 +1,41 @@ +import Image from "next/image"; +import React from "react"; + +import { StaticImageData } from "next/image"; + +type Task = { + title: string; + description: string; +}; + +type LevelCardProps = { + badgeSrc: StaticImageData; // or string if it's a URL + badgeAlt: string; + title: string; + points: string; + tasks: Task[]; +}; + +const LevelCard: React.FC = ({ badgeSrc, badgeAlt, title, points, tasks }) => ( +
+
+ {badgeAlt} +

{title}

+

{points}

+
+
+ {tasks?.map((task, index) => ( + +

{task.title}

+

{task.description}

+
+ ))} +
+
+); + +export default LevelCard; diff --git a/apps/formbricks-com/pages/community/LevelGrid.tsx b/apps/formbricks-com/pages/community/LevelGrid.tsx new file mode 100644 index 0000000000..2a3834d7c7 --- /dev/null +++ b/apps/formbricks-com/pages/community/LevelGrid.tsx @@ -0,0 +1,45 @@ +import Image from "next/image"; +import Link from "next/link"; +import { FaGithub } from "react-icons/fa6"; + +type Contributor = { + githubId: string; + imgUrl: string; + name: string; +}; + +type LevelGridProps = { + contributors: Contributor[]; +}; + +const LevelGrid: React.FC = ({ contributors }) => { + return ( +
+ {contributors?.map((contributor, index) => ( +
+ +
+ +

+ {contributor.githubId} +

+
+ {contributor.name} + +
+ ))} +
+ ); +}; + +export default LevelGrid; diff --git a/apps/formbricks-com/pages/community/Roadmap.tsx b/apps/formbricks-com/pages/community/Roadmap.tsx new file mode 100644 index 0000000000..90adb02629 --- /dev/null +++ b/apps/formbricks-com/pages/community/Roadmap.tsx @@ -0,0 +1,67 @@ +import { Button } from "@formbricks/ui/Button"; +import { ChevronDownIcon } from "@heroicons/react/24/outline"; +import Link from "next/link"; +import { FaGithub } from "react-icons/fa6"; + +interface Event { + name: string; + link?: string; +} + +interface EventBlock { + id: string; + description: string; + period: string; + events: Event[]; +} + +interface RoadmapProps { + data: EventBlock[]; +} + +export const Roadmap: React.FC = ({ data }) => { + return ( +
+ {data?.map((eventblock) => ( +
+

+ {eventblock.description} • {eventblock.period} +

+

+ {eventblock.description}

{eventblock.period} +

+ {eventblock?.events?.map((event) => ( +
+ {event.link ? ( + + {event.name} + + + ) : ( +
+ {event.name} +
+ )} +
+ ))} + {eventblock.id === "phlaunch" && ( + + )} + +
+ ))} +

Internet Domination 😇

+
+ ); +}; + +export default Roadmap; diff --git a/apps/formbricks-com/pages/community/index.tsx b/apps/formbricks-com/pages/community/index.tsx new file mode 100644 index 0000000000..714e685492 --- /dev/null +++ b/apps/formbricks-com/pages/community/index.tsx @@ -0,0 +1,723 @@ +import ArrowGift from "@/images/formtribe/arrow-gift.png"; +import HoodieSticker from "@/images/formtribe/arrow-hoodie.png"; +import ArrowSticker from "@/images/formtribe/arrow-stickers.png"; +import DeputyBadge from "@/images/formtribe/deputy-batch.png"; +import LegendBadge from "@/images/formtribe/legend-batch.png"; +import PrimeBadge from "@/images/formtribe/prime-batch.png"; +import RookieBadge from "@/images/formtribe/rookie-batch.png"; +import HallOfFame from "@/pages/community/HallOfFame"; +import Roadmap from "@/pages/community/Roadmap"; +import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui/Tooltip"; +import Image from "next/image"; +import Link from "next/link"; +import { useEffect } from "react"; +import ContributorGrid from "./ContributorGrid"; +import LayoutTribe from "./LayoutTribe"; +import LevelCard from "./LevelCard"; +import LevelsGrid from "./LevelGrid"; + +/* const SideQuests = [ + { + points: "Spread the Word Tweet (100 Points)", + quest: "Tweet “🧱🚀” on the day of the ProductHunt launch to spread the word.", + proof: "Share the link to the tweet in the “side-quest” channel.", + }, + { + points: "Meme Magic (50 Points + up to 100 Points)", + quest: + "Craft a meme where a brick plays a role. For extra points, tweet it, tag us and score +5 for each like.", + proof: "Share meme or link to the tweet in the “side-quest” channel.", + }, + { + points: "GIF Magic (100 Points)", + quest: + "Create a branded gif related to Formbricks. Upload it to Giphy. For extra points, tweet it, tag us and score +5 for each like.", + proof: "Share link to Giphy in the “side-quest” channel.", + }, + { + points: "Design a background (250 Points)", + quest: "Illustrate a captivating background for survey enthusiasts (more infos on Notion).", + proof: "Share the design in the “side-quest” channel.", + }, + { + points: "Starry-eyed Supporter (250 Points)", + quest: "Get five friends to star our repository.", + proof: "Share 5 screenshots of the chats where you asked them and they confirmed + their GitHub names", + }, + { + points: "Bug Hunter (100 Points)", + quest: + "Find and report any bugs in our core product. We will close all bugs on the landing page bc we don't have time for that before the launch :)", + proof: "Open a bug issue in our repository.", + }, + { + points: "Brickify someone famous with AI (200 Points + up to 100 Points)", + quest: + "Find someone whose name would be funny as a play on words with “brick”. Then, with the help of AI, create a brick version of this person like Brick Astley, Brickj Minaj, etc. For extra points, tweet it, tag us and score +5 for each like.", + proof: "Share your art or link to the tweet in the “side-quest” channel.", + }, + { + points: "Community Connector (50 points each, up to 250 points)", + quest: + "Introduce and onboard new members to the community. Have them join Discord and reply to their automated welcome message with your discord handle (in “say-hi” channel).", + proof: "New member joined and commented with your Discord handle", + }, + { + points: "Feedback Fanatic (50 Points)", + quest: "Fill out our feedback survey after the hackathon with suggestions for improvement.", + proof: "Submit the survey.", + }, + { + points: "Side Quest Babo (500 Points)", + quest: "Complete all side quests.", + proof: "All quests marked as completed.", + }, +]; */ + +const LevelsData = [ + { + badgeSrc: RookieBadge, + badgeAlt: "Rookie Badge", + title: "Repository Rookie", + points: "Level 1", + tasks: [ + { title: "Easy issues", description: "Warm up with the repo, get your first PR merged." }, + { title: "DevRel tasks", description: "Write docs and manuals for better understanding." }, + ], + }, + { + badgeSrc: DeputyBadge, + badgeAlt: "Deputy Badge", + title: "Deploy Deputy", + points: "Level 2", + tasks: [ + { title: "Core Contributions", description: "Work on more complex issues. Get guidance." }, + { title: "Work with core team", description: "Work closely with the core team, learn faster." }, + ], + }, + { + badgeSrc: PrimeBadge, + badgeAlt: "Prime Badge", + title: "Pushmaster Prime", + points: "Level 3", + tasks: [ + { title: "Cash Bounties", description: "Get access to issues with $$$ bounties." }, + { title: "Job Listings", description: "We hire top contributors. Hear about new jobs first!" }, + ], + }, + { + badgeSrc: LegendBadge, + badgeAlt: "Legend Badge", + title: "Formbricks Legend", + points: "Special Honor", + tasks: [{ title: "Unconditional Love", description: "Finally. From the community and core team 🤍" }], + }, +]; + +const TheDeal = [ + { + os: "100% free", + free: "Unlimited Surveys", + pro: "Custom URL", + }, + { + os: "All community features included", + free: "Unlimited Link Survey Submissions", + pro: "Remove Branding", + }, + { + os: "It's your storage, go nuts!", + free: "Upload Limit 10 MB", + pro: "Unlimited Uploads", + }, + { + os: "Hook up your own Stripe", + free: "Payments with 2% Mark Up", + pro: "Remove Mark Up from Payments", + }, + { + os: "Your server, your rules", + free: "Invite Team Members", + pro: "", + }, + { + os: "The 'Do what you want' plan", + free: "Verify Email before Submission", + pro: "", + }, + { + os: "at this point I'm just filling rows", + free: "Partial Submissions", + pro: "", + }, + { + os: "I should stop", + free: "Custom Thank You Page", + pro: "", + }, + + { + os: "ok one more", + free: "Close Survey after Submission Limit", + pro: "", + }, + { + os: "no flavor like free flavor", + free: "Custom Survey Closed Message", + pro: "", + }, + { + os: "...", + free: "Close Survey on Date", + pro: "", + }, + { + free: "Redirect on Completion", + pro: "", + }, + { + free: "+ all upcoming community-built features", + pro: "", + }, +]; + +const FAQ = [ + { + question: "Why do I have to sign a CLA?", + answer: + "To assure this project to be financially viable, we have to be able to relicense the code for enterprise customers and governments. To be able to do so, we are legally obliged to have you sign a CLA.", + }, + { + question: "Where will this be hosted?", + answer: + "We offer a Formbricks Cloud hosted in Germany with a generous free plan but you can also easily self-host using Docker.", + }, + { + question: "Why is there a Commercial plan?", + answer: + "The commercial plan is for features who break the OSS WIN-WIN Loop or incur additional cost. We charge 29$ if you want a custom domain, remove Formbricks branding, collect large files in surveys or collect payments. We think that’s fair :)", + }, + { + question: "Are your in app surveys also free forever?", + answer: + "The in app surveys you can run with Formbricks are not part of this Deal. We offer a generous free plan but keep full control over the pricing in the long run. In app surveys are really powerful for products with thousands of users and something has to bring in the dollars.", + }, + + { + question: "Can anyone join?", + answer: + "Yes! Even when you don’t know how to write code you can become part of the community completing side quests. As long as you know how to open a PR you are very welcome to take part irrespective of your age, gender, nationality, food preferences, taste in clothing and favorite Pokemon.", + }, + { + question: "How do I level up?", + answer: + "Every PR gives you points - doesn’t matter if it’s for code related tasks or non-code ones. With every point, you move closer to levelling up!", + }, +]; + +const roadmapDates = [ + { + id: "earlywork", + description: "Previously at Formbricks", + period: "February until September 2023", + events: [{ name: "Formbricks team building out surveying infrastructure" }], + }, + { + id: "hackathon", + description: "Hackathon Kick-Off 🔥", + period: "1st October 2023", + events: [ + { name: "✅ Email Embeds", link: "https://github.com/formbricks/formbricks/pull/873" }, + { name: "✅ Hidden Fields", link: "https://github.com/formbricks/formbricks/pull/1144" }, + { + name: "✅ Question Type: Picture Choice", + link: "https://github.com/formbricks/formbricks/pull/1388", + }, + { name: "✅ Question Type: Welcome Card", link: "https://github.com/formbricks/formbricks/pull/1073" }, + { name: "✅ Add Image to Question", link: "https://github.com/formbricks/formbricks/pull/1305" }, + { name: "✅ Dynamic Link Previews", link: "https://github.com/formbricks/formbricks/pull/1093" }, + { name: "✅ Fullscreen Previews", link: "https://github.com/formbricks/formbricks/pull/898" }, + { name: "✅ PIN protected surveys", link: "https://github.com/formbricks/formbricks/pull/1142" }, + { name: "✅ Source Tracking", link: "https://github.com/formbricks/formbricks/pull/1486" }, + { name: "✅ Time To Complete Indicator", link: "https://github.com/formbricks/formbricks/pull/1461" }, + ], + }, + { + id: "phlaunch", + description: "Product Hunt Launch 🚀", + period: "31st October 2023", + events: [ + { name: "✅ Question Type: File Upload", link: "https://github.com/formbricks/formbricks/pull/1277" }, + { name: "✅ Notion Integration", link: "https://github.com/formbricks/formbricks/pull/1197" }, + { name: "✅ Media Backgrounds", link: "https://github.com/formbricks/formbricks/pull/1515" }, + { name: "🚧 Custom Styling", link: "https://github.com/formbricks/formbricks/pull/916" }, + { name: "🚧 Recall Information", link: "https://github.com/formbricks/formbricks/issues/884" }, + { name: "⏳ Unsplash Backgrounds" }, + { name: "⏳ Question Type: Matrix" }, + { name: "⏳ Question Type: Collect payment" }, + { name: "⏳Question Type: Schedule a call (Powered by Cal.com)" }, + { name: "⏳ Question Type: Signature (Powered by Documenso)" }, + ], + }, +]; + +const members = [ + { + name: "Shubham Palriwala", + githubId: "ShubhamPalriwala", + points: "100", + level: "prime", + imgUrl: "https://avatars.githubusercontent.com/u/55556994?v=4", + }, + { + name: "Rotimi Best", + githubId: "rotimi-best", + points: "100", + level: "prime", + imgUrl: "https://avatars.githubusercontent.com/u/31730715?v=4", + }, + { + name: "Dhruwang Jariwala", + githubId: "Dhruwang", + points: "100", + level: "prime", + imgUrl: "https://avatars.githubusercontent.com/u/67850763?v=4", + }, + { + name: "Piyush Gupta", + githubId: "gupta-piyush19", + points: "100", + level: "prime", + imgUrl: "https://avatars.githubusercontent.com/u/56182734?v=4", + }, + { + name: "Naitik Kapadia", + githubId: "KapadiaNaitik", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/88614335?v=4", + }, + { + name: "Anshuman Pandey", + githubId: "pandeymangg", + points: "100", + level: "prime", + imgUrl: "https://avatars.githubusercontent.com/u/54475686?v=4", + }, + { + name: "Midka", + githubId: "kymppi", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/48528700?v=4", + }, + { + name: "Meet Patel", + githubId: "Meetcpatel", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/26919832?v=4", + }, + { + name: "Ankur Datta", + githubId: "Ankur-Datta-4", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/75306530?v=4", + }, + { + name: "Abhinav Arya", + githubId: "itzabhinavarya", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/95561280?v=4", + }, + { + name: "Anjy Gupta", + githubId: "anjy7", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/92802904?v=4", + }, + { + name: "Aditya Deshlahre", + githubId: "adityadeshlahre", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/132184385?v=4", + }, + { + name: "Ashutosh Bhadauriya", + githubId: "Ashutosh-Bhadauriya", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/62984427?v=4", + }, + { + name: "Bilal Mirza", + githubId: "bilalmirza74", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/84387676?v=4", + }, + { + name: "Timothy", + githubId: "timothyde", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/13225886?v=4", + }, + { + name: "Jonas Höbenreich", + githubId: "jonas-hoebenreich", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/64426524?v=4", + }, + { + name: "Pratik Awaik", + githubId: "PratikAwaik", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/54103265?v=4", + }, + { + name: "Rohan Gupta", + githubId: "rohan9896", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/56235204?v=4", + }, + { + name: "Shubham Khunt", + githubId: "shubhamkhunt04", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/55044317?v=4", + }, + { + name: "Joe", + githubId: "joe-shajan", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/69904519?v=4", + }, + { + name: "Ty Kerr", + githubId: "ty-kerr", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/17407010?v=4", + }, + { + name: "Olasunkanmi Balogun", + githubId: "SiR-PENt", + points: "100", + level: "rookie", + imgUrl: "https://avatars.githubusercontent.com/u/80556643?v=4", + }, + { + name: "Ronit Panda", + githubId: "rtpa25", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/72537293?v=4", + }, + { + name: "Nafees Nazik", + githubId: "G3root", + points: "100", + level: "deputy", + imgUrl: "https://avatars.githubusercontent.com/u/84864519?v=4", + }, +]; + +export default function FormTribeHackathon() { + // dark mode fix + useEffect(() => { + document.documentElement.classList.remove("dark"); + }, []); + return ( + + {/* Header */} + +
+
+

+ + Beautiful Open Source Surveys.

Built as a community, free + forever. +
+

+ +

+ The time is ripe, this is needed. So we ship it as a community - and give it back to the world! +

Join us and build surveying infrastructure for millions - free and open source. +

+
+ +
+ + {/* Roadmap */} +
+
+

+ + First Things First:

An Open Source Typeform Alternative +
+

+

+ It's been requested many times over, so Typeform-like surveys is where we start. +

In October, we kicked it off in style with a 30-day hackathon. +

+
+ +
+ + {/* Levels */} +
+ +
+

+ Write Code, Level Up and Unlock Benefits +

+

+ The more you contribute, the more points you collect. +

Unlock benefits like cash bounties, limited merch and more! +

+
+
+ {LevelsData.map((badge, index) => ( + + ))} +
+
+
+

+ Sticker Set

+ rookie batch +
+
+

+ Hoodie

+ rookie batch +
+
+

+ Handmade Gift

+ rookie batch +
+
+
+ + {/* Become a Legend */} +
+
+

+ + Become a

Formbricks Legend +
+

+

+ This is your wall of fame. We’re honoured to be in this together! +

+
+ +
+ + {/* Our values */} +
+
+

+ Our values +

+

+ Apart from being decent human beings, this is what we value: +

+
+
+ + + +
+
+ + {/* Side Quests +
+

🏰 Side Quests: Increase your chances

+

+ While code contributions are what gives the most points, everyone gets to bump up their chance of + winning. Here is a list of side quests you can complete: +

+
+ + {SideQuests.map((quest) => ( +
+ + +
+
+

+ {quest.points}: {quest.quest} +

+
+
+ +

+

Proof: {quest.proof}

+

+
+
+
+ ))} +
+
+ +
*/} + + {/* The Promise */} +
+
+

+ The Deal +

+

+ We're kinda making a handshake agreement here. This is it: +

+
+
+
+
+
Self-hosted
+
Formbricks Cloud
+ + + +
+ Formbricks Cloud Pro{" "} + + Why tho? + +
+
+ + You can always self-host to get all features free. + +
+
+
+ + {TheDeal.map((feature) => ( +
+
{feature.os}
+
{feature.free}
+
{feature.pro}
+
+ ))} +
+
+
+
+ 🤓 +
+
+
+

+ Are Formbricks in-app surveys also free? +

+

+ Just a heads-up: this deal doesn't cover Formbricks' in-app surveys. We've got + a solid free plan, but we've gotta keep some control over pricing to keep things running + long-term. +

+
+
+
+
+ + {/* Get started */} +
+
+

+ Get started +

+

+ We're still setting things up,{" "} + + join our Discord + {" "} + to stay in the loop :) +

+
+ +
+ + {/* FAQ */} +
+
+
+

+ FAQ +

+

+ Anything unclear? +

+
+ + {FAQ.map((question) => ( +
+
+

{question.question}

+

{question.answer}

+
+
+ ))} +
+
+
+ ); +} + +const ValueCard = ({ title, description, emoji }) => { + return ( +
+
+ {emoji} +
+
+

+ {title} +

+

{description}

+
+
+ ); +}; diff --git a/apps/formbricks-com/pages/formtribe/index.tsx b/apps/formbricks-com/pages/formtribe/index.tsx deleted file mode 100644 index 90da830d1e..0000000000 --- a/apps/formbricks-com/pages/formtribe/index.tsx +++ /dev/null @@ -1,1137 +0,0 @@ -import { Button } from "@formbricks/ui/Button"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui/Tooltip"; -import Head from "next/head"; -import Image from "next/image"; -import LayoutTribe from "./LayoutTribe"; - -import Dhru from "@/images/formtribe/dhru.jpeg"; -import Jojo from "@/images/formtribe/jojo.jpeg"; -import Matti from "@/images/formtribe/matti.jpeg"; -import OSSLoop from "@/images/formtribe/oss-loop.png"; -import Mac from "@/images/formtribe/package.jpeg"; -import Pandey from "@/images/formtribe/pandeyman.jpeg"; -import PHLogo from "@/images/formtribe/ph-logo.png"; -import Shubham from "@/images/formtribe/shubham.jpeg"; -import Timeline from "@/images/formtribe/timeline.png"; -import { useEffect } from "react"; - -const HowTo = [ - { - step: "1", - header: "Pick a 'FormTribe 🔥' issue in our repository and comment.", - link: "https://formbricks.com/github", - }, - { - step: "2", - header: "Be the first to comment and get the issue assigned.", - }, - { - step: "3", - header: "You now have 24h to open a draft PR ⏲️", - }, - { - step: "4", - header: "If your PR looks promising, we'll work with you to get it merged.", - }, - { - step: "5", - header: "For every merged PR you collect points ✨", - }, - { - step: "6", - header: "Solve side quests to increase your chances on the MacBook 👀", - link: "#prizes", - }, - { - step: "7", - header: "Join our Discord to ask questions (and submit side quests).", - link: "https://formbricks.com/discord", - }, -]; - -const SideQuests = [ - { - points: "Spread the Word Tweet (100 Points)", - quest: "Tweet “🧱🚀” on the day of the ProductHunt launch to spread the word.", - proof: "Share the link to the tweet in the “side-quest” channel.", - }, - { - points: "Meme Magic (50 Points + up to 100 Points)", - quest: - "Craft a meme where a brick plays a role. For extra points, tweet it, tag us and score +5 for each like.", - proof: "Share meme or link to the tweet in the “side-quest” channel.", - }, - { - points: "GIF Magic (100 Points)", - quest: - "Create a branded gif related to Formbricks. Upload it to Giphy. For extra points, tweet it, tag us and score +5 for each like.", - proof: "Share link to Giphy in the “side-quest” channel.", - }, - { - points: "Design a background (250 Points)", - quest: "Illustrate a captivating background for survey enthusiasts (more infos on Notion).", - proof: "Share the design in the “side-quest” channel.", - }, - { - points: "Starry-eyed Supporter (250 Points)", - quest: "Get five friends to star our repository.", - proof: "Share 5 screenshots of the chats where you asked them and they confirmed + their GitHub names", - }, - { - points: "Bug Hunter (100 Points)", - quest: - "Find and report any bugs in our core product. We will close all bugs on the landing page bc we don't have time for that before the launch :)", - proof: "Open a bug issue in our repository.", - }, - { - points: "Brickify someone famous with AI (200 Points + up to 100 Points)", - quest: - "Find someone whose name would be funny as a play on words with “brick”. Then, with the help of AI, create a brick version of this person like Brick Astley, Brickj Minaj, etc. For extra points, tweet it, tag us and score +5 for each like.", - proof: "Share your art or link to the tweet in the “side-quest” channel.", - }, - { - points: "Community Connector (50 points each, up to 250 points)", - quest: - "Introduce and onboard new members to the community. Have them join Discord and reply to their automated welcome message with your discord handle (in “say-hi” channel).", - proof: "New member joined and commented with your Discord handle", - }, - { - points: "Feedback Fanatic (50 Points)", - quest: "Fill out our feedback survey after the hackathon with suggestions for improvement.", - proof: "Submit the survey.", - }, - { - points: "Side Quest Babo (500 Points)", - quest: "Complete all side quests.", - proof: "All quests marked as completed.", - }, -]; - -const TheDeal = [ - { - os: "100% free", - free: "Unlimited Surveys", - pro: "Custom URL", - }, - { - os: "All features included", - free: "Unlimited Submissions", - pro: "Remove Branding", - }, - { - os: "It's your storage, go nuts!", - free: "Upload Limit 10 MB", - pro: "Unlimited Uploads", - }, - { - os: "Hook up your own Stripe", - free: "Payments with 2% Mark Up", - pro: "Remove Mark Up from Payments", - }, - { - os: "Your server, your rules", - free: "Invite Team Members", - pro: "", - }, - { - os: "The 'Do what you want' plan", - free: "Verify Email before Submission", - pro: "", - }, - { - os: "at this point I'm just filling rows", - free: "Partial Submissions", - pro: "", - }, - { - os: "I should stop", - free: "Custom Thank You Page", - pro: "", - }, - - { - os: "ok one more", - free: "Close Survey after Submission Limit", - pro: "", - }, - { - os: "no flavor like free flavor", - free: "Custom Survey Closed Message", - pro: "", - }, - { - os: "...", - free: "Close Survey on Date", - pro: "", - }, - { - free: "Redirect on Completion", - pro: "", - }, - { - free: "+ all upcoming community-built features", - pro: "", - }, -]; - -const FAQ = [ - { - question: "Is this part of Formbricks or a different tool?", - answer: - "The link survey is part of the Formbricks core product. The code is managed in the Formbricks mono repository.", - }, - { - question: "Why are there only 30ish issues to work on?", - answer: - "We believe in Quality over Quantity. We’re a small team and want to be able to pay enough attention to each of the contributors.", - }, - { - question: "Can everyone win?", - answer: - "There are 64 prizes. Every contributor can only win 1 prize, so there will be 64 winners. Every contributor has a chance to win. The more points you make, the higher your chance to win.", - }, - { - question: "Why do I have to sign a CLA?", - answer: - "To assure this project to be financially viable, we have to be able to relicense the code for enterprise customers and governments. To be able to do so, we are legally obliged to have you sign a CLA.", - }, - { - question: "Where will this be hosted?", - answer: - "We offer a Formbricks Cloud with a generous free plan but you can also easily self-host using Docker.", - }, - { - question: "What is the FormTribe?", - answer: "The FormTribe is what we call our community of contributors.", - }, - { - question: "Why is there a Commercial plan?", - answer: - "The commercial plan is for features who break the OSS WIN-WIN Loop or incur additional cost. We charge 29$ if you want a custom domain, remove Formbricks branding, collect large files in surveys or collect payments. We think that’s fair :)", - }, - { - question: "Are your in app surveys also free forever?", - answer: - "The in app surveys you can run with Formbricks are not part of this Deal. We offer a generous free plan but keep full control over the pricing in the long run. In app surveys are really powerful for products with thousands of users and something has to bring in the dollars.", - }, - { - question: "Do I need to pay duty for the SWAG?", - answer: "No, we cover that.", - }, - { - question: "How long will it take to receive the swag?", - answer: "30-60 days.", - }, - { - question: "How does it work?", - answer: "Here are detailed instructions, please read through them.", - }, - { - question: "What's in it for me?", - answer: "A Macbook Air M2 or AirPods if your lucky, and life long friends for sure.", - }, - { - question: "When is the event happening?", - answer: "1st of October until 31st of October", - }, - { - question: "Can everyone participate?", - answer: - "Yes! Even when you don’t know how to write code you can take part completing side quests. As long as you can open a PR you are very welcome to take part irrespective of your age, gender, nationality, food preferences, taste in clothing and favorite Pokemon.", - }, -]; - -const Leaderboard = [ - { - name: "Piyush", - points: "4045", - link: "https://github.com/gupta-piyush19", - }, - { - name: "Suman", - points: "1000", - }, - { - name: "Subhdeep", - points: "100", - }, - { - name: "Pratik", - points: "1350", - }, - { - name: "Karuppiah", - points: "100", - }, - { - name: "Arth", - points: "100", - }, - { - name: "Neztep", - points: "100", - }, - { - name: "Kelvin Parmar", - points: "200", - }, - { - name: "Naitik Kapadia (Arjun)", - points: "3250", - link: "https://github.com/KapadiaNaitik", - }, - { - name: "Yashhhh", - points: "200", - }, - { - name: "vishleshak", - points: "100", - }, - { - name: "Ashu999", - points: "100", - }, - { - name: "Sachin H", - points: "100", - }, - { - name: "Suraj Jadhav", - points: "100", - }, - { - name: "Vishrut", - points: "250", - }, - { - name: "cataxcab", - points: "100", - }, - { - name: "Eldemarkki", - points: "600", - }, - { - name: "Suyash", - points: "100", - }, - { - name: "Nafees Nazik", - points: "600", - }, - { - name: "monk", - points: "100", - }, - { - name: "Pratik Tiwari (Pratik)", - points: "100", - }, - { - name: "Adarsh Malviya", - points: "450", - }, - { - name: "Aditya Deshlahre", - points: "2120", - link: "https://github.com/adityadeshlahre", - }, - { - name: "Rutam", - points: "1105", - }, - { - name: "Sagnik Sahoo", - points: "250", - }, - { - name: "Prasoon Mahawar", - points: "1600", - }, - { - name: "Dushmanta", - points: "100", - }, - { - name: "Arjavv", - points: "100", - }, - { - name: "Ashish Khare", - points: "100", - }, - { - name: "Rohit Mondal", - points: "205", - }, - { - name: "thanmaisai", - points: "2825", - }, - { - name: "Rayyan Alam (Rayy)", - points: "100", - }, - { - name: "Ayush", - points: "100", - }, - { - name: "Zechariah", - points: "100", - }, - { - name: "Rajarshi Misra", - points: "500", - }, - { - name: "Anjaneya Gupta", - points: "3150", - }, - { - name: "Sachin Kuber", - points: "100", - }, - { - name: "Manpreet Singh", - points: "100", - }, - { - name: "Vaibhav Gupta", - points: "100", - }, - { - name: "maciek", - points: "650", - }, - { - name: "yatharth", - points: "650", - }, - { - name: "Ratish Jain", - points: "300", - link: "https://github.com/ratishjain12", - }, - { - name: "Subham Raj", - points: "500", - }, - { - name: "Abhinav Arya", - points: "1100", - link: "github.com/itzabhinavarya", - }, - { - name: "Yash Nirmal", - points: "200", - }, - { - name: "Rohan Gupta", - points: "1350", - link: "https://github.com/rohan9896", - }, - { - name: "Eder Silva", - points: "100", - link: "https://github.com/edersilva78", - }, - { - name: "Eduardo Noronha", - points: "200", - }, - { - name: "Joyal", - points: "650", - link: "https://github.com/joyal007", - }, - { - name: "zaCKoZAck0", - points: "200", - }, - { - name: "Viswa Prasath (iamvp7)", - points: "100", - }, - { - name: "aman4444", - points: "100", - }, - { - name: "mohit.d404", - points: "100", - }, - { - name: "0xCgn", - points: "100", - }, - { - name: "bitnagar", - points: "150", - }, - { - name: "United1l", - points: "350", - }, - { - name: "Arya Bhosale", - points: "300", - }, - { - name: "Bhavya", - points: "100", - }, - { - name: "Bilal Mirza", - points: "2095", - }, - { - name: "Asharan2511", - points: "50", - }, - { - name: "bhimanshu", - points: "50", - }, - { - name: "Digvijay Gupta", - points: "300", - }, - { - name: "hercules_2401", - points: "100", - }, - { - name: "iampolska742", - points: "50", - }, - { - name: "Jonas Hoebenreich", - points: "100", - }, - { - name: "Markson", - points: "100", - }, - { - name: "Mohd Zama", - points: "50", - }, - { - name: "Moheyt", - points: "550", - }, - { - name: "ortin779", - points: "275", - }, - { - name: "Piyush Garg", - points: "650", - }, - { - name: "Sachin Mittal", - points: "850", - }, - { - name: "Sha1kh4", - points: "50", - }, - { - name: "Soham Tembhurne", - points: "50", - }, - { - name: "Sundaram2021", - points: "50", - }, - { - name: "tarunclub", - points: "50", - }, - { - name: "thevinitgupta", - points: "50", - }, - { - name: "Vishal Khoje", - points: "100", - }, - { - name: "Aadish1233", - points: "50", - }, - { - name: "aashish", - points: "980", - }, - { - name: "AliYar-Khan", - points: "50", - }, - { - name: "Hanan Mehmood", - points: "50", - }, - { - name: "Janumala Akhilendra", - points: "50", - }, - { - name: "Nilanjan Pramanik", - points: "50", - }, - { - name: "Vedant-Z", - points: "200", - }, - { - name: "Vineetjk", - points: "50", - }, - { - name: "Hemanth Wasthere", - points: "100", - }, - { - name: "Ola", - points: "1800", - }, - { - name: "Olalaye Blessing", - points: "150", - }, - { - name: "Raju Gangitla", - points: "100", - }, - { - name: "Ronit Panda", - points: "1650", - }, - { - name: "Shyam Raghu", - points: "500", - }, - { - name: "Vikas Patil", - points: "250", - }, - { - name: "0Armaan025", - points: "100", - }, - { - name: "mandharet", - points: "100", - }, - { - name: "Harshit Vashisht", - points: "200", - }, - { - name: "JiyaGupta-cs", - points: "50", - }, - { - name: "Kurayami", - points: "100", - }, - { - name: "Sandy-1711", - points: "50", - }, -]; - -export default function FormTribeHackathon() { - // dark mode fix - useEffect(() => { - document.documentElement.classList.remove("dark"); - }, []); - return ( - - - - - {/* Header */} - -
- - Don't miss the launch! Get notified 🚀 - -

- Write code, win a MacBook Air M2 -

- -

- Can our community build an open source Typeform alternative during Hacktoberfest? -

-
- - {/* Video + Nutshell */} -
- {/* Left Column: YouTube Video */} -
- -
- - {/* Right Column: Headline + Ordered List */} -
-
-

In a nutshell

-
    -
  1. - As a community, we will ship all link survey features for a Typeform like - experience in 30 days 🚢 -
  2. -
  3. - All code and non-code contributors have a chance to win a MacBook Air M2 - 💻 -
  4. -
  5. - The link surveys will be 100% free to use - from the community, for the - community 🫶 -
  6. -
- -
-
-
- - {/* Note */} -
-
-
-
-
-
-
-
-
-

What is this? (And are we 🥜?)

-

- Charlie Munger famously said “Show me the incentives and I show you the outcome”. -

- -

- The beauty of Open Source Software (and the reason for its inevitable domination) is that - incentives between the different groups of users and developers are perfectly aligned. -

- -

Let’s have a look:

- - oss loop - -

With open-source software, everyone wins:

- -

- The community of contributors gets to learn on the job working on a real product with real users. - The free users get to use a feature-complete product free of charge. we don’t have to pay insane - sales people salaries to sell our enterprise solution in the future.{" "} - Welcome to the OSS win-win loop™ -

- -

- This is why we have decided to spend the complete month of Hacktoberfest hacking away with you, - our community! -

- -

But why would you hack with us?

- -

There’s a couple of reasons, but let’s first nail this down:

- -

- The time for an elegant 👏, open source 👏 survey builder has - come. It has been tried before, but it has never been maintained long enough because it’s hard to - make money with a free tool. -

- -

This is why the FormTribe is coming together this October!

- -

And you can be a part of it!

- -

- Imagine yourself flexing on a date that your code is used by thousands and soon millions of - people! -

- -

- Apart from you dating life levelling up, here are some proper reasons: -

-

- -
    -
  • - You can win a new MacBook Air M2 💻 -
  • -
  • - You can win limited hoodies, t-shirts and stickers! -
  • -
  • - You can complete official Hacktoberfest PRs -
  • -
  • You’ll earn your spot of honour on our Community page on formbricks.com
  • -
  • - You’ll be working closely with the Formbricks team, shipping features which have been requested - since this was called snoopForms -
  • -
  • You’ll join an active community of open source fans, connect and learn together
  • -
-

-

Doesn’t this sound like fun?

- -

It does! And I almost forgot the most important part:

- -

The grande finale is a ProductHunt launch 🚀

- -

What are you waiting for?

- -

Roll up your sleeves, pick one of the issues linked below and join us!

-

- Matti, Johannes, Anshuman, Shubham & Dhruwang -

-
- matti - jojo - pandey - shubh - dhru -
-
-
- - {/* Breaker 1 */} - - - {/* Prizes */} - -
- macbook air m2 -
-
    -
  • 🎉 1 x MacBook Air M2
  • -
  • 🎉 3 x Limited FormTribe Premium Hoodie
  • -
  • 🎉 10 x Limited FormTribe Premium Shirt
  • -
  • 🎉 10 x 250h for Gitpod
  • -
  • 🎉 50 x Sets of Formbricks Stickers
  • -
-
-
- -
-
-
🍀
-
-
-

- Every participant can win! How? -

-

- For every point you make, your name will be added to a virtual jar. From this jar we will draw the - winners. An example: -

-
    -
  • - Lola makes 200 points for a PR and a total of 100 points with side quests. Lola’s name will be - added 300x to the jar.{" "} -
  • -
  • Bricky completes side quests for 50 points, so his name will be added 50x to the jar.
  • -
-

- In a live stream we will pull a name from the jar for each of the prizes. Since Lola has 6x more - points than Bricky, her chance of winning is 6x higher. -

-
-
- - {/* Here is how */} -
- -
-
- {HowTo.map((offer) => ( -
-
-

- {offer.step} -

-
-
- {offer.link ? ( - - {offer.header} - - ) : ( -

{offer.header}

- )} -
-
- ))} -
-
- -
- - {/* Side Quests */} -
-

🏰 Side Quests: Increase your chances

-

- While code contributions are what gives the most points, everyone gets to bump up their chance of - winning. Here is a list of side quests you can complete: -

-
- - {SideQuests.map((quest) => ( -
- - -
-
-

- {quest.points}: {quest.quest} -

-
-
- -

-

Proof: {quest.proof}

-

-
-
-
- ))} -
-
- -
- - {/* The Leaderboard */} - - -
-
-
User
-
Points
-
- {Leaderboard.sort((a, b) => parseInt(b.points) - parseInt(a.points)).map((player) => ( - -
-
-
{player.name}
-
-
{player.points} Points
-
-
- ))} -
- - {/* The Timeline */} - - - timeline - - {/* Breaker 1 */} - - - {/* The Deal */} -
- -
-
-
Self-hosted
-
Formbricks Cloud
- - - -
- Formbricks Cloud Pro{" "} - - Why tho? - -
-
- - You can always self-host to get all features free. - -
-
-
- - {TheDeal.map((feature) => ( -
-
{feature.os}
-
{feature.free}
-
{feature.pro}
-
- ))} -
-
-
-
- 🤓 -
-
-
-

- Are Formbricks in-app surveys also free? -

-

- Just a heads-up: this deal doesn't cover Formbricks' in-app surveys. We've got a - solid free plan, but we've gotta keep some control over pricing to keep things running - long-term. -

-
-
-
- - {/* FAQ */} -
-

FAQ

-

Anything unclear?

-
- {FAQ.map((question) => ( -
-
-

{question.question}

-

{question.answer}

-
-
- ))} -
-
- - {/* Breaker 3 */} - -
- ); -} - -const SectionHeading = ({ title, subTitle, description, id }) => { - return ( -
-

{subTitle}

-

- {title} -

-

{description}

{" "} - {/* Reduced text size for description */} -
- ); -}; - -const Breaker = ({ icon, title }) => { - return ( -
-
-
-
-
{icon}
-
-
-

{title}

-

Get notified on launch plus a weekly update:

-
-
- - -
-
-
- -
- -
-
-
-
- -
- ); -}; diff --git a/apps/formbricks-com/pages/pricing.tsx b/apps/formbricks-com/pages/pricing.tsx index 24fb1f4477..c0d6da9124 100644 --- a/apps/formbricks-com/pages/pricing.tsx +++ b/apps/formbricks-com/pages/pricing.tsx @@ -97,7 +97,7 @@ const linkSurveys = { { name: "Custom Styling", free: true, paid: true, comingSoon: true }, { name: "Recall Information", free: true, paid: true, comingSoon: true }, { name: "Collect Payments, Signatures and Appointments", free: true, paid: true, comingSoon: true }, - { name: "Custom URL", free: false, paid: true }, + { name: "Custom URL", free: false, paid: true, comingSoon: true }, { name: "Remove Formbricks Branding", free: false, paid: true }, ],