SynthiCal AI
Product Requirements Document
Product Name: SynthiCal AI
Version: 2.0
Date: April 15th 2025
Product Manager & Developer: Tharun Poduru
1. Introduction
Goals:
- To provide users with an effortless, AI-powered method for extracting event details from any unstructured source — text, URLs, documents, images, and audio recordings.
- To eliminate manual calendar data entry by transforming raw information into structured, downloadable calendar events.
- To offer a privacy-first tool that requires no sign-up, stores no user data, and deletes uploaded files after processing.
Vision: SynthiCal AI aims to become the universal bridge between unstructured event information and structured calendar entries. Whether a user receives a conference schedule in a PDF, a meeting invitation in a screenshot, event details on a web page, or verbal instructions in a voice memo, SynthiCal AI extracts every detail and delivers it directly to their calendar of choice.
2. Target Audience
Primary Users:
- Busy Professionals: Receiving event details across email, Slack, documents, and web links — needing a fast way to get them into their calendar.
- Students: Managing class schedules, club events, and academic deadlines scattered across syllabi, emails, and campus web pages.
- Event Organizers: Processing event listings from partner websites, flyers, and promotional materials.
Secondary Users:
- Administrative Assistants: Extracting meeting details from correspondence and documents on behalf of others.
- Freelancers & Consultants: Managing client meetings and deadlines received in varied formats.
3. User Stories & Use Cases
- US1: As a professional, I want to paste a block of text containing meeting details and receive a structured event I can add to Google Calendar, so I don't have to manually type out dates and times.
- US2: As a student, I want to enter a URL for a campus events page and extract all listed events at once, so I can batch-add them to my calendar.
- US3: As an event organizer, I want to upload an image of a conference flyer and have the event details extracted automatically, so I can quickly create calendar entries for promotion.
- US4: As a user in a meeting, I want to record a voice memo describing upcoming events and have the dates, times, and locations extracted, so I can capture scheduling details hands-free.
- US5: As any user, I want to upload a PDF itinerary and extract all events from it, so I don't have to manually enter each item.
- US6: As any user, I want to select specific extracted events and download only those as a single .ics file, so I can choose which events to add to my calendar.
- US7: As a user in a different timezone, I want to select my timezone before extraction so that relative date references like "tomorrow" or "next Friday" are resolved correctly for my location.
4. Key Features
F1: Multi-Modal Input System
- F1.1: Text input via a textarea for pasting or typing event information.
- F1.2: URL input that fetches, parses, and extracts events from web pages.
- F1.3: Document upload supporting PDF, DOC, DOCX, TXT, and RTF files (max 25 MB).
- F1.4: Image upload supporting PNG, JPG, JPEG, WebP, and HEIF formats (max 25 MB).
- F1.5: In-browser audio recording with 60-second limit, playback preview, and WebM/MP4 capture.
- F1.6: Tabbed interface for switching between input modes (Text, Document, Image, Audio, URL).
F2: AI-Powered Event Extraction
- F2.1: Google Gemini
3.1-pro-previewprocesses all input types for event extraction. - F2.2: Structured JSON output with title, start/end datetime (UTC ISO), location, and description.
- F2.3: Timezone-aware date resolution using current UTC time, user timezone, and local time context.
- F2.4: Automatic end-time inference (start + 1 hour) when only a start time is provided.
- F2.5: Flexible response normalization handling arrays, nested objects, and single events.
F3: Intelligent URL Processing
- F3.1: Primary extraction from JSON-LD
schema.org/Eventstructured data embedded in page markup. - F3.2: Fallback to AI extraction using a focused 4,000-character content snippet when no structured data exists.
- F3.3: HTML parsing via JSDOM with content targeting (
main,article,.content,#content,.post,.entry-content). - F3.4: Graceful error recovery returning a placeholder event rather than a failure state.
F4: Multimodal File Processing
- F4.1: Resumable upload to Gemini Files API with proper MIME type handling.
- F4.2: Polling mechanism for file activation status (up to 45 seconds).
- F4.3: Multimodal content generation combining file reference with extraction prompt.
- F4.4: Automatic file deletion from Gemini servers after processing.
F5: Event Display & Management
- F5.1: Responsive card grid layout (1 / 2 / 3 columns) displaying extracted events.
- F5.2: Individual event selection with visual highlight (ring border).
- F5.3: Select-all and multi-select capabilities for batch operations.
- F5.4: Formatted date/time display with weekday, date, time, and timezone abbreviation.
- F5.5: Description rendering with
[br]to<br/>conversion for formatted text. - F5.6: Source link display for URL-extracted events.
F6: Calendar Export
- F6.1: "Add to Calendar" button per event with dropdown: Google Calendar, Apple Calendar, Outlook.com, iCal.
- F6.2: Individual
.icsfile download per event card. - F6.3: Download selected events as a single
.icsfile. - F6.4: Download all events as a single
.icsfile. - F6.5: Server-side ICS generation using the
icslibrary with UTC date components.
F7: Analytics & Monitoring
- F7.1: Google Analytics 4 integration (opt-in via environment variable).
- F7.2: Event logging for:
extraction_succeeded,extraction_failed,download_all_ics,download_selected_ics. - F7.3: Extraction type and event count tracked per successful extraction.
- F7.4: Error category logged for failed extractions.
5. Non-Functional Requirements
- NFR1: The application shall support all modern desktop and mobile browsers (Chrome, Firefox, Safari, Edge).
- NFR2: Text and URL extraction shall return results within 10 seconds for typical inputs.
- NFR3: File processing (upload, analysis, cleanup) shall complete within 30 seconds for files up to 25 MB.
- NFR4: The UI shall be responsive and usable on screen widths from 320px to 2560px.
- NFR5: No user data shall be stored beyond the browser session lifecycle.
- NFR6: Uploaded files shall be deleted from Gemini's servers immediately after processing.
- NFR7: The system shall handle API errors gracefully with user-friendly error messages.
6. Key Technical Decisions & Considerations
- API Strategy: All AI processing happens server-side via Firebase Cloud Functions (Gen 2). The Gemini API key is stored as a Firebase Secret, never exposed to the client. Text uses the
@google/generative-aiSDK; file processing uses the Gemini REST API directly for resumable uploads. - URL Processing Pipeline: A tiered approach (JSON-LD first, AI fallback second) balances speed, accuracy, and cost. Structured data extraction avoids AI API calls entirely for well-marked-up pages.
- Multipart Handling: Firebase Functions receive raw body buffers, so Busboy is fed via
bb.end(req.rawBody)instead of the standard stream piping approach. - Technology Stack: React 19 with Vite 7 for the frontend; Express 5 on Node.js 20 for the backend; Tailwind CSS 4 for styling;
add-to-calendar-buttonfor cross-platform calendar integration. - No Authentication: Deliberately omitted to minimize friction. The tool is designed for quick, anonymous use — paste, extract, export.
7. Success Metrics (KPIs)
- User Acquisition: 500+ unique users in the first 3 months
- Extraction Accuracy: >85% of event data correctly structured across all input types
- Multi-Modal Usage: >20% of extractions use non-text inputs (URL, file, image, audio)
- Engagement: Average 2+ events extracted per user session
- Export Rate: >60% of extracted events result in a calendar export action
- Uptime: 99.5% monthly availability target
8. Future Considerations
- Direct Google Calendar API integration with OAuth for one-tap event creation
- Chrome extension for contextual extraction from any web page
- Email integration for automatic extraction from inbox messages
- User accounts with extraction history and saved event templates
- Recurring event pattern detection from descriptions
- Batch processing for multi-page documents and long PDFs
- Team sharing — extract events and share structured results with collaborators