Skip to main content

Command Palette

Search for a command to run...

Introducing PitchFork

Amplify Ideas, Empower Creators

Updated
โ€ข10 min readโ€ขView as Markdown
Introducing PitchFork
R

Just a young man

Hello! This is my submission for the Appwrite Hashnode hack-a-thon. Just a heads up, I've utilized a feature called "details" in Hashnode. It works like a dropdown, allowing you to click and reveal hidden text. This helps keep the article clean and organized. Simply click on each dropdown to explore more information.

Team Details

PitchFork is only made by one person: Me!

Description of Project

PitchFork is a platform designed for sharing product ideas and receiving real-time feedback. It provides a convenient "poll" feature that enables users to vote on ideas effortlessly. Additionally, PitchFork offers creators the opportunity to showcase their projects. The platform boasts a clean and user-friendly UI/UX, with a minimalist design for the creation and edit pages.

One of PitchFork's primary objectives is to ensure that all creators and their products and pitches have an equal chance to be seen by users. To achieve this, various shuffling functions and algorithms have been implemented. These mechanisms generate interest in different products and pitches, ensuring fair and balanced exposure for creators. This approach encourages diversity and enables users to explore a wide array of offerings on the platform.

๐Ÿ“Š Voting Features For Polls
One of PitchFork's main goals is to help users in determining the viability of their business ideas. To achieve this, we have implemented a polling system. A polling system is a simple and efficient way for users to express their opinions. Additionally, PitchFork provides a bar graph that visually represents the total votes. This feature allows both the user and the pitch owner to look at the public opinion on the pitch.
๐Ÿ”„๏ธ Products and Pitches Shuffle Every Reload
Unlike other platforms that prioritize products and pitches based on upvotes, PitchFork takes a different approach. Every time you load or refresh the page, the products and pitches of the day are shuffled. This means that even smaller products have an equal chance of being seen by users, regardless of the number of upvotes they have received. This approach ensures fairness for every product and pitch posted on that day. However, users can still visit the products page or the pitches page to view the product and pitch with the highest number of upvotes each day.
๐Ÿงน Clean and Simple UI
PitchFork has a clean and user-friendly interface. It features a simple color scheme created using DaisyUI and TailwindCSS, resulting in a clean and minimalist UI/UX design. This simplicity helps users avoid distractions and enables them to concentrate on the product they are reviewing. As a result, users can provide high-quality feedback with a greater focus.
๐Ÿ’ป Easy To Use Create Page
The create page on PitchFork is highly regarded as one of the best pages on the entire website. It takes inspiration from the design of the well-known survey website, Typeform. Many people appreciate Typeform's minimalist design, which led me to develop a similar aesthetic using DaisyUI and TailwindCSS for PitchFork. This design approach ensures that users can concentrate on one task at a time, promoting a focused and streamlined experience.
โœ๏ธ Editing
PitchFork offers a valuable feature that allows users to edit their product and pitch information. This feature addresses the inconveniences faced on other platforms like ProductHunt, where users often have to go through email confirmation and wait for a day or two just to make edits to their descriptions. PitchFork simplifies this process. As long as you are the owner of the pitch or product, you can easily modify various details, such as the launch date, tagline, icon, thumbnails, and more. This flexibility empowers users to keep their information up-to-date and make necessary adjustments without unnecessary hurdles.
#๏ธโƒฃ Tags
In PitchFork, tags play a crucial role in helping users discover products that align with their interests. Creators can assign a maximum of one tag to each pitch or product. These tags are intentionally broad, encompassing a wide range of projects as long as they are relevant to the chosen tag. This approach ensures that users can explore various projects within a specific category, making it easier to find products that match their preferences and needs.
๐Ÿ”ฅ Recommendation
At the end of a product page in PitchFork, an instant recommendation feature comes into play. This feature suggests products that are similar to the one the user has just viewed. This functionality serves two purposes: Firstly, it enables users to discover more impressive products and exciting business ideas. Secondly, it provides an opportunity for smaller creators to gain more visibility, attract new users, and receive valuable feedback based on their products and pitches. By offering relevant recommendations, PitchFork fosters a dynamic and supportive ecosystem where users can explore related projects and creators can gain exposure to a wider audience. Similar to the dashboard page, the recommendations on PitchFork refresh with each page reload. This means that different products will be showcased to the user each time they reload the page. By refreshing the recommendations, PitchFork ensures that users are exposed to a diverse range of products and have the opportunity to discover new and exciting offerings. This feature adds an element of surprise and variety to the user experience, keeping it fresh and engaging with every visit.
๐Ÿ”Ž Search
PitchFork provides users with a seamless search experience, allowing them to effortlessly navigate the entire website and discover the pitches and products they need. This intuitive search functionality ensures that users can easily find the specific products they are looking for.

The Inspiration Behind PitchFork

I had been contemplating the idea for PitchFork for several months. Before this project, I had created Rewrit, a platform for sharing documentation and tutorials. I realized that I wanted to create something similar to ProductHunt. Having launched multiple products on ProductHunt myself, I became aware of certain issues. It was challenging to perform basic tasks like editing information, as the buttons and user interface required careful attention and required you to jump through various hoops. Additionally, I noticed that smaller products often struggled to gain visibility, particularly during the middle of the day when users primarily focused on the top-ranked products and rarely scrolled down to discover new and interesting offerings. This observation sparked the idea for PitchFork.

Around the same time, I came across Fireship's videos discussing the process of starting failed applications or businesses. This resonated with me, and I felt compelled to take action. The Appwrite Hashnode hackathon provided the perfect opportunity and served as a calling for me to create PitchFork.

โ“ Why I Chose PitchFork As The Website Name
I loved the Netflix Cuphead show and I love the devil's pitchfork. The website was also "pitching" ideas. The name kind of matched the website's function.

The Real World

Often times people have ideas, whether it was made during a car ride, during a cold shower, or whatever the case might be, people need a way to see if their idea is good or if it is in demand they need a good place to post it. PitchFork serves as a valuable platform in the real world by offering a centralized space for users to share their product ideas, receive real-time feedback, and showcase their projects. It addresses the need for a user-friendly and accessible platform that enables creators to gain visibility and gather insights on their ideas. By incorporating features like polls, easy editing capabilities, and recommendations, PitchFork creates a dynamic and engaging environment for both creators and users. It fosters a supportive community where innovative ideas can thrive, helping entrepreneurs and small businesses gain exposure, refine their products, and connect with potential customers. Ultimately, PitchFork contributes to the growth and success of product development in the real world by facilitating collaboration, feedback, and discovery.

Tech Stack

This is a list of all the packages that I used to create PitchFork:

Package NamePackage Version
npm9.6.7
Astro.JS2.1.1
TailwindCSS3.1.2
Vercel3.3.0
Appwrite11.0.0
DaisyUI2.52.0

Usage of Appwrite in PitchFork

PitchFork uses Appwrite in several locations including:

  • The Create Page createDocument && createFile

  • The Edit Page createDocument && createFile

  • The Dashboard Query && listDocuments

  • Product Viewing Page listDocuments

  • And Much More

Appwrite plays a key role in PitchFork. From sorting the posts to allowing the user to create and edit products and pitches. It utilizes various parts of Appwrite such as user auth, document querying, Appwrite buckets, arrays, attributes, and indexes.

Here are some of the code snippets that use Appwrite

   async function getComments() {
       const promose = appwriteDatabases.listDocuments(
            docId,
            docCollection,
        [
            Query.equal("PostId", postId),
        ]
    );
        const result = await promose;
        comments = result.documents;
    }

Getting the comments using the Appwrite listDocuments feature. Comments.svelte

async function UploadIcon() {
    try {
      if (IconUpload !== null && IconUpload.files) {
          Icon = await appwriteStorage.createFile('646547f5019189c8092b',ID.unique(),IconUpload.files[0]);
      }
    } catch (e) {
        console.log(e);
    }
}

Uploading an Icon using the Appwrite Buckets and createFile function. create.svelte

const entries = (await appwriteDatabases.listDocuments(
    '646538e35dd17306c589',
    '646538eeeface7a4cd39',
    [
        Query.orderAsc('LaunchDate'),
        Query.lessThanEqual('LaunchDate', new Date().toISOString().slice(0, 10)),
    ]
)) as ProductList;

Sorting the products on the dashboard page using the Appwrite Query function. index.astro

Challenges I Faced

There were multiple challenges that I faced in the process of creating PitchFork. Here are some of the big ones I faced:

Multiple Appwrite Outages
During the development of PitchFork, I encountered some challenges related to the Appwrite Cloud service. There were instances when outages occurred, coinciding with the time I was implementing crucial features. As a result, I had to delete collections and, in some cases, even restart the entire project database. This was undoubtedly frustrating, but I managed to overcome these challenges, ensuring the project progressed as smoothly as possible.
Learning The Actual Thing
Coming from a background of working with Supabase, I was accustomed to a more intricate approach when it came to user preferences, user names, login/logout, and other related functionalities. However, when I explored the Appwrite documentation, I found it surprisingly straightforward to get started. Appwrite offered simplified ways to handle tasks such as managing user preferences, updating documents, and listing and retrieving documents. Among these functionalities, queries quickly became my favorite feature to work with. Although this was extremely simple, it took me quite a while to get things figured out. As you can see in some of my code in the index.astro page there are ways of doing things using queries. However, I left it in there so that I can show my learning progress.
Arrays
Working with arrays in Appwrite was a new experience for me. I used arrays for functionalities like polls and upvotes. I had to understand how to add items to arrays and tackle various other aspects. One particular challenge I faced was updating a document with an array attribute called "Upvotes," which stored the users who had upvoted the document. I want to express my immense gratitude to byawitz#8041 on Discord for their assistance. They played a significant role in helping me navigate through Appwrite and helped me understand core concepts. I believe the Appwrite team should recognize their contributions and give them due credit for their support.
Designing the Create and Edit Pages
Designing the create and edit pages for PitchFork proved to be quite challenging. I aimed to steer away from a conventional and generic "Google form" like layout, looking for a unique approach instead. I spent considerable time experimenting with different designs, dedicating over a week to finding a form design that matched the overall aesthetics of my website. Then, one day, while filling out a survey on Typeform, I was captivated by its design. The simplicity and elegance of Typeform's design resonated with me, prompting me to adopt a similar style for my website. Upon implementing this design, I was delighted to see how well it complemented the overall look and feel of the platform. As a result, I decided to keep the Typeform-inspired design as it added a nice and visually appealing touch to the create and edit pages of PitchFork.
Problems with Appwrite Index
This problem occurred 2 days before the submission. The search only partially worked. The search only showed the pitches and not the products. There was a problem with Appwrite indexes. The way I was supposed to fix this (according to Steven from Discord) was to create a whole new collection. This was easily done using the Appwrite CLI but I had issues migrating the documents so I had to do it all manually. It took me approximately 1-2 hours.

Website: https://pitchfork.vercel.app/

Github Repo: https://github.com/RangerDevv/Pitchfork

Video

Acknowledgments

I would like to thank many people for making PitchFork possible. I would first like to thank Appwrite and the Hashnode team for organizing the awesome hack-a-thon. I would like to thank byawitz#8041 from the Appwrite Discord server for being a lifesaver when it came to simple Appwrite and Typescript questions. Lastly, I would love to thank Chad G. Peter (ChatGPT) for helping me write this article.

Thank you so much for this awesome experience

RangerDevv ๐Ÿ’–