diff options
| author | Yuval Adam <_@yuv.al> | 2025-06-12 22:25:57 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2025-06-12 22:25:57 +0200 |
| commit | 27053ad40121adcf08603c7d7c9c3f48af5246f5 (patch) | |
| tree | 727334e690386fdb130353711d5a0f3b43f49f95 /src/pages | |
| parent | 97aecb44973c035c40a256291dcafaf4fb2be257 (diff) | |
Initial page works
Diffstat (limited to 'src/pages')
| -rw-r--r-- | src/pages/blog/[slug].astro | 67 | ||||
| -rw-r--r-- | src/pages/blog/index.astro | 48 | ||||
| -rw-r--r-- | src/pages/index.astro | 160 |
3 files changed, 90 insertions, 185 deletions
diff --git a/src/pages/blog/[slug].astro b/src/pages/blog/[slug].astro deleted file mode 100644 index f42f5c9..0000000 --- a/src/pages/blog/[slug].astro +++ /dev/null @@ -1,67 +0,0 @@ ---- -import { getCollection, getEntry } from 'astro:content'; -import StandardLayout from '../../layouts/StandardLayout.astro'; - -// Define the props type -export async function getStaticPaths() { - const blogEntries = await getCollection('blog'); - return blogEntries.map(entry => ({ - params: { slug: entry.slug }, - props: { entry }, - })); -} - -// Get the blog post data -const { entry } = Astro.props; -const { Content } = await entry.render(); - -// Format the publication date -const formattedDate = new Date(entry.data.pubDate).toLocaleDateString('en-US', { - year: 'numeric', - month: 'long', - day: 'numeric' -}); ---- - -<StandardLayout title={entry.data.title} description={entry.data.description}> - <article class="max-w-3xl mx-auto"> - <div class="mb-8"> - <a href="/blog" class="text-blue-600 hover:text-blue-800 flex items-center"> - <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-1" viewBox="0 0 20 20" fill="currentColor"> - <path fill-rule="evenodd" d="M9.707 14.707a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 1.414L7.414 9H15a1 1 0 110 2H7.414l2.293 2.293a1 1 0 010 1.414z" clip-rule="evenodd" /> - </svg> - Back to Blog - </a> - </div> - - {entry.data.image && ( - <img - src={entry.data.image} - alt={entry.data.title} - class="w-full h-64 md:h-96 object-cover rounded-lg shadow-md mb-8" - /> - )} - - <h1 class="text-4xl font-bold text-gray-900 mb-4">{entry.data.title}</h1> - - <div class="flex items-center text-gray-600 mb-8"> - <span>By {entry.data.author}</span> - <span class="mx-2">•</span> - <time datetime={entry.data.pubDate.toISOString()}>{formattedDate}</time> - </div> - - {entry.data.tags && entry.data.tags.length > 0 && ( - <div class="flex flex-wrap gap-2 mb-8"> - {entry.data.tags.map(tag => ( - <span class="bg-gray-100 text-gray-800 text-sm font-medium px-3 py-1 rounded-full"> - {tag} - </span> - ))} - </div> - )} - - <div class="prose prose-lg max-w-none"> - <Content /> - </div> - </article> -</StandardLayout> diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro deleted file mode 100644 index 76b9f57..0000000 --- a/src/pages/blog/index.astro +++ /dev/null @@ -1,48 +0,0 @@ ---- -import StandardLayout from '../../layouts/StandardLayout.astro'; -import { getCollection } from 'astro:content'; - -// Get all blog posts sorted by publication date -const posts = await getCollection('blog'); -posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()); ---- - -<StandardLayout title="Blog | Astro Site" description="Read our latest blog posts"> - <div class="space-y-8"> - <h1 class="text-3xl font-bold text-gray-900">Blog</h1> - - <div class="grid gap-8 md:grid-cols-2 lg:grid-cols-3"> - {posts.map((post) => ( - <article class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow"> - <a href={`/blog/${post.slug}`} class="block"> - {post.data.image && ( - <img - src={post.data.image} - alt={post.data.title} - class="w-full h-48 object-cover" - /> - )} - <div class="p-6"> - <h2 class="text-xl font-semibold text-gray-900 mb-2">{post.data.title}</h2> - <p class="text-sm text-gray-500 mb-3"> - {new Date(post.data.pubDate).toLocaleDateString('en-US', { - year: 'numeric', - month: 'long', - day: 'numeric' - })} - </p> - <p class="text-gray-700">{post.data.description}</p> - <p class="mt-4 text-blue-600 font-medium">Read more →</p> - </div> - </a> - </article> - ))} - </div> - - {posts.length === 0 && ( - <div class="bg-white rounded-lg shadow p-6 text-center"> - <p class="text-gray-700">No blog posts found. Check back soon!</p> - </div> - )} - </div> -</StandardLayout> diff --git a/src/pages/index.astro b/src/pages/index.astro index a88712c..1981ec1 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,78 +1,98 @@ --- -import Counter from "../components/Counter"; -import StandardLayout from "../layouts/StandardLayout.astro"; import { getCollection } from "astro:content"; -// Get the latest 3 blog posts -const latestPosts = await getCollection("blog"); -latestPosts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()); -const featuredPosts = latestPosts.slice(0, 3); +import "../styles/global.css"; + +// Get all names from the collection +const allNames = await getCollection("names"); +const members = allNames.filter(name => name.data.candidate !== true); +const candidates = allNames.filter(name => name.data.candidate === true); --- -<StandardLayout title="Astro - Home"> - <section class="py-12"> - <div class="text-center mb-12"> - <h1 class="text-5xl font-bold text-gray-900 mb-4"> - Welcome to Astro - </h1> - <p class="text-xl text-gray-600 max-w-3xl mx-auto"> - A modern framework for building fast, content-focused websites. - </p> - <div class="mt-8"> - <Counter client:load /> - </div> - </div> - </section> +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>Domain Name Hack Club</title> + <meta name="description" content="An exclusive club of nerds that own the domain hack to their name"> + <meta name="keywords" content="domain, name, hack, club, exclusive, personal, homepage"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="robots" content="all"> + <link rel="canonical" href="https://namehack.club/"> + <script src="https://cdn.usefathom.com/script.js" data-site="SSTGQKAU" defer></script> +</head> + +<body class="max-w-4xl mx-auto px-4 font-sans"> + <h1 class="mt-20 text-5xl text-center font-mono">Doma<span class="text-gray-400">.</span>in Na<span class="text-gray-400">.</span>me + Ha<span class="text-gray-400">.</span>ck Cl<span class="text-gray-400">.</span>ub</h1> + <p class="leading-relaxed text-xl">An exclusive club of geeks that serve their personal homepage from the <a + href="https://en.wikipedia.org/wiki/Domain_hack" class="text-pink-600 hover:text-pink-800">domain hack</a> to their name. Are you + one of us? Join the club by opening a pull + request on <a href="https://github.com/yuvadm/namehack.club" class="text-pink-600 hover:text-pink-800">Github</a> or send us an + email at <a href="mailto:join@namehack.club" class="text-pink-600 hover:text-pink-800">join@namehack.club</a>.</p> - <section - class="py-12 bg-gray-50 -mx-4 sm:-mx-6 lg:-mx-8 px-4 sm:px-6 lg:px-8" - > - <div class="max-w-7xl mx-auto"> - <div class="flex justify-between items-center mb-8"> - <h2 class="text-3xl font-bold text-gray-900"> - Latest Blog Posts - </h2> - <a - href="/blog" - class="text-blue-600 hover:text-blue-800 font-medium" - >View all posts →</a - > - </div> + <h2 class="pt-8 text-2xl font-bold">💎 Members</h2> + <ul class="list-none pl-0"> + {members.map((name) => { + const nameParts = name.data.name.toLowerCase().split(" "); + const domain = name.data.domain.replace(".", ""); + const url = name.data.url || `https://${name.data.domain}`; + + return ( + <li class="mb-3"> + <div class="text-2xl"> + {nameParts.map((part, index) => ( + <> + {index > 0 && " "} + {part === domain ? ( + <a href={url} class="text-blue-600 hover:text-blue-800 hover:underline"> + {name.data.domain} + </a> + ) : ( + <span>{part}</span> + )} + </> + ))} + </div> + <div class="text-gray-600 font-serif mt-1">{name.data.title}</div> + </li> + ); + })} + </ul> - <div class="grid gap-8 md:grid-cols-2 lg:grid-cols-3"> - { - featuredPosts.map((post) => ( - <article class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow"> - <a href={`/blog/${post.slug}`} class="block"> - {post.data.image && ( - <img - src={post.data.image} - alt={post.data.title} - class="w-full h-48 object-cover" - /> + <h2 class="pt-8 text-2xl font-bold">⭐ Candidates</h2> + <ul class="pl-0 flex flex-wrap justify-between"> + {candidates.map((name) => { + const nameParts = name.data.name.toLowerCase().split(" "); + const domain = name.data.domain.replace(".", ""); + const url = name.data.url || `https://${name.data.domain}`; + + return ( + <li class="mb-3 inline-block pr-3"> + <span class="text-xl"> + {nameParts.map((part, index) => ( + <> + {index > 0 && " "} + {part === domain ? ( + <a href={url} class="text-blue-600 hover:text-blue-800 hover:underline" rel="nofollow"> + {name.data.domain} + </a> + ) : ( + <span>{part}</span> )} - <div class="p-6"> - <h3 class="text-xl font-semibold text-gray-900 mb-2"> - {post.data.title} - </h3> - <p class="text-sm text-gray-500 mb-3"> - {new Date( - post.data.pubDate, - ).toLocaleDateString("en-US", { - year: "numeric", - month: "long", - day: "numeric", - })} - </p> - <p class="text-gray-700"> - {post.data.description} - </p> - </div> - </a> - </article> - )) - } - </div> - </div> - </section> -</StandardLayout> + </> + ))} + </span> + </li> + ); + })} + </ul> + + <hr class="mt-8 border-gray-200"> + <footer class="text-right leading-relaxed mb-4"> + Created by <a href="https://yuv.al" class="text-green-600 hover:text-green-800">Yuval Adam</a>. Maintained collaboratively on <a + href="https://github.com/yuvadm/namehack.club" class="text-green-600 hover:text-green-800">Github</a>. + </footer> +</body> +</html> |
