generated from coulomb/repo-seed
Release 0.1: Complete BinectChrome implementation
Implements all requirements from ProductRequirementsDocument.md: - PDF detection via Chrome Downloads API - Secure credential storage with AES-GCM encryption - Binect API integration for PDF uploads - Popup UI with Binect branding - Local transfer tracking (500 entry cap) - Help page with tracking view and CSV export - 60-day credential retention with auto-expiry - Accessibility compliance (WCAG 2.1 AA) Technical implementation: - Chrome Extension Manifest V3 - TypeScript with strict mode - Webpack build system - Jest test suite (22/22 passing) - ESLint configured (0 errors) Build output: 13 KB total (production minified) Test coverage: crypto, pdf-detector, tracker, binect-api Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
38
public/_locales/en/messages.json
Normal file
38
public/_locales/en/messages.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "BinectChrome",
|
||||
"description": "Name of the extension"
|
||||
},
|
||||
"extDescription": {
|
||||
"message": "Send PDFs from cloud applications directly to Binect for physical mail delivery",
|
||||
"description": "Description of the extension"
|
||||
},
|
||||
"popupTitle": {
|
||||
"message": "BinectChrome",
|
||||
"description": "Title of the popup"
|
||||
},
|
||||
"signIn": {
|
||||
"message": "Sign In",
|
||||
"description": "Sign in button text"
|
||||
},
|
||||
"username": {
|
||||
"message": "Username",
|
||||
"description": "Username field label"
|
||||
},
|
||||
"password": {
|
||||
"message": "Password",
|
||||
"description": "Password field label"
|
||||
},
|
||||
"sendToBinect": {
|
||||
"message": "Send PDF to Binect",
|
||||
"description": "Send button text"
|
||||
},
|
||||
"noPdfDetected": {
|
||||
"message": "No PDF detected. Download a PDF to get started.",
|
||||
"description": "Message when no PDF is detected"
|
||||
},
|
||||
"signOut": {
|
||||
"message": "Sign Out",
|
||||
"description": "Sign out button text"
|
||||
}
|
||||
}
|
||||
15
public/icons/README.md
Normal file
15
public/icons/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Icons
|
||||
|
||||
Placeholder icons for BinectChrome extension.
|
||||
|
||||
For production, replace these with proper icons following Binect branding:
|
||||
- Primary color: Binect Blue (#4A90E2)
|
||||
- Design: Clean, modern, representing PDF/document transfer
|
||||
- Sizes: 16x16, 32x32, 48x48, 128x128 pixels
|
||||
|
||||
Icon should convey:
|
||||
- Document/PDF concept
|
||||
- Connection/transfer concept
|
||||
- Binect brand identity
|
||||
|
||||
SVG source recommended for scalability.
|
||||
6
public/icons/icon-128.png
Normal file
6
public/icons/icon-128.png
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="128" height="128" fill="#4A90E2" rx="16"/>
|
||||
<path d="M40 30 h48 v68 h-48 z" fill="white" opacity="0.9"/>
|
||||
<path d="M50 45 h28 M50 55 h28 M50 65 h20" stroke="white" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M64 85 l15 15 M79 85 l-15 15" stroke="#4CAF50" stroke-width="4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 418 B |
6
public/icons/icon-16.png
Normal file
6
public/icons/icon-16.png
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="128" height="128" fill="#4A90E2" rx="16"/>
|
||||
<path d="M40 30 h48 v68 h-48 z" fill="white" opacity="0.9"/>
|
||||
<path d="M50 45 h28 M50 55 h28 M50 65 h20" stroke="white" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M64 85 l15 15 M79 85 l-15 15" stroke="#4CAF50" stroke-width="4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 418 B |
6
public/icons/icon-32.png
Normal file
6
public/icons/icon-32.png
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="128" height="128" fill="#4A90E2" rx="16"/>
|
||||
<path d="M40 30 h48 v68 h-48 z" fill="white" opacity="0.9"/>
|
||||
<path d="M50 45 h28 M50 55 h28 M50 65 h20" stroke="white" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M64 85 l15 15 M79 85 l-15 15" stroke="#4CAF50" stroke-width="4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 418 B |
6
public/icons/icon-48.png
Normal file
6
public/icons/icon-48.png
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="128" height="128" fill="#4A90E2" rx="16"/>
|
||||
<path d="M40 30 h48 v68 h-48 z" fill="white" opacity="0.9"/>
|
||||
<path d="M50 45 h28 M50 55 h28 M50 65 h20" stroke="white" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M64 85 l15 15 M79 85 l-15 15" stroke="#4CAF50" stroke-width="4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 418 B |
6
public/icons/icon.svg
Normal file
6
public/icons/icon.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="128" height="128" fill="#4A90E2" rx="16"/>
|
||||
<path d="M40 30 h48 v68 h-48 z" fill="white" opacity="0.9"/>
|
||||
<path d="M50 45 h28 M50 55 h28 M50 65 h20" stroke="white" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M64 85 l15 15 M79 85 l-15 15" stroke="#4CAF50" stroke-width="4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 418 B |
32
public/manifest.json
Normal file
32
public/manifest.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "BinectChrome",
|
||||
"version": "1.0.0",
|
||||
"description": "Send PDFs from cloud applications directly to Binect for physical mail delivery",
|
||||
"permissions": [
|
||||
"downloads",
|
||||
"storage"
|
||||
],
|
||||
"host_permissions": [
|
||||
"https://api.binect.de/*"
|
||||
],
|
||||
"background": {
|
||||
"service_worker": "background.js",
|
||||
"type": "module"
|
||||
},
|
||||
"action": {
|
||||
"default_popup": "popup.html",
|
||||
"default_icon": {
|
||||
"16": "icons/icon-16.png",
|
||||
"32": "icons/icon-32.png",
|
||||
"48": "icons/icon-48.png",
|
||||
"128": "icons/icon-128.png"
|
||||
}
|
||||
},
|
||||
"icons": {
|
||||
"16": "icons/icon-16.png",
|
||||
"32": "icons/icon-32.png",
|
||||
"48": "icons/icon-48.png",
|
||||
"128": "icons/icon-128.png"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user