jahed.dev

Creating a Community Forum for FrontierNav

One of the oldest feature requests for FrontierNav was to have a community forum. A place to ask questions and network with other users. I've finally decided to introduce this feature, albeit in a primitive state.

Rationale

Why does FrontierNav need a forum?

FrontierNav's focus has mainly been to introduce interactive guides (e.g. maps) for games that aren't available on other websites. However, there are other ways FrontierNav can improve a user's experience. One of them is the question and answer flow.

Question and Answer websites like GameFAQs and pretty much every video game forum have stuck to an age-old method of answering questions:

  1. Alice asks where to find Leather
  2. Bob says Leather is found by killing Cows in Green Fields
  3. Alice asks where to find the Cows in Green Fields
  4. Bob says they're found in the Bottom-Left Area of Green Fields
    • Charlie says they're found in the Top-Right Area of Green Fields
  5. Alice wanders around Bottom-Left Area of Green Fields until a Cow is found
    • Alice has no idea that Cows only spawn during the day in Bottem-Left Area.
    • Cows can be found in other places too, at higher rates.

Now, there are existing solutions to this issue. Wikis being the most obvious one.

  1. Alice looks up Leather
  2. Alice finds out Leather is dropped by Cows
  3. Alice clicks a link to Cows
  4. Alice finds out Cows spawn in Green Fields, etc.

This comes back to another problem which FrontierNav aims to solve. Incomplete relationships of known relationships. Since wikis are edited manually, there's a good chance that the "Leather" page does not link to Cows, but the Cow page links to Leather. So without knowing that Cows drop Leather, Alice would hit a dead-end at Leather and not be able to navigate the Wiki; falling back to asking on a forum.

Another issue on wikis is contradictory information. This is often the case when information is only available through player experience. So Player A might update one page based on their experience, but Player B, with a different experience, might update a different but related page. The user will now have to either try both experiences or fallback to asking on a forum for clarification.

To alleviate the back-and-forth on a web forum, a responder may link to a wiki page to aid in self-discovery. I've already noticed multiple forums and wikis linking to FrontierNav for references. So why not provide an integrated solution to it without needing to jump between websites with conflicting information.

Why not use existing forum software?

FrontierNav is a static website, aiming for minimal maintenance costs and uptime. It's also a single-page application, requiring consistent state as users navigate to provide its interactive features.

Creating a forum in itself isn't difficult. What is difficult is the more advanced features like bot detection and moderation, which is where third-party implementations are useful.

The vast majority of forum software out there is made to run standalone on a server. Given this and the fact that the forums are experimental, the effort of looking up various forum software and how they can integrate with FrontierNav, while also maintaining those integrations in the long term, isn't worthwhile.

User Experience

Before I began implementation, I needed to decide what type of forum I wanted FrontierNav to have.

Forums which encourage discussion tend of provide a nested experience so that you can follow the various threads on a given topic (e.g. Reddit. However, if the discussion is focused on a single question, providing a similar UX would encourage unwanted tangential discussions.

Q&A forums (e.g. StackOverflow) prevent this by providing a single thread without nesting, while also allowing "comments" for clarification on any given post. The result being a reduced focus on discussion and more on providing useful questions and answers.

Another forum that provides a pseudo single-threaded experience is Twitter. Instead of a nested view, Twitter provides a single thread to a given post. This allows users to only be exposed to the thread they care about, since the post they're viewing is from a timeline of accounts they're following. Users are still free to navigate to other threads, but this is where Twitter's design fails as navigating multiple threads, one thread at a time without seeing the bigger picture can be confusing.

The main goal of FrontierNav's forum is to ask questions and provide answers. This aligns with the broader goal of providing game guides. It's clear then that FrontierNav would benefit more from a Q&A approach while also providing a consistent single-threaded view for more free form discussion to allow users to network.

The issue around navigating multi-threaded discussions can be solved later as it's not a current focus. Though, I can see a possible solution by providing an option to see discussions in single-threaded or multi-threaded views in the future.

Implementation

Wrestling with Firebase

FrontierNav's only back-end dependency, other than serving static files, is Firebase. Firebase is used for:

This bit's a bit long and technical, so I've written it up separately.

User Interface

Being a first step, I've kept the user interface simple. The hardest part here was getting Firebase wired up with React and Redux. In the end I've skipped using Redux all together for convenience. As the forums are more integrated with FrontierNav's other features, it'll no doubt need to be properly synchronised.

Preview showing the community forums.

Conclusion

Writing all of this up shows just how much thought I've put into this. That's not really obvious when I'm in the thick of it, layering on my ideas and discoveries one after the after.

This is a pretty big step towards more social features on FrontierNav. Eventually, I hope it gives that "FrontierNav" feel from Xenoblade Chronicles X with Blade Reports, Treasure Deals, etc.

Next for this strand of work is getting it integrated with FrontierNav's database and game guides so that users can link and reference things.