Howdju / howdju

Monorepo for the Howdju crowdsourced fact checking and summarization platform
https://www.howdju.com
GNU Affero General Public License v3.0
5 stars 2 forks source link
collective-intelligence crowdsourcing disinformation fact-checking misinformation

Howdju source code

This repository contains client and server code for the Howdju platform.

Automation status

Introduction

Howdju is a platform for analyzing and sharing critical analysis of claims using evidence. The content is currently user-generated, and we hope to augment users' actions with machine learning.

Contributing

We welcome your contributions!

Please join our Slack to introduce yourself and chat about what interests you. Before contributing please look over our Contributor Guidelines.

Issues

Our open issues indicate the work we have identified.

Here are some focused ways to view issues:

The current general direction is to evaluate and improve the social fact-checking functionality.

Contribution guidelines

Development

See docs/Development.md to get setup for developing Howdju.

Reporting issues

Slack

You can join our Slack to discuss Howdju with other users and the site maintainers.

Code history

The Howdju code base has undergone a few transformations, and since it is currently a prototype for exploring features, we have not thoroughly completed all refactorings/cleanups/migrations. This section describes major in-progress projects to provide the context for inconsistencies you may find.

TypeScript migration

The code base is a little over half TypeScript now and includes TypeScript examples for most major components. See Howdju/howdju#1 for details on the initial migration effort and issues in the ts-migration label for substantial planned effort.

Zod validation

All of Howdju's entities are defined using Zod. Zod is also our preferred validation library. See Howdju/howdju#26 for the status of migrating previous data validation definitions to Zod.

Justification types and evidence representation

Howdju's representation of Justifications and references to external sources has undergone some evolution. This list represents the status of some relevant entities:

UI Framework

The web app currently uses react-md@1. Besides being outdated, we would like to explore a UI framework that supports both react-native mobile and web. This cross-platform support would enable reusing components on both webpages and mobile app screens.

See Howdju/howdju#304.

Premiser name

We initially considered Premiser as a name for Howdju, and so some packages have this name. Howdju is now the preferred name.

Code layout

This repository is a monorepo based on Yarn berry workspaces. This diagram shows the high level dependencies between the packages:

package dependency
diagram

Missing from the diagram are:

System architecture

The howdju.com web app consists of these parts:

Web app and lambda API

Message handler

Scheduled jobs

Code architecture

The following sections briefly discuss the major components and dependencies of our clients and services.

Web app

The web app uses react-navigation to select pages. The pages dispatch Redux actions handled by Redux reducers and redux-saga (for asynchronous handling.) It calls the API using Axios. It normalizes entities using normalizr.

API

The API has bespoke request routing supporting strongly-typed routing in clients. The route handlers should contain minimal logic and call Services to fulfill the request. Services contain our business logic and call DAOs for persistence.

Tests

Growing test coverage, including UI and Service/DB integration tests. See our testing section in the development docs.

Affiliations

Carl has been attending meetings semiregularly with the Canonical Debate Lab, a loose assocation of people who are all interested in solving similar problems (empowering collective intelligence) but with different focuses and approaches. If Howdju sounds interesting to you, that group may also interest you.