What ProductHunt Actually Does
ProductHunt is a daily product discovery platform where makers submit their products, the community upvotes and comments on them, and the best products rise to the top of daily rankings. Each day resets the leaderboard, creating urgency around launch timing and encouraging the community to check back daily for new products. It is part community forum, part launch platform, part discovery engine.
The social dynamics are what make ProductHunt work beyond the technology. Makers rally their networks to upvote, community members build reputations through thoughtful comments, and the daily rhythm creates a content cadence that keeps people engaged. Your clone needs to capture these social mechanics, not just the technical features.
Core Features Worth Cloning
A functional product discovery platform needs product submission with title, tagline, description, links, and media, an upvoting system with daily leaderboards, a comment and discussion thread on each product, daily featured products or curated front page, user profiles for makers and community members, topic-based categorisation and browsing, search across products, and maker profiles that showcase all products submitted by a person. Skip newsletters and digest emails, collections and curated lists, job boards, ask-me-anything features, the Ship pre-launch tool, and Golden Kitty Awards. Those are community engagement features that come after you have an active community.
Data Architecture in Bubble
ProductHunt's data model centres on products, votes, and the social graph around them.
The User extends Bubble's default with display_name (text), headline (text, a short bio like "Founder at X"), avatar (image), website_url (text), twitter_handle (text), is_maker (yes/no), karma_points (number, accumulated from upvotes and engagement), and joined_date (date). Everyone starts as a community member. Submitting a product makes you a maker.
The Product data type is the core record. It needs product_name (text), tagline (text, short and punchy like Typeform's one-liners), description (text, longer explanation), website_url (text), thumbnail (image), gallery_images (list of images), submitted_by (User), makers (list of Users, all people who built it), topics (list of Topic type), launch_date (date, the day it appears on the homepage), upvote_count (number, denormalised for fast sorting), comment_count (number, denormalised), status (option set: pending_review, approved, live, archived), is_featured (yes/no, for editorial picks), and created_date (date). Denormalising upvote_count directly on the Product is essential for leaderboard performance. Counting votes via a search on every page load would be far too slow.
The Topic data type stores topic_name (text), slug (text), description (text), and icon (image or text emoji). Topics are the categorisation system: Productivity, Developer Tools, Design, AI, etc.
The Upvote data type stores product (Product), user (User), and created_date (date). This is a junction table. One record per user per product ensures each person can only vote once. When an upvote is created, increment the Product's upvote_count. When removed (un-upvote), decrement it.
The Comment data type needs product (Product), author (User), content (text), parent_comment (Comment, self-referencing for threaded replies), upvote_count (number), and created_date (date). Threading gives discussions structure. ProductHunt uses a two-level threading system: top-level comments and replies to those comments, but not replies to replies. Enforcing this depth limit keeps discussions manageable.
The Comment Upvote data type stores comment (Comment), user (User), and created_date (date). Same pattern as product upvotes but for comments.
The Product Launch data type (optional) stores product (Product), launch_date (date), and ranking_position (number). This separates the launch event from the product itself, allowing products to be relaunched or featured on different dates. For MVP, you can skip this and use the launch_date field directly on Product.
The Upvote and Ranking System
The upvote system is straightforward but needs to be bulletproof. When a logged-in user clicks the upvote button, first check if an Upvote record already exists for this user and product. If it does, delete it (un-upvote) and decrement the Product's upvote_count. If it does not, create the Upvote record and increment upvote_count. Display the upvote button in an "active" state when the current user has an existing Upvote record for that product. This search (Do a search for Upvotes where product is this product and user is Current User, count greater than 0) runs for each product in the list, so having the denormalised upvote_count on the Product avoids multiplying these lookups.
For the daily leaderboard, display products where launch_date equals today, sorted by upvote_count descending. This is a simple Bubble search with two constraints. Add a "Yesterday" tab that shows the previous day's final rankings and an "This Week" or "This Month" option for longer-term discovery.
To prevent vote manipulation, consider adding rules: new accounts cannot vote for the first 24 hours, or accounts need a verified email before voting. These are simple "Only when" conditions on the upvote workflow.
Product Submission Flow
The submission form collects the product name, tagline (with a character limit around 60 characters), description (rich text or plain text with markdown), website URL, thumbnail upload, gallery image uploads, topic selection (multi-select from existing topics), and maker tagging (search and add other users as co-makers). On submission, create the Product with status set to pending_review. An admin reviews submissions and either approves them (setting status to approved and assigning a launch_date) or requests changes. For a more open platform, skip the review queue and let products go live immediately.
The product detail page shows all product information, the upvote button with current count, the discussion thread (comments sorted by upvote_count or chronologically), maker profiles, and a link to visit the product's website. Include "Share" buttons for Twitter, LinkedIn, and direct link copying. ProductHunt launches are often amplified on social media, so make sharing frictionless.
Comment System with Threading
Display top-level comments (where parent_comment is empty) in a repeating group sorted by created_date or upvote_count. For each top-level comment, show a nested repeating group of replies (where parent_comment equals the current comment). Add a "Reply" button on each comment that toggles an inline input field. When a reply is submitted, create a Comment with the parent_comment set to the comment being replied to. Increment the product's comment_count on every new comment creation regardless of nesting level.
User Profiles and Maker Pages
Each user gets a public profile page showing their avatar, name, headline, and activity. For makers, show a repeating group of products they have submitted or are listed as a maker on. Show their total upvotes received across all products (calculated by summing upvote_count from all their products). For community members, show their recent comments and upvoting activity. This social proof encourages active participation.
Discovery and Search
Beyond the daily leaderboard, users need ways to discover products. Implement topic browsing pages that show products filtered by topic, sorted by upvote_count. Add a search feature using Bubble's built-in search that searches product names, taglines, and descriptions. Create a "Trending" section that shows products from the past week or month with the highest upvote counts. Feature an "Archives" page where users can browse past daily leaderboards by selecting a specific date.
Privacy Rules
Published products should be publicly visible. Products in pending_review status should only be visible to the submitter and admins. Upvote records should be visible to the voter (for displaying their upvote state) and in aggregate (the count on the product). Comment author information should be public. User email addresses should never be publicly exposed. Admin tools and moderation features should only be accessible to admin-role users.
Gamification and Community Engagement
Add karma points to encourage participation. Award points for submitting products, receiving upvotes, and leaving comments that get upvoted. Display karma on user profiles and potentially in a community leaderboard. This gives users beyond makers a reason to engage actively with the platform. ProductHunt's community strength comes from making participation feel rewarding beyond just discovering products.
Cost and Timeline
A ProductHunt-style platform takes 6 to 10 weeks for an experienced Bubble developer. The core submission, upvoting, and commenting features are relatively straightforward Bubble patterns. The daily leaderboard reset, admin moderation tools, and user profiles add the remaining complexity. Bubble's Starter plan at $29 per month works for early development and low traffic. Move to Growth at $119 per month when you need backend workflows for notification emails and ranking calculations. Annual costs run $1,500 to $3,000.
Build or Hire
A ProductHunt clone is a solid intermediate Bubble project. The data model is clean, the workflows are standard (CRUD operations with some counting logic), and the UI patterns (repeating groups, upvote buttons, comment threads) are well-documented across Bubble tutorials. The main challenge is not technical but community-driven: building the social dynamics and daily engagement habits that make the platform valuable. The technology is the easy part.
Related guides:
how to build a directory with Bubble
Bubble slack integration guide
Building a community or discovery platform? Talk to Goodspeed Studio about launching it fast on Bubble.
The Platform Is Easy, The Community Is Hard
You can build a ProductHunt-style platform on Bubble in weeks. The real challenge is building a community that submits interesting products, upvotes authentically, and comments thoughtfully. Focus your energy on attracting your first 100 makers and 1,000 community members. The technology just needs to not get in the way of that social flywheel. Talk to our Bubble developers.

Harish Malhi
Founder of Goodspeed
Harish Malhi is the founder of Goodspeed, one of the top-rated Bubble agencies globally and winner of Bubble’s Agency of the Year award in 2024. He left Google to launch his first app, Diaspo, built entirely on Bubble, which gained press coverage from the BBC, ITV and more. Since then, he has helped ship over 200 products using Bubble, Framer, n8n and more - from internal tools to full-scale SaaS platforms. Harish now leads a team that helps founders and operators replace clunky workflows with fast, flexible software without writing a line of code.
Frequently Asked Questions (FAQs)
How do I prevent vote manipulation on a Bubble-built platform?
Require email verification before allowing votes. Add a minimum account age rule (24 hours) before voting is enabled. Track IP addresses on upvotes and flag duplicates. These are simple workflow conditions that deter casual manipulation.
How does the daily leaderboard reset work?
Each product has a launch_date field. The homepage shows products where launch_date equals today, sorted by upvote_count descending. When the date changes, the query naturally shows the next day's products. No manual reset is needed.
Can Bubble handle threaded comments like ProductHunt?
Yes. Use a self-referencing parent_comment field on the Comment data type. Display top-level comments in a repeating group and nest replies in a sub-repeating group filtered by parent_comment. Limit to two levels for clean UX.
How do I handle product submissions and moderation?
Create products with a pending_review status. Build an admin dashboard that lists pending products with approve and reject buttons. On approval, set the status to live and assign a launch_date. This gives you editorial control over quality.
What is the best way to handle upvote counting in Bubble?
Denormalise the count. Store upvote_count directly on the Product record and increment or decrement it when Upvote records are created or deleted. Never calculate the count from a search in real time as it kills performance at scale.
How much does a ProductHunt clone cost to build on Bubble?
Development takes 6 to 10 weeks with an experienced Bubble developer. Annual platform costs run $1,500 to $3,000 depending on your Bubble plan and traffic. The main investment is community building, not technology.
