• Townie
    AI
  • Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
malcolmocean

malcolmocean

FlexCal

Public
Like
3
FlexCal
Home
Code
4
backend
4
frontend
3
shared
2
README.md
Branches
1
Pull requests
Remixes
History
Environment variables
3
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
README.md
Code
/
README.md
Search
5/21/2025
Viewing readonly version of main branch: v47
View latest version
README.md

GCal Playground

A flexible Google Calendar alternative interface that syncs two-way with Google Calendar via OAuth. This application allows for creating and using different views and interfaces for Google Calendar data.

Features

  • OAuth integration with Google Calendar
  • Two-way sync with Google Calendar
  • Vertical-scrolling year view with week-grid layout
  • Custom event formatting and colorization based on rules
  • Secondary calendar for metadata storage
  • Extensible architecture for future interfaces

Project Structure

├── backend/
│   ├── index.ts                 # Main entry point and API routes
│   ├── auth/
│   │   └── google-oauth.ts      # Google OAuth implementation
│   ├── calendar/
│   │   ├── api.ts               # Google Calendar API integration
│   │   ├── events.ts            # Event handling functions
│   │   └── metadata.ts          # Metadata calendar management
│   └── utils/
│       └── formatting.ts        # Event formatting utilities
├── frontend/
│   ├── index.html               # Main HTML template
│   ├── index.tsx                # Frontend entry point
│   ├── components/
│   │   ├── App.tsx              # Main application component
│   │   ├── Auth.tsx             # Authentication component
│   │   ├── views/
│   │   │   ├── ViewSelector.tsx # Interface for selecting views
│   │   │   ├── YearView/        # Year view implementation
│   │   │   │   ├── index.tsx    # Year view component
│   │   │   │   ├── Day.tsx      # Day cell component
│   │   │   │   └── Week.tsx     # Week row component
│   │   │   └── [Future Views]/  # Placeholder for future views
│   │   └── settings/
│   │       ├── FormatRules.tsx  # UI for managing formatting rules
│   │       └── Settings.tsx     # General settings component
│   └── utils/
│       ├── date.ts              # Date manipulation utilities
│       └── formatting.ts        # Event formatting utilities
└── shared/
    ├── types.ts                 # Shared TypeScript types
    └── constants.ts             # Shared constants

Getting Started

  1. Authenticate with your Google account
  2. The app will create a secondary calendar for metadata if it doesn't exist
  3. View your calendar in the vertical-scrolling year view
  4. Create formatting rules for events

Formatting Rules

Events can be formatted based on various criteria:

  • Event title contains specific text
  • Event is in a specific calendar
  • Event has specific properties (all-day, recurring, etc.)
  • Custom rules using simple expressions

Formatting options include:

  • Background color
  • Text color
  • Custom display format (e.g., "XYZ✈ABC" for flights)
  • Visibility options

Future Extensions

The architecture is designed to easily add new views and interfaces in the future.

FeaturesVersion controlCode intelligenceCLI
Use cases
TeamsAI agentsSlackGTM
ExploreDocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.