consolidated web dev projects in its own page, and update sw jobs
All checks were successful
Vercel Production Deployment / Deploy-Production (push) Successful in 1m12s
All checks were successful
Vercel Production Deployment / Deploy-Production (push) Successful in 1m12s
This commit is contained in:
parent
f10ddfc1f8
commit
cc403eb1b0
@ -1,11 +1,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import { projects } from '$lib/projects.js';
|
import { projects } from '$lib/projects.js';
|
||||||
import ProjectCard from './ProjectCard/ProjectCard.svelte';
|
import ProjectCard from './ProjectCard/ProjectCard.svelte';
|
||||||
export let category;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#each projects as project}
|
{#each projects as project}
|
||||||
{#if project.category === category}
|
|
||||||
<ProjectCard {...project} />
|
<ProjectCard {...project} />
|
||||||
{/if}
|
|
||||||
{/each}
|
{/each}
|
||||||
|
@ -9,10 +9,7 @@
|
|||||||
DarkMode
|
DarkMode
|
||||||
} from 'flowbite-svelte';
|
} from 'flowbite-svelte';
|
||||||
import { ChevronDownOutline } from 'flowbite-svelte-icons';
|
import { ChevronDownOutline } from 'flowbite-svelte-icons';
|
||||||
import logo from '$lib/logo.png'
|
import logo from '$lib/logo.png';
|
||||||
import { page } from '$app/stores';
|
|
||||||
|
|
||||||
$: activeUrl = $page.url.pathname;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Navbar class="bg-transparent dark:bg-transparent">
|
<Navbar class="bg-transparent dark:bg-transparent">
|
||||||
@ -25,18 +22,13 @@
|
|||||||
<div class="flex">
|
<div class="flex">
|
||||||
<DarkMode btnClass="block sm:hidden" />
|
<DarkMode btnClass="block sm:hidden" />
|
||||||
</div>
|
</div>
|
||||||
<NavUl class="md:flex-row" {activeUrl}>
|
<NavUl class="md:flex-row">
|
||||||
<NavLi href="/">home</NavLi>
|
<NavLi href="/">home</NavLi>
|
||||||
<NavLi class="cursor-pointer">
|
<NavLi class="cursor-pointer">
|
||||||
projects<ChevronDownOutline class="w-6 h-6 text-primary-800 dark:text-stone-200 inline" />
|
projects<ChevronDownOutline class="w-6 h-6 text-primary-800 dark:text-stone-200 inline" />
|
||||||
</NavLi>
|
</NavLi>
|
||||||
<Dropdown
|
<Dropdown activeClass="font-bold text-primary-800 dark:text-stone-200" class="w-44 z-20">
|
||||||
{activeUrl}
|
<DropdownItem href="/projects/web-dev">web-dev</DropdownItem>
|
||||||
activeClass="font-bold text-primary-800 dark:text-stone-200"
|
|
||||||
class="w-44 z-20"
|
|
||||||
>
|
|
||||||
<DropdownItem href="/projects/svelte">svelte</DropdownItem>
|
|
||||||
<DropdownItem href="/projects/nextjs">nextjs</DropdownItem>
|
|
||||||
<DropdownItem href="/projects/homelab">homelab</DropdownItem>
|
<DropdownItem href="/projects/homelab">homelab</DropdownItem>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
<NavLi class="hidden sm:block">
|
<NavLi class="hidden sm:block">
|
||||||
|
BIN
src/lib/images/vendorIcons/kubernetes.jpeg
Normal file
BIN
src/lib/images/vendorIcons/kubernetes.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
84
src/lib/images/vendorIcons/kubernetes.svg
Normal file
84
src/lib/images/vendorIcons/kubernetes.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 11 KiB |
@ -4,19 +4,15 @@ import vercelIcon from '$lib/images/vendorIcons/vercelIcon.svg';
|
|||||||
import flowbiteSvelteIcon from '$lib/images/vendorIcons/flowbiteSvelteIcon.svg';
|
import flowbiteSvelteIcon from '$lib/images/vendorIcons/flowbiteSvelteIcon.svg';
|
||||||
import reactIcon from '$lib/images/vendorIcons/reactIcon.svg';
|
import reactIcon from '$lib/images/vendorIcons/reactIcon.svg';
|
||||||
import nextjsIcon from '$lib/images/vendorIcons/nextjsIcon.svg';
|
import nextjsIcon from '$lib/images/vendorIcons/nextjsIcon.svg';
|
||||||
import drizzleIcon from '$lib/images/vendorIcons/drizzleIcon.webp';
|
|
||||||
import zustandIcon from '$lib/images/vendorIcons/zustandIcon.png';
|
|
||||||
import shadcnIcon from '$lib/images/vendorIcons/shadcnIcon.png';
|
|
||||||
import goIcon from '$lib/images/vendorIcons/goIcon.svg';
|
import goIcon from '$lib/images/vendorIcons/goIcon.svg';
|
||||||
import awsIcon from '$lib/images/vendorIcons/awsIcon.svg';
|
import k8sIcon from '$lib/images/vendorIcons/kubernetes.svg'
|
||||||
|
|
||||||
export const projects = [
|
export const projects = [
|
||||||
{
|
{
|
||||||
category: 'nextjs',
|
|
||||||
title: 'Software Jobs',
|
title: 'Software Jobs',
|
||||||
url: 'https://jobs.rannes.dev',
|
url: 'https://jobs.rannes.dev',
|
||||||
description:
|
description:
|
||||||
'I wanted an excuse to try out Go, and I also want to find a job. The scraper is built with Go and the Colly package. It runs on a AWS EC2 instance, and the frontend is built with Next.js which is deployed to Vercel.',
|
'I wanted an excuse to try out Go, and I also want to find a job. The scraper is built with Go and the Colly package. The scraper runs as a cron job in kubernetes, and is served as an API deployd to the same cluster. The frontend is built with Next.js which is deployed to Vercel.',
|
||||||
repo: 'https://gitea.rannes.dev/rannes.dev/sw-jobs-frontend',
|
repo: 'https://gitea.rannes.dev/rannes.dev/sw-jobs-frontend',
|
||||||
rss: 'https://gitea.rannes.dev/rannes.dev/sw-jobs-frontend.rss',
|
rss: 'https://gitea.rannes.dev/rannes.dev/sw-jobs-frontend.rss',
|
||||||
image: '',
|
image: '',
|
||||||
@ -42,14 +38,13 @@ export const projects = [
|
|||||||
url: 'https://vercel.com/'
|
url: 'https://vercel.com/'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'AWS',
|
name: 'k8s',
|
||||||
img: awsIcon,
|
img: k8sIcon,
|
||||||
url: 'https://aws.amazon.com/'
|
url: 'https://aws.amazon.com/'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: 'svelte',
|
|
||||||
title: 'Portfolio',
|
title: 'Portfolio',
|
||||||
url: 'https://rannes.dev',
|
url: 'https://rannes.dev',
|
||||||
description:
|
description:
|
||||||
@ -80,53 +75,6 @@ export const projects = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
category: 'nextjs',
|
|
||||||
title: 'Online Wine Shop.',
|
|
||||||
url: 'https://wine-shop-eta.vercel.app/',
|
|
||||||
description:
|
|
||||||
"To get practical experience with forms, databases, queries and states I want to build a online wine shop for my friend Ketil (that he didn't ask for). Besides the current technologies, I plan to implement Clerk or Auth.js for auth, and Zustand for state management if neccesary (Something tells me it's needed at least for cart) I am doing my best to implement progressive enhancement in forms with cool hooks like <code class='dark:bg-slate-800 bg-stone-300 rounded p-1'>useActionState</code> and explore caching and the prevention of caching in nextjs and vercel. 🤷",
|
|
||||||
repo: 'https://gitea.rannes.dev/rannes.dev/wine-shop',
|
|
||||||
rss: 'https://gitea.rannes.dev/rannes.dev/wine-shop.rss',
|
|
||||||
image: '',
|
|
||||||
vendors: [
|
|
||||||
{
|
|
||||||
name: 'React',
|
|
||||||
img: reactIcon,
|
|
||||||
url: 'https://react.dev/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Next.js',
|
|
||||||
img: nextjsIcon,
|
|
||||||
url: 'https://nextjs.org/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Tailwind',
|
|
||||||
img: tailwindIcon,
|
|
||||||
url: 'https://tailwindcss.com/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Drizzle',
|
|
||||||
img: drizzleIcon,
|
|
||||||
url: 'https://orm.drizzle.team/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Zustand',
|
|
||||||
img: zustandIcon,
|
|
||||||
url: 'https://zustand-demo.pmnd.rs/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Shadcn',
|
|
||||||
img: shadcnIcon,
|
|
||||||
url: 'https://ui.shadcn.com/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Vercel',
|
|
||||||
img: vercelIcon,
|
|
||||||
url: 'https://vercel.com/'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
category: 'nextjs',
|
category: 'nextjs',
|
||||||
title: 'Local weather',
|
title: 'Local weather',
|
||||||
|
@ -1,18 +1,10 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
import '../app.css';
|
import '../app.css';
|
||||||
import CloudflareAnalytics from '$lib/CloudflareAnalytics.svelte';
|
import CloudflareAnalytics from '$lib/CloudflareAnalytics.svelte';
|
||||||
import BottomNavigation from '../lib/BottomNavigation.svelte';
|
import BottomNavigation from '../lib/BottomNavigation.svelte';
|
||||||
import TopNav from '../lib/TopNav.svelte';
|
import TopNav from '../lib/TopNav.svelte';
|
||||||
import { inject } from '@vercel/analytics';
|
|
||||||
let activeBtn = 'home';
|
|
||||||
function handleNavItemClick(btnName) {
|
|
||||||
activeBtn = btnName;
|
|
||||||
}
|
|
||||||
$: activeBtn = activeBtn === 'projects';
|
|
||||||
inject();
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<CloudflareAnalytics />
|
|
||||||
<TopNav />
|
<TopNav />
|
||||||
<div class="px-2 sm:px-0 mx-auto max-w-xs sm:max-w-md md:max-w-3xl mb-20 md:mb-0">
|
<div class="px-2 sm:px-0 mx-auto max-w-xs sm:max-w-md md:max-w-3xl mb-20 md:mb-0">
|
||||||
<slot />
|
<slot />
|
||||||
|
@ -2,11 +2,10 @@
|
|||||||
import { fade } from 'svelte/transition';
|
import { fade } from 'svelte/transition';
|
||||||
import Projects from '$lib/Projects.svelte';
|
import Projects from '$lib/Projects.svelte';
|
||||||
import PageHeader from '$lib/PageHeader.svelte';
|
import PageHeader from '$lib/PageHeader.svelte';
|
||||||
const category = 'nextjs';
|
const title = 'Web dev projects';
|
||||||
const title = 'Next.js Projects';
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div in:fade>
|
<div in:fade>
|
||||||
<PageHeader {title} />
|
<PageHeader {title} />
|
||||||
<Projects {category} />
|
<Projects />
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user