Getting Started
Before you begin, make sure you have the required tools installed on your system.Prerequisites
Install Bun
Download and install Bun v1.0.0 or higher. Bun is the JavaScript runtime used by Evaly.
Install Node.js
Install Node.js v18.0.0 or higher for the Convex CLI.
Create Convex Account
Sign up for a free Convex account to run the backend services.
Setting Up Your Development Environment
Configure Environment
Create a Set up Convex environment variables through the Convex Dashboard or CLI:
.env.local file in the root directory:Making Your First Contribution
Create a Feature Branch
Create a new branch for your feature or bug fix:Use descriptive branch names:
feature/for new featuresfix/for bug fixesdocs/for documentation updatesrefactor/for code refactoring
Make Your Changes
Write clean, well-documented code following the project’s conventions. Run type checking frequently:
Test Your Changes
Ensure your changes work as expected and don’t break existing functionality. See the Testing guide for details.
Commit Your Changes
Write clear, descriptive commit messages:Good commit message examples:
fix: resolve race condition in test submissionfeat: add support for essay question typedocs: update API documentation for grading endpoints
Project Structure
Understanding the codebase structure will help you navigate and contribute effectively:Development Guidelines
Code Style
- TypeScript: Use strict TypeScript with proper type annotations
- Formatting: The project uses consistent formatting (follow existing patterns)
- Components: Use functional components with hooks
- Naming: Use descriptive names (camelCase for variables, PascalCase for components)
Backend Development (Convex)
- Use
mutation()for data modifications - Use
query()for data reads (automatically cached and reactive) - Use
action()for external API calls or multi-step operations - Always validate inputs with Convex validators (
v.*) - Use
ConvexErrorfor error handling, never standardthrow new Error()
Frontend Development
- Use TanStack Router for navigation and routing
- Use Convex React hooks for data fetching
- Follow the component structure:
pages/→shared/→ui/ - Use Tailwind CSS for styling (no custom CSS files)
- Prefer shadcn/ui components for UI elements
Always check the CLAUDE.md file in the repository root for detailed architectural patterns and conventions.
Common Development Commands
Getting Help
If you need assistance while contributing:- GitHub Issues: Report bugs or request features
- GitHub Discussions: Ask questions and share ideas
- Documentation: Check the
docs/folder for detailed guides
Code Review Process
All contributions go through a code review process:- A maintainer will review your pull request
- You may be asked to make changes or improvements
- Once approved, your changes will be merged
- Your contribution will be included in the next release