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.
- π 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
.icsfiles 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.
| 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 |
- Node.js 18+
- A Supabase project (Auth & Database)
- At least one AI Provider Key (Gemini recommended)
- Google Cloud Console project with Calendar API enabled
git clone https://github.com/nodesagar/parsecal.git
cd parsecal
npm installCreate 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/callbackExecute the migrations found in supabase/migrations/ within your Supabase SQL Editor:
001_initial_schema.sql002_add_session_title.sql003_add_uploads_storage_bucket.sql
npm run devVisit localhost:3000 to start parsing.
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