From 516972ab1a2a0927cab69f1b1690f897feb06bad Mon Sep 17 00:00:00 2001 From: koide Date: Thu, 19 Feb 2026 04:23:56 +0000 Subject: [PATCH] =?UTF-8?q?Redesign:=20=E9=9B=91=E8=A8=98=20by=20swallow?= =?UTF-8?q?=20-=20=E3=83=88=E3=83=83=E3=83=97=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E3=80=81=E3=83=8A=E3=83=93=E3=83=90=E3=83=BC?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dgx-spark-dual/index.md | 2 +- docs/index.md | 32 ++----- docusaurus.config.ts | 46 ++++------ sidebars.ts | 12 ++- src/pages/index.module.css | 161 ++++++++++++++++++++++++++++++----- src/pages/index.tsx | 104 ++++++++++++++++++++++ src/pages/works.module.css | 70 +++++++++++++++ src/pages/works.tsx | 49 +++++++++++ 8 files changed, 396 insertions(+), 80 deletions(-) create mode 100644 src/pages/index.tsx create mode 100644 src/pages/works.module.css create mode 100644 src/pages/works.tsx diff --git a/docs/dgx-spark-dual/index.md b/docs/dgx-spark-dual/index.md index 7060324..bfe8985 100644 --- a/docs/dgx-spark-dual/index.md +++ b/docs/dgx-spark-dual/index.md @@ -437,7 +437,7 @@ vllm serve --tensor-parallel-size 2 --max-model-len 4096 - [NVIDIA DGX Spark Playbooks](https://build.nvidia.com/spark/) - [vLLM ドキュメント](https://docs.vllm.ai/) -- [DGX SparkでMiniMax-M2.5を動かす](/dgx-spark-minimax/) +- [DGX SparkでMiniMax-M2.5を動かす](/blog/dgx-spark-minimax/) --- diff --git a/docs/index.md b/docs/index.md index 1e0d3aa..0ebc36c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,32 +1,14 @@ --- -slug: / sidebar_position: 1 -title: swallow tech notes +title: Blog +slug: / --- -# swallow tech notes +# 📝 Blog -AI・インフラ・開発の技術メモ +技術記事や思ったことなど。 -## 記事一覧 +## DGX Spark -### DGX Spark - -- [DGX SparkでMiniMax-M2.5-REAP-172Bを動かす](/dgx-spark-minimax/) -- [DGX Spark デュアル構成ガイド](/dgx-spark-dual/) 🆕 - -## スクリプト - -記事で紹介しているスクリプトはダウンロードして使用できます。 - -```bash -# DGX Spark セットアップ(デュアル構成) -curl -sL https://docs.techswan.online/scripts/dgx-spark-setup.sh | bash -s -- all - -# モデル起動 -curl -sL https://docs.techswan.online/scripts/dgx-spark-serve.sh | bash -s -- minimax-m25 -``` - -## リンク - -- [Giteaリポジトリ](https://gitea.swallow.wjg.jp/koide/note-articles) +- [DGX Spark デュアル構成ガイド](/blog/dgx-spark-dual) - 2台接続で256GB環境を構築 +- [DGX SparkでMiniMax-M2.5-REAP-172Bを動かす](/blog/dgx-spark-minimax) - 172Bモデルを動かす diff --git a/docusaurus.config.ts b/docusaurus.config.ts index a5b1664..1c8976a 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -3,21 +3,17 @@ import type {Config} from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; const config: Config = { - title: 'swallow tech notes', - tagline: 'AI・インフラ・開発の技術メモ', + title: '雑記 by swallow', + tagline: '技術・思考・作ったもの', favicon: 'img/favicon.ico', future: { v4: true, }, - // TODO: 本番URLに変更 url: 'https://docs.techswan.online', baseUrl: '/', - organizationName: 'koide', - projectName: 'note-articles', - onBrokenLinks: 'warn', onBrokenMarkdownLinks: 'warn', @@ -32,10 +28,11 @@ const config: Config = { { docs: { sidebarPath: './sidebars.ts', - routeBasePath: '/', // docsをルートに - editUrl: 'https://gitea.swallow.wjg.jp/koide/note-articles/src/branch/main/', + routeBasePath: '/blog', + breadcrumbs: true, + sidebarCollapsed: false, }, - blog: false, // ブログは無効化 + blog: false, theme: { customCss: './src/css/custom.css', }, @@ -49,41 +46,34 @@ const config: Config = { respectPrefersColorScheme: true, }, navbar: { - title: 'swallow tech notes', + title: '雑記 by swallow', items: [ { - type: 'docSidebar', - sidebarId: 'docsSidebar', + to: '/blog', + label: 'Blog', position: 'left', - label: '記事一覧', }, { - href: 'https://gitea.swallow.wjg.jp/koide/note-articles', - label: 'Gitea', - position: 'right', + to: '/works', + label: 'Works', + position: 'left', }, ], }, footer: { style: 'dark', - links: [ - { - title: 'Links', - items: [ - { - label: 'Gitea', - href: 'https://gitea.swallow.wjg.jp/koide/note-articles', - }, - ], - }, - ], - copyright: `© ${new Date().getFullYear()} swallow. Built with Docusaurus.`, + copyright: `© ${new Date().getFullYear()} swallow`, }, prism: { theme: prismThemes.github, darkTheme: prismThemes.dracula, additionalLanguages: ['bash', 'json', 'yaml', 'python'], }, + // 目次の設定 + tableOfContents: { + minHeadingLevel: 2, + maxHeadingLevel: 4, + }, } satisfies Preset.ThemeConfig, }; diff --git a/sidebars.ts b/sidebars.ts index 6804074..b9f75b4 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -1,14 +1,12 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; +// サイドバーは目次のみ表示(記事一覧は非表示) +// 各記事ページでは自動生成される目次を使用 const sidebars: SidebarsConfig = { - docsSidebar: [ + blogSidebar: [ { - type: 'category', - label: 'DGX Spark', - items: [ - 'dgx-spark-minimax/index', - 'dgx-spark-dual/index', - ], + type: 'autogenerated', + dirName: '.', }, ], }; diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 9f71a5d..57ea47e 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -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; -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..57236b8 --- /dev/null +++ b/src/pages/index.tsx @@ -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 ( +
+
+

👋 swallow

+

+ AI・インフラ・開発が好きなエンジニア +

+
+
+ ); +} + +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 ( +
+

📝 最近書いたもの

+
+ {posts.map((post, idx) => ( + +

{post.title}

+
+ {post.date} + {post.tag} +
+ + ))} +
+ + すべての記事を見る → + +
+ ); +} + +function Works() { + const works = [ + { + name: 'Tundoc', + description: 'ドキュメント管理ツール', + url: 'https://tundoc.techswan.online/', + }, + ]; + + return ( +
+

🛠 作ったもの

+
+ {works.map((work, idx) => ( + +

{work.name}

+

{work.description}

+
+ ))} +
+ + もっと見る → + +
+ ); +} + +export default function Home(): React.JSX.Element { + return ( + +
+ +
+ + +
+
+
+ ); +} diff --git a/src/pages/works.module.css b/src/pages/works.module.css new file mode 100644 index 0000000..85b4362 --- /dev/null +++ b/src/pages/works.module.css @@ -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; +} diff --git a/src/pages/works.tsx b/src/pages/works.tsx new file mode 100644 index 0000000..ec5cad2 --- /dev/null +++ b/src/pages/works.tsx @@ -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 ( + +
+
+

🛠 Works

+

作ったもの・関わったもの

+ + +
+
+
+ ); +}