Thanks for contributing to HeadlessX.
- Read the main README
- Review the Setup Guide
- Review the API Reference
- Follow the project Code of Conduct
- Install dependencies:
pnpm install- Create your environment files:
cp .env.example .envIf you are using Docker for infrastructure:
cp infra/docker/.env.example infra/docker/.env- Prepare local services and runtime dependencies as needed:
pnpm db:push
pnpm camoufox:fetch- Start the workspace:
pnpm devImportant:
pnpm devstarts the app processes, not PostgreSQL or Redis- queue-backed features require Redis and the worker
- YouTube features now work in the full Docker stack through the bundled
yt-engineservice, or locally throughpnpm yt-engine:dev
apps/api- Express API, worker, queue flows, MCPapps/web- Next.js dashboardapps/yt-engine- Python YouTube engineapps/go-html-to-md-service- Go HTML-to-Markdown sidecardocs- setup, API, and project guides
- Fork the repository
- Create a focused branch
- Make your changes
- Run the relevant checks
- Open a pull request with a clear summary
Run the checks relevant to your changes before opening a pull request:
pnpm build
pnpm lintAdd any extra app-specific verification that applies to your change.
- Keep changes focused and reviewable
- Update docs when behavior, setup, routes, or configuration change
- Include screenshots for UI changes when useful
- Mention infrastructure requirements if your change depends on Redis, PostgreSQL, Docker, or external services
- Use imperative mood
- Keep the first line concise
- Prefer conventional, scoped messages when possible
Examples:
feat(api): add remote MCP endpointfix(web): align scraper run button stylesdocs: refresh setup and API guides