Skip to main content

susunjadwal-frontend - Documentation

πŸ”Ž Background

Overview​

Susun Jadwal Frontend is the web client for Susun Jadwal, a schedule planning tool that helps students browse course offerings, assemble a conflict-free class plan, and save or share their preferred timetable. The application reduces the manual work of comparing classes, checking schedules, and exporting final plans by providing a single authenticated interface integrated with the Susun Jadwal backend and UI SSO.

Stakeholders​

  • Users: University students using Susun Jadwal and admins
  • Upstream Dependencies: Susun Jadwal backend API, Mixpanel, and Google Analytics.
  • Downstream Consumers: End users in the browser

Scope & Boundaries​

  • In Scope: Frontend routes and user interface changes, CI/CD pipeline modifications, frontend user flow redesign
  • Out of Scope: Backend business rules, course scraping implementation, database schema changes, legacy data migration, and third-party integrations not already wired in this repository.

βš™οΈ Architecture & Design

System Diagram​

Architecture Decisions (ADRs)​

  • Language/Framework: JavaScript, React 16, React Router v5, Redux.
  • Database: PostgreSQL for relational data
  • Communication: Synchronous HTTP calls with axios and fetch API for the SIAK scraping SSE endpoint.

πŸ’»Technical Specifications

API Documentation​

Data Model/Schema​

Project Structure​

susunjadwal-frontend/
β”œβ”€β”€ .github/workflows/ # Preview and production Vercel deployment workflows
β”œβ”€β”€ public/ # Static HTML, manifest, redirects, favicon
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ assets/ # Icons, illustrations, fonts, images
β”‚ β”œβ”€β”€ components/ # Reusable presentational components
β”‚ β”œβ”€β”€ containers/ # Route-level and feature-level screens
β”‚ β”œβ”€β”€ hooks/ # Custom hooks, tests, mocks
β”‚ β”œβ”€β”€ redux/ # Store, reducers, selectors, modules
β”‚ β”œβ”€β”€ services/ # API and SSO integration layer
β”‚ β”œβ”€β”€ styles/ # Chakra and styled-components theme config
β”‚ β”œβ”€β”€ utils/ # Analytics, auth, schedule formatting, helpers
β”‚ β”œβ”€β”€ App.js # App shell, providers, router bootstrap
β”‚ β”œβ”€β”€ config.js # Environment-aware runtime configuration
β”‚ β”œβ”€β”€ index.js # React entry point
β”‚ └── routes.js # Route definitions and auth-protected pages
β”œβ”€β”€ package.json # Dependencies, scripts, lint-staged, engines
└── README.md

Components​

LayerPathsResponsibility
App Shellsrc/App.jsInitializes router, Redux provider, Ads provider, responsive helper, loading overlay, and scroll restoration.
Routingsrc/routes.jsDefines public routes, private routes, and layout composition with header/footer.
Auth Layersrc/services/sso.js, src/utils/auth.js, src/redux/modules/auth.jsHandles CAS redirects, token persistence, token validation, and logout flow.
Schedule Buildersrc/containers/BuildSchedule/Fetches courses by major, filters/searches courses, tracks selection state, and preserves schedule state across refreshes.
Selected Courses and Checkoutsrc/containers/SelectedCourses/, src/containers/BuildSchedule/Checkout.jsSummarizes chosen classes and prepares save flow.
Schedule Listsrc/containers/ScheduleList/Lists saved schedules and supports comparison workflow.
View Schedulesrc/containers/ViewSchedule/Renders timetable detail, rename/delete actions, share modal, image export, and ICS export.
Edit Schedulesrc/containers/EditSchedule/Updates schedule compositions after creation.
Compare Schedulesrc/containers/CompareSchedule/Compares two schedules side by side.
Feedbacksrc/containers/Feedback/, src/containers/Admin/Feedbacks/Captures user reviews and provides admin recap/status management.
Beta Experiencesrc/containers/BetaLanding/, src/containers/BetaForm/, src/containers/CompleteForm/Provides marketing and onboarding-related flows backed by Airtable.
Analyticssrc/hooks/useMixpanel.js, src/utils/analytics.jsTracks route views and user actions via Mixpanel and Google Analytics.

☁️ Operational Playbook

Infrastructure​

Environment Variables​

KeyDescriptionDefault (Dev)Sensitive?
NODE_OPTIONSRuntime configuration options passed to the Node.js process--openssl-legacy-providerNo
REACT_APP_AWS_BACKEND_URLBase URL of the backend APIhttps://stg.api.susunjadwal.cs.ui.ac.id/susunjadwal/api/No
REACT_APP_AWS_BACKEND_URLBase URL of the backend APIhttps://api.susunjadwal.cs.ui.ac.id/susunjadwal/apiNo
REACT_APP_MIXPANEL_PROJECT_TOKENAuthentication token used to send analyticsβ€”Yes

πŸ™‹Questions

πŸ—’ List of frequently asked questions or question that need to be answered that is related to this initiative ..