diff --git a/README.md b/README.md index 7dbf7eb..ee1c22e 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,3 @@ -# React + TypeScript + Vite +# Naturvärdarna -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 [Oxc](https://oxc.rs) -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) - -## 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 updating the configuration to enable type-aware lint rules: - -```js -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - - // Remove tseslint.configs.recommended and replace with this - tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - tseslint.configs.stylisticTypeChecked, - - // Other configs... - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) -``` - -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: - -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' - -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - // Enable lint rules for React - reactX.configs['recommended-typescript'], - // Enable lint rules for React DOM - reactDom.configs.recommended, - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) -``` +Källkod för [naturvardarna.com](https://naturvardarna.com/) diff --git a/package-lock.json b/package-lock.json index a2865a9..0ffeb1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "@tailwindcss/vite": "^4.2.2", + "lucide-react": "^0.577.0", "react": "^19.2.4", "react-dom": "^19.2.4", "tailwindcss": "^4.2.2" @@ -2571,6 +2572,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.577.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.577.0.tgz", + "integrity": "sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", diff --git a/package.json b/package.json index a210393..aacc695 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,14 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview" }, "dependencies": { "@tailwindcss/vite": "^4.2.2", + "lucide-react": "^0.577.0", "react": "^19.2.4", "react-dom": "^19.2.4", "tailwindcss": "^4.2.2" diff --git a/public/Kullaberg © Johan Hammar.jpg b/public/Kullaberg © Johan Hammar.jpg new file mode 100644 index 0000000..afb3e06 Binary files /dev/null and b/public/Kullaberg © Johan Hammar.jpg differ diff --git a/public/about_us.jpg b/public/about_us.jpg new file mode 100644 index 0000000..1c4fa22 Binary files /dev/null and b/public/about_us.jpg differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..7718ce6 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 25a5b06..b799504 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,167 +1,306 @@ // src/App.tsx import { useState } from 'react'; +import { Menu, X, Globe, Trash2, Map, Leaf, AlertTriangle, Info, Tent, Car } from 'lucide-react'; -// --- TYPER --- -// Detta säkerställer att vi bara kan skicka in dessa exakta strängar -type Tab = 'home' | 'about' | 'contact'; +// --- TYPES & DATA --- +type Tab = 'home' | 'about'; +type Language = 'sv' | 'en'; -interface NavbarProps { - activeTab: Tab; - setActiveTab: (tab: Tab) => void; -} +const translations = { + sv: { + nav: { home: 'Hem', about: 'Om oss' }, + hero: { + title: 'Vi värnar om Kullaberg', + subtitle: 'Vi är sommarjobbarna som håller naturreservatet rent, säkert och vackert under årets mest hektiska veckor.' + }, + whatWeDo: { + title: 'Vårt uppdrag', + cleaningTitle: 'Håller rent', + cleaningDesc: 'Vi städar toaletter, parkeringsplatser, rastplatser och stränder dagligen för att skydda djurlivet och naturen från slitage.', + guidingTitle: 'Guidar besökare', + guidingDesc: 'Vi hjälper turister att hitta rätt, informerar om reservatets unika regler och ser till att allemansrätten respekteras.', + natureTitle: 'Naturvård', + natureDesc: 'Vi underhåller vandringsleder, bekämpar invasiva arter och fyller på ved för att skydda skogen.' + }, + importantInfo: { + title: 'Viktig information för besökare', + campingTitle: 'Tältning', + campingDesc: 'Tältning är endast tillåten på angivna platser, exempelvis vid Stora parkeringen. Läs skyltarna noga.', + parkingTitle: 'Parkering', + parkingDesc: 'Parkering är gratis så länge du står inom markerade områden. Blockera aldrig räddningsvägar.', + fireTitle: 'Eldning', + fireDesc: 'Använd endast vår utlagda ved vid de fasta grillplatserna. Bryt aldrig grenar från levande eller döda träd.' + }, + about: { + title: 'Om Naturvärdarna', + p1: 'Vi är ett gäng engagerade ungdomar som fått det ärofyllda uppdraget att arbeta som Naturvärdar på vackra Kullaberg under sommarmånaderna, ledda av våra projektledare.', + p2: 'Vårt mål är att göra Kullaberg till en bättre plats för besökare och minska det negativa slitaget på naturen. När trycket från turister och besökare är som allra störst, är det vi som rycker ut.', + p3: 'Våra arbetsuppgifter är väldigt varierande. En vanlig dag börjar med en ordentlig städrunda av faciliteter och parkeringsplatser. Därefter arbetar vi med förvaltning som att röja stigar, bygga räcken, olja in träskyltar och bekämpa invasiva växter. Vi plockar skräp längs kusterna och står även som Naturvärdar ute i fält för att svara på era frågor.' + }, + footer: 'Naturvärdarna Kullaberg. Ta hand om naturen.' + }, + en: { + nav: { home: 'Home', about: 'About Us' }, + hero: { + title: 'Preserving Kullaberg', + subtitle: 'We are the summer workers keeping the nature reserve clean, safe, and beautiful during the busiest weeks of the year.' + }, + whatWeDo: { + title: 'Our Mission', + cleaningTitle: 'Keeping it Clean', + cleaningDesc: 'We clean toilets, parking lots, rest areas, and beaches daily to protect wildlife and nature from wear and tear.', + guidingTitle: 'Guiding Visitors', + guidingDesc: 'We help tourists navigate, inform them about the reserve\'s unique rules, and ensure the Right of Public Access is respected.', + natureTitle: 'Nature Conservation', + natureDesc: 'We maintain hiking trails, combat invasive species, and restock firewood to protect the forest.' + }, + importantInfo: { + title: 'Important Visitor Information', + campingTitle: 'Camping', + campingDesc: 'Tents are only allowed in designated areas, such as the Main Parking lot. Please read the signs carefully.', + parkingTitle: 'Parking', + parkingDesc: 'Parking is free as long as you park within marked areas. Never block emergency routes.', + fireTitle: 'Fires', + fireDesc: 'Only use the provided firewood at designated barbecue areas. Never break branches from living or dead trees.' + }, + about: { + title: 'About the Nature Wardens', + p1: 'We are a group of dedicated youth who have been given the honorable task of working as Nature Wardens at the beautiful Kullaberg during the summer months, led by our project managers.', + p2: 'Our goal is to make Kullaberg a better place for visitors and to reduce negative impact on nature. When the pressure from tourists is at its highest, we are the ones who step in.', + p3: 'Our daily tasks are highly varied. A normal day begins with a thorough cleaning of facilities and parking areas. After that, we do maintenance work such as clearing trails, building fences, oiling wooden signs, and combating invasive species. We pick up trash along the coasts and act as Nature Wardens in the field to answer your questions.' + }, + footer: 'Kullaberg Nature Wardens. Take care of nature.' + } +}; -// --- KOMPONENTER --- +// --- COMPONENTS --- -const Navbar = ({ activeTab, setActiveTab }: NavbarProps) => ( - -); + ); +}; -const Home = () => ( -
- {/* Hero-sektion */} -
-
-
-

Vi värnar om Kullaberg

-

- Vi är sommarjobbarna som håller naturreservatet rent, säkert och vackert under årets mest hektiska veckor. -

-
-
+const About = ({ lang }: { lang: Language }) => { + const t = translations[lang].about; - {/* Info-sektion */} -
-

Vad gör vi?

-
-
-

Håller rent

-

Vi städar rastplatser, vandringsleder och stränder för att skydda djurlivet och naturen.

+ return ( +
+
+
+

{t.title}

+
+

{t.p1}

+

{t.p2}

+

{t.p3}

+
-
-

Guidar besökare

-

Vi hjälper turister att hitta rätt och informerar om reservatets unika regler och miljö.

-
-
-

Skyddar miljön

-

Genom vår närvaro ser vi till att naturen på Kullaberg bevaras för framtida generationer.

+
+ Nature Wardens working
-
-); + ); +}; -const About = () => ( -
-

Om Naturvärdarna

- Ungdomar som arbetar i naturen -
-

- Vi är ett gäng engagerade ungdomar som fått det ärofyllda uppdraget att arbeta som Naturvärdar på vackra Kullaberg under sommarmånaderna. -

-

- När trycket från turister och besökare är som allra störst, är det vi som rycker ut. Våra dagar består av allt från att plocka skräp och underhålla eldstäder, till att svara på frågor från nyfikna vandrare och se till att allemansrätten respekteras. -

-

- Kullaberg är en fantastisk plats, och vi är otroligt stolta över att få hjälpa till att hålla reservatet i toppskick! -

+const Footer = ({ lang }: { lang: Language }) => ( +
+
+
+ Logo +

© {new Date().getFullYear()} {translations[lang].footer}

+
+
+ Kullabergs Naturreservat +
-
-); - -const Contact = () => ( -
-

Kontakta oss

-
-

- Har du sett något i reservatet som behöver åtgärdas, eller vill du bara säga hej? Tveka inte att höra av dig! -

-
-
- - -
-
- - -
-
- - -
- -
-
-
-); - -const Footer = () => ( -
-

© {new Date().getFullYear()} Naturvärdarna Kullaberg. Ta hand om naturen!

); -// --- HUVUDKOMPONENT --- +// --- MAIN COMPONENT --- export default function App() { const [activeTab, setActiveTab] = useState('home'); + const [lang, setLang] = useState('sv'); const renderContent = () => { switch (activeTab) { - case 'home': return ; - case 'about': return ; - case 'contact': return ; - default: return ; + case 'home': return ; + case 'about': return ; + default: return ; } }; return ( -
- -
+
+ +
{renderContent()}
-
); } \ No newline at end of file diff --git a/src/index.css b/src/index.css index 570c5cc..5a9b045 100644 --- a/src/index.css +++ b/src/index.css @@ -3,11 +3,15 @@ @import "tailwindcss"; @theme { - --color-nature-light: #ecfdf5; - --color-nature: #10b981; - --color-nature-dark: #064e3b; + --color-ebony: #5e6545; + --color-moss: #878b5a; + --color-eggshell: #e7e4cf; + --color-gold: #d6b456; + --color-goldenrod: #c48d2e; + --color-slate-teal: #456466; + --color-seafoam: #5B8C8A; } body { - background-color: #f5f5f4; /* Mjuk jordnära stenfärg */ + background-color: var(--color-eggshell); } \ No newline at end of file