chore: remove more slop
This commit is contained in:
parent
5d9940eddf
commit
b9561ad2d0
22 changed files with 237 additions and 587 deletions
|
@ -1,23 +0,0 @@
|
||||||
---
|
|
||||||
export interface Props {
|
|
||||||
institution: string
|
|
||||||
time: string
|
|
||||||
job_title: string
|
|
||||||
location: string
|
|
||||||
description: string
|
|
||||||
}
|
|
||||||
|
|
||||||
const { institution, time, job_title, location, description } = Astro.props
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="px-8 py-5">
|
|
||||||
<div class="flex justify-between text-sm font-bold md:text-lg">
|
|
||||||
<div>{institution}</div>
|
|
||||||
<div>{location}</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex justify-between text-xs md:text-base">
|
|
||||||
<div class="italic">{job_title}</div>
|
|
||||||
<div>{time}</div>
|
|
||||||
</div>
|
|
||||||
<p class="mt-2 text-xs">{description}</p>
|
|
||||||
</div>
|
|
|
@ -2,7 +2,6 @@
|
||||||
import Container from '@components/Container.astro'
|
import Container from '@components/Container.astro'
|
||||||
import Link from '@components/Link.astro'
|
import Link from '@components/Link.astro'
|
||||||
import { SITE } from '@consts'
|
import { SITE } from '@consts'
|
||||||
import ProgressBar from './ProgressBar.astro'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<header transition:persist>
|
<header transition:persist>
|
||||||
|
@ -18,11 +17,7 @@ import ProgressBar from './ProgressBar.astro'
|
||||||
<span>
|
<span>
|
||||||
{`/`}
|
{`/`}
|
||||||
</span>
|
</span>
|
||||||
<Link href="/publications">research</Link>
|
<Link href="/authors">authors</Link>
|
||||||
<span>
|
|
||||||
{`/`}
|
|
||||||
</span>
|
|
||||||
<Link href="/cv">cv</Link>
|
|
||||||
<span>
|
<span>
|
||||||
{`/`}
|
{`/`}
|
||||||
</span>
|
</span>
|
||||||
|
@ -34,25 +29,6 @@ import ProgressBar from './ProgressBar.astro'
|
||||||
<span>
|
<span>
|
||||||
{`/`}
|
{`/`}
|
||||||
</span>
|
</span>
|
||||||
<button
|
|
||||||
id="magnifying-glass"
|
|
||||||
aria-label="Search"
|
|
||||||
class="flex items-center rounded border border-black/15 bg-neutral-100 px-2 py-1 text-xs transition-colors duration-300 ease-in-out hover:bg-black/5 hover:text-black focus-visible:bg-black/5 focus-visible:text-black dark:border-white/20 dark:bg-neutral-900 dark:hover:bg-white/5 dark:hover:text-white dark:focus-visible:bg-white/5 dark:focus-visible:text-white"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
height="16"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
viewBox="0 0 16 16"
|
|
||||||
width="16"
|
|
||||||
style="color: currentcolor;"
|
|
||||||
><path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M3.5 7C3.5 5.067 5.067 3.5 7 3.5C8.933 3.5 10.5 5.067 10.5 7C10.5 7.88461 10.1718 8.69256 9.63058 9.30876L9.30876 9.63058C8.69256 10.1718 7.88461 10.5 7 10.5C5.067 10.5 3.5 8.933 3.5 7ZM9.96544 11.0261C9.13578 11.6382 8.11014 12 7 12C4.23858 12 2 9.76142 2 7C2 4.23858 4.23858 2 7 2C9.76142 2 12 4.23858 12 7C12 8.11014 11.6382 9.13578 11.0261 9.96544L14.0303 12.9697L14.5607 13.5L13.5 14.5607L12.9697 14.0303L9.96544 11.0261Z"
|
|
||||||
fill="currentColor"></path></svg
|
|
||||||
>
|
|
||||||
Search
|
|
||||||
</button>
|
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
29
src/components/MemberCard.astro
Normal file
29
src/components/MemberCard.astro
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
import type { CollectionEntry } from "astro:content";
|
||||||
|
import { Image } from "astro:assets";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
member: CollectionEntry<"authors">;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { member } = Astro.props;
|
||||||
|
const { name, avatar, bio } = member.data;
|
||||||
|
---
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="animate not-prose flex flex-col sm:flex-row size-full sm:items-center gap-4 overflow-hidden rounded-xl border border-foreground bg-background p-6 hover:bg-secondary"
|
||||||
|
>
|
||||||
|
<Image
|
||||||
|
src={avatar}
|
||||||
|
alt={`Avatar of ${name}`}
|
||||||
|
width={256}
|
||||||
|
height={256}
|
||||||
|
class="aspect-square size-32 rounded-md object-cover"
|
||||||
|
/>
|
||||||
|
<div class="flex flex-col justify-between">
|
||||||
|
<a href={`/authors/${member.slug}`}>
|
||||||
|
<h3 class="mb-2 text-3xl text-foreground">{name}</h3>
|
||||||
|
<p class="mb-4 text-sm text-foreground">{bio}</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,8 +0,0 @@
|
||||||
<div class="fixed z-50 h-[2px] w-full bg-neutral-300 dark:bg-slate-900">
|
|
||||||
<div class="h-full bg-cyan-500 dark:bg-orange-500"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { initializeProgressBar } from '../scripts/progress-bar.js'
|
|
||||||
initializeProgressBar()
|
|
||||||
</script>
|
|
|
@ -1,106 +0,0 @@
|
||||||
---
|
|
||||||
import type { CollectionEntry } from 'astro:content'
|
|
||||||
import { Image } from 'astro:assets'
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
entry: CollectionEntry<'publications'>
|
|
||||||
}
|
|
||||||
|
|
||||||
const { entry } = Astro.props as {
|
|
||||||
entry: CollectionEntry<'publications'>
|
|
||||||
}
|
|
||||||
|
|
||||||
const splitStr = (authors: string | undefined, targetAuthor: string) => {
|
|
||||||
if (!authors) return []
|
|
||||||
const parts = authors.split(new RegExp(`(${targetAuthor})`, 'g'))
|
|
||||||
return parts
|
|
||||||
}
|
|
||||||
const decomposeURL = (URL: string | undefined) => {
|
|
||||||
if (!URL) return { text: '', url: '' }
|
|
||||||
const parts = URL.split(': ')
|
|
||||||
return { text: parts[0], url: parts[1] }
|
|
||||||
}
|
|
||||||
|
|
||||||
const dataLink = decomposeURL(entry.data.dataURL)
|
|
||||||
const paperLink = decomposeURL(entry.data.paperURL)
|
|
||||||
const codeLink = decomposeURL(entry.data.codeURL)
|
|
||||||
const webLink = decomposeURL(entry.data.webURL)
|
|
||||||
---
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="not-prose grid-cols-auto group relative grid w-full items-center gap-4 rounded-lg border border-black/15 px-4 py-3 transition-colors duration-300 ease-in-out hover:bg-black/5 hover:text-black focus-visible:bg-black/5 focus-visible:text-black dark:border-white/20 dark:hover:bg-white/5 dark:hover:text-white dark:focus-visible:bg-white/5 dark:focus-visible:text-white md:grid-cols-[204px_auto]"
|
|
||||||
>
|
|
||||||
<Image
|
|
||||||
src={entry.data.img ?? ''}
|
|
||||||
alt={entry.data.imgAlt ?? ''}
|
|
||||||
width={640}
|
|
||||||
height={480}
|
|
||||||
class="hidden rounded-md shadow-sm transition hover:opacity-80 sm:mr-6 sm:h-[135px] sm:w-[240px] md:flex"
|
|
||||||
loading="eager"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div class="flex h-full items-center">
|
|
||||||
<div class="flex flex-col">
|
|
||||||
<div class="w-full">
|
|
||||||
<div class="text-md w-full font-semibold">
|
|
||||||
{entry.data.title}
|
|
||||||
</div>
|
|
||||||
<div class="w-full text-sm">
|
|
||||||
{entry.data.authors}
|
|
||||||
</div>
|
|
||||||
<div class="w-full text-sm">
|
|
||||||
{
|
|
||||||
paperLink.url != '' && (
|
|
||||||
<a
|
|
||||||
class="text-orange-500 underline transition-colors duration-300 ease-in-out visited:text-indigo-400 hover:text-cyan-500 dark:hover:text-cyan-500"
|
|
||||||
target="_blank"
|
|
||||||
href={paperLink.url}
|
|
||||||
>
|
|
||||||
{paperLink.text}
|
|
||||||
</a>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
{
|
|
||||||
codeLink.url != '' && (
|
|
||||||
<a
|
|
||||||
class="text-orange-500 underline transition-colors duration-300 ease-in-out visited:text-indigo-400 hover:text-cyan-500 dark:hover:text-cyan-500"
|
|
||||||
target="_blank"
|
|
||||||
href={codeLink.url}
|
|
||||||
>
|
|
||||||
{codeLink.text}
|
|
||||||
</a>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
{
|
|
||||||
webLink.url != '' && (
|
|
||||||
<a
|
|
||||||
class="text-orange-500 underline transition-colors duration-300 ease-in-out visited:text-indigo-400 hover:text-cyan-500 dark:hover:text-cyan-500"
|
|
||||||
target="_blank"
|
|
||||||
href={webLink.url}
|
|
||||||
>
|
|
||||||
{webLink.text}
|
|
||||||
</a>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dataLink.url != '' && (
|
|
||||||
<a
|
|
||||||
class="text-orange-500 underline transition-colors duration-300 ease-in-out visited:text-indigo-400 hover:text-cyan-500 dark:hover:text-cyan-500"
|
|
||||||
target="_blank"
|
|
||||||
href={dataLink.url}
|
|
||||||
>
|
|
||||||
{dataLink.text}
|
|
||||||
</a>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="text-sm">
|
|
||||||
In <div class="inline italic">{entry.data.pub}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p class="mt-2 break-words text-sm">
|
|
||||||
{entry.data.description}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -5,6 +5,5 @@ export const SITE: Site = {
|
||||||
DESCRIPTION: 'Astro Micro Academics is for academic user.',
|
DESCRIPTION: 'Astro Micro Academics is for academic user.',
|
||||||
EMAIL: 'youremial@gmail.com',
|
EMAIL: 'youremial@gmail.com',
|
||||||
NUM_POSTS_ON_HOMEPAGE: 2,
|
NUM_POSTS_ON_HOMEPAGE: 2,
|
||||||
NUM_PUBLICATIONS_ON_HOMEPAGE: 3,
|
|
||||||
SITEURL: 'https://astro-micro-academic.vercel.app', // Update here to link the RSS icon to your website rss
|
SITEURL: 'https://astro-micro-academic.vercel.app', // Update here to link the RSS icon to your website rss
|
||||||
}
|
}
|
||||||
|
|
8
src/content/authors/enscribe.md
Normal file
8
src/content/authors/enscribe.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
name: "enscribe"
|
||||||
|
avatar: "https://gravatar.com/avatar/9bfdc4ec972793cf05cb91efce5f4aaaec2a0da1bf4ec34dad0913f1d845faf6.webp?size=256"
|
||||||
|
bio: "d(-_-)b"
|
||||||
|
website: "https://enscribe.dev"
|
||||||
|
twitter: "enscry"
|
||||||
|
github: "jktrn"
|
||||||
|
---
|
|
@ -1,7 +1,7 @@
|
||||||
import { defineCollection, z } from 'astro:content'
|
import { defineCollection, reference, z } from "astro:content";
|
||||||
|
|
||||||
const blog = defineCollection({
|
const blog = defineCollection({
|
||||||
type: 'content',
|
type: "content",
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
|
@ -9,24 +9,23 @@ const blog = defineCollection({
|
||||||
draft: z.boolean().optional(),
|
draft: z.boolean().optional(),
|
||||||
|
|
||||||
tags: z.array(z.string()).optional(),
|
tags: z.array(z.string()).optional(),
|
||||||
|
author: z.union([reference("authors"), z.string()]).optional(),
|
||||||
}),
|
}),
|
||||||
})
|
});
|
||||||
|
|
||||||
const publications = defineCollection({
|
const authors = defineCollection({
|
||||||
type: 'content',
|
type: "content",
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
title: z.string(),
|
name: z.string(),
|
||||||
description: z.string(),
|
avatar: z.string().url(),
|
||||||
date: z.coerce.date(),
|
bio: z.string().optional(),
|
||||||
paperURL: z.string().optional(),
|
website: z.string().url().optional(),
|
||||||
authors: z.string().optional(),
|
twitter: z.string().optional(),
|
||||||
codeURL: z.string().optional(),
|
github: z.string().optional(),
|
||||||
webURL: z.string().optional(),
|
linkedin: z.string().optional(),
|
||||||
dataURL: z.string().optional(),
|
mail: z.string().email().optional(),
|
||||||
img: z.string().optional(),
|
discord: z.string().optional(),
|
||||||
imgAlt: z.string().optional(),
|
|
||||||
pub: z.string().optional(),
|
|
||||||
}),
|
}),
|
||||||
})
|
});
|
||||||
|
|
||||||
export const collections = { blog, publications }
|
export const collections = { blog, authors };
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
title: 'Paper Title1'
|
|
||||||
description: 'Your Paper Abstract'
|
|
||||||
date: '2024-03-26'
|
|
||||||
authors: 'John B*, Jon A*, Frank C, '
|
|
||||||
paperURL: 'Paper: https://astro-sphere-demo.vercel.app'
|
|
||||||
codeURL: 'Code: https://astro-sphere-demo.vercel.app'
|
|
||||||
webURL: 'Web: https://github.com/markhorn-dev/astro-sphere'
|
|
||||||
img: '/rupert-cat.gif'
|
|
||||||
imgAlt: 'Paper Teaser'
|
|
||||||
pub: 'ECCV2024'
|
|
||||||
dataURL: 'Data: '
|
|
||||||
---
|
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
title: 'Paper Title1'
|
|
||||||
description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. '
|
|
||||||
date: '2024-07-26'
|
|
||||||
authors: 'John B*, Jon A*, Frank C, John B, Jon A, Frank C, '
|
|
||||||
paperURL: 'Paper: https://astro-sphere-demo.vercel.app'
|
|
||||||
codeURL: 'Code: https://astro-sphere-demo.vercel.app'
|
|
||||||
webURL: 'Web: https://github.com/markhorn-dev/astro-sphere'
|
|
||||||
img: '/rupert-cat.gif'
|
|
||||||
imgAlt: 'Paper Teaser'
|
|
||||||
pub: 'ECCV2024'
|
|
||||||
dataURL: 'Data: https://github.com/markhorn-dev/astro-sphere'
|
|
||||||
---
|
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
title: 'Paper Title1'
|
|
||||||
description: 'Your Paper Abstract'
|
|
||||||
date: '2024-03-26'
|
|
||||||
authors: 'John B*, Jon A*, Frank C, '
|
|
||||||
paperURL: 'Paper: https://astro-sphere-demo.vercel.app'
|
|
||||||
codeURL: 'Code: https://astro-sphere-demo.vercel.app'
|
|
||||||
webURL: 'Web: https://github.com/markhorn-dev/astro-sphere'
|
|
||||||
img: '/rupert-cat.gif'
|
|
||||||
imgAlt: 'Paper Teaser'
|
|
||||||
pub: 'ECCV2024'
|
|
||||||
dataURL: 'Data: '
|
|
||||||
---
|
|
|
@ -17,7 +17,6 @@ const { title, description } = Astro.props
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<Head title={`${title} | ${SITE.TITLE}`} description={description} />
|
<Head title={`${title} | ${SITE.TITLE}`} description={description} />
|
||||||
<link rel="stylesheet" href="/path/to/your/global.css" />
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<Header />
|
<Header />
|
||||||
|
|
|
@ -7,22 +7,19 @@ import { Image } from 'astro:assets'
|
||||||
|
|
||||||
<Layout title="About" description="About">
|
<Layout title="About" description="About">
|
||||||
<Container>
|
<Container>
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<div class="space-y-10">
|
<div class="space-y-10">
|
||||||
<div class="animate font-semibold text-black dark:text-white">
|
<div class="animate font-semibold text-black dark:text-white">About</div>
|
||||||
About
|
|
||||||
</div>
|
|
||||||
<section class="animate not-prose flex flex-col gap-4 text-justify">
|
<section class="animate not-prose flex flex-col gap-4 text-justify">
|
||||||
<p class="text-justify">
|
<p class="text-justify">
|
||||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores
|
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores porro
|
||||||
porro hic minima incidunt explicabo obcaecati consectetur
|
hic minima incidunt explicabo obcaecati consectetur consequuntur at
|
||||||
consequuntur at quisquam commodi.
|
quisquam commodi.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="text-justify">
|
<p class="text-justify">
|
||||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores
|
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores porro
|
||||||
porro hic minima incidunt explicabo obcaecati consectetur
|
hic minima incidunt explicabo obcaecati consectetur consequuntur at
|
||||||
consequuntur at quisquam commodi.
|
quisquam commodi.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -61,6 +58,5 @@ import { Image } from 'astro:assets'
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
|
||||||
</Container>
|
</Container>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
40
src/pages/authors/[...slug].astro
Normal file
40
src/pages/authors/[...slug].astro
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
import { type CollectionEntry, getCollection, getEntry } from "astro:content";
|
||||||
|
import Layout from "@layouts/Layout.astro";
|
||||||
|
import MemberCard from "@components/MemberCard.astro";
|
||||||
|
|
||||||
|
export async function getStaticPaths() {
|
||||||
|
const authors = await getCollection("authors");
|
||||||
|
return authors.map((member) => ({
|
||||||
|
params: { slug: member.slug },
|
||||||
|
props: { member },
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
member: CollectionEntry<"authors">;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { member } = Astro.props;
|
||||||
|
|
||||||
|
const allPosts = await getCollection("blog");
|
||||||
|
const memberPosts = allPosts
|
||||||
|
.filter((post) => {
|
||||||
|
if (typeof post.data.author === 'string') {
|
||||||
|
return post.data.author === member.data.name && !post.data.draft;
|
||||||
|
} else if (post.data.author && 'slug' in post.data.author) {
|
||||||
|
return post.data.author.slug === member.slug && !post.data.draft;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout
|
||||||
|
title={`${member.data.name} - Team Member`}
|
||||||
|
description={member.data.bio || `Profile of ${member.data.name}`}
|
||||||
|
>
|
||||||
|
<section class="mx-auto flex max-w-screen-xl flex-col gap-4">
|
||||||
|
<MemberCard member={member} />
|
||||||
|
</section>
|
||||||
|
</Layout>
|
23
src/pages/authors/index.astro
Normal file
23
src/pages/authors/index.astro
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
import { getCollection } from "astro:content";
|
||||||
|
import Layout from "@layouts/Layout.astro";
|
||||||
|
import MemberCard from "@components/MemberCard.astro";
|
||||||
|
|
||||||
|
const authors = await getCollection("authors");
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout title="authors" description="authors">
|
||||||
|
<section>
|
||||||
|
<ul
|
||||||
|
class="animate not-prose grid grid-cols-1 gap-4 lg:grid-cols-2 xl:grid-cols-3"
|
||||||
|
>
|
||||||
|
{
|
||||||
|
authors.map((member) => (
|
||||||
|
<li>
|
||||||
|
<MemberCard member={member} />
|
||||||
|
</li>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</Layout>
|
|
@ -26,15 +26,12 @@ const years = Object.keys(posts).sort((a, b) => parseInt(b) - parseInt(a))
|
||||||
|
|
||||||
<Layout title="Blog" description="Blog">
|
<Layout title="Blog" description="Blog">
|
||||||
<Container>
|
<Container>
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<div class="space-y-10">
|
<div class="space-y-10">
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
{
|
{
|
||||||
years.map((year) => (
|
years.map((year) => (
|
||||||
<section class="animate space-y-4">
|
<section class="animate space-y-4">
|
||||||
<div class="font-semibold text-black dark:text-white">
|
<div class="font-semibold text-black dark:text-white">{year}</div>
|
||||||
{year}
|
|
||||||
</div>
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="not-prose flex flex-col gap-4">
|
<ul class="not-prose flex flex-col gap-4">
|
||||||
{posts[year].map((post) => (
|
{posts[year].map((post) => (
|
||||||
|
@ -49,6 +46,5 @@ const years = Object.keys(posts).sort((a, b) => parseInt(b) - parseInt(a))
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
|
||||||
</Container>
|
</Container>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
---
|
|
||||||
import { getCollection } from 'astro:content'
|
|
||||||
import Layout from '@layouts/Layout.astro'
|
|
||||||
import Container from '@components/Container.astro'
|
|
||||||
import CVCard from '@components/CVCard.astro'
|
|
||||||
|
|
||||||
// TO Modify
|
|
||||||
const works = [
|
|
||||||
{
|
|
||||||
company: 'Company A',
|
|
||||||
time: '2022-Present',
|
|
||||||
job_title: 'Research Scientist',
|
|
||||||
location: 'London, UK',
|
|
||||||
description: 'Your Notes about the job',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
company: 'Company A',
|
|
||||||
time: '2022-Present',
|
|
||||||
job_title: 'Research Scientist',
|
|
||||||
location: 'London, UK',
|
|
||||||
description: 'Your Notes about the job',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
const educations = [
|
|
||||||
{
|
|
||||||
school: 'University 1',
|
|
||||||
time: '2022-Present',
|
|
||||||
job_title: 'BEng in Electronic Information Engineering',
|
|
||||||
location: 'London, UK',
|
|
||||||
description: 'Your Notes about the study',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
---
|
|
||||||
|
|
||||||
<Layout title="CV" description="CV">
|
|
||||||
<Container>
|
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<div class="space-y-2 md:space-y-10">
|
|
||||||
<div class="animate font-semibold text-black dark:text-white">
|
|
||||||
Work Experience
|
|
||||||
</div>
|
|
||||||
<ul class="animate not-prose flex flex-col gap-4">
|
|
||||||
{
|
|
||||||
works.map((work) => (
|
|
||||||
<CVCard
|
|
||||||
institution={work.company}
|
|
||||||
time={work.time}
|
|
||||||
job_title={work.job_title}
|
|
||||||
location={work.location}
|
|
||||||
description={work.description}
|
|
||||||
/>
|
|
||||||
))
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
<div class="animate font-semibold text-black dark:text-white">
|
|
||||||
Education
|
|
||||||
</div>
|
|
||||||
<ul class="animate not-prose flex flex-col gap-4">
|
|
||||||
{
|
|
||||||
educations.map((education) => (
|
|
||||||
<CVCard
|
|
||||||
institution={education.school}
|
|
||||||
time={education.time}
|
|
||||||
job_title={education.job_title}
|
|
||||||
location={education.location}
|
|
||||||
description={education.description}
|
|
||||||
/>
|
|
||||||
))
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
</Container>
|
|
||||||
</Layout>
|
|
|
@ -6,145 +6,19 @@ import ArrowCard from '@components/ArrowCard.astro'
|
||||||
import Link from '@components/Link.astro'
|
import Link from '@components/Link.astro'
|
||||||
import { getCollection } from 'astro:content'
|
import { getCollection } from 'astro:content'
|
||||||
import type { CollectionEntry } from 'astro:content'
|
import type { CollectionEntry } from 'astro:content'
|
||||||
import PublicationCard from '@components/PublicationCard.astro'
|
|
||||||
import SocialIcons from '@components/SocialIcons.astro'
|
import SocialIcons from '@components/SocialIcons.astro'
|
||||||
|
|
||||||
const blog = (await getCollection('blog'))
|
const blog = (await getCollection('blog'))
|
||||||
.filter((post) => !post.data.draft)
|
.filter((post) => !post.data.draft)
|
||||||
.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf())
|
.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf())
|
||||||
.slice(0, SITE.NUM_POSTS_ON_HOMEPAGE)
|
.slice(0, SITE.NUM_POSTS_ON_HOMEPAGE)
|
||||||
|
|
||||||
const publications: CollectionEntry<'publications'>[] = (
|
|
||||||
await getCollection('publications')
|
|
||||||
)
|
|
||||||
.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf())
|
|
||||||
.slice(0, SITE.NUM_PUBLICATIONS_ON_HOMEPAGE)
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Home" description="Home">
|
<Layout title="Home" description="Home">
|
||||||
<Container>
|
<Container>
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<h1 class="animate font-semibold text-black dark:text-white">
|
|
||||||
Astro Micro Academics 🍄
|
|
||||||
</h1>
|
|
||||||
<div class="space-y-16">
|
|
||||||
<section>
|
|
||||||
<article class="space-y-4">
|
|
||||||
<span class="animate">
|
|
||||||
<p>
|
|
||||||
Astro Micro Academics is a theme for <Link
|
|
||||||
href="https://astro.build/">Astro</Link
|
|
||||||
> and tailored for academic users and researchers. It's built on
|
|
||||||
<Link href="https://astro.build/themes/details/astro-micro/"
|
|
||||||
>Astro Micro</Link
|
|
||||||
> and
|
|
||||||
<Link href="https://github.com/markhorn-dev">
|
|
||||||
Mark Horn's
|
|
||||||
</Link> popular theme <Link
|
|
||||||
href="https://astro.build/themes/details/astronano/"
|
|
||||||
>Astro Nano</Link
|
|
||||||
>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Micro Academics adds features like <span class="text-red-500"
|
|
||||||
>tags, and blog math support</span
|
|
||||||
> and also inherits <Link href="https://pagefind.app/"
|
|
||||||
>Pagefind</Link
|
|
||||||
> for search, <Link href="https://giscus.app">Giscus</Link> for comments,
|
|
||||||
from Astro Micro. See full changes this <Link
|
|
||||||
href="/blog/00-academic-astro">here</Link
|
|
||||||
>.
|
|
||||||
</p>
|
|
||||||
</span>
|
|
||||||
<span class="animate">
|
|
||||||
<p>
|
|
||||||
Micro Academics still comes with everything great about Micro
|
|
||||||
and Nano — full type safety, a sitemap, an RSS feed, and
|
|
||||||
Markdown + MDX support. Styled with TailwindCSS and
|
|
||||||
preconfigured with system, light, and dark themes.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Visit
|
|
||||||
<Link href="https://github.com/jingwu2121/astro-micro-academic">
|
|
||||||
Astro Micro Academics on GitHub
|
|
||||||
</Link>
|
|
||||||
to fork the repository to get started.
|
|
||||||
</p>
|
|
||||||
</span>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section
|
|
||||||
class="animate space-y-2 border-2 border-dashed border-red-800 p-2 text-red-800 dark:border-red-400 dark:text-red-400"
|
|
||||||
>
|
|
||||||
📢📢 Your important Information (Open for job/Recruiting students)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="animate space-y-6">
|
|
||||||
<span class="animate">
|
|
||||||
<h4 class="font-semibold text-black dark:text-white">
|
|
||||||
Let's Connect
|
|
||||||
</h4>
|
|
||||||
<article>
|
|
||||||
<p>
|
|
||||||
If you want to get in touch with me about something or just to
|
|
||||||
say hi, reach out on social media or send me an email.
|
|
||||||
</p>
|
|
||||||
</article>
|
|
||||||
<SocialIcons icon_size={'text-3xl'} />
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="animate space-y-6">
|
<section class="animate space-y-6">
|
||||||
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
||||||
<h2 class="font-semibold text-black dark:text-white">
|
<h2 class="font-semibold text-black dark:text-white">Latest posts</h2>
|
||||||
Research Interests
|
|
||||||
</h2>
|
|
||||||
</div>
|
|
||||||
<ul class="not-prose flex flex-col gap-4">
|
|
||||||
<li>3D Vision</li>
|
|
||||||
<li>AIGC</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="animate space-y-6">
|
|
||||||
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
|
||||||
<h2 class="font-semibold text-black dark:text-white">News</h2>
|
|
||||||
</div>
|
|
||||||
<ul
|
|
||||||
class="not-prose scroll_bar flex max-h-[150px] flex-col gap-4 overflow-y-auto"
|
|
||||||
>
|
|
||||||
<li>[06/2024]: Your News1</li>
|
|
||||||
<li>[06/2024]: Your <span class="text-red-600">News2</span></li>
|
|
||||||
<li>[06/2024]: Your <span class="text-red-600">News2</span></li>
|
|
||||||
<!-- <li>[06/2024]: Your <span class="text-red-600">News2</span></li>
|
|
||||||
<li>[06/2024]: Your <span class="text-red-600">News2</span></li> -->
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="animate space-y-6">
|
|
||||||
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
|
||||||
<h2 class="font-semibold text-black dark:text-white">
|
|
||||||
Recent research
|
|
||||||
</h2>
|
|
||||||
<Link href="/publications"> See all research </Link>
|
|
||||||
</div>
|
|
||||||
<ul class="not-prose flex flex-col gap-4">
|
|
||||||
{
|
|
||||||
publications.map((publication) => (
|
|
||||||
<li>
|
|
||||||
<PublicationCard entry={publication} />
|
|
||||||
</li>
|
|
||||||
))
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="animate space-y-6">
|
|
||||||
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
|
||||||
<h2 class="font-semibold text-black dark:text-white">
|
|
||||||
Latest posts
|
|
||||||
</h2>
|
|
||||||
<Link href="/blog"> See all posts </Link>
|
<Link href="/blog"> See all posts </Link>
|
||||||
</div>
|
</div>
|
||||||
<ul class="not-prose flex flex-col gap-4">
|
<ul class="not-prose flex flex-col gap-4">
|
||||||
|
@ -157,7 +31,5 @@ const publications: CollectionEntry<'publications'>[] = (
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
</Container>
|
</Container>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
---
|
|
||||||
import { getCollection } from 'astro:content'
|
|
||||||
import Layout from '@layouts/Layout.astro'
|
|
||||||
import Container from '@components/Container.astro'
|
|
||||||
import PublicationCard from '@components/PublicationCard.astro'
|
|
||||||
// import PublicationCard from "@components/PublicationCard";
|
|
||||||
|
|
||||||
const publications = (await getCollection('publications')).sort(
|
|
||||||
(a, b) => b.data.date.valueOf() - a.data.date.valueOf(),
|
|
||||||
)
|
|
||||||
---
|
|
||||||
|
|
||||||
<Layout title="Research" description="Research">
|
|
||||||
<Container>
|
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<div class="space-y-10">
|
|
||||||
<div class="animate font-semibold text-black dark:text-white">
|
|
||||||
Research
|
|
||||||
</div>
|
|
||||||
<ul class="animate not-prose flex flex-col gap-4">
|
|
||||||
{
|
|
||||||
publications.map((publication) => (
|
|
||||||
<li>
|
|
||||||
<PublicationCard entry={publication} />
|
|
||||||
</li>
|
|
||||||
))
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
</Container>
|
|
||||||
</Layout>
|
|
|
@ -35,7 +35,6 @@ export async function getStaticPaths() {
|
||||||
description={`A collection of posts tagged with ${tag}.`}
|
description={`A collection of posts tagged with ${tag}.`}
|
||||||
>
|
>
|
||||||
<Container>
|
<Container>
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<div class="space-y-10">
|
<div class="space-y-10">
|
||||||
<div class="animate font-semibold text-black dark:text-white">
|
<div class="animate font-semibold text-black dark:text-white">
|
||||||
Tag: <span
|
Tag: <span
|
||||||
|
@ -59,6 +58,5 @@ export async function getStaticPaths() {
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
|
||||||
</Container>
|
</Container>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -13,7 +13,6 @@ const tags = blog
|
||||||
|
|
||||||
<Layout title="Tags" description="Tags">
|
<Layout title="Tags" description="Tags">
|
||||||
<Container>
|
<Container>
|
||||||
<aside data-pagefind-ignore>
|
|
||||||
<div class="space-y-10">
|
<div class="space-y-10">
|
||||||
<div class="animate font-semibold text-black dark:text-white">Tags</div>
|
<div class="animate font-semibold text-black dark:text-white">Tags</div>
|
||||||
<ul class="flex flex-wrap">
|
<ul class="flex flex-wrap">
|
||||||
|
@ -31,6 +30,5 @@ const tags = blog
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
|
||||||
</Container>
|
</Container>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -3,6 +3,5 @@ export type Site = {
|
||||||
DESCRIPTION: string
|
DESCRIPTION: string
|
||||||
EMAIL: string
|
EMAIL: string
|
||||||
NUM_POSTS_ON_HOMEPAGE: number
|
NUM_POSTS_ON_HOMEPAGE: number
|
||||||
NUM_PUBLICATIONS_ON_HOMEPAGE: number
|
|
||||||
SITEURL: string
|
SITEURL: string
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue