devarno
read
back to downlink

$ downlink · build

jokes, votes, launch

How I shipped a joke-rating app in just 24 hours

Devarno·December 4, 2024·8min

webdev · devops

jokes, votes, launch

§ sections

  • Endpoints
  • User Interface
  • 1. Public debugging
  • 2. Deployment disasters
  • 3. Lessons
  • 4. Milestones

🛰️ TL;DR - I built and launched PunPal.net in under 24 hours as a #buildinpublic project - a joke-rating app where users vote anonymously on puns and see real-time leaderboards. Despite facing debugging and deployment challenges while building publicly, I launched a fully functional MVP with voting systems, responsive design, and optimised loading. This week, I was thrilled to gain an amazing following on Bluesky, and as a token of appreciation for the incredible support, I decided to dive into a quick and fun #buildinpublic project. Less than 24 hours later, I launched PunPal.net - a humour hub to pick your favourite puns, vote anonymously, and see which jokes top the charts!

Goal

My mission was simple: inspire others to create fun, creative apps and bring energy to the #buildinpublic community. I wanted to show that even small projects could have a big impact when you share the process openly.

Requirements

I aimed to build the MVP quickly but with key interactive features. The main priority was building a system where users could vote anonymously on jokes and see how their choices contributed to the leaderboard. The key features that this project required:

  • Random joke fetcher - fetches a random set of 4 jokes from the PunPal database.
  • Voting system - users cast votes on jokes, which then influence the leaderboard.
  • Leaderboard - tracks the most popular jokes based on existing votes. With the top-level requirements defined, I set the stage by running a simple create-next-app command. This provided a clean slate and the perfect foundation for building a fresh Next.js application, ready to bring my vision to life.

Design

Endpoints

The endpoints provide the core functionality of PunPal.net, enabling users to fetch random jokes, cast votes, view popular jokes, and receive feedback.

#EndpointPurposeResponse
1GET /api/jokesUsed to fetch 4 random jokes upon startup/refresh{ jokeId: ObjectId, jokeText: string }[]
2POST /api/voteUsed to cast an anonymous vote for a specific joke{ message: string }
3GET /api/most-votedUsed to fetch the 10 most popular jokes{ jokeId: ObjectId; jokeText: string; voteCount: number; lastVotedAt: number; }[]
4GET /api/count-todayUsed as feedback for user following successful vote{ count: number }

User Interface

The UI components are designed for simplicity and engagement. They enable users to vote on jokes, view the most popular ones, and interact with the app seamlessly, while additional components like the banner and footer enhance overall usability and branding.

Component NamePurposeEndpoint(s) Used
<JokeVoter/>Displays a random set of jokes for users to interact with.1 - 2 - 4
<MostPopular/>Displays the top-voted jokes in descending order.3
<Banner/>Displays main site header and logo-
<Footer/>Displays portfolio/social links for completeness-

Journey

Building this app was both exciting and stressful. Here are the milestones and hurdles I faced during the 24-hour process:

1. Public debugging

Debugging a #buildinpublic project with a 'time restriction' is no joke. I ran into several issues with the random joke fetcher and voting system, and debugging them with users watching was intense. But every issue was a learning experience.

2. Deployment disasters

Getting everything live came with its own set of deployment challenges. There were issues with loading times and voting system feedback, and a whole build log 'pre-rendering error' headache that kept me occupied unitl I went to bed. But through persistence and a bit of stress, I managed to resolve everything.

3. Lessons

  • Pressure → growth - debugging and deployment under public scrutiny introduced challenges, but overcoming them made the release even more rewarding.
  • Simplicity works - the faster I kept things, the quicker I was able to deploy and get feedback.
  • Community is key - I had amazing support from people following along, which kept me motivated through the challenging chapters.

4. Milestones

Despite the hurdles, PunPal ended up with a fully functional MVP, including:

  • Action feedback** ✅** - each vote now shows an immediate feedback with updated vote count.
  • Optimised loading** ✅** - improved handling of data fetches and default states.
  • Responsive UI** ✅** - the app looks great and works smoothly across different devices.

Result

  • MVP 👉 PunPal.net
  • The full build 👉 Thread
  • Source code 👉 Repository

Fin

PunPal.net was an exciting project to work on publicly. The whole experience was both a challenge and a reward, and I'm excited to continue building, improving, and sharing these projects with you to keep the #buildinpublic spirit alive. Stay tuned, more public builds coming soon 👀🔥

$ related field reports

  • building skyflow 1.1

    February 5, 2025read →
  • password, please

    October 20, 2024read →
  • sicilian bytes

    May 20, 2024read →
$ sharex ↗linkedin ↗hacker news ↗

downlink shows the off-duty hours across everything i build. the protocol work is logged at null0.blue/journal.

i don't post often. when i do, something happened.

$ what comes next

stratt.blue ↗devaqua.blue ↗tangled ↗