upgrade to latest astro and cleanup of unused pages

This commit is contained in:
Sebastian Wendel 2023-09-23 16:18:44 +02:00
parent 8bb9dc7464
commit 3b3302e992
14 changed files with 1659 additions and 2084 deletions

3
.envrc
View file

@ -1,7 +1,6 @@
watch_file flake.nix flake.lock package.json yarn.lock nix/*.nix
watch_file flake.* *.lock nix/*.nix
use flake
yarn install
yarn sync

View file

@ -5,7 +5,6 @@ import tailwind from '@astrojs/tailwind';
import image from "@astrojs/image";
import robotsTxt from 'astro-robots-txt';
import sitemap from '@astrojs/sitemap';
import compress from 'astro-compress';
const mkPath = (name) => path.resolve(`./src/${name}`);
const external = ['svgo'];
@ -18,7 +17,6 @@ const alias = {
'@utils': mkPath('utils'),
};
// https://astro.build/config
export default defineConfig({
site: "https://nix-hh.de",
integrations: [
@ -27,14 +25,10 @@ export default defineConfig({
image(),
sitemap(),
robotsTxt(),
compress(),
],
server: { port: 3001 },
vite: {
ssr: { external },
resolve: { alias },
},
experimental: {
contentCollections: true,
},
});

View file

@ -1,5 +1,28 @@
{
"nodes": {
"alejandra": {
"inputs": {
"fenix": "fenix",
"flakeCompat": "flakeCompat",
"nixpkgs": [
"d2n",
"nixpkgs"
]
},
"locked": {
"lastModified": 1658427149,
"narHash": "sha256-ToD/1z/q5VHsLMrS2h96vjJoLho59eNRtknOUd19ey8=",
"owner": "kamadorueda",
"repo": "alejandra",
"rev": "f5a22afd2adfb249b4e68e0b33aa1f0fb73fb1be",
"type": "github"
},
"original": {
"owner": "kamadorueda",
"repo": "alejandra",
"type": "github"
}
},
"crane": {
"flake": false,
"locked": {
@ -18,13 +41,12 @@
},
"d2n": {
"inputs": {
"alejandra": "alejandra",
"all-cabal-json": [
"nixpkgs"
],
"crane": "crane",
"devshell": "devshell",
"drv-parts": "drv-parts",
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"flake-utils-pre-commit": "flake-utils-pre-commit",
"ghc-utils": "ghc-utils",
@ -32,17 +54,16 @@
"mach-nix": "mach-nix",
"nix-pypi-fetcher": "nix-pypi-fetcher",
"nixpkgs": "nixpkgs",
"nixpkgsV1": "nixpkgsV1",
"poetry2nix": "poetry2nix",
"pre-commit-hooks": "pre-commit-hooks",
"pruned-racket-catalog": "pruned-racket-catalog"
},
"locked": {
"lastModified": 1680605243,
"narHash": "sha256-dUrxj653kcLvjNKRI7NoTJoj+Q7G+vOYsl4iuwtnIWo=",
"lastModified": 1676992344,
"narHash": "sha256-TEn5kEi/jL9Dt6O+ZZ7kQwnlAgEv0r4VgQZnav/cfV4=",
"owner": "nix-community",
"repo": "dream2nix",
"rev": "34a80ab215f1f24068ea9c76f3a7e5bc19478653",
"rev": "db72710500a80bdf4589b6807d2491a4a0dae3ad",
"type": "github"
},
"original": {
@ -67,32 +88,26 @@
"type": "github"
}
},
"drv-parts": {
"fenix": {
"inputs": {
"flake-compat": [
"d2n",
"flake-compat"
],
"flake-parts": [
"d2n",
"flake-parts"
],
"nixpkgs": [
"d2n",
"alejandra",
"nixpkgs"
]
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1680172861,
"narHash": "sha256-QMyI338xRxaHFDlCXdLCtgelGQX2PdlagZALky4ZXJ8=",
"owner": "davhau",
"repo": "drv-parts",
"rev": "ced8a52f62b0a94244713df2225c05c85b416110",
"lastModified": 1657607339,
"narHash": "sha256-HaqoAwlbVVZH2n4P3jN2FFPMpVuhxDy1poNOR7kzODc=",
"owner": "nix-community",
"repo": "fenix",
"rev": "b814c83d9e6aa5a28d0cf356ecfdafb2505ad37d",
"type": "github"
},
"original": {
"owner": "davhau",
"repo": "drv-parts",
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
@ -112,22 +127,6 @@
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@ -154,11 +153,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1680392223,
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=",
"lastModified": 1679737941,
"narHash": "sha256-srSD9CwsVPnUMsIZ7Kt/UegkKUEBcTyU1Rev7mO45S0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5",
"rev": "3502ee99d6dade045bdeaf7b0cd8ec703484c25c",
"type": "github"
},
"original": {
@ -168,15 +167,12 @@
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1681202837,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
@ -200,18 +196,19 @@
"type": "github"
}
},
"flake-utils_2": {
"flakeCompat": {
"flake": false,
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"lastModified": 1650374568,
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
@ -285,11 +282,11 @@
},
"nix-filter": {
"locked": {
"lastModified": 1681154353,
"narHash": "sha256-MCJ5FHOlbfQRFwN0brqPbCunLEVw05D/3sRVoNVt2tI=",
"lastModified": 1678109515,
"narHash": "sha256-C2X+qC80K2C1TOYZT8nabgo05Dw2HST/pSn6s+n6BO8=",
"owner": "numtide",
"repo": "nix-filter",
"rev": "f529f42792ade8e32c4be274af6b6d60857fbee7",
"rev": "aa9ff6ce4a7f19af6415fb3721eaa513ea6c763c",
"type": "github"
},
"original": {
@ -332,11 +329,11 @@
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1680213900,
"narHash": "sha256-cIDr5WZIj3EkKyCgj/6j3HBH4Jj1W296z7HTcWj1aMA=",
"lastModified": 1675183161,
"narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e3652e0735fbec227f342712f180f4f21f0594f2",
"rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
"type": "github"
},
"original": {
@ -349,11 +346,11 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1678872516,
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
"lastModified": 1673800717,
"narHash": "sha256-SFHraUqLSu5cC6IxTprex/nTsI81ZQAtDvlBvGDWfnA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8",
"rev": "2f9fd351ec37f5d479556cd48be4ca340da59b8f",
"type": "github"
},
"original": {
@ -363,28 +360,13 @@
"type": "github"
}
},
"nixpkgsV1": {
"locked": {
"lastModified": 1678500271,
"narHash": "sha256-tRBLElf6f02HJGG0ZR7znMNFv/Uf7b2fFInpTHiHaSE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5eb98948b66de29f899c7fe27ae112a47964baf8",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-22.11",
"type": "indirect"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1681753173,
"narHash": "sha256-MrGmzZWLUqh2VstoikKLFFIELXm/lsf/G9U9zR96VD4=",
"lastModified": 1677050843,
"narHash": "sha256-3fcFxn58eCtrXrVPeW/nAg6NR5wUERVEf8zOtjPDzuM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0a4206a51b386e5cda731e8ac78d76ad924c7125",
"rev": "9e0eed654c705c7cafe192a8eba1610217f70544",
"type": "github"
},
"original": {
@ -396,11 +378,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1681303793,
"narHash": "sha256-JEdQHsYuCfRL2PICHlOiH/2ue3DwoxUX7DJ6zZxZXFk=",
"lastModified": 1671271357,
"narHash": "sha256-xRJdLbWK4v2SewmSStYrcLa0YGJpleufl44A19XSW8k=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fe2ecaf706a5907b5e54d979fbde4924d84b65fc",
"rev": "40f79f003b6377bd2f4ed4027dde1f8f922995dd",
"type": "github"
},
"original": {
@ -429,18 +411,18 @@
},
"pre-commit": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_2",
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"gitignore": "gitignore",
"nixpkgs": "nixpkgs_3",
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1681413034,
"narHash": "sha256-/t7OjNQcNkeWeSq/CFLYVBfm+IEnkjoSm9iKvArnUUI=",
"lastModified": 1676879534,
"narHash": "sha256-HU4RXcwsAX1u7AUbGOBDxkYQkeODcn+HZjXqKa1y/hk=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "d3de8f69ca88fb6f8b09e5b598be5ac98d28ede5",
"rev": "c9495f017f67a11e9c9909b032dc7762dfc853cf",
"type": "github"
},
"original": {
@ -495,24 +477,25 @@
"inputs": {
"d2n": "d2n",
"flake-parts": "flake-parts_2",
"flake-utils": "flake-utils",
"nix-filter": "nix-filter",
"nixpkgs": "nixpkgs_2",
"pre-commit": "pre-commit"
}
},
"systems": {
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"lastModified": 1657557289,
"narHash": "sha256-PRW+nUwuqNTRAEa83SfX+7g+g8nQ+2MMbasQ9nt6+UM=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "caf23f29144b371035b864a1017dbc32573ad56d",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
}

View file

@ -1,22 +1,19 @@
{
description = "Nix Hamburg User Group Flake";
description = "nobbz.dev - Website";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixpkgs-unstable";
d2n.url = "github:nix-community/dream2nix";
d2n.inputs.all-cabal-json.follows = "nixpkgs";
nix-filter.url = "github:numtide/nix-filter";
flake-utils.url = "github:numtide/flake-utils";
flake-parts.url = "github:hercules-ci/flake-parts";
pre-commit.url = "github:cachix/pre-commit-hooks.nix";
};
outputs = {
d2n,
self,
nix-filter,
flake-parts,
flake-utils,
pre-commit,
...
} @ inputs: let
@ -44,18 +41,11 @@
devShells.default = pkgs.mkShell {
packages = builtins.attrValues {
inherit (pkgs) nodejs yarn;
inherit (pkgs) yarn;
inherit (pkgs) alejandra nil;
};
shellHook = config.pre-commit.installationScript;
# shellHook = config.pre-commit.installationScript;
};
};
};
}
// flake-utils.lib.eachSystem ["aarch64-linux" "x86_64-linux"] (localSystem: {
hydraJobs = {
build = {
inherit (self.packages.${localSystem}) nix-hh-website;
};
};
});
}

View file

@ -5,6 +5,7 @@ in {
dream2nix.inputs.self = {
source = filter {
root = ./..;
include = [
(inDirectory "src")
(inDirectory "public")
@ -15,6 +16,7 @@ in {
../yarn.lock
];
};
projects.nix-hh-website = {
name = "nix-hh-website";
subsystem = "nodejs";

View file

@ -19,7 +19,6 @@
"@fontsource/inter": "^4.5.15",
"@tailwindcss/typography": "^0.5.9",
"astro": "^2.2.0",
"astro-compress": "^1.1.35",
"astro-feather-icons": "^1.0.2",
"astro-forms": "^1.0.11",
"astro-icon": "^0.8.0",

View file

@ -2,14 +2,5 @@
<p class="text-center text-sm text-slate-500">
Copyright © {new Date().getFullYear()} Nix Hamburg User Group.
</p>
<!-- <p class="text-center text-xs text-slate-500 mt-1">
Served by <a
href="https://srx.dev"
target="_blank"
rel="noopener"
class="hover:underline">
srx.dev
</a>
</p> -->
<script defer data-domain="nix-hh.de" src="https://track.srx.dev/js/plausible.js"></script>
</footer>

View file

@ -1,45 +0,0 @@
---
import { Tick } from "@components/ui/icons";
import Link from "@components/ui/link.astro";
const { plan } = Astro.props;
---
<div>
<div
class="flex flex-col w-full order-first lg:order-none border-2 border-[#D8DEE9] border-opacity-50 py-5 px-6 rounded-md">
<div class="text-center">
<h4 class="text-lg font-medium text-gray-400">{plan.name}</h4><p
class="mt-3 text-4xl font-bold text-black md:text-4xl">
{
plan.price && typeof plan.price === "object"
? plan.price.monthly
: plan.price
}
</p>
<!-- {
plan.price.original && (
<p class="mt-1 text-xl font-medium text-gray-400 line-through md:text-2xl">
{plan.price.original}
</p>
)
} -->
</div><ul class="grid mt-8 text-left gap-y-4">
{
plan.features.map((item) => (
<li class="flex items-start gap-3 text-gray-800">
<Tick class="w-6 h-6" />
<span>{item}</span>
</li>
))
}
</ul><div class="flex mt-8">
<Link
href={plan.button.link || "#"}
block
style={plan.popular ? "primary" : "outline"}>
{plan.button.text || "Get Started"}
</Link>
</div>
</div>
</div>

View file

@ -1,62 +0,0 @@
---
import { getCollection } from "astro:content";
import { Picture } from "@astrojs/image/components";
import Layout from "@layouts/Layout.astro";
import Container from "@components/container.astro";
import Sectionhead from "@components/sectionhead.astro";
// Filter team entries with 'draft: false' & date before current date
const publishedTeamMembers = await getCollection("team", ({ data }) => {
return !data.draft && data.publishDate < new Date();
});
---
<Layout title="About">
<Container>
<Sectionhead>
<Fragment slot="title">About</Fragment>
<Fragment slot="desc">We are a small passionate team.</Fragment>
</Sectionhead>
<div class="flex flex-col gap-3 mx-auto max-w-4xl mt-16">
<h2 class="font-bold text-3xl text-gray-800">
Empowering the world with Astro.
</h2>
<p class="text-lg leading-relaxed text-slate-500">
We're a multi-cultural team from around the world! We come from diverse
backgrounds, bringing different personalities, experiences and skills to
the job. This is what makes our team so special.
</p>
</div>
<div class="grid md:grid-cols-3 gap-10 mx-auto max-w-4xl mt-12">
{
publishedTeamMembers.map((teamMemberEntry) => (
<div class="group">
<div class="w-full aspect-square">
<Picture
src={teamMemberEntry.data.avatar.src}
alt={teamMemberEntry.data.avatar.alt}
sizes="(max-width: 800px) 100vw, 400px"
widths={[200, 400]}
aspectRatio="1:1"
background="#ffffff"
fit="cover"
position="center"
class="w-full rounded-md rounded transition group-hover:-translate-y-1 group-hover:shadow-xl"
/>
</div>
<div class="mt-4 text-center">
<h2 class="text-lg text-gray-800">
{teamMemberEntry.data.name}
</h2>
<h3 class="text-sm text-slate-500">
{teamMemberEntry.data.title}
</h3>
</div>
</div>
))
}
</div>
</Container>
</Layout>

View file

@ -1,76 +0,0 @@
---
import { getCollection } from "astro:content";
import { Picture } from "@astrojs/image/components";
import Layout from "@layouts/Layout.astro";
import Container from "@components/container.astro";
import Sectionhead from "@components/sectionhead.astro";
// Filter blog entries with 'draft: false' & date before current date
const publishedBlogEntries = await getCollection("blog", ({ data }) => {
return !data.draft && data.publishDate < new Date();
});
// Sort content entries by publication date
publishedBlogEntries.sort(function (a, b) {
return b.data.publishDate.valueOf() - a.data.publishDate.valueOf();
});
---
<Layout title="Blog">
<Container>
<Sectionhead>
<Fragment slot="title">Our Blog</Fragment>
<Fragment slot="desc">
We write about building startups and thoughts going on our mind.
</Fragment>
</Sectionhead>
<main class="mt-16">
<ul class="grid gap-16 max-w-4xl mx-auto">
{
publishedBlogEntries.map((blogPostEntry, index) => (
<li>
<a href={`/blog/${blogPostEntry.slug}`}>
<div class="grid md:grid-cols-2 gap-5 md:gap-10 items-center">
<Picture
src={blogPostEntry.data.image.src}
alt={blogPostEntry.data.image.alt}
sizes="(max-width: 800px) 100vw, 800px"
widths={[200, 400, 800]}
aspectRatio="16:9"
background="#ffffff"
fit="cover"
position="center"
loading={index <= 2 ? "eager" : "lazy"}
decoding={index <= 2 ? "sync" : "async"}
class="w-full rounded-md"
/>
<div>
<span class="text-blue-400 uppercase tracking-wider text-sm font-medium">
{blogPostEntry.data.category}
</span>
<h2 class="text-3xl font-semibold leading-snug tracking-tight mt-1 ">
{blogPostEntry.data.title}
</h2>
<div class="flex gap-2 mt-3">
<span class="text-gray-400">
{blogPostEntry.data.author}
</span>
<span class="text-gray-400">• </span>
<time
class="text-gray-400"
datetime={blogPostEntry.data.publishDate.toISOString()}>
{blogPostEntry.data.publishDate.toDateString()}
</time>
</div>
</div>
</div>
</a>
</li>
))
}
</ul>
</main>
</Container>
</Layout>

View file

@ -1,62 +0,0 @@
---
import { getCollection } from "astro:content";
import Layout from "@layouts/Layout.astro";
import Container from "@components/container.astro";
// Generate a new path for every collection entry
export async function getStaticPaths() {
const blogEntries = await getCollection("blog");
return blogEntries.map((entry) => ({
params: { slug: entry.slug },
props: { entry },
}));
}
// Get the entry directly from the prop on render
const { entry } = Astro.props;
const { Content } = await entry.render();
---
<Layout title={entry.data.title}>
<Container>
<div class="mx-auto max-w-[735px] mt-14">
<span class="text-blue-400 uppercase tracking-wider text-sm font-medium">
{entry.data.category}
</span>
<h1
class="text-4xl lg:text-5xl font-bold lg:tracking-tight mt-1 lg:leading-tight">
{entry.data.title}
</h1>
<div class="flex gap-2 mt-3 items-center flex-wrap md:flex-nowrap">
<span class="text-gray-400">
{entry.data.author}
</span>
<span class="text-gray-400">•</span>
<time
class="text-gray-400"
datetime={entry.data.publishDate.toISOString()}>
{entry.data.publishDate.toDateString()}
</time>
<span class="text-gray-400 hidden md:block">•</span>
<div class="w-full md:w-auto flex flex-wrap gap-3">
{
entry.data.tags.map((tag) => (
<span class="text-sm text-gray-500">#{tag}</span>
))
}
</div>
</div>
</div>
<div class="mx-auto prose prose-lg mt-6">
<Content />
</div>
<div class="text-center mt-8">
<a
href="/blog"
class="bg-gray-100 px-5 py-3 rounded-md hover:bg-gray-200 transition"
>← Back to Blog</a
>
</div>
</Container>
</Layout>

View file

@ -1,80 +0,0 @@
---
import Layout from "@layouts/Layout.astro";
import Container from "@components/container.astro";
import Sectionhead from "@components/sectionhead.astro";
import Pricing from "@components/pricing.astro";
const pricing = [
{
name: "Personal",
price: "Free",
popular: false,
features: [
"Lifetime free",
"Up to 3 users",
"Unlimited Pages",
"Astro Sub domain",
"Basic Integrations",
"Community Support",
],
button: {
text: "Get Started",
link: "/",
},
},
{
name: "Startup",
price: {
monthly: "$19",
annual: "$16",
discount: "10%",
original: "$24",
},
popular: true,
features: [
"All Free Features",
"Up to 20 users",
"20 Custom domains",
"Unlimited Collaborators",
"Advanced Integrations",
"Priority Support",
],
button: {
text: "Get Started",
link: "#",
},
},
{
name: "Enterprise",
price: "Custom",
popular: false,
features: [
"All Pro Features",
"Unlimited Custom domains",
"99.99% Uptime SLA",
"SAML & SSO Integration",
"Dedicated Account Manager",
"24/7 Phone Support",
],
button: {
text: "Contact us",
link: "/contact",
},
},
];
---
<Layout title="Pricing">
<Container>
<Sectionhead>
<Fragment slot="title">Pricing</Fragment>
<Fragment slot="desc"
>Simple & Predictable pricing. No Surprises.</Fragment
>
</Sectionhead>
<div class="grid md:grid-cols-3 gap-10 mx-auto max-w-screen-lg mt-12">
{pricing.map((item) => <Pricing plan={item} />)}
</div>
</Container>
</Layout>

View file

@ -7,6 +7,7 @@
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"strictNullChecks": true
"strictNullChecks": true,
"allowJs": true
}
}

3193
yarn.lock

File diff suppressed because it is too large Load diff