Back to Footers
Inspired by:Jolocky
Added on Oct 5, 2026
components/footers/lime-orbit/lime-orbit-footer.tsx
"use client"

import * as React from "react"

import { BottomBar } from "./components/bottom-bar"
import { ContactColumn } from "./components/contact-column"
import { CtaBlock } from "./components/cta-block"
import { Offices } from "./components/offices"
import { Wordmark } from "./components/wordmark"
import {
  DEFAULT_OFFICES,
  DEFAULT_SOCIAL_LINKS,
  DEFAULT_WORDMARK_MOBILE_LINES,
} from "./data/defaults"
import { useCanObserve } from "./hooks/use-can-observe"
import { useFooterMode } from "./hooks/use-footer-mode"
import { useMediaQuery } from "./hooks/use-media-query"
import { useOrbitMotion } from "./hooks/use-orbit-motion"
import { useWordmarkReveal } from "./hooks/use-wordmark-reveal"
import { classNames } from "./lib/class-names"
import { REDUCED_MOTION_QUERY } from "./lib/constants"
import { footerStyles } from "./styles"
import type { LimeOrbitFooterProps } from "./types"

export function LimeOrbitFooter({
  className,
  contactLabel = "Contact",
  email = "hello@jolocky.com",
  copyAriaLabel = "Copy email address",
  copyLabel = "Copy",
  copiedLabel = "Copied",
  phone = "+62 812-3456-7890",
  phoneHref = "tel:+6281234567890",
  callLabel = "Call",
  title = "Got a project? Want to collaborate?",
  buttonLabel = "Discuss your project",
  buttonHref = "/contact",
  offices = DEFAULT_OFFICES,
  copyright = "© Copyright 2026. Jolocky Studio. All rights reserved.",
  copyrightTablet = "© 2026 Jolocky Studio",
  copyrightMobile = "© 2026 Jolocky Studio. All rights reserved.",
  termsLabel = "Terms & Conditions",
  termsShortLabel = "Terms",
  termsHref = "/terms",
  socialLinks = DEFAULT_SOCIAL_LINKS,
  wordmark = "LET’S WORK TOGETHER",
  wordmarkMobileLines = DEFAULT_WORDMARK_MOBILE_LINES,
  wordmarkLabel = "Let’s work together",
}: LimeOrbitFooterProps) {
  const rootRef = React.useRef<HTMLElement>(null)
  const circleRef = React.useRef<HTMLDivElement>(null)
  const buttonRef = React.useRef<HTMLAnchorElement>(null)
  const wordRef = React.useRef<HTMLDivElement>(null)

  const reduceMotion = useMediaQuery(REDUCED_MOTION_QUERY)
  const canObserve = useCanObserve()
  const mode = useFooterMode(rootRef, wordRef)
  useOrbitMotion(rootRef, circleRef, buttonRef, mode, reduceMotion, canObserve)
  const { isIn, replay } = useWordmarkReveal(wordRef, reduceMotion, canObserve)

  return (
    <footer
      ref={rootRef}
      className={classNames("lo-footer", isIn && "lo-is-in", className)}
    >
      <style>{footerStyles}</style>
      <div ref={circleRef} className="lo-circle" aria-hidden="true"></div>
      <div className="lo-inner">
        <div className="lo-top">
          <ContactColumn
            label={contactLabel}
            email={email}
            copyAriaLabel={copyAriaLabel}
            copyLabel={copyLabel}
            copiedLabel={copiedLabel}
            phone={phone}
            phoneHref={phoneHref}
            callLabel={callLabel}
          />
          <CtaBlock
            title={title}
            buttonLabel={buttonLabel}
            buttonHref={buttonHref}
            buttonRef={buttonRef}
          />
          <Offices offices={offices} />
        </div>

        <BottomBar
          copyright={copyright}
          copyrightTablet={copyrightTablet}
          copyrightMobile={copyrightMobile}
          termsLabel={termsLabel}
          termsShortLabel={termsShortLabel}
          termsHref={termsHref}
          socialLinks={socialLinks}
        />

        <Wordmark
          wordRef={wordRef}
          label={wordmarkLabel}
          text={wordmark}
          mobileLines={wordmarkMobileLines}
          mode={mode}
          onReplay={replay}
        />
      </div>
    </footer>
  )
}
Lime Orbit Contact
lime-orbit

Contact

+62 812-3456-7890Call

Got a project? Want to collaborate?

Discuss your project

Bali

Jl. Teuku Umar No. 108
Denpasar, Bali 80114
Jl. Teuku Umar 108
Denpasar 80114

New York

175 Varick Street
New York, NY 10014
175 Varick St
NY 10014

© Copyright 2026. Jolocky Studio. All rights reserved.© 2026 Jolocky Studio© 2026 Jolocky Studio. All rights reserved.

Terms & ConditionsTerms
Let’s work together
Pointer & Magnetic Architecture
Built from scratch by Jolocky, with our own layout, color and motion.
Signature Standard
Precision interaction engineering with zero external runtime bloat.
Open Source Registry
Production-ready multi-file tree built for modern Next.js and Tailwind CSS.

Engineering Breakdown

Lime Orbit Contact — A lime green contact footer built around a big soft circle that eases toward your pointer, and drifts by itself on touch screens. The call to action button is magnetic on desktop and leans toward the cursor when it gets close. The email copies to the clipboard with a small chip that confirms it, and falls back to the mail app when the clipboard is not available. The footer ends in a giant condensed wordmark sized to fill the full width, with letters that rise in as it scrolls into view and again whenever you click it. Desktop, tablet and mobile each get their own arrangement and their own wording.
Every interaction state, motion curve, and responsive edge-case has been extracted and reconstructed for seamless integration into modern React applications.
01
Zero — Primitive Dependency & Pure Standalone Pattern: pure React and scoped CSS. There is no UI primitive library, no icon package and nothing extra to install.
02
Pointer Circle: a lime circle follows the pointer with easing, covering 55% of the horizontal distance and 45% of the vertical one. On tablet and mobile it drifts on a slow sine path when nothing touches the footer.
03
Magnetic Button: on desktop with a real mouse, the call to action leans toward the cursor once it is within 170px, and eases back to rest when the pointer leaves.
04
Frame Loop Only When Visible: the circle and the button are moved by writing styles straight to the DOM every frame, and the loop only runs while the footer is on screen.
05
Click to Copy: the email button copies the address and its chip reads Copied for 1.6 seconds. If the clipboard API is missing or refuses, it opens the mail app instead.
06
Wordmark Fitted by Measuring: each line is scaled until its letters span the full width, then cropped to the cap height using a canvas measurement. It refits whenever the footer resizes or the font finishes loading.
07
Letter Reveal: letters rise 40ms after one another when the wordmark scrolls into view. Clicking it sinks the letters and replays the rise after 420ms.
08
Three Layouts: the script picks desktop, tablet or mobile from the footer width, while the CSS breakpoints follow the viewport. Mobile splits the wordmark into two lines and uses shorter addresses and labels.
09
Reduced Motion: the circle stays still, the button stops moving and the letters are shown without any rise.
Last Updated
Oct 5, 2026
Tags & Specifications
Cursor FollowMagnetic ButtonLetter RevealClick to CopyResponsive LayoutsZero Primitive
Color Palette
#c3ee00
#1a0dff
#0b0b0b
Technology Stack
Engineered using established and reliable modern web technologies for peak runtime performance and developer ergonomics.
React
Next.js
TypeScript
Scoped CSS
Inline SVG
Zero Primitive