Skip to content
hackclubPublic

About

Tools for Slack analytics and moderation

Resources

Code of conduct

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

Mnemosyne mascot: a large fish carrying tiny friends

Mnemosyne

Community analytics and conduct casework for Hack Club, built on Slack metadata.

CI MIT license

Mnemosyne is an internal Hack Club tool. It turns Slack metadata into community analytics and gives the fire department a place to manage reports and cases.

Community (nemo) Aggregate analytics for onboarding, replies, retention, activity and channels.
Fire engine Cases, mirrored threads, notes, reports, actions, alt account detection and an audit trail.

Screenshots

Joining

Getting replies

Joining Getting replies

Channels

Engine

Channels Engine

Cases

Search

Cases Search

Alt accounts

Audit log

Alt accounts Audit log

Features

Community

  • Member journey: joining, getting replies, coming back and who is active.
  • Per-channel analytics.
  • Charts built with d3.

Fire engine

  • Cases with assignees, participants, tags, resolutions, replies, notes, actions and reversals.
  • Case merges, member standing and member guards.
  • Reporter conversations and mirrored Slack threads, with deep links in both directions.
  • Alt account detection: links, clusters and a review queue with verdicts.
  • Audit log with saved queries and CSV export.
  • Slack bot: relay takes reports and nemo works them.

Architecture

flowchart LR
  slack[Slack] --> ingest[pipeline: ingest and jobs]
  ingest --> pg[(Postgres)]
  pg --> dbt[warehouse: dbt]
  dbt --> pg
  pg --> web[web: Rails]
  web --> staff([Staff])
  slack <--> bot[pipeline: bot]
  bot --> pg
  web --> proxy[proxy: FastAPI]
  proxy --> slack
Loading
Path Contents
web/ Rails app: community analytics, fire engine, admin and the public API
pipeline/ Python: Slack ingestion, nightly jobs, the Slack bot and the seeder
warehouse/ dbt project: staging models and marts
proxy/ FastAPI service wrapping the Slack API clients
db/ SQL migrations and the YAML tables for capabilities, actions and flags
deploy/ Compose file and per-role env examples

Getting started

Requirements: Docker, Ruby, Python 3.13 with uv, and Postgres 18. devenv.nix provides all of them if you use devenv.

cp deploy/.env.example deploy/.env

In deploy/.env, set POSTGRES_DB=mnemosyne_seed (the seeder only writes to databases ending in _dev, _test or _seed) and BOOTSTRAP_ADMIN_SLACK_ID=USEED0000001.

(cd pipeline && uv sync)
(cd web && bundle install && bin/rails tailwindcss:build)

make up                  # Postgres
make provision           # schemas, roles, grants, migrations
make seed SCALE=dev      # synthetic community data
make serve               # http://localhost:3000

In development, /dev/be/USEED0000001 signs you in as the bootstrap admin.

Development

make test     # pytest and rails test
make lint     # ruff and rubocop
make doctor   # environment a role needs (ROLE=serve)

Acknowledgements

License

MIT

About

Tools for Slack analytics and moderation

Resources

Code of conduct

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages