Set up multisite Dokploy deployment
Some checks are pending
Build / build (push) Waiting to run

This commit is contained in:
Neeldhara Misra 2026-06-13 19:45:59 +02:00
parent 56f49d988d
commit 80c51bdfea
75 changed files with 383 additions and 1838 deletions

View file

@ -1,30 +1,29 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import { getCollection, render } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
import { ACTIVE_BLOG_SITE } from '@/blog-sites.js';
import { SITE_TITLE } from '@/consts';
export async function getStaticPaths() {
const posts = await getCollection('art');
const posts = await getCollection(ACTIVE_BLOG_SITE.key);
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'art'>;
const post = Astro.props;
const { Content } = await render(post);
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<BlogPost post={post} client:only="react">
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>
</DefaultLayout>

View file

@ -1,16 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('art')).sort(
(a, b) => new Date(b.data.pubDate).valueOf() - new Date(a.data.pubDate).valueOf()
);
const SITE_TITLE = 'Art - Visual Explorations in Computer Science';
const SITE_DESCRIPTION = 'Algorithmic sketches, generative art, and visual representations of computer science concepts.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<BlogPosts posts={posts} collection="art" client:only='react' />
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("art");
return rss({
title: "Art - Visual Explorations in Computer Science",
description: "Algorithmic sketches, generative art, and visual representations of computer science concepts.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/art/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('bfs');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'bfs'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('bfs')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'BFS - Breadth-First Search Through Computer Science';
const SITE_DESCRIPTION = 'Conference highlights, algorithmic breakthroughs, and cutting-edge research in computer science.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">BFS</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="bfs" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("bfs");
return rss({
title: "BFS - Breadth-First Search Through Computer Science",
description: "Conference highlights, algorithmic breakthroughs, and cutting-edge research in computer science.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/bfs/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'blog'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,20 +0,0 @@
---
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import { getCollection } from 'astro:content';
import { BlogPosts } from '@/components/sections/blog-posts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
const posts = (await getCollection('blog')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const blogTitle = `Blog | ${SITE_TITLE}`;
const blogDescription = "Explore our blog for insightful articles, personal reflections and updates from our team.";
---
<DefaultLayout title={blogTitle} description={blogDescription}>
<BlogPosts posts={posts} collection="blog" client:only='react' />
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('contests');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'contests'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('contests')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Contests - Competitive Programming and Problem Analysis';
const SITE_DESCRIPTION = 'Analysis of programming contests, problem breakdowns, and strategies for competitive programming.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Contests</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="contests" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("contests");
return rss({
title: "Contests - Competitive Programming and Problem Analysis",
description: "Analysis of programming contests, problem breakdowns, and strategies for competitive programming.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/contests/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('dfs');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'dfs'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('dfs')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'DFS - Deep Dives into Papers and Research';
const SITE_DESCRIPTION = 'In-depth analysis of research papers, algorithmic techniques, and theoretical computer science.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">DFS</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="dfs" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("dfs");
return rss({
title: "DFS - Deep Dives into Papers and Research",
description: "In-depth analysis of research papers, algorithmic techniques, and theoretical computer science.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/dfs/${post.id}/`,
})),
});
}

View file

@ -1,10 +1,23 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import { ACTIVE_BLOG_SITE } from '@/blog-sites.js';
import { BlogPosts } from '@/components/sections/blog-posts';
import FeaturedPosts from '@/components/sections/featured-posts';
const posts = (await getCollection(ACTIVE_BLOG_SITE.key)).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<FeaturedPosts />
</DefaultLayout>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">{ACTIVE_BLOG_SITE.title}</h1>
<p class="text-xl text-muted-foreground">{ACTIVE_BLOG_SITE.description}</p>
</div>
<BlogPosts posts={posts} client:only="react" />
</div>
</div>
</DefaultLayout>

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('magic');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'magic'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('magic')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Magic - Mathematical Card Tricks and Illusions';
const SITE_DESCRIPTION = 'Self-working card tricks, mathematical principles in magic, and the beauty of algorithmic illusions.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Magic</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="magic" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("magic");
return rss({
title: "Magic - Mathematical Card Tricks and Illusions",
description: "Self-working card tricks, mathematical principles in magic, and the beauty of algorithmic illusions.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/magic/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('poetry');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'poetry'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('poetry')).sort(
(a, b) => new Date(b.data.pubDate).valueOf() - new Date(a.data.pubDate).valueOf()
);
const SITE_TITLE = 'Poetry - Code in Verse';
const SITE_DESCRIPTION = 'Programming concepts expressed through haikus, sonnets, and creative verse.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Poetry</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="poetry" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("poetry");
return rss({
title: "Poetry - Code in Verse",
description: "Programming concepts expressed through haikus, sonnets, and creative verse.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/poetry/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('problems');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'problems'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('problems')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Problems - Algorithmic Challenges and Solutions';
const SITE_DESCRIPTION = 'Interesting problems from contests, assessments, and real-world applications with detailed solutions.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Problems</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="problems" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("problems");
return rss({
title: "Problems - Algorithmic Challenges and Solutions",
description: "Interesting problems from contests, assessments, and real-world applications with detailed solutions.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/problems/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('puzzles');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'puzzles'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('puzzles')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Puzzles - Logic, Mathematics, and Interactive Challenges';
const SITE_DESCRIPTION = 'Mathematical puzzles, logic problems, and interactive challenges that teach algorithmic thinking.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Puzzles</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="puzzles" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("puzzles");
return rss({
title: "Puzzles - Logic, Mathematics, and Interactive Challenges",
description: "Mathematical puzzles, logic problems, and interactive challenges that teach algorithmic thinking.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/puzzles/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('reflections');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'reflections'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('reflections')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Reflections - Thoughts on Teaching, Learning, and Life';
const SITE_DESCRIPTION = 'Personal reflections on academia, teaching philosophy, and the journey of continuous learning.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Reflections</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="reflections" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("reflections");
return rss({
title: "Reflections - Thoughts on Teaching, Learning, and Life",
description: "Personal reflections on academia, teaching philosophy, and the journey of continuous learning.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/reflections/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('reviews');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'reviews'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('reviews')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Reviews - Tools, Books, and Technology';
const SITE_DESCRIPTION = 'In-depth reviews of tools, books, hardware, and software for academics and developers.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Reviews</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="reviews" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("reviews");
return rss({
title: "Reviews - Tools, Books, and Technology",
description: "In-depth reviews of tools, books, hardware, and software for academics and developers.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/reviews/${post.id}/`,
})),
});
}

View file

@ -1,16 +1,20 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
import { SITE_TITLE, SITE_DESCRIPTION } from "../consts";
import { ACTIVE_BLOG_SITE } from "../blog-sites.js";
export async function GET(context) {
const posts = await getCollection("blog");
const posts = (await getCollection(ACTIVE_BLOG_SITE.key)).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
return rss({
title: SITE_TITLE,
description: SITE_DESCRIPTION,
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/blog/${post.id}/`,
link: `/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('vibes');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'vibes'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('vibes')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Vibes - AI Conversations and Creative Explorations';
const SITE_DESCRIPTION = 'Philosophical dialogues with AI, creative coding experiments, and explorations at the intersection of technology and consciousness.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Vibes</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="vibes" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("vibes");
return rss({
title: "Vibes - AI Conversations and Creative Explorations",
description: "Philosophical dialogues with AI, creative coding experiments, and explorations at the intersection of technology and consciousness.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/vibes/${post.id}/`,
})),
});
}

View file

@ -1,30 +0,0 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPost } from '@/components/sections/blog-post';
import { SITE_TITLE, SITE_DESCRIPTION } from '@/consts';
import NewsletterSignup from '@/components/sections/newsletter-signup';
import { render } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('workflows');
return posts.map((post) => ({
params: { slug: post.id },
props: post,
}));
}
type Props = CollectionEntry<'workflows'>;
const post = Astro.props;
const { Content } = await render(post);
---
<DefaultLayout title={`${post.data.title} | ${SITE_TITLE}`} description={post.data.description}>
<div class="py-16 md:py-28 lg:py-32">
<BlogPost post={post} client:only='react'>
<Content />
</BlogPost>
</div>
<NewsletterSignup client:load />
</DefaultLayout>

View file

@ -1,24 +0,0 @@
---
import { getCollection } from 'astro:content';
import DefaultLayout from '@/layouts/DefaultLayout.astro';
import { BlogPosts } from '@/components/sections/blog-posts';
const posts = (await getCollection('workflows')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
const SITE_TITLE = 'Workflows - Productivity and Automation';
const SITE_DESCRIPTION = 'Efficient workflows, automation scripts, and productivity tools for developers and academics.';
---
<DefaultLayout title={SITE_TITLE} description={SITE_DESCRIPTION}>
<div class="py-16 md:py-28 lg:py-32">
<div class="container max-w-5xl">
<div class="mb-12">
<h1 class="text-4xl font-bold mb-4">Workflows</h1>
<p class="text-xl text-muted-foreground">{SITE_DESCRIPTION}</p>
</div>
<BlogPosts posts={posts} collection="workflows" client:only='react' />
</div>
</div>
</DefaultLayout>

View file

@ -1,15 +0,0 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function GET(context) {
const posts = await getCollection("workflows");
return rss({
title: "Workflows - Productivity and Automation",
description: "Efficient workflows, automation scripts, and productivity tools for developers and academics.",
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/workflows/${post.id}/`,
})),
});
}