Skip to main content

ristek-summer-fest-v2 - Documentation

πŸ”Ž 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​

LayerPathsResponsibility
App Bootstrappages/_app.tsx, components/elements/Layout/index.tsxInitializes 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 Modulespages/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 Modulepages/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 Modulepages/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 Layercomponents/contexts/SistechFormContext/index.tsx, components/contexts/DatathonFormContext/index.tsxStores multi-step registration data and uploaded file keys using React Context to persist user input across steps before submission.
Reusable Input Layercomponents/elements/Input/, components/elements/Input/FileInput.tsxProvides 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 Layercomponents/elements/Modals/, react-hot-toastProvides reusable modals, confirmation dialogs, success states, and inline user feedback throughout the registration process.
SEO Layerlib/seo/, pages/_document.tsxCentralizes SEO configuration, page metadata, and document-level HTML structure used across the application.

☁️ Operational Playbook

Infrastructure​

Environment Variables​

KeyDescriptionDefault (Dev)Sensitive?
NEXT_PUBLIC_VERCEL_ENVDeployment modeproductionNo

πŸ™‹Questions

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