Initial commit

This commit is contained in:
2026-02-28 14:20:57 +01:00 Unverified
commit 2cb93b86a3
12 changed files with 3839 additions and 0 deletions
+169
View File
@@ -0,0 +1,169 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.*
!.env.example
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
.output
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Sveltekit cache directory
.svelte-kit/
# vitepress build output
**/.vitepress/dist
# vitepress cache directory
**/.vitepress/cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# Firebase cache directory
.firebase/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# pnpm
.pnpm-store
# yarn v3
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Vite files
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
.vite/
+16
View File
@@ -0,0 +1,16 @@
# React + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## Expanding the ESLint configuration
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
+29
View File
@@ -0,0 +1,29 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{js,jsx}'],
extends: [
js.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaVersion: 'latest',
ecmaFeatures: { jsx: true },
sourceType: 'module',
},
},
rules: {
'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
},
},
])
+30
View File
@@ -0,0 +1,30 @@
<!-- index.html -->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="keywords"
content="rehabklinik, rehab, klinik, massagebehandling, massage, idrottsskador, arbetsrelaterade skador, löparknä, benhinneinflammation, tennisarmbåge, lirkab, Henrik Mattsson, Lerberget, Höganäs, Kullabygden">
<meta name="description"
content="Jag erbjuder professionell massagebehandling för bl.a. idrottsskador och arbetsrelaterade skador i axlar, nacke och rygg">
<link rel="icon" href="./src/assets/favicon.svg">
<link rel="shortcut icon" type="image/svg" href="./src/assets/favicon.svg" />
<link rel="icon" type="image/svg" href="./src/assets/favicon.svg">
<title>Lerbergets idrotts & rehabklinik AB</title>
<meta property="og:title" content="Lerbergets idrotts & rehabklinik AB">
<meta property="og:description"
content="Jag erbjuder professionell massagebehandling för bl.a. idrottsskador och arbetsrelaterade skador i axlar, nacke och rygg">
<meta property="og:image" content="./src/assets/Henrikmattsson.jpg">
<meta property="og:url" content="lirkab.se">
<link rel="icon" type="image/svg+xml" href="./src/assets/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body class="bg-[#5F6D78]">
<div id="root" class="bg-[#5F6D78]"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>
+3425
View File
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
{
"name": "lirkab-site",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"@tailwindcss/vite": "^4.2.1",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"tailwindcss": "^4.2.1"
},
"devDependencies": {
"@eslint/js": "^9.39.1",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.1",
"eslint": "^9.39.1",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^16.5.0",
"vite": "^7.3.1"
}
}
+108
View File
@@ -0,0 +1,108 @@
// src/App.jsx
import { useState } from 'react';
import profilePic from "./assets/Henrikmattsson.jpg";
import favIcon from "./assets/favicon.svg";
export default function App() {
const [reviews, setReviews] = useState({ score: "4.9", count: "600" });
return (
<div className="min-h-screen relative bg-[#5F6D78] font-semibold flex flex-col">
<header className="sticky top-0 w-full h-17.5 bg-[#7F8386] flex justify-center z-50">
<div className="w-full h-full flex items-center justify-center">
<a href="#" className="h-full flex items-center justify-center py-2.5">
<img src={favIcon} alt="lirkab.se" className="h-full" />
</a>
</div>
</header>
<main className="grow flex flex-col lg:flex-row items-center justify-center gap-2.5 lg:gap-12.5 px-[5%] py-[5%] pb-12.5 lg:pb-17.5">
<div className="flex justify-center items-center">
<img
src={profilePic}
alt="Henrik Mattsson"
className="w-full min-w-full max-w-100 lg:min-w-125 lg:max-w-162.5 p-3.75 object-cover object-center rounded-[50px]"
/>
</div>
<div className="text-white tracking-[1px] font-thin text-center lg:text-left">
<h1 className="font-bahn font-extrabold text-[40px] leading-12.5 tracking-[2px] mb-4">
Lerbergets idrotts & rehabklinik AB
</h1>
<div className="font-bahn py-2.5 leading-tight">
<p>
Jag erbjuder professionell massagebehandling för bl.a. idrottsskador och arbetsrelaterade skador i axlar, nacke och rygg.
</p>
<p>
Många kommer också till mig och vill ha råd när de har problem med löparknä, benhinneinflammation, tennisarmbåge m.m.
</p>
<a
href="https://www.timecenter.se/lirkab/#reviews"
target="_blank"
rel="noopener noreferrer"
className="flex flex-wrap items-end justify-center lg:justify-start gap-3 pt-2 font-bahn transition-opacity hover:opacity-80 cursor-pointer"
>
<div className="text-[24px] font-black text-white leading-[0.9]">{reviews.score}</div>
<div className="flex items-center">
<svg width="120" height="24" viewBox="0 0 250 50">
<defs>
<linearGradient id="half">
<stop offset="50%" stopColor="#f46c5f"></stop>
<stop offset="50%" stopColor="#ccc"></stop>
</linearGradient>
<g id="nostar">
<g width="50px" height="50px">
<polygon points="49.189,19.418 31.39,18.48 25,2.273 18.61,18.48 0.811,19.418 14.648,30.413 10.07,47.223 25,37.772 39.929,47.223 35.352,30.413 "></polygon>
</g>
</g>
<g id="halfstar">
<use xlinkHref="#nostar" fill="url(#half)"></use>
</g>
<g id="star">
<use xlinkHref="#nostar" fill="#f46c5f"></use>
</g>
</defs>
<g fill="#ddd">
<use x="0" y="0" xlinkHref="#star"></use>
<use x="50" y="0" xlinkHref="#star"></use>
<use x="100" y="0" xlinkHref="#star"></use>
<use x="150" y="0" xlinkHref="#star"></use>
<use x="200" y="0" xlinkHref="#star"></use>
</g>
</svg>
</div>
<div className="text-[16px] text-gray-200 tracking-[1px] font-light">
({reviews.count} omdömen)
</div>
</a>
</div>
<div className="my-6.25">
<a
href="https://www.timecenter.se/lirkab/"
target="_blank"
rel="noopener noreferrer"
className="font-bahn bg-black text-white py-4 px-16 text-center inline-block text-[20px] tracking-[2px] transition-opacity hover:opacity-80"
>
Boka tid
</a>
</div>
</div>
</main>
<footer className="mt-auto w-full h-10 bg-[#7F8386] flex justify-center items-center">
<div className="w-full h-full flex items-center justify-center">
<p className="font-bahn text-white text-[13px] leading-5 tracking-[1px] px-2.5">
&copy; {new Date().getFullYear()} - Lerbergets idrotts & rehabklinik AB
</p>
</div>
</footer>
</div>
);
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 924.32 179.32"><defs><style>.cls-1{fill:#fff;}</style></defs><g id="Layer_1-2"><g><path class="cls-1" d="m24.9,0v144.78c0,3.01.67,5.37,2.01,7.08,1.34,1.71,3.24,2.56,5.68,2.56h11.72v23.68h-14.65c-9.36,0-16.64-2.93-21.85-8.79-5.21-5.86-7.81-14.12-7.81-24.78V0h24.9Z"/><path class="cls-1" d="m72.39,24.9V0h24.9v24.9h-24.9Zm0,152.59V50.78h24.9v126.71h-24.9Z"/><path class="cls-1" d="m135.13,177.49V50.78h24.9v126.71h-24.9Zm69.7-96.68c-2.2-2.69-4.96-4.72-8.3-6.1-3.34-1.38-7.2-2.08-11.6-2.08-7.89,0-14.02,2.18-18.37,6.53s-6.53,10.4-6.53,18.13l-2.56-24.41c3.82-7.49,8.85-13.35,15.08-17.58,6.23-4.23,13.08-6.35,20.57-6.35,5.78,0,11.01.84,15.69,2.5,4.68,1.67,8.77,4.13,12.27,7.39l-16.24,21.97Z"/><path class="cls-1" d="m241.82,177.49V0h24.9v177.49h-24.9Zm9.16-18.55l1.59-29.54,65.19-78.61h29.3l-96.07,108.15Zm75.2,18.55l-44.19-73.12,15.99-16.6,55.3,89.72h-27.1Z"/><path class="cls-1" d="m414.55,179.32c-15.54,0-27.2-3.21-34.97-9.64-7.77-6.43-11.66-16.28-11.66-29.54s3.56-22.03,10.68-28.26c7.12-6.22,17.8-9.34,32.04-9.34h36.01l1.71,20.02h-37.6c-6.43,0-11.27,1.45-14.53,4.33-3.26,2.89-4.88,7.3-4.88,13.24,0,6.43,2.16,11.19,6.47,14.28,4.31,3.09,10.78,4.64,19.41,4.64,9.44,0,16.52-1.02,21.24-3.05,4.72-2.03,7.08-5.21,7.08-9.52l2.56,17.82c-2.2,3.42-4.92,6.23-8.18,8.42-3.26,2.2-6.98,3.84-11.17,4.94-4.19,1.1-8.93,1.65-14.22,1.65Zm31.01-1.83v-80.32c0-8.3-2.22-14.75-6.65-19.35-4.44-4.6-10.72-6.9-18.86-6.9-4.96,0-9.87.75-14.71,2.26-4.84,1.51-9.18,3.68-13,6.53l-18.19-12.45c4.8-5.78,11.13-10.27,18.98-13.49,7.85-3.21,16.58-4.82,26.18-4.82,15.87,0,28.16,4.11,36.87,12.33,8.71,8.22,13.06,19.82,13.06,34.79v81.42h-23.68Z"/><path class="cls-1" d="m507.08,177.49V0h24.9v177.49h-24.9Zm56.76,1.83c-7.89,0-14.77-1.89-20.63-5.68-5.86-3.78-10.17-9.13-12.94-16.05l1.71-26.49c0,5.45.98,10.09,2.93,13.92,1.95,3.83,4.78,6.76,8.48,8.79,3.7,2.04,8.2,3.05,13.49,3.05,8.22,0,14.59-2.5,19.1-7.51,4.52-5.01,6.78-12.06,6.78-21.18v-27.47c0-9.28-2.26-16.48-6.78-21.61-4.52-5.13-10.88-7.69-19.1-7.69-5.29,0-9.79.98-13.49,2.93-3.7,1.95-6.53,4.8-8.48,8.54-1.95,3.74-2.93,8.3-2.93,13.67l-2.56-24.41c3.82-7.4,8.83-13.12,15.01-17.15,6.18-4.03,13.06-6.04,20.63-6.04,13.59,0,24.09,4.5,31.49,13.49,7.4,8.99,11.11,21.71,11.11,38.15v27.59c0,16.2-3.83,28.77-11.47,37.72-7.65,8.95-18.43,13.43-32.35,13.43Z"/><path class="cls-1" d="m633.91,177.49v-26.12h26.12v26.12h-26.12Z"/><path class="cls-1" d="m739.62,179.32c-11.23,0-21.42-1.65-30.58-4.94-9.15-3.29-17.35-8.24-24.6-14.83l14.77-18.19c6.92,5.21,13.73,9.12,20.45,11.72,6.71,2.61,13.37,3.91,19.96,3.91,9.85,0,17.23-1.53,22.16-4.58,4.92-3.05,7.39-7.63,7.39-13.73,0-4.72-1.65-8.06-4.94-10.01-3.29-1.95-7.61-3.23-12.94-3.85-5.33-.61-11.05-1.12-17.15-1.53-5.13-.41-10.21-1.04-15.26-1.89-5.05-.85-9.64-2.4-13.79-4.64-4.15-2.24-7.47-5.55-9.95-9.95s-3.72-10.29-3.72-17.7c0-13.43,4.11-23.48,12.33-30.15,8.22-6.67,20.47-10.01,36.74-10.01,9.93,0,19.17,1.34,27.71,4.03s16.56,6.8,24.05,12.33l-15.01,18.19c-6.35-4.07-12.59-7.12-18.74-9.16-6.15-2.03-12.15-3.05-18.01-3.05-8.46,0-14.81,1.45-19.04,4.33-4.23,2.89-6.35,7.22-6.35,13,0,3.83,1.46,6.57,4.39,8.24s6.79,2.75,11.6,3.23c4.8.49,9.97.94,15.5,1.34,5.29.33,10.64.92,16.05,1.77,5.41.85,10.39,2.5,14.95,4.94,4.56,2.44,8.22,6.06,10.99,10.86,2.77,4.8,4.15,11.35,4.15,19.65,0,13.59-4.42,23.76-13.24,30.52-8.83,6.76-22.12,10.13-39.86,10.13Z"/><path class="cls-1" d="m876.34,179.32c-17.66,0-31.33-4.92-41.02-14.77-9.69-9.85-14.53-23.84-14.53-41.99v-14.28c0-18.88,4.66-33.49,13.98-43.82,9.32-10.33,22.44-15.5,39.37-15.5,15.95,0,28.3,5.86,37.05,17.58s13.12,28.16,13.12,49.32v8.3h-85.45v-20.02h61.77c-.73-10.25-3.4-18.27-8-24.05-4.6-5.78-10.76-8.67-18.49-8.67-9.36,0-16.64,3.09-21.85,9.28-5.21,6.19-7.81,14.93-7.81,26.25v16.11c0,10.5,2.79,18.55,8.36,24.17s13.41,8.42,23.5,8.42c5.04,0,10.05-1.02,15.01-3.05,4.96-2.03,9.4-4.88,13.31-8.54l16.36,16.36c-6.27,6.02-13.31,10.68-21.12,13.98-7.81,3.3-15.67,4.94-23.56,4.94Z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

+10
View File
@@ -0,0 +1,10 @@
/* src/index.css */
@import url('https://fonts.cdnfonts.com/css/bahnschrift');
@import "tailwindcss";
@theme {
--font-bahn: "Bahnschrift", sans-serif;
}
+10
View File
@@ -0,0 +1,10 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)
+12
View File
@@ -0,0 +1,12 @@
// vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [
react(),
tailwindcss(),
],
})