Skip to content

Latest commit

 

History

History
103 lines (75 loc) · 3.47 KB

CONTRIBUTING.md

File metadata and controls

103 lines (75 loc) · 3.47 KB

Contributing to Course Builder

Thank you for your interest in contributing to Course Builder! This document provides guidelines and instructions for contributing to the project.

Table of Contents

  1. Getting Started
  2. Development Workflow
  3. Shared Utilities
  4. Code Style
  5. Testing
  6. Pull Requests

Getting Started

  1. Clone the repository: git clone https://github.com/joelhooks/course-builder.git
  2. Install dependencies: pnpm install
  3. Start the development server: pnpm dev

Development Workflow

Course Builder is a monorepo using Turborepo and pnpm workspaces.

  • Apps are in the /apps directory
  • Shared packages are in the /packages directory

Common commands:

  • pnpm build:all - Build all packages and apps
  • pnpm build - Build all packages (not apps)
  • pnpm build --filter="ai-hero" - Build ai-hero app
  • pnpm dev:all - Run dev environment for all packages/apps
  • pnpm dev - Run dev environment for packages only

Shared Utilities

Our monorepo includes shared utility packages under /packages:

  • @coursebuilder/utils-ai: AI-related utilities
  • @coursebuilder/utils-auth: Authentication and authorization utilities
  • @coursebuilder/utils-aws: AWS service utilities
  • @coursebuilder/utils-browser: Browser-specific utilities (cookies, etc.)
  • @coursebuilder/utils-core: Core utilities like guid
  • @coursebuilder/utils-email: Email-related utilities
  • @coursebuilder/utils-file: File handling utilities
  • @coursebuilder/utils-media: Media processing utilities
  • @coursebuilder/utils-resource: Resource filtering and processing utilities
  • @coursebuilder/utils-search: Search functionality utilities
  • @coursebuilder/utils-seo: SEO utilities
  • @coursebuilder/utils-string: String manipulation utilities
  • @coursebuilder/utils-ui: UI utilities like cn

Usage

Import utilities as follows:

// Import from a specific utility file
import { guid } from '@coursebuilder/utils-core/guid'
import { cn } from '@coursebuilder/utils-ui/cn'
import cookieUtil from '@coursebuilder/utils-browser/cookies'

Contributing New Utilities

To contribute a new utility:

  1. Identify the appropriate package for your utility
  2. If you're unsure where a utility belongs, discuss with the team
  3. Use the Plop template to create a new utility:
# Create a new utility package using the template
pnpm plop package-utils <domain> <utilityName> <functionName> "<utilityDescription>"

# Example:
pnpm plop package-utils browser cookies getCookies "Browser cookie utility"
  1. Implement your utility with comprehensive TSDoc comments
  2. Add thorough test coverage
  3. Update apps to use the new shared utility

Code Style

  • Formatting: We use Prettier with our shared configuration.
  • TypeScript: Strict typing is enforced.
  • File naming: Use kebab-case for file names.
  • Function naming: Use camelCase for function names.

Testing

  • pnpm test - Run all tests
  • pnpm test:watch - Run tests in watch mode
  • When adding new functionality, include tests that cover all significant logic.

Pull Requests

  1. Create a feature branch: git checkout -b feature/my-feature
  2. Make your changes and commit them
  3. Push your branch: git push origin feature/my-feature
  4. Open a PR with a clear description of the changes
  5. Ensure all tests pass before requesting review