summaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2025-06-12 22:25:57 +0200
committerYuval Adam <_@yuv.al>2025-06-12 22:25:57 +0200
commit27053ad40121adcf08603c7d7c9c3f48af5246f5 (patch)
tree727334e690386fdb130353711d5a0f3b43f49f95 /src/pages
parent97aecb44973c035c40a256291dcafaf4fb2be257 (diff)
Initial page works
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/blog/[slug].astro67
-rw-r--r--src/pages/blog/index.astro48
-rw-r--r--src/pages/index.astro160
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>