• English
  • Component Architecture

    Realm's components live under components/ across 10 subdirectories, totaling roughly 50 files. This page lists every component and its actual purpose.

    layout/ — Layout shell

    ComponentFileResponsibility
    MainLayoutMainLayout.tsxRoot layout. Composes LeftPanel, GlobalHud, dynamically imports TesseractExperience / RainMorimeEffect / CustomCursor (all ssr: false), mounts HomeLoadingScreen, RouteLoadingOverlay, MusicPlayer, registers scroll anchors, handles content hash navigation
    GlobalHudGlobalHud.tsxTop HUD chrome (clock, etc.)
    LeftPanelLeftPanel.tsxLeft navigation panel
    NavigationColumnsNavigationColumns.tsx5 primary navigation columns on the home page
    RouteLoadingOverlayRouteLoadingOverlay.tsxRoute transition loading overlay
    SectionPageLayoutSectionPageLayout.tsxGeneric layout container for section pages

    effects/ — WebGL and visual effects

    ComponentFileResponsibility
    TesseractTesseract.tsxSVG fallback tesseract (desktop)
    TesseractExperienceTesseractExperience.tsxInteractive 3D tesseract with @react-three/cannon physics (desktop only)
    RainMorimeEffectRainMorimeEffect.tsxAtmospheric rain particle effect (10000+ particles)
    NoiseNoise.tsxNoise overlay

    interactive/ — Interactive widgets

    ComponentFileResponsibility
    MusicPlayerMusicPlayer.tsx + music-player/ subdir + .module.scssFull music player
    CustomCursorCustomCursor.tsx + customCursorShared.tsCustom cursor with contextual labels (e.g. BACK)
    LightboxLightbox.tsxImage lightbox
    ActivationLeverActivationLever.tsx + .module.scssPull-lever button; must be a semantic <button>

    sections/ — Content section components

    ComponentFile
    AboutSectionsections/AboutSection.tsx
    BlogSectionsections/BlogSection.tsx
    ContactSectionsections/ContactSection.tsx
    ExperienceSectionsections/ExperienceSection.tsx
    LifeSectionsections/LifeSection.tsx
    TweetsSectionsections/TweetsSection.tsx
    WorksSectionsections/WorksSection.tsx

    detail/ — Detail page views

    ComponentFile
    WorkDetailViewdetail/WorkDetailView.tsx
    ExperienceDetailViewdetail/ExperienceDetailView.tsx
    LifeDetailViewdetail/LifeDetailView.tsx
    StandalonePanelStatedetail/standalone/ subdirectory

    blog/ — Blog system

    ComponentFileResponsibility
    BlogDetailScaffoldblog/BlogDetailScaffold.tsxBlog detail page scaffold
    BlogStateShellblog/BlogStateShell.tsxBlog state machine shell
    ProtectedPostGateblog/ProtectedPostGate.tsxTOTP gate for protected posts

    cards/ — Cards

    ComponentFile
    ProjectCardcards/ProjectCard.tsx
    SimpleImageCardcards/SimpleImageCard.tsx

    mdx/ — MDX rendering components

    ComponentFileResponsibility
    MDXComponentsmdx/MDXComponents.tsxCustom MDX component mapping
    Termmdx/Term.tsxRuby annotation (proper noun / abbreviation / short note)
    Explainmdx/Explain.tsxTooltip / mobile bottom sheet for long annotations

    shared/ — Shared UI components

    ComponentFileResponsibility
    AnimatedTitleCharsshared/AnimatedTitleChars.tsxAnimated title characters (defaults to uppercase; blog titles must pass uppercase={false})
    HomeLoadingScreenshared/HomeLoadingScreen.tsxHome page loading sequence
    LoadingScreenshared/LoadingScreen/ subdirLoading screen
    HreflangLinksshared/HreflangLinks.tsxSEO hreflang tags
    LanguageSwitchershared/LanguageSwitcher.tsxLanguage switcher
    LazyImageshared/LazyImage.tsxLazy-loaded image
    LocaleFallbackBannershared/LocaleFallbackBanner.tsxMissing translation banner
    NotFoundViewshared/NotFoundView.tsx404 view
    ShinyTextshared/ShinyText.tsxShiny text effect
    VerticalShinyTextshared/VerticalShinyText.tsxVertical shiny text
    SkillTreeshared/SkillTree.tsxSkill tree visualization
    Timelineshared/Timeline.tsxTimeline component

    telemetry/ — Telemetry

    ComponentFileResponsibility
    TelemetryRoottelemetry/TelemetryRoot.tsxTelemetry root; mounts provider only when env-enabled
    VercelTelemetrytelemetry/VercelTelemetry.tsx@vercel/analytics + @vercel/speed-insights integration

    Component hierarchy

    _app.tsx
      └─ NextIntlClientProvider
           └─ SiteAssetsProvider
                └─ AppProvider
                     └─ TransitionProvider
                          └─ MainLayout
                               ├─ LeftPanel
                               ├─ GlobalHud
                               ├─ [dynamic] TesseractExperience / RainMorimeEffect / CustomCursor
                               ├─ HomeLoadingScreen
                               ├─ RouteLoadingOverlay
                               └─ [page content]
                                    ├─ NavigationColumns (home)
                                    ├─ SectionPageLayout (section pages)
                                    │   └─ AboutSection / BlogSection / ...
                                    └─ DetailView (detail pages)
                                         └─ BlogDetailScaffold
                                              ├─ BlogStateShell
                                              └─ ProtectedPostGate

    Key constraints

    • Three.js components (TesseractExperience, RainMorimeEffect) are all dynamically imported with ssr: false; once webglReady, they never unmount to avoid GPU context churn (GOTCHAS #20)
    • CustomCursor hover state must go through the reset helper, never directly mutate internal refs (GOTCHAS #12)
    • ActivationLever must be a semantic <button>, not a <div> (GOTCHAS #15)
    • AnimatedTitleChars defaults to uppercase; blog titles must pass uppercase={false} (GOTCHAS #17)
    • navigateTo() is the only supported internal navigation method; router.push() skips transition animations (GOTCHAS #6)