Skip to content

nodesagar/parsecal

Repository files navigation

πŸ“… ParseCal

Turn PDFs, images, and text into calendar events β€” powered by AI.

Next.js TypeScript Tailwind CSS Supabase


ParseCal Hero


πŸ’‘ The Problem

Ever received a class timetable as a PDF, a screenshot of a meeting invite, or a messy text dump from a group chat and wished it would just appear in your calendar?

Manual entry is a crime against productivity. ParseCal fixes this.

✨ Core Features

  • πŸ“„ Universal Input β€” Extract schedules from PDFs, images (even messy whiteboard photos), or plain text.
  • πŸ€– Multi-Model AI β€” Powered by Gemini 1.5 Pro (Primary), with fallback support for OpenAI GPT-4o and Claude 3.5 Sonnet.
  • ✏️ Smart Review β€” AI extracts titles, dates, times, locations, and recurrence rules. You review and tweak before finalizing.
  • πŸ“† Direct Integration β€” Push events directly to Google Calendar via OAuth2 or Outlook (coming soon).
  • πŸ“₯ Universal Export β€” Download standard .ics files compatible with Apple Calendar, Outlook, and more.
  • πŸ” Dossier Management β€” Search, filter by status, multi-select, and bulk manage your parsed sessions.
  • πŸš₯ Rate Limiting β€” Production-ready balancing with per-user, per-IP, and global daily limits.

πŸ› οΈ Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
Language TypeScript + Zod
Styling Tailwind CSS 4 (Industrial Minimalist)
Backend Supabase (PostgreSQL, Auth, Storage)
Intelligence Google Gemini, OpenAI, Anthropic
Calendar Google Calendar API + ical-generator
Icons Lucide React

πŸš€ Getting Started

Prerequisites

  • Node.js 18+
  • A Supabase project (Auth & Database)
  • At least one AI Provider Key (Gemini recommended)
  • Google Cloud Console project with Calendar API enabled

1. Clone & Install

git clone https://github.com/nodesagar/parsecal.git
cd parsecal
npm install

2. Configure Environment

Create a .env.local file in the root:

# Supabase
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
SUPABASE_UPLOADS_BUCKET=uploads

# AI Providers
GEMINI_API_KEY=your_gemini_key
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key

# Google OAuth
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REDIRECT_URI=http://localhost:3000/api/auth/calendar/google/callback

3. Database Initialization

Execute the migrations found in supabase/migrations/ within your Supabase SQL Editor:

  • 001_initial_schema.sql
  • 002_add_session_title.sql
  • 003_add_uploads_storage_bucket.sql

4. Launch

npm run dev

Visit localhost:3000 to start parsing.

πŸ“ Project Architecture

src/
β”œβ”€β”€ app/                  # Next.js App Router (Auth/Protected/API)
β”œβ”€β”€ components/           # UI Design System (Dashboard/Parse/Review)
β”œβ”€β”€ lib/                  # Core Logic (AI Abstraction, Calendar, Supabase)
β”œβ”€β”€ hooks/                # Custom React Hooks
└── types/                # Strict Type Definitions

Built with ❀️ and β˜• by Sagar

Twitter β€’ GitHub β€’ LinkedIn

If ParseCal saved you time, consider giving it a ⭐!

About

πŸ“… AI-powered schedule parser β€” turn PDFs, images & text into calendar events

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors