{"id":46099577,"url":"https://github.com/navbytes/pacify","last_synced_at":"2026-03-15T20:54:19.470Z","repository":{"id":269307508,"uuid":"905485423","full_name":"navbytes/pacify","owner":"navbytes","description":"Comprehensive Proxy Configuration Manager for Chrome","archived":false,"fork":false,"pushed_at":"2026-02-19T16:05:04.000Z","size":1032,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-19T19:13:37.296Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/navbytes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-18T23:32:37.000Z","updated_at":"2026-01-25T07:04:34.000Z","dependencies_parsed_at":"2024-12-22T16:26:06.402Z","dependency_job_id":"97f82789-7248-4a8a-87a4-7104cffd3d09","html_url":"https://github.com/navbytes/pacify","commit_stats":null,"previous_names":["navbytes/pacify"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/navbytes/pacify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navbytes%2Fpacify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navbytes%2Fpacify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navbytes%2Fpacify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navbytes%2Fpacify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/navbytes","download_url":"https://codeload.github.com/navbytes/pacify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navbytes%2Fpacify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29981413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-01T19:31:37.207Z","updated_at":"2026-03-01T19:31:37.687Z","avatar_url":"https://github.com/navbytes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PACify - Advanced Proxy Configuration Manager for Chrome\n\n**PACify** is a powerful, modern Chrome extension for managing all types of proxy configurations. Built with Svelte 5 and TypeScript, it provides a professional-grade interface for creating, editing, and switching between different proxy configurations with ease.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Chrome Extension](https://img.shields.io/badge/Chrome-Extension-blue.svg)](https://chrome.google.com/webstore)\n\n## ✨ Key Features\n\n\u003e **📋 Latest Updates:** See [CHANGELOG.md](CHANGELOG.md) for recent changes and version history.\n\n### 🔄 Quick Switch Mode\n\n- **One-Click Proxy Switching**: Click the extension icon to cycle through enabled proxy configurations\n- **Drag-and-Drop Management**: Easily organize which proxies are in the quick switch rotation\n- **Visual Feedback**: Color-coded badges show active proxy at a glance\n- **Smart Toggle**: Enable/disable quick switch mode from the options page\n\n### 🤖 Auto-Proxy (Automatic URL-Based Routing)\n\n**Intelligent automatic proxy switching** based on URL patterns - no manual switching needed!\n\n**Key Features:**\n- **Pattern-Based Rules**: Define URL patterns that automatically route to specific proxies\n- **Multiple Match Types**:\n  - Domain matching (`*.example.com`, `example.com`)\n  - Keyword matching (contains text)\n  - Wildcard patterns for flexible routing\n- **Flexible Routing Options**:\n  - Route to existing proxy configurations\n  - Define inline proxy settings per-rule\n  - Direct connection (no proxy)\n  - Blackhole (block requests)\n- **Smart Fallback**: Configure default routing for URLs that don't match any rule\n- **Rule Management**:\n  - Enable/disable individual rules\n  - Drag-and-drop priority ordering\n  - Rule descriptions for documentation\n- **Pattern Tester**: Test URLs against your rules to preview routing behavior\n- **Visual Rule Editor**: Intuitive interface with color-coded rule cards\n\n**Common Use Cases:**\n- **Work vs Personal**: Route `*.company.com` through corporate proxy, everything else direct\n- **Geographic Routing**: Send `*.netflix.com` to US proxy, `*.bbc.co.uk` to UK proxy\n- **Service Isolation**: Different social media platforms through different proxies\n- **Development**: Route `*.local` and `192.168.*` directly, external sites through proxy\n\n**Technical Implementation:**\n- Powered by PAC (Proxy Auto-Configuration) script generation\n- Real-time rule compilation and validation\n- Optimized pattern matching for performance\n- Supports complex rule sets with hundreds of patterns\n\n### 🎯 Comprehensive Proxy Support\n\n**All Chrome Proxy Modes + Auto-Proxy:**\n\n- **Auto-Proxy Mode**: 🆕 Automatic URL-based routing with visual rule editor (see section above)\n- **System Proxy**: Inherit proxy settings from your operating system\n- **Direct Connection**: Bypass all proxies for direct internet access\n- **Auto-detect (WPAD)**: Automatically discover proxy settings using Web Proxy Auto-Discovery Protocol\n- **PAC Script**: Create and run custom Proxy Auto-Config scripts with full JavaScript support\n- **Manual Configuration**: Set up individual proxy servers for different protocols\n\n### 📝 Professional PAC Script Editor\n\nPowered by CodeMirror 6 (modern, lightweight code editor):\n\n- **Syntax Highlighting**: Full JavaScript syntax highlighting for PAC scripts\n- **IntelliSense**: Smart autocompletion for PAC functions (`FindProxyForURL`, `isInNet`, `dnsResolve`, etc.)\n- **Performance Optimized**: 87% smaller bundle size with faster initialization\n- **Multiple Templates**: Choose from 4 built-in templates:\n  - **Empty**: Start from scratch\n  - **Basic**: Simple proxy routing with internal domain bypass\n  - **Advanced**: Complex routing with subnet detection and URL pattern matching\n  - **Pro**: Enterprise-grade template with failover chains, time-based routing, geo-location handling, and security policies\n- **Theme Support**: Automatic dark/light mode switching based on system preferences\n- **Modern Architecture**: Built with CodeMirror 6's extensible plugin system\n- **URL-Based PAC Scripts**: Load PAC scripts from external URLs\n- **Auto-Update**: Configurable auto-update intervals (15 min to 24 hours) for URL-based scripts\n- **Manual Refresh**: \"Refresh now\" button to immediately fetch latest PAC script\n- **Last Fetched Timestamp**: Shows when script was last updated\n\n### ⚙️ Manual Proxy Configuration\n\n- **Per-Protocol Proxies**: Configure separate proxies for:\n  - HTTP\n  - HTTPS (Secure)\n  - FTP\n  - SOCKS (SOCKS4/SOCKS5)\n- **Shared Proxy Mode**: Use a single proxy for all protocols\n- **Fallback Proxy**: Define backup proxy for failover scenarios\n- **Bypass Rules**: Set up domain/IP bypass list (one per line)\n- **Multiple Proxy Schemes**: Support for HTTP, HTTPS, QUIC, SOCKS4, and SOCKS5\n\n### 🎨 User Interface \u0026 Experience\n\n**Modern Navigation \u0026 Layout:**\n\n- **Button Group Navigation**: iOS/macOS-inspired segmented control for tab switching\n- **View Mode Toggle**: Switch between grid and list layouts for proxy configurations\n- **Show Quick Settings**: Toggle visibility of Quick Switch section\n- **Responsive Design**: Optimized layouts for different screen sizes\n- **Enhanced Proxy Cards**: Three-section layout (Header, Content, Footer) with refined shadows and borders\n\n**Visual Feedback \u0026 Identification:**\n\n- **ACTIVE Badge**: Prominent green badge with ShieldCheck icon on enabled proxies for instant identification\n- **Color-Coded Proxies**: Assign colors to proxies for quick visual identification (8 color options)\n- **Badge Labels**: Customizable 1-4 character labels for proxy identification\n- **Real-Time Status**: Connection status banner shows active proxy\n- **Micro-Animations**: Subtle scale effects on cards (hover, active states)\n\n**Interaction Enhancements:**\n\n- **Tooltips**: Context-sensitive help tooltips throughout the interface\n- **Keyboard Shortcuts**:\n  - `Ctrl+N` / `Cmd+N` (Mac: `Cmd+N`) - Add new proxy configuration\n  - `Escape` - Close modal dialogs\n  - Clear conflict handling to prevent shortcut interference\n- **Drag-and-Drop**:\n  - Custom styled drag ghost with proxy color and shadow\n  - Drop zone highlighting with blue border and background tint\n  - Source item visual feedback (fade, scale, blue ring)\n- **Inline Toggle Switches**: Quick proxy switching directly from configuration cards\n\n**Design System:**\n\n- **Modern UI**: Clean, intuitive interface built with Tailwind CSS 4\n- **Dark Mode Support**: Automatic dark theme based on system preferences\n- **Visual Hierarchy**: Color-coded section headers with icons (Zap, Cable, Database)\n- **WCAG Compliance**:\n  - Level AA: Keyboard navigation with focus-visible states\n  - Level AAA: 44x44px minimum touch targets\n  - Proper ARIA labels and roles\n  - Screen reader friendly\n\n### 💾 Data Management\n\n- **Backup \u0026 Restore**: Export/import all configurations as JSON\n- **Cloud Sync**: Settings sync across Chrome browsers via Chrome Sync Storage\n- **Storage Diagnostics**: Monitor storage usage with visual progress bars\n- **Import Validation**: Automatic validation when restoring from backup\n- **Cache Management**: Intelligent caching with invalidation support\n\n### 🔔 Notifications \u0026 Feedback\n\n- **Unified Notification System**: Chrome system notifications and in-app toast messages\n- **Intelligent Routing**: Automatic selection of notification type based on context (foreground/background)\n- **User Preferences**: Toggle system notifications on/off from Settings\n- **Multiple Types**: Success, error, warning, and info notifications\n- **Persistent Preferences**: Notification settings sync across devices\n- **In-App Toasts**: Non-intrusive toast notifications with auto-dismiss\n\n### 🚀 Startup \u0026 Performance\n\n- **Startup Behavior Control**: Choose to disable proxy on browser launch\n- **Auto-Reload Toggle**: Enable/disable automatic page reload when switching proxies\n- **Smart Initialization**: Message queuing system prevents race conditions during startup\n- **Debounced Saves**: Optimized storage writes reduce unnecessary operations\n- **Mutex Locking**: Prevents concurrent proxy changes\n- **Conditional Tab Reload**: Intelligently reload tabs when proxy changes (skips special Chrome pages)\n\n### 🔒 Privacy \u0026 Security\n\n- **Local-Only Storage**: All data stored in Chrome's local/sync storage\n- **No External Requests**: Extension doesn't transmit data to external servers\n- **No Tracking**: Zero analytics or user tracking\n- **Secure Script Execution**: PAC scripts run in isolated environment\n- **Manifest V3**: Built with latest Chrome extension security standards\n\n### 🌍 Internationalization\n\n- **Multi-Language Support**: Full i18n framework with locale-based messages\n- **12 Languages**: 100% i18n compliance with proper translations for all supported locales\n- **Dynamic Loading**: Messages loaded automatically based on browser locale\n- **Comprehensive Coverage**: All UI elements, tooltips, and messages fully translated\n\n### 📊 Dashboard \u0026 Statistics\n\n- **Quick Stats**: View total proxies, quick switch count, active proxy, and last used\n- **Storage Metrics**: Real-time sync and local storage usage with visual indicators\n- **Proxy Status**: At-a-glance view of all proxy configurations\n- **Activity Tracking**: Track which proxies are used most\n\n## 🏗️ Technical Architecture\n\n### Technology Stack\n\n- **Frontend**: Svelte 5 (with latest runes API)\n- **Language**: TypeScript 5.7+ (strict mode)\n- **Build Tool**: Vite 7 with code splitting\n- **Styling**: Tailwind CSS 4 with PostCSS, tailwind-variants for component styling\n- **Code Editor**: CodeMirror 6 (lightweight, modern)\n- **Icons**: Lucide Svelte (tree-shaken with direct imports)\n- **Testing**: Bun Test + Playwright\n- **Code Quality**: Biome (Rust-based linting \u0026 formatting), Husky (git hooks)\n- **Runtime**: Bun (10x faster than Node.js)\n\n### Project Structure\n\n```text\npacify/\n├── src/\n│   ├── background/          # Manifest V3 service worker\n│   │   └── background.ts    # Message handling, proxy management\n│   ├── popup/               # Extension popup UI\n│   │   ├── Popup.svelte     # Quick proxy switcher\n│   │   └── popup.html\n│   ├── options/             # Options page (full settings)\n│   │   ├── Options.svelte   # Tabbed interface with drag-and-drop\n│   │   └── options.html\n│   ├── components/          # Reusable Svelte components\n│   │   ├── ProxyConfig/     # Configuration modal \u0026 forms\n│   │   ├── DragDrop/        # Drag-and-drop system\n│   │   ├── Tabs/            # Tab navigation\n│   │   └── common/          # Shared UI primitives\n│   ├── services/            # Business logic layer\n│   │   ├── chrome/          # Chrome API abstractions\n│   │   ├── i18n/            # Internationalization\n│   │   ├── CodeMirrorService.ts # CodeMirror editor integration\n│   │   ├── StorageService.ts # Settings persistence\n│   │   ├── ScriptService.ts  # PAC script validation\n│   │   ├── NotifyService.ts  # Notification system (toasts + Chrome notifications)\n│   │   └── LoggerService.ts  # Centralized logging\n│   ├── stores/              # Svelte stores (state management)\n│   │   ├── settingsStore.ts # Central app state\n│   │   ├── proxyStore.ts\n│   │   └── toastStore.ts\n│   ├── interfaces/          # TypeScript type definitions\n│   ├── constants/           # App constants \u0026 templates\n│   └── utils/               # Utility functions\n├── tests/\n│   ├── e2e/                 # Playwright E2E tests\n│   ├── unit/                # Vitest unit tests\n│   └── integration/         # Integration tests\n├── _locales/                # i18n message files\n│   └── en/messages.json\n└── icons/                   # Extension icons\n```\n\n### Chrome Extension Architecture\n\n- **Manifest Version**: 3 (latest)\n- **Service Worker**: Event-driven background script with message queue and alarm-based auto-refresh\n- **Popup**: Lightweight proxy switcher (384px width, 400px height)\n- **Options Page**: Full-featured settings with modern button group navigation\n- **Permissions**: `proxy`, `storage`, `alarms`, `notifications`\n- **Background Tasks**: Automatic PAC script updates using Chrome alarms API\n\n## 🚀 Getting Started\n\n### Installation from Source\n\n1. **Clone the repository:**\n\n   ```bash\n   git clone https://github.com/navbytes/pacify.git\n   cd pacify\n   ```\n\n2. **Install dependencies:**\n\n   ```bash\n   bun install\n   # or: npm install / pnpm install / yarn install\n   ```\n\n3. **Build the extension:**\n\n   ```bash\n   # Production build\n   bun run build\n\n   # Development build with watch mode\n   bun run dev:extension\n   ```\n\n4. **Load in Chrome:**\n   - Navigate to `chrome://extensions/`\n   - Enable \"Developer mode\" (top-right toggle)\n   - Click \"Load unpacked\"\n   - Select the `dist/` directory (or `dev/` for development builds)\n\n### Development Scripts\n\n```bash\n# Development server (for component development)\nbun run dev\n\n# Build extension in watch mode\nbun run dev:extension\n\n# Production build\nbun run build\n\n# Run unit tests\nbun run test\n\n# Run E2E tests\nbun run test:e2e\n\n# Lint code\nbun run lint\n\n# Format code\nbun run format\n\n# Type checking\nbun run check\n```\n\n## 💻 Usage Guide\n\n### Creating Your First Proxy\n\n1. Click the **PACify** icon in Chrome's toolbar\n2. Click **\"Settings\"** (gear icon) to open the options page\n3. Click **\"Add New Script\"** button\n4. Fill in basic information:\n   - **Name**: Give your proxy a descriptive name\n   - **Color**: Choose a color for visual identification\n5. Select **Proxy Mode**:\n   - **System**: Use OS proxy settings\n   - **Direct**: No proxy (direct connection)\n   - **Auto-detect**: WPAD auto-discovery\n   - **PAC Script**: Write custom routing logic\n   - **Manual**: Configure specific proxy servers\n6. Click **\"Save\"** to create the configuration\n\n### Using Quick Switch\n\n1. Open **Options** → **Proxy Configs** tab\n2. Enable **\"Quick Switch Mode\"** toggle\n3. **Drag** proxy configurations to the \"Quick Switch Configs\" section\n4. Click the **extension icon** to cycle through enabled proxies\n5. Badge shows active proxy name (first 3 letters)\n\n### Setting Up Auto-Proxy (Automatic Routing)\n\n1. Click **\"Add Auto-Proxy\"** button (orange button with branch icon)\n2. Configure **Basic Settings**:\n   - **Name**: Descriptive name (e.g., \"Work Router\")\n   - **Color**: Visual identifier\n   - **Badge Label**: 1-4 character label (optional)\n3. **Add Routing Rules**:\n   - Click **\"Add Rule\"** to create a new routing rule\n   - **Pattern**: URL pattern to match (e.g., `*.company.com`, `github.com`, `*.local`)\n   - **Match Type**: Choose domain, keyword, or wildcard matching\n   - **Route To**: Select destination (existing proxy, inline proxy, direct, or blackhole)\n   - **Description**: Optional note for the rule\n   - Enable/disable rules with toggle switch\n4. **Configure Fallback**:\n   - Set default routing for URLs that don't match any rule\n   - Options: direct, existing proxy, or inline proxy\n5. **Test Your Rules**:\n   - Use the Pattern Tester to verify routing\n   - Enter test URLs to see which rule/proxy they match\n6. **Reorder Rules** (optional):\n   - Drag rules to change priority\n   - Rules are evaluated top-to-bottom (first match wins)\n7. Click **\"Save\"** to activate\n\n**Example Configuration:**\n- Rule 1: `*.company.com` → Corporate Proxy\n- Rule 2: `*.github.com` → Direct Connection\n- Rule 3: `netflix.com` → US Proxy\n- Fallback: Direct Connection\n\n### Writing PAC Scripts\n\n1. Create a new proxy configuration\n2. Select **\"PAC Script\"** mode\n3. Choose a template:\n   - **Basic**: For simple internal/external routing\n   - **Advanced**: For subnet detection and pattern matching\n   - **Pro**: For enterprise scenarios with failover\n4. Edit the script in CodeMirror Editor:\n   - Intelligent autocompletion for PAC functions\n   - Available PAC functions: `isInNet`, `dnsResolve`, `shExpMatch`, etc.\n   - Automatic theme switching (dark/light mode)\n   - Test with different URLs before saving\n5. Save and activate the proxy\n\n### Manual Proxy Setup\n\n1. Select **\"Manual Configuration\"** mode\n2. Choose between:\n   - **Shared Proxy**: Same proxy for all protocols\n   - **Per-Protocol**: Different proxies for HTTP, HTTPS, FTP\n3. Enter proxy details:\n   - **Scheme**: http, https, socks4, socks5, quic\n   - **Host**: Proxy server address\n   - **Port**: Proxy server port\n4. Add bypass rules (optional):\n   - Enter domains/IPs to bypass proxy (one per line)\n   - Example: `*.local`, `192.168.*.*`, `localhost`\n\n### Backup \u0026 Restore\n\n**To Backup:**\n\n1. Go to **Options** → **Settings** tab\n2. Click **\"Backup Settings\"**\n3. JSON file downloads with all configurations\n\n**To Restore:**\n\n1. Go to **Options** → **Settings** tab\n2. Click **\"Restore Settings\"**\n3. Select your backup JSON file\n4. All configurations are restored and validated\n\n## 📋 Chrome Permissions\n\nPACify requires minimal permissions:\n\n- **`proxy`**: To manage Chrome's proxy settings\n- **`storage`**: To save configurations locally and sync across devices\n- **`alarms`**: For background auto-refresh of URL-based PAC scripts\n- **`notifications`**: For system notifications when enabled in settings\n\n**No permissions** for network access, browsing history, or tabs data beyond what's necessary for core functionality.\n\n## 🔧 Configuration Options\n\n### App Settings\n\n| Setting                    | Description                                    | Default |\n| -------------------------- | ---------------------------------------------- | ------- |\n| Quick Switch Mode          | Enable one-click proxy cycling                 | `false` |\n| Disable Proxy on Startup   | Clear proxy when browser starts                | `false` |\n| Auto-Reload on Switch      | Automatically reload tabs when changing proxies| `true`  |\n| System Notifications       | Enable Chrome system notifications             | `true`  |\n| Show Quick Settings        | Show/hide Quick Switch section in UI           | `true`  |\n| View Mode                  | Display proxy configs in grid or list layout   | `grid`  |\n\n### Proxy Configuration Fields\n\n| Field        | Type     | Description                                |\n| ------------ | -------- | ------------------------------------------ |\n| Name         | Text     | Proxy configuration name (required)        |\n| Color        | Choice   | Visual color identifier (8 options)        |\n| Mode         | Dropdown | Proxy type (system/direct/auto/PAC/manual) |\n| Quick Switch | Toggle   | Include in quick switch rotation           |\n| Active       | Auto     | Currently active proxy (one at a time)     |\n\n### PAC Script Fields\n\n| Field           | Description                                                        |\n| --------------- | ------------------------------------------------------------------ |\n| Script Data     | JavaScript PAC script content (inline mode)                        |\n| Script URL      | External PAC script URL (alternative to inline)                    |\n| Update Interval | Auto-update frequency (15min - 24hrs) for URL-based scripts        |\n| Last Fetched    | Timestamp showing when URL-based script was last refreshed         |\n| Mandatory       | Fail closed if PAC script fails                                    |\n\n### Manual Proxy Fields\n\n| Field       | Description                                    |\n| ----------- | ---------------------------------------------- |\n| Scheme      | Proxy protocol (http/https/socks4/socks5/quic) |\n| Host        | Proxy server hostname or IP                    |\n| Port        | Proxy server port number                       |\n| Bypass List | Domains/IPs to bypass proxy                    |\n\n## 🧪 Testing\n\n**Test Suite Status:** 113 unit tests passing with comprehensive Chrome API mocks\n\n### Unit Tests\n\n```bash\n# Run all unit tests\nbun run test\n\n# Run with UI\nbun run test:ui\n\n# Run with coverage\nbun run test:coverage\n```\n\n**Recent Improvements:**\n- Fixed test hanging issues with Chrome API mock timing\n- Comprehensive mocks for notifications, tabs, storage, and proxy APIs\n- Enhanced test infrastructure with proper singleton handling\n\n### E2E Tests\n\n```bash\n# Run all E2E tests\nbun run test:e2e\n\n# Run with UI\nbun run test:e2e:ui\n\n# Run smoke tests only\nbun run test:e2e:smoke\n```\n\n**Test Automation:**\n- Playwright-based E2E testing with data-testid attributes\n- Improved test reliability with proper element selectors\n- Smoke tests for critical user flows\n\n## 🤝 Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)\n3. **Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **Push** to the branch (`git push origin feature/amazing-feature`)\n5. **Open** a Pull Request\n\n### Development Guidelines\n\n- Follow TypeScript strict mode with zero type errors\n- Use Svelte 5 runes API (avoid legacy stores in components)\n- Use Biome for linting and formatting (10x faster than ESLint/Prettier)\n- Write tests for new features (unit tests with Bun, E2E with Playwright)\n- Run `bun run lint` and `bun run format` before committing\n- Use `tailwind-variants` for component styling (replaced CVA)\n- Import Lucide icons directly (not from barrel exports) for better tree-shaking\n- Update documentation for significant changes\n\n## 📜 License\n\nThis project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.\n\n## 🛡️ Security \u0026 Privacy\n\n- **Local Storage Only**: All configurations stored in Chrome's local/sync storage\n- **No External Servers**: Extension operates entirely offline\n- **No Analytics**: Zero telemetry or usage tracking\n- **No Third-Party Services**: No external dependencies at runtime\n- **Open Source**: Full source code available for audit\n\nFor more details, see our [Privacy Policy](PRIVACY_POLICY.md).\n\n## 💬 Support \u0026 Feedback\n\n- **Issues**: [GitHub Issues](https://github.com/navbytes/pacify/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/navbytes/pacify/discussions)\n- **Feature Requests**: Open an issue with the \"enhancement\" label\n\n## 🌟 Acknowledgments\n\nBuilt with these amazing open-source projects:\n\n- [Svelte](https://svelte.dev/) - Reactive UI framework\n- [TypeScript](https://www.typescriptlang.org/) - Type-safe JavaScript\n- [CodeMirror 6](https://codemirror.net/) - Modern, lightweight code editor\n- [Vite](https://vitejs.dev/) - Next-generation build tool\n- [Tailwind CSS](https://tailwindcss.com/) - Utility-first CSS framework\n- [tailwind-variants](https://www.tailwind-variants.org/) - Component styling library\n- [Lucide Icons](https://lucide.dev/) - Beautiful icon set\n- [Bun](https://bun.sh/) - Fast JavaScript runtime and package manager\n- [Biome](https://biomejs.dev/) - Rust-based linting and formatting\n- [Playwright](https://playwright.dev/) - Reliable E2E testing\n\nSpecial thanks to all contributors and the open-source community! 🙏\n\n---\n\n**Made with ❤️ by the PACify team**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnavbytes%2Fpacify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnavbytes%2Fpacify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnavbytes%2Fpacify/lists"}