This commit is contained in:
parent
56f49d988d
commit
80c51bdfea
75 changed files with 383 additions and 1838 deletions
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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}/`,
|
||||
})),
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue