Skip to content

Repository files navigation

Google Calendar Full-Year View

Chrome Extension adding a custom full-year view to Google Calendar.

Design Philosophy

This extension implements a Swiss International Style design system based on the principles of Josef Müller-Brockmann and Karl Gerstner. The visual design uses mathematical hierarchy and objective clarity to communicate data states.

See DESIGN.md for complete design documentation, including:

  • Visual element explanations (blue squares, black baseline strokes)
  • Swiss design principles applied
  • Color system and typographic hierarchy
  • Grid system structure

Implementation Status

All 7 phases implemented:

  • Phase 1: Project Setup & Manifest Configuration
  • Phase 2: OAuth 2.0 Authentication Setup
  • Phase 3: View Injection System
  • Phase 4: Full-Year View Layout
  • Phase 5: Google Calendar API Integration
  • Phase 6: Event Display & Rendering
  • Phase 7: Basic Interactions

Multi-Day Events Feature Complete (2026-01-08):

  • Full CRUD functionality for multi-day events
  • Dedicated "full-year-view" calendar with automatic creation
  • Date range selection (desktop and mobile)
  • Event creation/editing modal with validation
  • 5-event maximum limit enforcement
  • Multi-color event bars with vertical stacking
  • Single-day events from all calendars shown as blue dots

Development Setup

Prerequisites

  1. Install dependencies (for testing):

    npm install
  2. Create icon files (required for extension to load):

    • Create assets/icons/icon-16.png (16x16 pixels)
    • Create assets/icons/icon-48.png (48x48 pixels)
    • Create assets/icons/icon-128.png (128x128 pixels)

    Or use placeholder icons temporarily.

  3. Configure OAuth (required for API access):

    • Create Google Cloud Console project
    • Enable Google Calendar API
    • Configure OAuth consent screen
    • Create OAuth 2.0 Client ID (Chrome Extension type)
    • Add Client ID to manifest.json (replace YOUR_CLIENT_ID)

Load Extension

  1. Open Chrome and navigate to chrome://extensions/
  2. Enable "Developer mode" (toggle in top right)
  3. Click "Load unpacked"
  4. Select the project directory (google-calendar-plugin/)

Testing

npm test              # Run all tests
npm run test:watch    # Watch mode
npm run test:coverage # Coverage report

Note: If tests fail with "jest-environment-jsdom cannot be found", install it:

npm install --legacy-peer-deps jest-environment-jsdom

Technical Notes

  • No build step required: Code uses vanilla JavaScript with global module pattern
  • ES6 modules converted: All imports/exports converted to work in Chrome Extension context
  • Date utilities: Custom implementations replace date-fns for browser compatibility
  • Module loading: All scripts loaded via manifest.json in dependency order

File Structure

google-calendar-plugin/
├── manifest.json              # Extension manifest (V3)
├── package.json               # Dependencies and scripts
├── src/
│   ├── content/              # Content scripts
│   ├── background/            # Service worker
│   ├── popup/                # Extension popup
│   ├── styles/               # CSS files
│   └── utils/                # Utility functions
└── tests/                    # Test files

Troubleshooting

npm Permission Errors

If you get EPERM errors when running npm install:

# Remove macOS extended attributes
sudo xattr -cr ~/.nvm/versions/node/v18.20.8/
npm install --legacy-peer-deps

See FIX_NPM_NOW.md for detailed solutions.

Dependency Conflicts

If you get ERESOLVE errors:

# Use legacy peer deps (already configured in .npmrc)
npm install --legacy-peer-deps

Test Environment Issues

If tests fail with "Cannot find module '@jest/test-sequencer'":

# Remove macOS extended attributes blocking node_modules
sudo xattr -cr node_modules/
npm test

If tests fail with missing jest-environment-jsdom:

npm install --legacy-peer-deps jest-environment-jsdom

See FIX_JEST_NOW.md and FIX_TESTS.md for more details.

Creating Icons

Use the provided icon generator:

  1. Open generate-icons.html in your browser
  2. Click "Generate Icons" or "Download All Icons"
  3. Save icons to assets/icons/ directory:
    • icon-16.png
    • icon-48.png
    • icon-128.png

Distribution

Building for Chrome Web Store

# Build extension
npm run build

# Create package for submission
npm run package

# Output: dist/extension-v{VERSION}.zip

Version Management

# Bump patch version (0.1.0 → 0.1.1)
npm run version:patch

# Bump minor version (0.1.0 → 0.2.0)
npm run version:minor

# Bump major version (0.1.0 → 1.0.0)
npm run version:major

Release Process

See RELEASE_CHECKLIST.md for complete release process.

Chrome Web Store Submission

See store-assets/SUBMISSION_GUIDE.md for detailed submission instructions.

Next Steps

  1. ✅ Install dependencies: npm install --legacy-peer-deps
  2. ✅ Create icon files (use generate-icons.html)
  3. ✅ Configure OAuth credentials (see Prerequisites)
  4. ⚠️ Load extension in Chrome
  5. ⚠️ Test on Google Calendar (manual testing pending)
  6. ⚠️ Run automated tests: npm test (test environment needs fix)
  7. ⚠️ Create store assets (screenshots, descriptions)
  8. ✅ Host privacy policy (hosted at https://saski.github.io/google-calendar-plugin/)
  9. ⚠️ Submit to Chrome Web Store

Current Status: 99% complete - Multi-day events feature implemented. Ready for manual testing and store submission.

About

Chrome Extension adding a custom full-year view to Google Calendar.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages