Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/groovy/llms.txt

Use this file to discover all available pages before exploring further.

Groovy Portfolio is a personal portfolio website for fictional frontend developer Alex Groovy, built entirely in React with a bold, unabashed 1970s aesthetic. Every element — from the rainbow cursor trail that follows your mouse to the tie-dye background pulsing behind the content — is crafted to evoke the psychedelic spirit of the decade. It is a single-page application that bundles nine distinct pages under one roof, each celebrating a different piece of retro visual culture while still serving the practical goal of showcasing a developer’s work, skills, and personality.
Groovy Portfolio is a fully static site. There is no backend, no API, and no server required. Every page is pre-rendered HTML driven by client-side React — making it trivial to host anywhere that can serve static files.

The Nine Pages

Groovy Portfolio is organised into nine themed pages, each with its own visual motif drawn from 1970s pop culture and design.
PageMotifPurpose
HomeHero splash with SmileySun and TieDyeBackgroundFirst impression — name, tagline, and animated call-to-action
AboutAnimated LavaLamp columnBiography, personality, and a lava-lamp that actually bubbles
ProjectsVinylRecord cardsPortfolio pieces presented as spinning vinyl records with colour-coded labels
SkillsRainbowArc radial chartTechnical competencies rendered as a rising arc of rainbow bands
WorkPeaceTimelineCareer history laid out as a peace-sign-styled vertical timeline
Case StudiesWallPoster gridDeep-dive write-ups styled as vintage concert wall posters
BlogRecordCrate flip cardsArticles flipping out of a browsable record crate
TestimonialsGroovyBubble speech bubblesQuotes from colleagues and clients in retro speech-bubble callouts
ContactDaisyFormContact form whose fields are shaped and coloured like daisy petals

Tech Stack

Groovy Portfolio is assembled from a carefully chosen set of modern frontend tools that collectively keep the bundle lean while enabling rich, fluid animations and a delightful developer experience.
  • React 18 — component model, hooks, and concurrent rendering for smooth animated transitions.
  • Vite — the build tool used to compile the original source into the pre-built static output you find in this repository. All compiled assets land in assets/ rather than a dist/ folder.
  • Framer Motion — declarative animation library powering every page transition, the lava-lamp bubbles, spinning vinyl records, and the rainbow cursor trail. All motion.* primitives are re-exported through assets/proxy.js, and AnimatePresence is re-exported through assets/index.js, so they remain available across the bundled output.
  • React Router v6 with HashRouter — client-side routing with hash-based URLs (e.g. /#/about) that work on any static host without server configuration.
  • Tailwind CSS — utility-first styling compiled into assets/main.css as part of the Vite build. The colour tokens used throughout the site are baked into the compiled output.

Architecture

Groovy Portfolio follows a straightforward single-page application pattern. All route definitions and page-level components live together in assets/main.js, which is the compiled output that React hydrates when index.html loads. The component hierarchy looks like this:
HashRouter  (assets/main.js)
└── Routes
    └── Route path="/" element={<Layout />}
        ├── RainbowCursor   (components/RainbowCursor.js — global)
        ├── Navbar          (components/Navbar.js)
        ├── AnimatePresence (assets/index.js — Framer Motion page transitions)
        │   └── motion.main (assets/proxy.js — wraps the matched page)
        └── <Outlet />      (renders the matched page component)
Layout.js is the single wrapper that every page inherits. It mounts RainbowCursor and Navbar, then wraps the router <Outlet> in Framer Motion’s AnimatePresence (via assets/index.js) and a motion.main element (via assets/proxy.js) so pages animate in and out smoothly. The page transition values are: initial: { opacity: 0, scale: 0.95, filter: 'blur(10px)' }, animate: { opacity: 1, scale: 1, filter: 'blur(0px)' }, exit: { opacity: 0, scale: 1.05, filter: 'blur(10px)' }, with a duration: 0.5, ease: 'easeInOut' transition.

Why HashRouter?

React Router’s HashRouter encodes the current route in the URL hash (/#/projects) rather than the URL path (/projects). This means the web server only ever serves index.html — it never needs to know about individual routes. On static hosts like GitHub Pages, Netlify (without redirect rules), or a plain CDN, HashRouter works out of the box without any server configuration, making it the perfect choice for a fully static portfolio.
// assets/main.js — router bootstrap (simplified representation)
// Note: the actual file is minified compiled output; this shows the logical structure.
ReactDOM.render(
  <HashRouter>
    <Routes>
      <Route path="/" element={<Layout />}>
        <Route index element={<Home />} />
        <Route path="about" element={<About />} />
        <Route path="projects" element={<Projects />} />
        <Route path="skills" element={<Skills />} />
        <Route path="work" element={<Work />} />
        <Route path="case-studies" element={<CaseStudies />} />
        <Route path="blog" element={<Blog />} />
        <Route path="testimonials" element={<Testimonials />} />
        <Route path="contact" element={<Contact />} />
      </Route>
    </Routes>
  </HashRouter>,
  document.getElementById("root")
);

Design Tokens

The colour palette is baked into the compiled CSS (assets/main.css) as part of the Vite build. The five core tokens used throughout every component are documented below for reference when editing the compiled files.
TokenHexUsage
groovy-magenta#d946efPrimary accent — buttons, active nav items, highlights
teal#2dd4bfSecondary accent — borders, skill arcs, hover states
groovy-yellow#fde047Tertiary accent — vinyl labels, timeline dots, form petals
groovy-violet#8b5cf6Quaternary accent — poster headers, bubble tails, tags
cream#fefce8Background base — warm off-white body colour
Because the repository is pre-built output, these tokens appear as literal utility class strings in the minified JS files — for example bg-groovy-magenta, text-teal, border-groovy-yellow. Search for these strings in assets/main.js or the individual components/*.js files to locate and update colour references.

Explore Further

Ready to dive in? The cards below link to the most useful next steps — whether you want to get the project running locally, understand individual pages in depth, browse the component library, or explore the full theme system.

Getting Started

Serve the pre-built static site locally and deploy it to Netlify, GitHub Pages, or Vercel in minutes.

Home Page

Explore the hero splash, SmileySun animation, and tie-dye background that greet every visitor.

Component Overview

A catalogue of every custom component — LavaLamp, VinylRecord, RainbowCursor, and more.

Design & Theme

Deep-dive into the 1970s colour palette, typography choices, and compiled Tailwind token system.

Build docs developers (and LLMs) love