Skip to content

Commit dfcbd5f

Browse files
committed
wip
1 parent 5b8026e commit dfcbd5f

File tree

9 files changed

+123
-65
lines changed

9 files changed

+123
-65
lines changed

contents/projects/coursemate/index.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
---
2-
title: CourseMate
2+
app:
3+
name: CourseMate
4+
description: 同じ授業の友達をつくろう
5+
url: https://coursemate.utcode.net/
6+
platform: web
7+
domain: app
8+
9+
date: 2025-05-14
310
kind: long-term
411
status: released
5-
date: 2025-05-14
12+
tags: [TypeScript, React]
13+
614
thumbnail:
715
src: ./thumbnail.png
8-
description: 同じ授業の友達をつくろう
9-
tags: [TypeScript, React]
10-
github: https://github.com/ut-code/coursemate
11-
website: https://coursemate.utcode.net/
16+
17+
social:
18+
github: https://github.com/ut-code/coursemate
1219
---
1320

1421
CourseMate は、同じ授業の友達をつくることができるアプリです。
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
---
2-
title: イツヒマ
2+
app:
3+
name: イツヒマ
4+
description: "いつ暇?で日程調整できるアプリ"
5+
url: https://itsuhima.utcode.net
6+
platform: [web]
7+
domain: [app]
8+
9+
date: 2025-05-14
310
kind: long-term
411
status: released
5-
date: 2025-05-14
6-
thumbnail:
7-
src: ./thumbnail.png
8-
9-
description: "いつ暇?で日程調整できるアプリ"
1012
tags:
1113
- TypeScript
1214
- React
13-
github: https://github.com/ut-code/itsuhima
14-
website: https://itsuhima.utcode.net
15+
16+
thumbnail:
17+
src: ./thumbnail.png
18+
19+
social:
20+
github: https://github.com/ut-code/itsuhima
1521
---
1622

1723
イツヒマは、「いつ暇?」で日程調整できるアプリです。事前に何時間かかるか決まっていない日程調整を手早く行えます。

contents/projects/nikochan/index.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
---
2-
title: Falling Nikochan
2+
app:
3+
name: Falling Nikochan
4+
description: シンプルでかわいい音ゲーです。誰でも譜面を作ってシェアできます。
5+
url: https://nikochan.utcode.net/
6+
platform: [web]
7+
domain: [game]
8+
9+
date: 2024-09-24
310
kind: long-term
411
status: released
12+
tags: [JavaScript, TypeScript, React, Next.js, Hono, MongoDB]
13+
514
thumbnail:
615
src: ./thumbnail.jpg
7-
date: 2024-09-24
8-
description: シンプルでかわいい音ゲーです。誰でも譜面を作ってシェアできます。
9-
tags: [JavaScript, TypeScript, React, Next.js, Hono, MongoDB]
10-
github: https://github.com/na-trium-144/falling-nikochan
11-
youtube: https://www.youtube.com/@nikochan144
12-
website: https://nikochan.utcode.net/
16+
17+
social:
18+
github: https://github.com/na-trium-144/falling-nikochan
19+
youtube: https://www.youtube.com/@nikochan144
1320
---
1421

1522
## 概要

contents/projects/syllabus/index.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
---
2-
title: シ楽バス
2+
app:
3+
name: シ楽バス
4+
description: 前期課程に特化した時間割サービス
5+
url: https://syllabus.utcode.net/
6+
platform: [web]
7+
domain: [tool] # バックエンドついたら app になる
8+
39
order: 3
10+
date: 2023-10-02
411
kind: long-term
512
status: stable
6-
thumbnail:
7-
src: ./thumbnail.jpg
8-
date: 2023-10-02
9-
description: 前期課程に特化した時間割サービス
1013
tags: [JavaScript]
11-
github: https://github.com/ut-code/syllabus-frontend
12-
website: https://syllabus.utcode.net/
14+
15+
thumbnail:
16+
src: ./thumbnailjpg
17+
18+
social:
19+
github: https://github.com/ut-code/syllabus-frontend
1320
---
1421

1522
## 概要

contents/projects/webcface/index.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
---
2-
title: WebCFace
2+
app:
3+
name: WebCFace
4+
description: プロセス間通信 & GUIを提供するライブラリ
5+
platform: [desktop]
6+
domain: [tool, lib] # WebUI の部分が tool, パッケージ部分が lib
7+
8+
date: 2023-09-28
39
kind: long-term
410
status: stable
11+
tags: [C++, Python, JavaScript, TypeScript, WebSocket, MessagePack, React]
12+
513
thumbnail:
614
src: ./thumbnail.png
7-
date: 2023-09-28
8-
description: プロセス間通信 & GUIを提供するライブラリ
9-
tags: [C++, Python, JavaScript, TypeScript, WebSocket, MessagePack, React]
10-
github: https://github.com/na-trium-144/webcface
15+
social:
16+
github: https://github.com/na-trium-144/webcface
1117
---
1218

1319
- ROS1 のようなプロセス間通信と、GUI によるデータの可視化や関数呼び出し、また Immediate-Mode でのシンプルな UI の作成ができます。

docs/contents/projects.md

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,26 @@
1414

1515
## frontmatter
1616

17-
| キー | 必須 | 説明 |
18-
| --------------- | ---- | ------------------------------------------------------------------------------ |
19-
| `title` || プロジェクト名 |
20-
| `order` | | 表示順。指定されなかった場合は `date` 降順でソートされます。 |
21-
| `date` || 記事の初回執筆日。ソートのみで利用しています。 |
22-
| `thumbnail` || イメージ画像に関するデータ。 |
23-
| `thumbnail.src` || イメージファイルへの markdown からの相対パス。 |
24-
| `thumbnail.fit` | | イメージのクロップ方法。 default = "cover"。 |
25-
| `thumbnail.bg` | | イメージの背景色。ロード中と `crop` = "contain" のときの背景に使われています。 |
26-
| `description` || 短い説明。 |
27-
| `tags` | | 使用されている技術など。現状タグごとのフィルタリング機能等は提供していません。 |
28-
| `github` | | プロジェクトの GitHub 上での URL。 |
29-
| `youtube` | | プロジェクトの YouTube 上での URL。 |
30-
| `website` | | プロジェクトのウェブサイトの URL。 |
17+
| キー | 必須 || 説明 |
18+
| ----------------- | ---- | ------------ | ------------------------------------------------------------------------------------- |
19+
| `app.name` || string | プロジェクト名 |
20+
| `app.description` || string | プロジェクトの短い説明。 |
21+
| `app.url` | | string->url | アプリにアクセスできる URL。 |
22+
| `app.platform` || string[] | ソフトウェアの配布プラットフォーム。`web`, `mobile`, `desktop`, `cli`|
23+
| `app.domain` || string[] | ソフトウェアの種別 (クソ雑ドキュメント)。 `app`, `game`, `tool`, `site`, `lib` など。 |
24+
| `order` | | number? | 表示順。指定されなかった場合は `date` 降順でソートされます。 |
25+
| `date` || date | 記事の初回執筆日。ソートのみで利用しています。 |
26+
| `kind` || string | アプリケーションの開発体系。`long-term`, `festival`, `hackathon` の 3 つ。 |
27+
| `status` || string | プロジェクトの現状。詳細は `src/schema.ts` を参照。 |
28+
| `members` | | string[]? | プロジェクトのメンバー。まだメンバーページを作ってなくても問題ないです。 |
29+
| `tags` | | string[]? | 使用されている技術。タグごとのフィルタリング機能等は提供していません。 |
30+
| `thumbnail.src` || string->path | イメージファイルへの markdown からの相対パス。 |
31+
| `thumbnail.fit` | | string? | イメージのクロップ方法。 default = "cover"。 |
32+
| `thumbnail.bg` | | string? | イメージの背景色。ロード中と `crop` = "contain" のときの背景に使われています。 |
33+
| `social.github` | | string->url? | プロジェクトの GitHub 上での URL。 |
34+
| `social.website` | | string->url? | プロジェクトのウェブサイトの URL。(`app.url` と別で広報用などの Website がある場合) |
35+
| `social.youtube` | | string->url? | プロジェクトの YouTube 上での URL。 |
36+
| `social.twitter` | | string->url? | プロジェクトのツイッター (現 X) の URL。 |
3137

3238
## body について
3339

src/components/common/ProjectList.astro

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const { projects, variant = "full" } = props;
2323
>
2424
<Picture
2525
loading={i < 6 && variant === "full" ? "eager" : "lazy"}
26-
alt="プロジェクトのイメージ画像"
26+
alt={`${project.data.app.name}のサムネイル`}
2727
src={project.data.thumbnail.src}
2828
width="600"
2929
height={(600 * 3) / 5}
@@ -39,13 +39,13 @@ const { projects, variant = "full" } = props;
3939
/>
4040
<div class="p-4">
4141
<h3 class="text-xl font-bold text-gray-800">
42-
{project.data.title}
42+
{project.data.app.name}
4343
</h3>
4444
{/* h-14: 2 行はいる */}
4545
<p class="prose mt-2 line-clamp-2 h-14 text-gray-500">
46-
{project.data.description.length < 120
47-
? project.data.description
48-
: project.data.description.slice(0, 120) + "..."}
46+
{project.data.app.description.length < 120
47+
? project.data.app.description
48+
: project.data.app.description.slice(0, 120) + "..."}
4949
</p>
5050
</div>
5151
</a>

src/pages/projects/[...id].astro

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,16 @@ const { project } = Astro.props;
2121
const { Content } = await render(project);
2222
2323
let iconSrc: string | undefined = undefined;
24-
if (project.data.website && project.data.status !== "dead") {
25-
iconSrc = await fetchFavicon(project.data.website);
24+
if (project.data.status !== "dead") {
25+
if (project.data.app.url) {
26+
iconSrc = await fetchFavicon(project.data.app.url);
27+
}
28+
if (!iconSrc && project.data.social?.website) {
29+
iconSrc = await fetchFavicon(project.data.social.website);
30+
}
31+
if (!iconSrc && project.data.social?.twitter) {
32+
iconSrc = await fetchFavicon(project.data.social.twitter);
33+
}
2634
}
2735
---
2836

src/schema.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,35 @@ export const CreateArticleSchema = ({ image }: { image: ImageFunction }) =>
4545
export type Kind = (typeof kinds)[number]["frontmatter"];
4646
export const CreateProjectSchema = ({ image }: { image: ImageFunction }) =>
4747
z.object({
48-
title: z.string(),
48+
app: z.object({
49+
name: z.string(),
50+
description: z.string(),
51+
url: z.string().url(),
52+
// 各プロパティは必要に応じて追加
53+
platform: z.enum(["web", "mobile", "desktop", "cli"]),
54+
domain: z.enum(["app", "game", "tool", "site", "lib"]),
55+
}),
4956
kind: z.enum(kinds.map((kind) => kind.frontmatter) as [Kind, ...Kind[]]),
5057
status: z.enum([
51-
"plan",
52-
"under-development",
53-
"released",
54-
"stable",
55-
"finished",
56-
"dead",
58+
"plan", // プラン段階
59+
"under-development", // 開発中 (未リリース)
60+
"released", // リリース済み
61+
"stable", // アクティブな開発は停止
62+
"finished", // 開発停止、動いてはいる
63+
"dead", // 開発停止、もう動かない
5764
]),
5865
order: z.number().optional(),
5966
date: z.date(),
6067
thumbnail: Thumbnail({ image }),
61-
description: z.string(),
6268
tags: z.array(z.string()).optional().default([]),
63-
github: z.string().url().optional(),
64-
youtube: z.string().url().optional(),
65-
website: z.string().url().optional(),
69+
social: z
70+
.object({
71+
github: z.string().url().optional(),
72+
youtube: z.string().url().optional(),
73+
website: z.string().url().optional(),
74+
twitter: z.string().url().optional(),
75+
})
76+
.optional(),
6677
});
6778

6879
export const CreateMemberSchema = ({ image }: { image: ImageFunction }) =>

0 commit comments

Comments
 (0)