Inspiration

A Twitch community is more than a stream of messages. It has its own humor, relationships, and context. Moderation tools should help streamers understand that context before making decisions.

We built CrowdPlay to give streamers a calmer place to review their community’s chat. The goal is to organize the information that matters while keeping moderation decisions in human hands.

What it does

CrowdPlay is a Twitch-connected moderation dashboard with an overview, moderation inbox, viewer histories, configurable rules, analytics, and account settings.

Streamers authorize their accounts through Twitch rather than sharing their passwords with CrowdPlay. The application includes an EventSub webhook pipeline for receiving new chat messages and storing channel activity in MongoDB Atlas.

Its review interface brings messages, conversation context, local moderation signals, and previous decisions together. Streamers can investigate messages, record review decisions, and use an explicit confirmation workflow for individual message deletion.

CrowdPlay does not automatically ban, time out, warn, or delete messages. Its optional Jev classification integration is currently deferred.

How we built it

We used OpenAI Codex throughout development, from shaping the product and prototyping the interface to implementing the application, writing tests, and investigating integration failures.

The application uses Next.js, React, and TypeScript. Tailwind CSS supports the charcoal-and-lime interface, Radix UI provides accessible interaction primitives, and Recharts renders dashboard visualizations.

The backend uses the native MongoDB driver with MongoDB Atlas. Twitch integration includes authorization-code OAuth, server-side token handling, and signed EventSub webhooks. Application sessions use HttpOnly cookies, while Twitch access and refresh tokens are encrypted before storage.

We separated the interface, moderation policy, authentication, database access, and external integrations to keep the project easier to understand and extend.

Challenges we ran into

One challenge was distinguishing Twitch application connectivity from a complete streamer session. Successful Twitch authorization still requires the application to verify the account and save its session.

MongoDB SRV DNS failures also made troubleshooting difficult. We added safer diagnostics and corrected a health-reporting bug that retained an old failure after the database connection recovered.

Another challenge was keeping the scope honest. We deferred the optional Jev integration rather than presenting an unverified AI feature as complete, and removed synthetic data from the running application.

Accomplishments that we're proud of

We turned an approved visual prototype into a cohesive Twitch-connected application and completed streamer sign-in into a channel workspace.

We built a moderation workflow that preserves human decision-making, protects credentials on the server, and keeps channel data scoped to authorized access.

We also developed 32 passing unit tests covering areas such as cryptography, confirmation binding, moderation rules, database guards, provider failures, and health-check recovery.

What we learned

We learned that external integrations need more than a successful API response. Authentication, permissions, persistence, webhook delivery, and recovery behavior must work together.

We also learned to treat operational feedback as part of the product. A stale error can mislead users just as much as a missing feature.

Working with Codex helped us iterate quickly, while reviewing its changes and testing assumptions remained essential.

What's next for CrowdPlay Moderation

Our next milestone is verifying the complete flow from Twitch chat delivery to stored messages and dashboard updates on a public HTTPS deployment.

After that, we want to evaluate the workflow with consenting streamers, improve onboarding and subscription status feedback, and measure review usability.

We may revisit Jev classification after validating its usefulness, cost, and behavior against a labeled evaluation dataset.

Built With

  • accessibility
  • analytics
  • chat-moderation
  • community-management
  • dashboard
  • developer-tools
  • eventsub
  • human-in-the-loop
  • mongodb
  • mongodb-atlas
  • next.js
  • node.js
  • oauth
  • openai-codex
  • privacy
  • radix-ui
  • react
  • recharts
  • streamer-tools
  • tailwind-css
  • twitch
  • typescript
  • webhooks
  • zod
Share this project:

Updates

Submission history