the Hoojah Project

Hoojah is an online poll & debating site for Malaysia. It’s a pet project that I started working in 2013.

People can go to the platform, create polls and vote for other polls. They can also engage with other users through one-on-one debate.

Responsibilities

Research, design and build

Technology Stack

HTML, SCSS, Adobe XD, Ruby on Rails, ReactJS, Discourse, Docker

Year

2013-2019

Summary

Hoojah is a polling platform that focuses on the arguments and debates behind the votes. It's a platform for meaningful discussions, where users can vote on polls, add arguments, and engage in one-on-one debates. The main challenge was to design a platform that encourages meaningful discussions rather than just collecting votes. We needed to create a user experience that makes it easy for users to express their opinions and engage in debates. This project taught me the value of constraint-driven design—by limiting poll options to just three choices, I discovered how constraints can actually enhance clarity and user engagement. As someone who values thoughtful discourse, I created this platform to address the noise and polarization I often saw in online discussions.

1. Background

The Inefficiency of Online Discussion Platforms

Today Malaysians use social media platforms and online forums to discuss important matters. However, it's hard to track specific topics as different groups discuss the same topics separately, failing to provide structural opinions and results. As someone who values thoughtful discourse, I found this fragmentation particularly frustrating when trying to follow important discussions.

Home page showing timeline view of recently updated polls
Home page showing timeline view of recently updated polls. Desktop users see additional information in sidebars.

Subjective discussions make decision-making difficult and eventually become noise. Open polls provide objective questions that deter subjective discussions.

System Architecture

Hoojah was built with a modern tech stack designed for scalability and real-time interactions. The architecture balances performance needs with development efficiency, allowing for rapid iteration while maintaining a responsive user experience.

							flowchart TD
								subgraph Client["Client Layer"]
									React["React Components"]
									SCSS["SCSS Styling"]
									API["API Clients"]
								end
								
								subgraph Server["Server Layer"]
									Rails["Ruby on Rails"]
									REST["RESTful API"]
									Auth["Authentication"]
								end
								
								subgraph Data["Data Layer"]
									DB[("PostgreSQL")]
									Redis[("Redis Cache")]
									S3[("S3 Storage")]
								end
								
								subgraph Services["External Services"]
									Discourse["Discourse Forum"]
									Analytics["Analytics"]
								end
								
								Client --> Server
								Server --> Data
								Server --> Services
								
								class Client,Server,Data,Services headerClass
								classDef headerClass fill:#f8f9fa,stroke:#495057,stroke-width:1px
								classDef default fill:#fff,stroke:#6c757d
							
Hoojah's system architecture showing the client, server, data, and external service layers.

Rationale for a 3-Options Voting System

One of the defining design choices in Hoojah is to restrict poll responses to three options: Agree, Neutral, and Disagree. This wasn't just a simplification—it was a deliberate strategy born from my frustration with the noise in online discussions. After observing countless debates on social media platforms, I realized that too many choices often led to decision paralysis and diluted the core issues.

Benefits
Clarity & Interpretability

Results are easy to understand at a glance. Users immediately see how the community leans: for, against, or neutral. This simplicity was something I craved as both a developer and a user of online platforms.

Lower Barrier to Entry

Many people hesitate to join polls with too many nuanced options. Three simple choices feel intuitive, encouraging wider participation. I saw this firsthand when testing early versions with friends - they were more willing to engage when the choices were clear-cut.

Reduced Decision Fatigue

Users don't waste time splitting hairs between "slightly agree" vs "mostly agree." This makes contributing fast and lightweight. As someone who values efficient communication, this was a core principle I wanted to embody in Hoojah.

Natural Grouping for Arguments

Supporting arguments automatically fall under one of three categories. This helps discussions stay structured and prevents option overload. During development, this structure became my north star for organizing content.

Balanced Representation

Including a "Neutral" choice avoids false polarization and captures the voices of those who are undecided or nuanced. This was particularly important to me as it reflects my belief that not every issue has just two sides.

Considerations

While limiting options reduces noise, it does flatten some complexity. Hoojah's design addresses this by allowing supporting arguments under each stance, so nuance still surfaces through text and debate. This balance was something I refined over years of iteration, learning from user feedback and my own experiences as a participant in the platform.

Hoojah's restricted 3-option poll structure
Figure 1: Hoojah's restricted 3-option poll structure - a design choice that evolved through many late-night coding sessions.
									erDiagram
										POLL ||--o{ OPTION : has
										POLL ||--o{ ARGUMENT : contains
										POLL ||--o{ DEBATE : hosts
										POLL ||--o{ VOTE : receives
										POLL ||--|| USER : created_by
										OPTION ||--o{ VOTE : selected_in
										OPTION ||--o{ ARGUMENT : supports
										ARGUMENT ||--|| USER : authored_by
										DEBATE ||--|| USER : participant_1
										DEBATE ||--|| USER : participant_2
										DEBATE ||--o{ DEBATE_POST : contains
										DEBATE_POST ||--|| USER : written_by
										VOTE ||--|| USER : cast_by
									
Figure 1b: Entity relationship diagram showing how polls, options, arguments, debates, and users interconnect in the Hoojah data model.

UI/UX Study: Solving the Convenience Problem

One of the biggest barriers to online debate platforms is convenience—users often struggle to skim polls, understand arguments, and participate without friction. Hoojah's UI/UX design aimed to solve this through structured flows and visual hierarchy. This focus on usability came from my background in user-centered design and my personal frustration with cluttered interfaces.

1. Poll-First Experience
  • Problem: Users want to see the poll outcome quickly without scrolling through long threads.
  • Solution: The poll sits at the top of the page, followed immediately by grouped arguments. This lets users vote, then dive deeper if they choose.

Design pattern: "Decision at the top, discussion below." This philosophy guided many of my design choices and became a mantra during development.

Poll positioned at the top for immediate engagement
Figure 2: The poll-first layout - a solution I'm particularly proud of as it significantly reduced bounce rates during our tests.
2. Grouped Arguments for Readability
  • Problem: Long, mixed comment threads are hard to follow.
  • Solution: Arguments are grouped under the option they support (Agree / Neutral / Disagree). Users skim within the stance they care about.

Design pattern: "Categorical clustering" for quick scanning. This organization method was inspired by my academic background in information architecture.

Supporting arguments clustered under each stance
Figure 3: Grouped arguments interface - a feature that emerged from countless user testing sessions in coffee shops around Kuala Lumpur.
3. One-on-One Debate Flow
  • Problem: Open comment sections often devolve into noise and trolling.
  • Solution: Hoojah introduced debate view, where two users exchange structured arguments. This reduces clutter and highlights meaningful back-and-forth.

Design pattern: "Focused debate lens" to isolate quality interactions. This feature was particularly challenging to implement but became one of the most praised aspects of the platform.

Debate mode between two participants
Figure 4a: Debate mode in action - a concept I first sketched in my notebook during a long bus ride, now fully realized.
									sequenceDiagram
										autonumber
										participant U1 as User 1
										participant H as Hoojah
										participant U2 as User 2
										
										U1->>H: Challenge to debate
										H->>U2: Notify of challenge
										U2->>H: Accept challenge
										H->>U1: Debate initiated
										
										Note over U1,U2: Structured Debate Begins
										
										U1->>H: Opening statement
										H->>U2: Display statement
										U2->>H: Counter argument
										H->>U1: Display counter
										
										loop Debate Exchange
											U1->>H: Response
											H->>U2: Display response
											U2->>H: Response
											H->>U1: Display response
										end
										
										U1->>H: Closing statement
										H->>U2: Display closing
										U2->>H: Closing statement
										H->>U1: Display closing
										
										Note over U1,U2: Debate Concluded
										
										H->>U1: Archive debate
										H->>U2: Archive debate
										H->>H: Make debate public
									
Figure 4b: Sequence diagram showing the structured flow of a one-on-one debate in Hoojah.
4. Participation Made Simple
  • Problem: Many platforms hide contribution behind too many steps.
  • Solution: Clear calls-to-action: vote in one tap, add a supporting argument in two, start a debate in three. Minimal cognitive load.

Design pattern: "Progressive participation" where each step feels natural. This approach reflects my belief that technology should adapt to humans, not the other way around.

Streamlined actions guiding users to contribute
Figure 5: Streamlined CTAs - an interface refinement that took nearly six months to perfect but dramatically increased user engagement.
5. Mobile vs Desktop Consistency
  • Problem: Debate platforms often break on smaller screens.
  • Solution: On desktop, sidebars show trending arguments and user profiles. On mobile, non-essential elements collapse, leaving poll + arguments as the core flow.

Design pattern: "Responsive hierarchy" that prioritizes core actions. This solution was born from my own frustration with trying to debate on mobile devices while commuting.

Responsive design across devices
Figure 6: Responsive design - a testament to the hundreds of hours I spent testing on every device I could borrow or buy.

User Journey Snapshot

  1. See poll at a glance → choose Agree / Neutral / Disagree.
  2. Read grouped arguments under the chosen stance.
  3. Join discussion by adding a supporting argument.
  4. Escalate to debate if deeper engagement is needed.
  5. Track contributions through personal profile and timelines.

This journey map represents the culmination of years of iteration. I remember the excitement of seeing users naturally follow this flow during our first successful beta test - it validated countless design decisions.

							flowchart TD
								A["User Visits Hoojah"] --> B["View Poll Question"]
								B --> C{"Choose Stance"}
								C -->|"Agree"| D1["View Agree Arguments"]
								C -->|"Neutral"| D2["View Neutral Arguments"]
								C -->|"Disagree"| D3["View Disagree Arguments"]
								D1 --> E["Read Supporting Arguments"]
								D2 --> E
								D3 --> E
								E --> F{"Engage Further?"}
								F -->|"Yes"| G["Add Supporting Argument"]
								F -->|"No"| H["Continue Browsing"]
								G --> I{"Start Debate?"}
								I -->|"Yes"| J["Initiate One-on-One Debate"]
								I -->|"No"| H
								J --> K["Exchange Structured Arguments"]
								K --> L["Debate Concludes"]
								L --> M["Track via Personal Profile"]
								style A fill:#f9f9f9,stroke:#6c757d
								style B fill:#e3f2fd,stroke:#0d6efd
								style C fill:#fff3cd,stroke:#ffc107,stroke-width:2px
								style D1 fill:#d1e7dd,stroke:#198754
								style D2 fill:#cff4fc,stroke:#0dcaf0
								style D3 fill:#f8d7da,stroke:#dc3545
								style F fill:#fff3cd,stroke:#ffc107,stroke-width:2px
								style I fill:#fff3cd,stroke:#ffc107,stroke-width:2px
								style J fill:#e2e3e5,stroke:#6c757d,stroke-width:2px
								style K fill:#e2e3e5,stroke:#6c757d
								style L fill:#e2e3e5,stroke:#6c757d
								style M fill:#f8f9fa,stroke:#6c757d
							
Figure 7: Interactive user journey flow showing the path from viewing a poll to engaging in structured debates.

Key Takeaways

  • Restricting to three voting options balances simplicity with expressive debate - a lesson in constraint breeding creativity.
  • Convenience is achieved by prioritizing readability, structured flows, and responsive design - principles that have become central to my design philosophy.
  • Hoojah reduces friction by guiding users smoothly from poll → arguments → debate, ensuring every stage is intuitive. Building this platform taught me more about human-computer interaction than any course or book ever could.

Looking back on the Hoojah journey, I'm struck by how much I grew as both a designer and developer. What began as a side project became a masterclass in user-centered design, teaching me to listen, iterate, and above all, solve real problems for real people.

2. Hoojah's Objectives

  1. Create a platform for structured objective discussions where arguments are tied to polls with three options: agree, neutral, or disagree.
  2. Encourage users to respond objectively to promote quality discussions and ethical online engagement.
  3. Establish a trustworthy space by verifying user identities to eliminate noise in online discussions.
Poll page showing user interactions
A poll page showing three main interactions: voting, adding arguments, and one-on-one debates.

3. Moving Forward

The domain hoojah.my has been taken down, but Hoojah remains alive without recent updates. The next milestone is to convert features into plugins for Discourse or WordPress. The countless hours spent refining this UI taught me patience and the importance of iterative design based on real user feedback—a lesson I carry into every project I undertake.

External Resources

4. Showcase

One-on-one debate page
Debate page showing engagement between two public figures
Analytics page
Analytics page for business users
Login page
Combined login/signup page with mobile optimization
Poll creation
Poll creation interface with customization options
User profile with badges
User profile with achievement badges