Skip to content

Repository files navigation

Googleplex

A macOS Electron app that unifies Google services — Gmail, YouTube, News, Calendar, and Play Library — behind a friendly, accessible home dashboard.

Prerequisites

  • Node.js 20+
  • macOS (v1 target)
  • A Google Cloud project with OAuth credentials

Google Cloud Setup

Follow these steps to configure OAuth and enable the required APIs.

1. Create a Google Cloud project

  1. Go to Google Cloud Console
  2. Create a new project (e.g. "Googleplex")

2. Enable APIs

In APIs & Services → Library, enable:

API Used for
Gmail API Inbox threads and messages
YouTube Data API v3 Subscriptions and video feed
Google Calendar API Upcoming events on home dashboard
Data Portability API Play Library (books, movies, music) — Phase 2

News uses public Google News RSS and does not require an API.

3. Configure OAuth consent screen

  1. Go to APIs & Services → OAuth consent screen
  2. Choose External (or Internal if using Google Workspace)
  3. Fill in app name, support email, and developer contact
  4. Add scopes:
    • openid, email, profile
    • https://www.googleapis.com/auth/gmail.readonly
    • https://www.googleapis.com/auth/gmail.modify
    • https://www.googleapis.com/auth/gmail.compose
    • https://www.googleapis.com/auth/youtube.readonly
    • https://www.googleapis.com/auth/youtube.force-ssl (manage playlists, add videos)
    • https://www.googleapis.com/auth/calendar.readonly
    • https://www.googleapis.com/auth/calendar.events (create events from Calendar tab)
    • (Phase 2) https://www.googleapis.com/auth/dataportability.play.library
    • (Phase 2) https://www.googleapis.com/auth/dataportability.youtube.music
  5. Add your Google account as a Test user
  6. Keep publishing status as Testing during development

4. Create OAuth Desktop credentials

  1. Go to APIs & Services → Credentials
  2. Click Create Credentials → OAuth client ID
  3. Application type: Desktop app
  4. Name: "Googleplex macOS"
  5. Copy the Client ID and Client secret

5. Configure redirect URI

The app uses a loopback redirect (http://127.0.0.1:<port>/oauth/callback). For Desktop OAuth clients, Google allows loopback URIs automatically — no manual URI entry needed.

6. Set environment variables

cp .env.example .env

Edit .env:

GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret

Development

npm install
npm run dev

Build

npm run build
npm run dist   # Compiles with electron-vite, packages with electron-builder

Packaging options live in electron-builder.json (not package.json). Output goes to release/.

For app icon, entitlements, code signing, and notarization, see build/README.md.

Architecture

  • Main process: OAuth (PKCE + system browser), JSON file cache, sync scheduler, service adapters
  • Renderer: React + Tailwind UI with Home, Gmail, YouTube, Library, and Settings views
  • Data sources: Official APIs first, Data Portability for Play Library, optional scraper fallback

Connection picker

After sign-in, users choose which services to connect. Each enabled service triggers incremental OAuth consent for its required scopes. Disabled connections never sync.

Play Library note: Google requires Data Portability scopes to be requested in a separate OAuth flow from Gmail, YouTube, and Calendar. Enabling Play Library opens a second consent screen with only Data Portability permissions.

Sync behavior

Service Method Interval
Gmail Gmail API 5–15 min (configurable)
YouTube YouTube Data API 15–30 min
News Google News RSS 15–30 min
Gemini Gemini API (API key) On demand
Calendar Calendar API 15–30 min
Play Library Data Portability API Once per 24 hours

Keyboard shortcuts

  • ⌘1 Home
  • ⌘2 Gmail
  • ⌘3 YouTube
  • ⌘4 Calendar
  • ⌘5 Library
  • ⌘6 News
  • ⌘, Settings

YouTube playlists, mixes, and downloads

The YouTube tab includes three sections:

  • Feeds — subscriptions, uploads, activity, and liked videos (YouTube Data API)
  • Playlists — your user-created playlists and their videos
  • Mixes — auto-generated mixes fetched via yt-dlp (Python child process)

yt-dlp setup (mixes + downloads)

Mixes and video downloads require Python 3 and yt-dlp:

pip install -r scripts/requirements.txt

The app runs scripts/ytdlp_worker.py as a child process. Downloads use the folder set in Settings → YouTube download folder, or you can pick a folder when downloading from a video.

Note: Downloading YouTube videos may violate YouTube's Terms of Service. Use only for content you have the right to download.

Notes

  • Gmail and YouTube require OAuth verification for public release; Testing mode supports up to 100 test users
  • If star, archive, or send fail with a permissions error, go to Settings → Connections, toggle Gmail off and on, and re-consent to grant compose/modify access
  • If playlist create/add fails, toggle YouTube off and on in Settings to grant youtube.force-ssl access
  • Data Portability exports are async batch jobs — library updates are not real-time
  • The optional scraper may violate Google ToS; it is disabled by default

About

Electron App that connects google apis into one place

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages