diff --git a/.github/workflows/build-deploy.yml b/.github/workflows/build-deploy.yml
new file mode 100644
index 0000000..3dbdfc3
--- /dev/null
+++ b/.github/workflows/build-deploy.yml
@@ -0,0 +1,56 @@
+name: Build and Deploy to GitHub Pages
+
+on:
+ push:
+ branches:
+ - v2
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: pages
+ cancel-in-progress: true
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: npm
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Optimise images
+ run: node scripts/optimise-images.js
+
+ - name: Build project
+ run: npm run build
+
+ - name: Setup Pages
+ uses: actions/configure-pages@v5
+
+ - name: Upload build artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: ./dist
+
+ deploy:
+ needs: build
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.gitignore b/.gitignore
index c754c8d..42f213d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,31 @@
-_site
-.sass-cache
-.jekyll-cache
-.jekyll-metadata
-.idea
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Image optimization cache
+public/assets/**/optimised
+
+# Editor directories and files
+.vite/
+.vscode/
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+.mise.toml
+
+*storybook.log
+storybook-static
diff --git a/.storybook/main.js b/.storybook/main.js
new file mode 100644
index 0000000..6d3e5f8
--- /dev/null
+++ b/.storybook/main.js
@@ -0,0 +1,10 @@
+/** @type { import('@storybook/vue3-vite').StorybookConfig } */
+const config = {
+ stories: ['../src/**/*.stories.js'],
+ framework: {
+ name: '@storybook/vue3-vite',
+ options: {},
+ },
+};
+
+export default config;
diff --git a/.storybook/preview.js b/.storybook/preview.js
new file mode 100644
index 0000000..da916cf
--- /dev/null
+++ b/.storybook/preview.js
@@ -0,0 +1,13 @@
+/** @type { import('@storybook/vue3-vite').Preview } */
+const preview = {
+ parameters: {
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ },
+};
+
+export default preview;
diff --git a/404.html b/404.html
deleted file mode 100644
index 0e70df4..0000000
--- a/404.html
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: default
-title: 404 - Page not found
----
-
-
-
Vabandame, lehekülge ei leitud.
- (Viga 404)
-
-
-
diff --git a/CNAME b/CNAME
deleted file mode 100644
index 3a9cb5f..0000000
--- a/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-www.lapikud.ee
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index f8ea787..93a8800 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,21 @@
-MIT License
-
-Copyright (c) 2018 Lapikud
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+MIT License
+
+Copyright (c) 2018 Lapikud
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 4bc98d8..2a3661e 100644
--- a/README.md
+++ b/README.md
@@ -1,106 +1,149 @@
-# Lapikute väliveeb
-
-Tegu on [Jekyll](https://jekyllrb.com/) peale ehitatud uhiuue lehega
-
-# Development plan
-
-Materials are on `Google Drive > Lapikud > Tarkvara > Väliveeb`
-
-# Contribution guide
-
-## 1. Create Issues
-
-Easiest way to help would be to create issues about things that are missing and wrong
-
-## 2. Fork this repo and create a pull request
-
-Fork this repo to your own account and create a pull request for changes you have done in there
-
-# How to setup development environment
-
-Windows:
-
-0. Install the Windows Subsystem for Linux
-
- Install Ubuntu
-
- https://docs.microsoft.com/en-us/windows/wsl/install-win10
-
-1. Install Ruby
-
- sudo apt install build-essential ruby ruby-dev dh-autoreconf
-
-2. Install Jekyll
-
- sudo gem install jekyll
-
-3. Clone repo
-
- git clone https://github.com/Lapikud/lapikud.github.io.git
-
-4. Serve the page (Use bash if on Windows)
-
- cd lapikud.github.io
- jekyll serve --host 0.0.0.0
-
-5. Image converter usage (requires imagemagick)
-
- No one wants to download 5MB images that are then shown in a 100x100px box.
-
- **Always resize images before committing them!**
-
- sudo apt-get install imagemagick
- sh convert-past-management-images.sh
-
-MacOS:
-
-0. Install Homebrew if you don't have it already
-
- If you're using Bash, write `/bin/bash` instead of `/bin/zsh`.
-
- /bin/zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
-1. Install the latest stable version of Ruby
-
- brew install ruby
-
- Also configure your shell environment.
- If you're using Bash, replace `.zshrc` with `.bash_profile`.
-
- if [ -d "/usr/local/opt/ruby/bin" ]; then
- export PATH=/usr/local/opt/ruby/bin:$PATH
- export PATH=`gem environment gemdir`/bin:$PATH
- fi
-
- Check that Ruby is working.
-
- ruby -v
-
-2. Install the latest Jekyll gem
-
- sudo gem install jekyll
-
-3. Clone repo
-
- git clone https://github.com/Lapikud/lapikud.github.io.git
-
-4. Serve the page
-
- cd lapikud.github.io
- jekyll serve --host 0.0.0.0
-
-5. Image converter usage (requires imagemagick)
-
- No one wants to download 5MB images that are then shown in a 100x100px box.
-
- **Always resize images before committing them!**
-
- brew install imagemagick
- sh convert-past-management-images.sh
-
-# Deploy
-
-Push to master branch and wait for deployment, it could take up to 2h for the page to update.
-You can check the progress by clicking on the [environment](https://github.com/Lapikud/lapikud.github.io/deployments) link
-
-
+# Lapikud External Website
+
+
+
+
+
+Welcome! This is the public-facing website for Lapikud. It's a learning project. If something breaks, that's totally fine. You just get to learn more about git.
+
+Materials and design files are on **Google Drive → Lapikud → Tarkvara → Väliveeb**
+
+---
+
+## 🙋 How to help
+
+You don't need to write code to contribute!
+
+### Option 1 — Report something
+Found a bug, typo, or something missing? [Open an issue](https://github.com/Lapikud/lapikud.github.io/issues) and describe what's wrong. That's already super helpful.
+
+### Option 2 — Fix something yourself
+1. **Fork** this repo (button in the top right on GitHub — it copies the project to your account)
+2. Make your changes
+3. Open a **pull request** back to this repo
+
+---
+
+## 🛠️ Setting up your dev environment
+
+### What you need first
+
+- [Node.js](https://nodejs.org/) — v20.19 or higher; use the current **LTS version** when possible
+
+> Node.js comes with `npm` included, so you don't need to install that separately.
+
+---
+
+### Don't have a code editor yet?
+
+If you don't have a preferred code editor, [VSCode](https://code.visualstudio.com/) is a solid choice. Download and install it, and you're good to go.
+
+---
+
+### Windows? Set up WSL first (recommended)
+
+WSL lets you run Linux commands on Windows, which makes everything smoother.
+
+
+📋 WSL setup steps
+
+**Step 1** — Enable WSL. Run these two commands in PowerShell as Administrator (this enables the necessary Windows features):
+
+```bash
+dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
+dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
+```
+
+**Step 2** — Set WSL to version 2 (the better one):
+
+```bash
+wsl --set-default-version 2
+```
+
+**Step 3** — Install [Ubuntu from the Microsoft Store](https://apps.microsoft.com/store/detail/ubuntu/9NBLGGH4MSV6)
+
+> ⚠️ If WSL doesn't work, check that **Virtualization** is enabled on your machine: open Task Manager → Performance tab → look for "Virtualization: Enabled"
+
+
+
+---
+
+### Installation
+
+**1. Clone the repo** — this downloads the project to your computer:
+
+```bash
+git clone https://github.com/Lapikud/lapikud.github.io.git
+cd lapikud.github.io
+```
+
+**2. Install dependencies** — this installs the exact package versions recorded by the project:
+
+```bash
+npm ci
+```
+
+**3. Optimise images** — the optimised image variants are not stored in the repo, so you need to generate them locally before running the site:
+
+```bash
+npm run optimise
+```
+
+> You only need to run this once after cloning, and again whenever you add or change images in any `original/` folder.
+
+**4. Start the dev server** — this runs the site locally so you can see your changes live:
+
+```bash
+npm run dev
+```
+
+Then open the URL it gives you (usually `http://localhost:5173`) in your browser. 🎉
+
+---
+
+## 🧭 How the project fits together
+
+The site is a Vue 3 single-page application built with Vite. Vue starts in `src/main.js`, which mounts `src/App.vue`. The app keeps its intentionally small custom router and translation system rather than introducing larger framework plugins.
+
+- `src/routes/` contains the page components and the bilingual public route table.
+- `src/components/` contains reusable UI building blocks; layout primitives live in `src/components/layout/`.
+- `src/layout/` contains the site-wide navigation and footer.
+- `src/lib/` contains routing, translations, image-path helpers, and the shared YAML loader.
+- `src/lib/locales/{est,en}/` contains escaped JSON translation data for each language.
+- `public/_data/` contains editable YAML for members, mentors, workshops, projects, partners, and pricing.
+- `public/assets/` contains source assets; generated image variants remain ignored.
+- `.storybook/` and `src/stories/` provide isolated Vue component previews.
+
+Page components use Vue's `
diff --git a/_layouts/default.html b/_layouts/default.html
deleted file mode 100644
index ca29e01..0000000
--- a/_layouts/default.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-{% include head.html %}
-{% include header.html %}
-{{ content }}
-{% include footer.html %}
-{% include scripts.html %}
-