Redesign: 雑記 by swallow - トップページ刷新、ナビバー整理
Deploy Docusaurus Site / deploy (push) Successful in 28s

This commit is contained in:
2026-02-19 04:23:56 +00:00
parent 7141ad7f5a
commit 516972ab1a
8 changed files with 396 additions and 80 deletions
+142 -19
View File
@@ -1,23 +1,146 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
.main {
min-height: calc(100vh - 60px);
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
.hero {
padding: 4rem 2rem;
text-align: center;
background: linear-gradient(180deg, var(--ifm-background-surface-color) 0%, var(--ifm-background-color) 100%);
}
.heroInner {
max-width: 800px;
margin: 0 auto;
}
.heroTitle {
font-size: 3rem;
margin-bottom: 0.5rem;
}
.heroSubtitle {
font-size: 1.25rem;
color: var(--ifm-color-emphasis-600);
margin: 0;
}
.content {
max-width: 800px;
margin: 0 auto;
padding: 2rem;
}
.section {
margin-bottom: 3rem;
}
.sectionTitle {
font-size: 1.5rem;
margin-bottom: 1.5rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--ifm-color-emphasis-200);
}
/* Posts */
.posts {
display: flex;
flex-direction: column;
gap: 1rem;
}
.postCard {
display: block;
padding: 1.25rem;
border-radius: 8px;
background: var(--ifm-background-surface-color);
border: 1px solid var(--ifm-color-emphasis-200);
text-decoration: none;
color: inherit;
transition: all 0.2s ease;
}
.postCard:hover {
border-color: var(--ifm-color-primary);
transform: translateY(-2px);
text-decoration: none;
color: inherit;
}
.postTitle {
font-size: 1.1rem;
margin: 0 0 0.5rem 0;
}
.postMeta {
display: flex;
gap: 1rem;
font-size: 0.875rem;
color: var(--ifm-color-emphasis-600);
}
.postDate {
}
.postTag {
background: var(--ifm-color-emphasis-100);
padding: 0.125rem 0.5rem;
border-radius: 4px;
}
/* Works */
.works {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 1rem;
}
.workCard {
display: block;
padding: 1.25rem;
border-radius: 8px;
background: var(--ifm-background-surface-color);
border: 1px solid var(--ifm-color-emphasis-200);
text-decoration: none;
color: inherit;
transition: all 0.2s ease;
}
.workCard:hover {
border-color: var(--ifm-color-primary);
transform: translateY(-2px);
text-decoration: none;
color: inherit;
}
.workName {
font-size: 1.1rem;
margin: 0 0 0.5rem 0;
}
.workDescription {
font-size: 0.9rem;
color: var(--ifm-color-emphasis-600);
margin: 0;
}
.moreLink {
display: inline-block;
margin-top: 1rem;
font-size: 0.9rem;
color: var(--ifm-color-primary);
}
.moreLink:hover {
text-decoration: underline;
}
/* Responsive */
@media (max-width: 768px) {
.heroTitle {
font-size: 2rem;
}
.content {
padding: 1rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}
+104
View File
@@ -0,0 +1,104 @@
import React from 'react';
import Layout from '@theme/Layout';
import Link from '@docusaurus/Link';
import styles from './index.module.css';
function HomepageHeader() {
return (
<header className={styles.hero}>
<div className={styles.heroInner}>
<h1 className={styles.heroTitle}>👋 swallow</h1>
<p className={styles.heroSubtitle}>
AI
</p>
</div>
</header>
);
}
function RecentPosts() {
const posts = [
{
title: 'DGX Spark デュアル構成ガイド',
date: '2026-02-19',
tag: 'DGX Spark',
url: '/blog/dgx-spark-dual',
},
{
title: 'DGX SparkでMiniMax-M2.5-REAP-172Bを動かす',
date: '2026-02-18',
tag: 'DGX Spark',
url: '/blog/dgx-spark-minimax',
},
];
return (
<section className={styles.section}>
<h2 className={styles.sectionTitle}>📝 </h2>
<div className={styles.posts}>
{posts.map((post, idx) => (
<Link key={idx} to={post.url} className={styles.postCard}>
<h3 className={styles.postTitle}>{post.title}</h3>
<div className={styles.postMeta}>
<span className={styles.postDate}>{post.date}</span>
<span className={styles.postTag}>{post.tag}</span>
</div>
</Link>
))}
</div>
<Link to="/blog" className={styles.moreLink}>
</Link>
</section>
);
}
function Works() {
const works = [
{
name: 'Tundoc',
description: 'ドキュメント管理ツール',
url: 'https://tundoc.techswan.online/',
},
];
return (
<section className={styles.section}>
<h2 className={styles.sectionTitle}>🛠 </h2>
<div className={styles.works}>
{works.map((work, idx) => (
<a
key={idx}
href={work.url}
target="_blank"
rel="noopener noreferrer"
className={styles.workCard}
>
<h3 className={styles.workName}>{work.name}</h3>
<p className={styles.workDescription}>{work.description}</p>
</a>
))}
</div>
<Link to="/works" className={styles.moreLink}>
</Link>
</section>
);
}
export default function Home(): React.JSX.Element {
return (
<Layout
title="ホーム"
description="swallowの雑記。技術・思考・作ったもの。"
>
<main className={styles.main}>
<HomepageHeader />
<div className={styles.content}>
<RecentPosts />
<Works />
</div>
</main>
</Layout>
);
}
+70
View File
@@ -0,0 +1,70 @@
.main {
min-height: calc(100vh - 60px);
padding: 2rem;
}
.container {
max-width: 800px;
margin: 0 auto;
}
.title {
font-size: 2rem;
margin-bottom: 0.5rem;
}
.subtitle {
color: var(--ifm-color-emphasis-600);
margin-bottom: 2rem;
}
.works {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 1.5rem;
}
.workCard {
display: block;
padding: 1.5rem;
border-radius: 12px;
background: var(--ifm-background-surface-color);
border: 1px solid var(--ifm-color-emphasis-200);
text-decoration: none;
color: inherit;
transition: all 0.2s ease;
}
.workCard:hover {
border-color: var(--ifm-color-primary);
transform: translateY(-4px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
text-decoration: none;
color: inherit;
}
.workName {
font-size: 1.25rem;
margin: 0 0 0.75rem 0;
}
.workDescription {
font-size: 0.95rem;
color: var(--ifm-color-emphasis-700);
margin: 0 0 1rem 0;
line-height: 1.5;
}
.workTags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.workTag {
font-size: 0.75rem;
background: var(--ifm-color-emphasis-100);
color: var(--ifm-color-emphasis-700);
padding: 0.25rem 0.75rem;
border-radius: 999px;
}
+49
View File
@@ -0,0 +1,49 @@
import React from 'react';
import Layout from '@theme/Layout';
import styles from './works.module.css';
const works = [
{
name: 'Tundoc',
description: 'ドキュメント管理ツール。Markdownでドキュメントを管理・公開できる。',
url: 'https://tundoc.techswan.online/',
tags: ['Web', 'Documentation'],
},
// 他のプロジェクトがあれば追加
];
export default function Works(): React.JSX.Element {
return (
<Layout
title="Works"
description="swallowが作ったもの"
>
<main className={styles.main}>
<div className={styles.container}>
<h1 className={styles.title}>🛠 Works</h1>
<p className={styles.subtitle}></p>
<div className={styles.works}>
{works.map((work, idx) => (
<a
key={idx}
href={work.url}
target="_blank"
rel="noopener noreferrer"
className={styles.workCard}
>
<h2 className={styles.workName}>{work.name}</h2>
<p className={styles.workDescription}>{work.description}</p>
<div className={styles.workTags}>
{work.tags.map((tag, tagIdx) => (
<span key={tagIdx} className={styles.workTag}>{tag}</span>
))}
</div>
</a>
))}
</div>
</div>
</main>
</Layout>
);
}