Groovy Portfolio is distributed as a fully pre-built static site — there is noDocumentation 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.
package.json, no src/ directory, and no build step required. The repository contains the compiled Vite output directly: a single index.html entry point, pre-bundled JavaScript in assets/, minified component modules in components/, and static HTML shells in pages/. Getting it running locally takes a single command, and deploying it to a public host is equally straightforward.
This repository is the compiled output of the original Vite + React source project. It does not contain source files, a
vite.config.js, a tailwind.config.js, or a package.json. If you need to rebuild from source, you will need access to the original development repository.Prerequisites
The only tool you need to serve Groovy Portfolio locally is a static file server. No Node.js version requirements, no package manager, and no build pipeline.- A static file server — the quickest option is
npx serve(requires Node.js to be installed), but any server capable of servingindex.htmlwill work. - Git — needed to clone the repository.
Running Locally
Serve the static site
Start a local static file server from the repository root. The Open the URL shown in your terminal (typically http://localhost:3000) in your browser. You should see the rainbow cursor trail following your mouse and the animated tie-dye background filling the viewport immediately — confirmation that Framer Motion and all custom components have loaded correctly.
npx serve command works without any prior npm install step.Deploying to a Static Host
Because Groovy Portfolio is already compiled, you can deploy it by uploading or pointing the repository root directly at any static hosting platform. No build command is required.Netlify
Drag the clonedgroovy/ folder into the Netlify drop zone at app.netlify.com, or connect the GitHub repository and set:
- Build command: (leave empty — no build needed)
- Publish directory:
.(the repository root)
GitHub Pages
Push the repository to GitHub and enable Pages from the repository Settings → Pages menu. Set the source to themain branch and the root directory (/). GitHub Pages will serve index.html directly.
Vercel
Import the GitHub repository in the Vercel dashboard. Override the framework preset to Other and leave the build command and output directory blank. Vercel will serve the repository root as a static site.All three platforms work without any redirect or rewrite rules because the site uses
HashRouter. The server always receives a request for / and the hash fragment (/#/about, /#/projects, etc.) is handled entirely in the browser.Project Structure
Thegroovy/ directory contains the following layout. Every file here is compiled output — ready to serve as-is.
assets/main.js (page content and routing) and the individual files inside components/ (visual components and their data arrays). The pages/ directory contains lightweight HTML shells used as static entry points for each route — you will rarely need to edit them directly.
Customising Your Content
Because this is a pre-built output, all customisation is done by editing the compiled (minified) JavaScript files directly. The two primary targets areassets/main.js for page content and routing, and the individual components/*.js files for component-level data. Search for the strings or function names described below to find the right locations.
Personal details — Home & About
Your name, tagline, and biography are hardcoded as JSX strings insideassets/main.js. Search for the two relevant page-component functions and update the text in place.
Projects
The Projects page (function P() in assets/main.js) maps over an array of project objects to render a <VinylRecord> for each one. Add, remove, or edit entries in that array to update the portfolio grid.
Work history
Career entries are stored in thei array inside components/PeaceTimeline.js. Each object maps to one node on the animated timeline.
Blog posts
Blog entries live in thed array inside components/RecordCrate.js. Each one becomes a flippable record in the crate.
Testimonials
Testimonials are defined inline in theI() page component in assets/main.js and passed as props directly to <GroovyBubble>. Each <GroovyBubble> accepts a quote, author, role, color, direction, and yOffset prop.