Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.deploy.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
APP_URL=https://your-app.workers.dev
SENTRY_ENVIRONMENT=production
# Set this as a Cloudflare secret on both workers instead of committing it here.
SENTRY_DSN=
# Optional trace sample rate from 0 to 1. Defaults to 0.
SENTRY_TRACES_SAMPLE_RATE=
CLOUDFLARE_D1_DATABASE_ID=
CLOUDFLARE_SESSION_KV_ID=
TWITCH_CLIENT_ID=
Expand Down
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
APP_URL=http://localhost:9000
# Allowed hosts for local development - eg. your cloudflare tunnel domain
VITE_ALLOWED_HOSTS=
SENTRY_ENVIRONMENT=development
# Optional. Leave unset locally to keep Sentry disabled.
SENTRY_DSN=
# Optional trace sample rate from 0 to 1. Defaults to 0.
SENTRY_TRACES_SAMPLE_RATE=
TWITCH_CLIENT_ID=
TWITCH_CLIENT_SECRET=
# Generate with `openssl rand -hex 32`
Expand Down
77 changes: 77 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Bug report
description: Report a reproducible problem with the app or repository
title: "[Bug]: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report this. Please provide enough detail for someone else to reproduce the issue.
- type: textarea
id: summary
attributes:
label: Summary
description: What happened?
placeholder: A clear and concise description of the problem.
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: List the exact steps needed to reproduce the problem.
placeholder: |
1. Go to ...
2. Click ...
3. Run ...
4. Observe ...
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen instead?
placeholder: Describe the expected result.
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
description: What happened instead?
placeholder: Describe the actual result.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs or screenshots
description: Paste any relevant logs, stack traces, screenshots, or recordings.
render: shell
- type: input
id: version
attributes:
label: Version or commit
description: Which release, branch, or commit did you test?
placeholder: main, v0.1.0, or a commit SHA
- type: textarea
id: environment
attributes:
label: Environment
description: Share the environment where this happened.
placeholder: |
OS:
Browser:
Node version:
Deployment target:
Local or deployed:
validations:
required: true
- type: textarea
id: additional
attributes:
label: Additional context
description: Add any other useful detail.

8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Documentation
url: https://github.com/Jamesllllllllll/request-bot/blob/main/README.md
about: Review the README and deployment docs before opening a support issue.
- name: Deployment workflow
url: https://github.com/Jamesllllllllll/request-bot/blob/main/docs/deployment-workflow.md
about: Check the deployment guide for Cloudflare setup and production configuration.
38 changes: 38 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Feature request
description: Suggest an improvement or new capability
title: "[Feature]: "
labels:
- enhancement
body:
- type: markdown
attributes:
value: |
Please describe the problem you are trying to solve before proposing a solution.
- type: textarea
id: problem
attributes:
label: Problem or use case
description: What problem are you running into? Who is affected?
placeholder: Describe the use case and why it matters.
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
description: What would you like to happen?
placeholder: Describe the behavior, workflow, or API you want.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: What alternatives have you considered, including workarounds?
placeholder: Describe any other approaches you evaluated.
- type: textarea
id: additional
attributes:
label: Additional context
description: Add links, examples, screenshots, or references if relevant.

22 changes: 22 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Summary

Describe the change at a high level.

## What Changed

-

## How To Test

1.

## Screenshots Or UI Notes

Include screenshots, recordings, or notes for any visible UI change.

## Checklist

- [ ] I tested the change locally
- [ ] I updated docs or examples if needed
- [ ] I called out any follow-up work or known limitations

3 changes: 3 additions & 0 deletions .github/workflows/deploy-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ jobs:
- name: Generate production Wrangler configs
run: npm run deploy:prepare

- name: Apply production D1 migrations
run: npm run db:migrate:remote

- name: Deploy production backend
shell: bash
run: |
Expand Down
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Changelog

All notable changes to this project will be documented in this file.

## [Unreleased]

### Added
- Production-ready Sentry scaffolding for the Cloudflare app and backend workers, with DSN-based opt-in for local development and Cloudflare-managed secrets for deployed environments.
- GitHub issue templates, a pull request template, and a repository `CODE_OF_CONDUCT.md`.

### Changed
- Simplified catalog song source URLs to always derive the Ignition download link from the song source ID instead of storing `source_url` in the database.
- Added a migration to remove the redundant `catalog_songs.source_url` column and updated the sample catalog seed to match the new schema.
- Tightened schema version checks so the app only accepts migrations that are actually present in the repo.
- Expanded deployment and environment documentation for Sentry configuration in local development and production.

## [0.1.0] - 2026-03-18

### Added
- Initial public release of the Twitch request bot with playlist management, dashboard controls, and Cloudflare-backed deployment support.
105 changes: 105 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Code of Conduct

## TL;DR

Be respectful, stay constructive, and keep discussion focused on the work. Harassment, personal attacks, abusive behavior, and sharing private information without permission are not acceptable. If there is a problem, contact the maintainers through GitHub rather than escalating publicly in a thread.

## Our Commitment

In the interest of fostering an open, professional, and respectful community, contributors and maintainers of this project commit to making participation in this project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

We commit to acting and interacting in ways that contribute to an open, technically constructive, and respectful environment.

## Our Standards

Examples of behavior that contributes to a positive environment include:

- Demonstrating empathy and respect toward other people
- Giving and receiving constructive feedback professionally
- Focusing discussion on the work, the code, and the documented behavior
- Being clear about assumptions, tradeoffs, and technical constraints
- Accepting responsibility for mistakes and correcting them promptly

Examples of unacceptable behavior include:

- Harassment, intimidation, threats, or personal attacks
- Trolling, insulting, or derogatory comments
- Public or private abuse directed at contributors, maintainers, or users
- Deliberate misrepresentation of another person’s work or intent
- Publishing someone else’s private information without explicit permission
- Disruptive behavior that repeatedly derails technical discussion or collaboration

## Enforcement Responsibilities

Project maintainers are responsible for clarifying and enforcing these standards and may take appropriate and fair corrective action in response to behavior they deem inappropriate, threatening, offensive, or harmful.

Maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned with this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

## Scope

This Code of Conduct applies within all project spaces, including:

- GitHub issues
- Pull requests
- Discussions tied to the repository
- Review comments
- Project documentation and contribution threads

It also applies when an individual is officially representing the project in public spaces.

## Reporting

If you experience or witness behavior that violates this Code of Conduct, please contact the maintainers through GitHub rather than opening a public argument in an issue or pull request.

For now, use one of these paths:

- Open a GitHub Discussion if the matter can be handled publicly and constructively
- Open an issue only if the problem is about repository process rather than a personal conduct concern
- Contact a maintainer directly through GitHub if the matter should be handled more discreetly

Maintainers will review reports and respond as reasonably as possible based on availability and the information provided.

## Enforcement Guidelines

Maintainers may use the following types of responses when determining consequences for conduct violations:

### 1. Correction

For use when behavior is inappropriate but limited in scope.

Examples:

- A private or public clarification
- A request to stop a specific behavior
- A reminder of project expectations

### 2. Warning

For use when there is a pattern of inappropriate behavior or a more serious single incident.

Examples:

- A formal warning
- Temporary limits on participation in discussions or reviews

### 3. Temporary Ban

For use when behavior causes sustained disruption or creates an unsafe environment.

Examples:

- Temporary suspension from issues, pull requests, or discussions
- Temporary loss of contribution privileges

### 4. Permanent Ban

For use when a participant demonstrates a pattern of harmful behavior or a serious violation that makes continued participation inappropriate.

Examples:

- Permanent removal from project spaces
- Blocking from future participation in the repository

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1, with modifications for this repository’s current reporting workflow.
Loading
Loading