qnaplus is a project with the purpose of improving the quality of life for the VEX Robotics Q&A. The VEX Robotics Q&A system allows competitors to ask clarifying questions in regards to the current season's game and receive authoritative answers. Because these answers are extensions of the game manual, knowing when questions are answered is pivotal. There is no built-in system for receiving notifications from the Q&A, which is where qnaplus comes in.
- Discord Bot: qnaplus informs competitors of updates through a Discord bot, which is the primary means of communication for most competitors. The notifications come through on the VRC Nexus, a server hub for VEX-related news and information, and competitors can subscribe receive updates in their own servers.
- Web Client: qnaplus comes with a web client that has improved rendering. The client is offline first and comes as a PWA (you can install it as an "app" on your phone), making it an ideal tool in competitions where internet connection is flaky.
- The core of qnaplus is the
updater. Theupdaterchecks for new answers 3 times an hour and propagates any updates it detects to a database. - The
botsubscribes to changes on the database, specifically listening for new answers.
This project uses PNPM Workspaces to manage structure and builds.
| Path | Description |
|---|---|
packages/ |
Internal packages used by services |
packages/dotenv |
Type-safe library for accessing environment variables |
packages/store |
Supabase-related abstractions |
packages/logger |
For creating service-unique loggers |
packages/typescript-config |
Shared config for all packages/services |
packages/utils |
Library for shared utility functions |
services/ |
Applications that tie together the functionality in packages |
services/updater |
Service for continuously watching for updates on the Q&A |
services/bot |
Discord Bot for announcing new answers |
Have a new idea for a feature or found a bug?
- Look through the list of open issues to see if it already exists.
- If nothing exists, create an issue here.
