Once your schedule has been parsed, Inforario transitions from the landing screen to theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/DavidCevallos15/inforario-IA-null/llms.txt
Use this file to discover all available pages before exploring further.
ScheduleDashboard — the central hub that combines the weekly timetable, customization controls, export actions, and modal dialogs into a single responsive layout. The dashboard automatically selects the right view for your screen size and keeps all UI state (theme, font scale, title edits) in sync with the database.
ScheduleDashboard
ScheduleDashboard is the top-level container rendered when AppView is DASHBOARD. It owns the following state:
| State | Type | Purpose |
|---|---|---|
theme | ScheduleTheme | Visual theme applied to the grid |
fontScale | number | Scaling factor for text, range 0.7–1.5 |
customizerOpen | boolean | Controls the CustomizerSidebar slide-in panel |
actionsMenuOpen | boolean | Controls the export dropdown menu |
isExporting | boolean | Disables the export button during PDF generation |
isEditingTitle | boolean | Switches the title between display and edit mode |
tempTitle | string | Holds the in-progress title value during editing |
calendarModalOpen | boolean | Opens the .ics calendar sync dialog |
resetModalOpen | boolean | Opens the reset / clear confirmation dialog |
isMobile flag is derived from useMediaQuery('(max-width: 768px)') and determines which schedule component is rendered.
Desktop View — ScheduleGrid
On screens wider than 768 px,ScheduleGrid renders the classic weekly timetable. It is a CSS grid with a fixed 50 px time column on the left and five equal day columns (Lunes through Viernes) to the right.
getScheduleHoursRange from timeSelectors.ts, which scans all non-virtual sessions to find the earliest start hour and latest end hour, clamped to a minimum window of 4 hours.
Each ClassSession is positioned absolutely within its day column:
AlertTriangle icon in the top-right corner of their card and override the normal background with the error container color. Clicking any card opens a detail modal showing subject, teacher, day, time, location, and floor.
Virtual sessions (those without a scheduled day) are rendered in a separate Materias Virtuales / Sin Horario Fijo section below the grid, displayed in a responsive card grid.
Mobile View — ScheduleList
On screens 768 px wide or narrower,ScheduleList takes over. It groups sessions by day of the week, sorts them by startTime, and renders each as a tappable card in a vertical list powered by Framer Motion stagger animations.
Each session card shows:
- Time range (with a clock icon)
- Subject name
- Teacher (first name only, truncated)
- Location (room part before the
" - "separator) - A CHOQUE badge (error style) when
conflict: true
Both views share an identical detail modal — tapping any session card in either view opens the same
Modal component showing the full session details and, for conflicting sessions, a Resolver Conflicto action button.Inline Title Editing
The schedule title displayed in the dashboard header is fully editable without navigating to a settings page.Enter edit mode
Click the schedule title. A
PenTool icon appears on hover as a visual hint. Clicking switches the <h2> for an <input> pre-filled with the current title.Font Scaling (Zoom)
Font scale controls are available in both layouts:- Desktop: a vertical pill widget (sticky, positioned to the left of the grid) with
ZoomIn/ZoomOutbuttons and a percentage readout. - Mobile: a compact horizontal control row in the dashboard header.
fontScale value is forwarded to ScheduleGrid as a prop and applied to every text element via inline fontSize styles (e.g. fontSize: ${12 * fontScale}px).
PDF Export
The Exportar → Documento PDF action in the actions dropdown triggershandleDownload, which generates a landscape A3 PDF using jsPDF.
PDF generation details
PDF generation details
The export pipeline:
- Creates a
jsPDFinstance in landscape A3 orientation. - Reads the active
themeto select typography, colors, and grid style from an internalthemeConfigmap coveringDEFAULT,MINIMALIST,SCHOOL, andNEONpresets. - Draws the page background, university name, faculty, student name, academic period, and generation date in the header.
- Computes
minHour/maxHourfrom the session data to size the grid rows. - Draws vertical and horizontal grid lines, day headers, and hour labels.
- For each regular session, calculates its x/y position and height in millimetres, fills the cell with the session’s
color, and uses thehexToRgb+getPdfTextColorhelpers to choose a legible text color. - Conflict sessions are rendered in
rgb(255, 0, 110)regardless of their assigned color. - Virtual sessions are appended below the grid in compact cards.
- Saves the file as
horario_<academic_period>.pdf.
Actions Menu
The Exportar button opens a dropdown with two export options:Documento PDF
Generates and downloads a landscape A3 PDF styled with the active theme. The button shows a spinning
RefreshCw icon while isExporting is true.Archivo de Calendario
Opens the
CalendarModal which calls generateICS with start and end date inputs, producing a downloadable .ics file compatible with Google Calendar, Apple Calendar, and Outlook.AppView Transitions
ScheduleDashboard is shown when App.tsx holds AppView.DASHBOARD. The Nuevo button triggers the ConfirmResetModal — confirming calls onReset(), which sets the schedule back to null and returns to AppView.LANDING.
Schedule Data Shape
TheSchedule interface that drives both views:
Supabase row UUID. Present only after the schedule has been saved to the database.
User-editable schedule title, defaulting to
"Mi Horario Académico" on first parse.Normalized academic period string (e.g.
"SEPTIEMBRE 2025 - ENERO 2026").Faculty name displayed in the dashboard header subtitle.
All parsed class sessions — both regular (with day + times) and virtual.
Timestamp of the last modification, used for ordering in the saved schedules list.