Project Info
Inspiration
Planify came from a small frustration I kept having. I’d often get event invites through emails or websites and forget to add them to my calendar. It felt repetitive to copy all the details, switch tabs, and check my schedule every time. I wanted to build something that could make that process easier and faster.
What it does
Planify is a Chrome extension that automatically detects event information from any webpage or email. It checks your Google Calendar to show whether you’re available and lets you add or edit events right there, without switching tabs. It’s meant to help people stay organized while browsing without interrupting their flow.
How we built it
We built Planify using a Chrome extension frontend and a Node.js/Express backend. The extension sends webpage content to the backend, which uses Anthropic’s API to extract event details with natural language processing. Then it connects to the Google Calendar API to check for conflicts and availability. We implemented OAuth2 so users can log in securely with their Google account.
Challenges we ran into
Getting Google’s OAuth flow to work inside a Chrome extension was one of the hardest parts. We also struggled with parsing inconsistent event formats from different websites. Debugging CORS issues and keeping the extension lightweight while handling all these features took a lot of testing and iteration.
Accomplishments we're proud of
We’re proud that the extension works smoothly across different websites and integrates seamlessly with Google Calendar. Seeing event details automatically appear and being able to add them with one click felt like a big win. It was also satisfying to connect AI, backend logic, and frontend UI all in one project.
What we learned
We learned a lot about how Chrome extensions are structured and how different parts communicate with each other. Implementing OAuth2 and handling API calls securely taught us a lot about authentication. We also got hands-on experience using AI models to extract useful information from messy real-world text.
What's next
for Planify Next, we want to make Planify not just detect events but also suggest what to do during free time slots in the calendar. For example, it could recommend nearby events, study sessions, or personal tasks based on your interests and schedule. The goal is to turn Planify into a smarter assistant that helps you make better use of your time, not just manage it.
📅 Planify - Smart Event Calendar Extension
Transform any webpage into calendar events with AI - no tab switching required
Planify instantly extracts event information from any webpage and shows you if you're available at that time slot - all without leaving your current page.
🎯 The Problem It Solves
Without Planify: You receive event invitations via email/websites and need to:
- Open each email/website
- Manually note event details
- Switch to Google Calendar
- Check availability
- Create new events if attending
With Planify: Simply:
- Click the extension icon on any page with event information
- Instantly see your availability and conflicts
- Click "Add" to save events you want to attend
- Continue browsing - no tab switching needed!
✨ Key Features
- 🤖 AI-Powered Extraction: Automatically identifies events from any webpage
- ⚡ Instant Availability Check: Shows conflicts and nearby events immediately
- 🎯 One-Click Adding: Add events to your calendar without leaving the page
- ✏️ Smart Editing: Modify event details before adding
- 🔄 Conflict Detection: Red warnings for conflicts, yellow for nearby events
- 📧 Email Integration: Works perfectly with Gmail and other email clients
- 👤 Multi-Account Support: Switch between different Google accounts easily
🎬 Video Demo
Coming soon - we'll add a demo video showing Planify in action!
🛠️ Setup Instructions
Prerequisites
- Google Cloud Platform account
- Anthropic account
Step 1: Google Cloud Setup
-
Create a Google Cloud Project:
- Go to Google Cloud Console
- Create a new project named "Planify Extension"
-
Enable Google Calendar API:
- Go to "APIs & Services" > "Library"
- Search for "Google Calendar API" and enable it
-
Create OAuth2 Credentials:
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth 2.0 Client IDs"
- Choose "Web application"
- Add authorized redirect URI:
http://localhost:8080/auth/google/callback - Download the credentials JSON file
-
Configure OAuth Consent Screen:
- Go to "APIs & Services" > "OAuth consent screen"
- Choose "External" user type
- Fill in required fields (app name: "Planify", user support email, etc.)
- Add scopes:
https://www.googleapis.com/auth/calendarandhttps://www.googleapis.com/auth/userinfo.email
Step 2: Anthropic API Setup
-
Create Anthropic Account:
- Go to Anthropic Console
- Sign up or log in
-
Generate API Key:
- Navigate to "API Keys" section
- Click "Create Key" and copy the generated key
Step 3: Local Development Setup
-
Install and Configure:
git clone <your-repo-url> cd planify-calendar-extension npm install -
Set up Environment:
- Copy
.env.exampleto.env - Fill in your API keys:
ANTHROPIC_API_KEY=your_anthropic_key_here GOOGLE_CLIENT_ID=your_google_client_id_here GOOGLE_CLIENT_SECRET=your_google_client_secret_here GOOGLE_REDIRECT_URI=http://localhost:8080/auth/google/callback PORT=8080 - Copy
-
Start the Server:
docker build -t planify-server .docker run -p 8080:8080 planify-server -
Load Extension in Chrome:
- Open Chrome and go to
chrome://extensions/ - Enable "Developer mode" (toggle in top right)
- Click "Load unpacked" and select the extension folder
- Open Chrome and go to
Step 4: First-Time Authentication
-
Connect Google Calendar:
- Click the Planify extension icon
- Click the user icon (👤) in the top right
- Click "Use another account"
- Complete Google OAuth flow in the popup window
-
Test the Extension:
- Visit any webpage with event information (try a Gmail invitation)
- Click the Planify extension icon
- Click "Extract Events from Page"
- You should see extracted events with availability information
📦 Chrome Web Store Submission
Preparing for Submission
-
Create Extension Package:
- Ensure all files are in the extension folder
- Remove any development files (
.env,node_modules, etc.)
-
Create Store Assets:
- Icons: 16x16, 48x48, 128x128 PNG files (already included)
- Screenshots: 1280x800 or 640x400 PNG files
- Promotional Images: 440x280 PNG for featured placement
Submission Process
-
Developer Account:
- Go to Chrome Web Store Developer Dashboard
- Pay the one-time $5 registration fee
-
Upload Extension:
- Click "Add new item"
- Upload your extension ZIP file
- Fill in store listing details
- Submit for review
-
Review Process:
- Google typically reviews within 1-3 business days
- Address any feedback or policy violations
- Once approved, your extension goes live!
🔧 Technical Details
Architecture
- Frontend: Chrome Extension (HTML/CSS/JavaScript)
- Backend: Node.js/Express server
- AI: Anthropic Claude for event extraction
- Calendar: Google Calendar API for scheduling
Security
- All API calls go through your secure local backend
- Google OAuth2 handles authentication securely
- No sensitive data stored locally in the extension
🐛 Troubleshooting
Events not extracting:
- Make sure the backend server is running (
npm start) - Check that the server is accessible at
http://localhost:8080
Can't add to calendar:
- Ensure Google Calendar is connected (click the user icon)
- Verify your Google OAuth2 credentials are correct
Extension not loading:
- Make sure all files are in the same folder
- Check Chrome's extension error messages
📄 License
MIT License - feel free to use, modify, and distribute!
Ready to never miss another event? Install Planify and transform how you manage your calendar! 🚀
Analysis
View
Metric
- 21
- 10
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- ExpressIn code
- HTMLIn code
- JavaScriptIn code
- Node.jsClaimed
5 of 6 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
71 KB
Source files
8
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
hieuduong61/calhack25
20 files · 882 KB · @ 26e1011
Structure
Interface
3 files · 15%Screens, components and styles rendered to the user.
Application logic
5 files · 25%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript80%
- Markdown8%
- CSS8%
- HTML4%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 7- @anthropic-ai/sdk
- cors
- dotenv
- express
- googleapis
- jsdom
- node-fetch
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.