Website for Oliver Fors AB, a concrete contractor based in Borås, specializing in patterned concrete, general concrete work, and outdoor surfaces throughout Västra Götaland.
Website: oforsab.se
- React and TypeScript
- Vinext and Vite
- Responsive design for mobile and desktop
- Scroll-based animations and parallax effects
- Static export for hosting at Loopia
The website currently has no database or server-side functionality.
Node.js 22.13.0 or later is required.
npm install
npm run devThe development server prints its local address in the terminal, normally
http://localhost:3000.
npm run lint
npm run buildnpm run build creates a static production build in dist/client/.
app/page.tsx– page content and structured business dataapp/globals.css– design and responsive layoutapp/ParallaxMotion.tsx– scroll and parallax effectspublic/– logos, images, and web server configuration.github/workflows/release.yml– manual production release.github/scripts/– validation, versioning, and Loopia deployment
Production releases are started manually from GitHub:
- Open Actions in the repository.
- Select Release and deploy.
- Click Run workflow.
- Select
patch,minor, ormajor. - Start the workflow from
main.
The workflow:
- validates the repository and runs lint,
- builds and tests the static website,
- uploads
dist/client/to Loopia using SSH and rsync, - creates a version tag and a GitHub Release.
The following repository secrets are required:
LOOPIA_SSH_USERLOOPIA_SSH_PRIVATE_KEYLOOPIA_SSH_KNOWN_HOSTS
They are already configured for this repository. Secret values must never be committed to source control.
- SSH host:
ssh.loopia.se - SSH port:
22 - Remote path:
oforsab.se/public_html
The defaults can be overridden with the GitHub variables LOOPIA_SSH_HOST,
LOOPIA_SSH_PORT, and LOOPIA_REMOTE_PATH when needed.
The deployment script synchronizes the production directory and removes files
that no longer exist in the build. As a safety check, the remote path must end
with public_html.