My project · 2013–2019

the Hoojah Project

Hoojah is an online poll & debating site for Malaysia. It's a pet project that I started working on in 2013. People can go to the platform, create polls and vote for other polls, and also take each other on in one-on-one debates.

A snapshot of the Hoojah user interface
Hoojah · user interface
Responsibilities

Research, design and build

Technology stack

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

Year

External links
Visit at GitHub Read UX case study

Summary

Hoojah is a polling platform, but the votes aren't really the point. The arguments behind them are. You vote on a poll, back your stance with arguments, and if you want, take someone on in a one-on-one debate. The hard part was never collecting votes, it was getting people to actually discuss things instead of shouting past each other. So I kept the voting dead simple and put all the weight on the arguments. Capping each poll at three options started as a way to cut noise, and it turned out the constraint made everything clearer. I built Hoojah because I was tired of how messy and polarised online discussions had become.

Background

The Inefficiency of Online Discussion Platforms

Today Malaysians use social media platforms and online forums to discuss important matters. The trouble is it's hard to track anything: different groups talk about the same topic in their own corners, so you never get a clear, structured read on what people actually think. Trying to follow an important discussion across all of that always frustrated me.

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 runs on a fairly standard modern stack: React on the front, Ruby on Rails at the back, Discourse handling the forum side, all wrapped in Docker. Nothing exotic. Just tools I could move quickly with while keeping the thing responsive.

            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. That was deliberate, not lazy. After sitting through enough arguments online, I noticed that too many choices just made people freeze up, and the actual issue got lost in the middle.

Benefits

Clarity & Interpretability

Results are easy to read at a glance. You immediately see how the community leans: for, against, or neutral. That's the kind of simplicity I always wanted as a user myself.

Lower Barrier to Entry

Many people hesitate to join polls with too many nuanced options. Three simple choices feel intuitive, so more people take part. When I tried early versions on friends, they were happier to jump in once the choices were clear-cut.

Reduced Decision Fatigue

Nobody wastes time splitting hairs between "slightly agree" and "mostly agree." Contributing stays fast and lightweight, which was the whole idea.

Natural Grouping for Arguments

Supporting arguments automatically fall under one of three categories. That keeps discussions structured and stops the options from sprawling.

Balanced Representation

A "Neutral" choice avoids false polarisation and captures the people who are undecided or genuinely on the fence. Not every issue has only two sides.

Considerations

Limiting the options does flatten some of the nuance, no way around that. Hoojah gets it back by letting people attach supporting arguments under each stance, so the detail still comes through in the text and the debate. Getting that balance right took years of tweaking.

UI/UX Study: Solving the Convenience Problem

One of the biggest barriers to online debate platforms is plain convenience. People struggle to skim polls, follow arguments, and join in without friction. Hoojah tries to fix that with structured flows and a clear visual hierarchy. I care about this stuff. Cluttered interfaces have always annoyed me.

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 flow is what all the iteration eventually settled into. Watching the first beta users move through it more or less the way I'd hoped was a good day.

            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

Looking back, Hoojah is where I actually grew up as a designer and developer. It started as a side project and ended up teaching me to listen, ship, tweak, and keep solving the real problem instead of the fun one.

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.

Moving Forward

The domain hoojah.my has been taken down, but Hoojah is still alive, just without recent updates. The next milestone is to turn its features into plugins for Discourse or WordPress. All those hours spent tuning the UI taught me patience, and to keep iterating on real feedback instead of my own assumptions. I carry that into every project now.

Showcase