---
title: Contributing
description: How to set up your environment and contribute changes
---

<Callout title="Important" type="warn">
  Before starting work on any new features or major changes, **please open an issue first to discuss
  your proposal and get approval.** We don't want you to **waste time** on work that might not align
  with the project's direction or get merged.
</Callout>
## Overview

This project is a monorepo with two main apps:

- CLI: `apps/cli`
- Documentation site: `apps/web`

## Setup

### Prerequisites

- Node.js (lts)
- Bun (recommended)
- Git

### Install

```bash
git clone https://github.com/AmanVarshney01/create-better-t-stack.git
cd create-better-t-stack
bun install
```

## Develop the CLI

```bash
cd apps/cli
# optional global link for testing anywhere
bun link
# run in watch mode (runs tsdown build in watch mode)
bun dev
```

Now go to anywhere else in your system (maybe like a test folder) and run:

```bash
create-better-t-stack
```

This will run the locally installed CLI.

## Develop the Docs

```bash
# from repo root
bun install
cd packages/backend
bun dev:setup  # you can choose local development too in prompts
```

Copy the Convex URL from `packages/backend/.env.local` to `apps/web/.env`:

```
NEXT_PUBLIC_CONVEX_URL=http://127.0.0.1:3210/
```

Now run `bun dev` in the root. It will complain about GitHub token, so run this in `packages/backend`:

```bash
npx convex env set GITHUB_ACCESS_TOKEN=xxxxx
npx convex env set GITHUB_WEBHOOK_SECRET=xxxxx
```

## Contribution Flow

1. Open an issue/discussion before starting major work
2. Fork the repository
3. Create a feature branch
4. Make changes following existing code style
5. Update docs as needed
6. Test and format

```bash
# CLI
cd apps/cli && bun dev
cd apps/cli && bun run test

# Web
bun dev

# Lint + format checks
bun check
```

7. Commit and push

```bash
git add .
git commit -m "feat(web): ..." # or fix(cli): ...
git push origin <your-branch>
```

8. Open a Pull Request and link any related issues

## Commit Conventions

Use conventional commit messages with the appropriate scope:

- `feat(cli): add new CLI feature`
- `fix(cli): fix CLI bug`
- `feat(web): add new web feature`
- `fix(web): fix web bug`
- `chore(web): update dependencies`
- `docs: update documentation`

## Help

- Issues and Discussions on GitHub
- Discord: https://discord.gg/ZYsbjpDaM5

See full contributor guide in the repository: `.github/CONTRIBUTING.md`.
