- English (International version)
- Π ΡΡΡΠΊΠΈΠΉ (Russian version)
Cloudhood is a powerful browser extension that allows users to control HTTP request headers that will be embedded in all web requests. Built with modern web technologies and following Feature-Sliced Design architecture principles.
- Header Management: Create, edit, and manage custom HTTP headers
- Profile System: Organize headers into reusable profiles
- Cross-Browser Support: Works on Chrome and Firefox
- Import/Export: Share profiles between devices and team members
- Real-time Application: Headers are applied instantly to web requests
- Modern UI: Clean, intuitive interface built with React and TypeScript
Header overrides are managed through a Chrome extension popup (React application), stored in browser local storage, and applied to upstream page requests using Chrome's Declarative Net Request API.
- Project Map - Detailed architecture and project structure overview
- Architecture Diagrams - Visual schemas of architecture and data flows
- Developer Guide - Complete developer handbook
- Node.js >= 20.0.0
- pnpm >= 10.10.0
- Chrome or Firefox browser
# Clone the repository
git clone https://github.com/cloud-ru-tech/cloudhood.git
cd cloudhood
# Install dependencies
pnpm install
# Start development server for Chrome
pnpm dev:chrome
# Start development server for Firefox
pnpm dev:firefox- Open
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked extension"
- Select the
build/chromedirectory
- Open
about:debugging - Click "This Firefox"
- Click "Load Temporary Add-on"
- Select
build/firefox/manifest.json
# Run unit tests
pnpm test:unit
# Run with coverage
pnpm test:unit --coverage# Install browsers (first time only)
pnpm exec playwright install
# Run E2E tests
pnpm test:e2e
# Run in CI mode
pnpm test:e2e:ciFor E2E tests, always import the test fixtures:
import { expect, test } from './fixtures';When new UI functionality is added, it must be covered by screenshot E2E tests. Add new scenarios under tests/e2e/screenshot-tests/specs/ and update snapshots with:
pnpm test:e2e:screenshots:update# Chrome development with hot reload
pnpm dev:chrome
# Firefox development with hot reload
pnpm dev:firefox
# Build for Chrome
pnpm build:chromium
# Build for Firefox
pnpm build:firefox
# Build for all browsers
pnpm build
# Lint code
pnpm lintFor local Firefox builds, set the FIREFOX_EXTENSION_ID environment variable:
FIREFOX_EXTENSION_ID=your-extension-id@example.com pnpm run build:firefoxNote: This variable is not needed for GitHub Actions builds as it's automatically set from secrets.
The project follows Feature-Sliced Design architecture:
src/
βββ app/ # Application initialization
βββ pages/ # Pages (widget composition)
βββ widgets/ # High-level UI blocks
βββ features/ # User-facing features
βββ entities/ # Business entities
βββ shared/ # Shared resources
- Frontend: React 18 + TypeScript
- State Management: Effector
- UI Library: @snack-uikit (Cloud.ru internal library)
- Build Tool: Vite
- Testing: Vitest + Playwright
- Architecture: Feature-Sliced Design
pnpm build:chromiumThe extension will be built in the build/chrome directory.
pnpm build:firefoxThe extension will be built in the build/firefox directory.
npm run build:firefox-sourcesCreates a ZIP archive with source code required for Firefox Add-ons submission. Mozilla requires source code submission for extensions that use build tools or minification.
We use GitHub Actions to automate the release process. The workflow:
- Bumps version based on commit messages
- Builds extensions for Chrome and Firefox
- Creates ZIP archives for both platforms
- Creates source code archive for Firefox Add-ons submission
- Publishes to Chrome Web Store and Firefox Add-ons (with source code)
- Creates a GitHub Release with both extension packages
See RELEASE_SETUP.md for details on configuring the release automation.
- Create a feature branch from
main - Make changes following FSD architecture
- Add tests for new functionality
- Run
pnpm lintand fix any issues - Run
pnpm test:unit && pnpm test:e2e - Create a Pull Request
- Use TypeScript strictly
- Follow Feature-Sliced Design architecture
- Add comments for complex logic
- Use Effector for state management
- Write tests for new functionality
Use conventional commits:
feat: add profile export functionality
fix: resolve header saving issue
docs: update documentation
test: add tests for utilities
- Chrome Web Store: Install Cloudhood
- Firefox Add-ons: Install Cloudhood
- GitHub Releases: Latest Releases
Cloudhood is developed by Cloud.ru - a leading Russian cloud provider offering comprehensive cloud solutions and services.
Made with β€οΈ by the Cloud.ru team
