ristek-summer-fest-v2 - Documentation
| Document Status | ||
|---|---|---|
| Document Owner | Product Engineering 2026 | Product Engineering 2026 |
| Contributors | ||
| Project Links | https://github.com/RistekCSUI/ristek-summer-fest-v2 | https://github.com/RistekCSUI/ristek-summer-fest-v2 |
| Project Links | https://event.ristek.cs.ui.ac.id | https://event.ristek.cs.ui.ac.id |
| Project Links | [Monitoring Dashboard] | [Monitoring Dashboard] |
| Project Links | [API Documentation] | [API Documentation] |
| Project Links | [Other Related Doc/Link] | [Other Related Doc/Link] |
| Team | Theodore Kevin Himawan | theodore.kevin@ristek.cs.ui.ac.id |
| Team | Ari Darrell Muljono | darrell@ristek.cs.ui.ac.id |
| Team | Grace Karina | gracekarin@ristek.cs.ui.ac.id |
| Team | Yeshua Marco G. Manurung | marco@ristek.cs.ui.ac.id |
π Background
Overviewβ
RISTEK Summer Fest Frontend is the public-facing website and registration portal for the SISTECH and DATATHON programs. It provides event landing pages, registration status countdowns, and multi-step forms that collect participant data and submit it to the RISTEK backend API.
Stakeholdersβ
- Users: Participants
- Upstream Dependencies: Backend API
- Downstream Consumers: End users
Scope & Boundariesβ
- In Scope: Next.js frontend pages, registration flows, client-side form validation, backend API integration, file upload flow, UI components used by SISTECH and DATATHON pages.
- Out of Scope: Backend business logic, backend database schema changes, admin dashboard functionality, infrastructure provisioning, third-party integrations outside the endpoints currently used by the frontend
βοΈ Architecture & Design
System Diagramβ
Architecture Decisions (ADRs)β
- Language/Framework: typescrint, react, NextJs, tailwind CSS
- Database: PostgreSQL
- Communication: Synchronous HTTP
π»Technical Specifications
API Documentationβ
Data Model/Schemaβ
Project Structureβ
ristek-summer-fest-v2/
βββ pages/ # Next.js Pages Router routes for public pages and registration pages
β βββ _app.tsx # app bootstrap, global CSS, default SEO, shared Layout, toast provider
β βββ _document.tsx # custom HTML document wrapper for all pages
β βββ index.tsx # landing page entry point
β βββ sistech.tsx # SISTECH event page with countdown and event-state rendering
β βββ datathon.tsx # DATATHON event page with countdown and event-state rendering
β βββ sistech-registration/index.tsx # SISTECH registration route and registration-window check
β βββ datathon-registration/index.tsx # DATATHON registration route and registration-window check
β βββ success-sistech/index.tsx # SISTECH submission success page
β βββ success-datathon/index.tsx # DATATHON submission success page
βββ components/ # reusable UI modules and feature-specific sections
β βββ containers/ # page sections and event-specific feature containers
β β βββ Hero/ # homepage hero section
β β βββ PickYourField/ # homepage event selection cards
β β βββ LastYearExcitement/ # previous-event showcase and image carousel section
β β βββ Synapse/ # SISTECH event hero and coming-soon sections
β β βββ Medulla/ # DATATHON event hero and coming-soon sections
β β βββ common/ # shared registration flow components used across event forms
β β βββ SistechRegistrationForm/ # SISTECH multi-step form controller
β β βββ DatathonRegistrationForm/ # DATATHON multi-step form controller
β β βββ PersonalInfoSistech/ # SISTECH personal information step
β β βββ RequirementSistech/ # SISTECH requirement upload step
β β βββ AdditionalSistech/ # SISTECH additional information and final step
β β βββ TeamInfoDatathon/ # DATATHON team information step
β β βββ RequirementDatathon/ # DATATHON file upload and submission step
β βββ contexts/ # React Context providers for multi-step form state persistence
β β βββ SistechFormContext/ # shared client-side state for SISTECH registration
β β βββ DatathonFormContext/ # shared client-side state for DATATHON registration
β βββ elements/ # low-level reusable UI building blocks
β βββ Input/ # text, checkbox, dropdown, textarea, and file input components
β βββ Layout/ # navbar, footer, and page shell wrapper
β βββ Modals/ # reusable modal primitives for confirmation and feedback
βββ config/ # runtime configuration and asset source definitions
β βββ config.ts # API base URL and API key selection by environment
β βββ cdn.ts # shared CDN mapping for icons and logos
β βββ ulaskelas-cdn.ts # additional CDN mapping constants
βββ lib/ # shared libraries used across the app
β βββ seo/ # SEO helper wrappers around next-seo defaults and page metadata
βββ styles/ # global style layer for Tailwind and custom CSS
β βββ globals.css # global font, theme variables, animations, and shared utility classes
βββ utils/ # small helper functions used by pages and components
β βββ CalculateTimeLeft.ts # countdown helper for event and registration timers
β βββ AddLeadingZero.ts # number formatting helper
β βββ GetDaySuffix.ts # date suffix helper
β βββ Cn.ts # class name merging helper
βββ public/ # static assets served directly by Next.js
βββ package.json # project scripts, dependencies, and frontend tooling
βββ tailwind.config.js # Tailwind theme and utility configuration
β βββ Input/
β βββ Layout/
β βββ Modals/
βββ config/
β βββ config.ts
β βββ cdn.ts
β βββ ulaskelas-cdn.ts
βββ lib/
β βββ seo/
βββ styles/
βββ utils/
βββ public/
βββ package.json
βββ tailwind.config.js
Componentsβ
| Layer | Paths | Responsibility |
|---|---|---|
| App Bootstrap | pages/_app.tsx, components/elements/Layout/index.tsx | Initializes the global frontend shell, including global CSS, default SEO metadata, toast notifications, shared navbar/footer layout, and a floating action button across all pages. |
| Landing Page Modules | pages/index.tsx, components/containers/Hero/, components/containers/PickYourField/, components/containers/LastYearExcitement/ | Render the public homepage, including the hero section, event selection cards, and showcase of previous events. |
| SISTECH Event Module | pages/sistech.tsx, pages/sistech-registration/index.tsx, components/containers/Synapse/, components/containers/common/SistechRegistrationForm/, components/containers/common/PersonalInfoSistech/, components/containers/common/RequirementSistech/, components/containers/common/AdditionalSistech/ | Handles the SISTECH event flow, including landing page, registration availability checks, multi-step form, participant data collection, requirement uploads, and final submission to backend APIs. |
| DATATHON Event Module | pages/datathon.tsx, pages/datathon-registration/index.tsx, components/containers/Medulla/, components/containers/common/DatathonRegistrationForm/, components/containers/common/TeamInfoDatathon/, components/containers/common/RequirementDatathon/ | Handles the DATATHON event flow, including landing page, registration availability checks, team-based registration, required file uploads, payload normalization, and final submission to backend APIs. |
| Form State Layer | components/contexts/SistechFormContext/index.tsx, components/contexts/DatathonFormContext/index.tsx | Stores multi-step registration data and uploaded file keys using React Context to persist user input across steps before submission. |
| Reusable Input Layer | components/elements/Input/, components/elements/Input/FileInput.tsx | Provides reusable form components and file upload handling, including validation, upload requests to POST /upload-file/, and propagation of file keys into form state. |
| Modal and Feedback Layer | components/elements/Modals/, react-hot-toast | Provides reusable modals, confirmation dialogs, success states, and inline user feedback throughout the registration process. |
| SEO Layer | lib/seo/, pages/_document.tsx | Centralizes SEO configuration, page metadata, and document-level HTML structure used across the application. |
βοΈ Operational Playbook
Infrastructureβ
- Cloud Provider: Vercel
- Link: https://event.ristek.cs.ui.ac.id
Environment Variablesβ
| Key | Description | Default (Dev) | Sensitive? |
|---|---|---|---|
| NEXT_PUBLIC_VERCEL_ENV | Deployment mode | production | No |
πQuestions
π List of frequently asked questions or question that need to be answered that is related to this initiative ..