From 37a5f72d583133fd3b64250e9ef8af63107d9d75 Mon Sep 17 00:00:00 2001 From: soranjiro Date: Wed, 26 Nov 2025 01:46:18 +0900 Subject: [PATCH 01/24] feat: update main design with new hero section and create form --- apps/web/src/routes/+page.svelte | 1017 +++++++++++++++++++++++++----- 1 file changed, 858 insertions(+), 159 deletions(-) diff --git a/apps/web/src/routes/+page.svelte b/apps/web/src/routes/+page.svelte index aa72583..189e1be 100644 --- a/apps/web/src/routes/+page.svelte +++ b/apps/web/src/routes/+page.svelte @@ -17,6 +17,7 @@ let activeTab = $state<"create" | "add">("create"); let url = $state(""); let urlError = $state(""); + let showCreateForm = $state(false); const themes = getAvailableThemes(); @@ -24,9 +25,19 @@ setTimeout(() => { recentItineraries = auth.getRecentItineraries(); showRecent = true; + if (recentItineraries.length > 0) { + showCreateForm = true; + } }, 300); }); + function scrollToCreate() { + showCreateForm = true; + setTimeout(() => { + document.getElementById("create")?.scrollIntoView({ behavior: "smooth" }); + }, 100); + } + async function createItinerary() { titleError = ""; @@ -139,195 +150,883 @@ -
-
-

- ✈️ たびたび -

-

旅のしおりを、サクッと作成

- -
-
- - + + 機能を見る ↓ +
- - - {#if activeTab === "create"} -
- - - {#if titleError} -

{titleError}

- {/if} +
+ +
+
+
+ + +
- -
- - +
+
富士山旅行 2025
+
+
+ 09:00 + 出発 +
+
+ 12:00 + 河口湖ランチ +
+
+ 14:00 + 絶景スポット +
+
+ 17:00 + 温泉 +
+
+
+
+ -
- - + +
+

できること

+
+
+
+ + + + +
+

スマホ最適化

+

どこでも旅程を確認。アプリ不要

+
+
+
+ + + + +
+

URL共有

+

リンク1つで仲間と共有

+
+
+
+ + + + + + + +
+

テーマ選択

+

シーンに合ったデザイン

+
+
+
+ + +
+

軽量・高速

+

表示まで1秒。ストレスゼロ

+
+
+
- - -

- URLが発行されます。仲間と共有しよう! -

{:else} - -
- - - {#if urlError} -

{urlError}

- {/if} -
+
+
+ + +
- + {#if activeTab === "create"} +
+
+ + + {#if titleError} +

{titleError}

+ {/if} +
-

- 共有されたしおりのURLを貼り付けてください -

- {/if} -
+
+ + +
- - {#if showRecent && recentItineraries.length > 0} -
-

📚 最近の項目

-
- {#each recentItineraries as item} -
- + +
- {/each} + {:else} +
+
+ + + {#if urlError} +

{urlError}

+ {/if} +
+ + +
+ {/if}
+ + {#if showRecent && recentItineraries.length > 0} +
+

最近のしおり

+
+ {#each recentItineraries as item} +
+ + +
+ {/each} +
+
+ {/if} + {/if} +
+ + + +
+
From bd9a0b1c83caf46b6f77d01e116f9e8adc4b09db Mon Sep 17 00:00:00 2001 From: soranjiro Date: Wed, 26 Nov 2025 01:56:13 +0900 Subject: [PATCH 02/24] feat: update hero section design and enhance create form functionality --- apps/web/src/routes/+page.svelte | 311 ++++++++++++++++++++++--------- 1 file changed, 227 insertions(+), 84 deletions(-) diff --git a/apps/web/src/routes/+page.svelte b/apps/web/src/routes/+page.svelte index 189e1be..4db4260 100644 --- a/apps/web/src/routes/+page.svelte +++ b/apps/web/src/routes/+page.svelte @@ -17,7 +17,7 @@ let activeTab = $state<"create" | "add">("create"); let url = $state(""); let urlError = $state(""); - let showCreateForm = $state(false); + let showCreateForm = $state(true); const themes = getAvailableThemes(); @@ -25,9 +25,6 @@ setTimeout(() => { recentItineraries = auth.getRecentItineraries(); showRecent = true; - if (recentItineraries.length > 0) { - showCreateForm = true; - } }, 300); }); @@ -38,6 +35,10 @@ }, 100); } + function scrollToFeatures() { + document.getElementById("features")?.scrollIntoView({ behavior: "smooth" }); + } + async function createItinerary() { titleError = ""; @@ -157,7 +158,9 @@

- + たびたび @@ -166,20 +169,17 @@

友達や家族との旅行計画を、シンプルに美しくまとめよう

- +
- - +

- +
@@ -218,9 +218,16 @@
- - - + + +

スマホ最適化

@@ -228,9 +235,20 @@
- - - + + +

URL共有

@@ -238,12 +256,21 @@
- - - - - - + + + + + +

テーマ選択

@@ -251,8 +278,15 @@
- - + +

軽量・高速

@@ -262,18 +296,19 @@ -
0}> +
0} + >
{#if !showCreateForm && recentItineraries.length === 0} - {:else} -
+
{:else}
+

共有されたしおりのURLを貼り付け

-

シンプルに、便利に

-
-
- - - - -
-

スマホ最適化

-

どこでも旅程を確認。アプリ不要

-
-
-
- - - - -
-

URL共有

-

リンク1つで仲間と共有

-
-
-
- - - - - - - -
-

テーマ選択

-

シーンに合ったデザイン

-
-
-
- - - -
-

軽量・高速

-

表示まで1秒。ストレスゼロ

-
+ + {#snippet icon()} + + {/snippet} + + + {#snippet icon()} + + {/snippet} + + + {#snippet icon()} + + {/snippet} + + + {#snippet icon()} + + {/snippet} +
-
-
-
- - -
- - {#if activeTab === "create"} -
-
- - - {#if titleError} -

{titleError}

- {/if} -
- -
- - -
+ -
- 詳細設定 -
- - -

- 設定するとパスワードなしでは編集できません -

-
-
- - -
- {:else} -
-

共有されたしおりのURLを貼り付け

-
- - - {#if urlError} -

{urlError}

- {/if} -
- - -
- {/if} -
- - {#if showRecent && recentItineraries.length > 0} -
-

最近のしおり

-
- {#each recentItineraries as item} -
- - -
- {/each} -
-
+ {#if showRecent} + {/if}
- - +
- - {#if showScrollButton} - - {/if} +
diff --git a/apps/web/src/routes/home/CreateForm.svelte b/apps/web/src/routes/home/CreateForm.svelte new file mode 100644 index 0000000..0748e80 --- /dev/null +++ b/apps/web/src/routes/home/CreateForm.svelte @@ -0,0 +1,356 @@ + + +
+
+ + +
+ + {#if activeTab === "create"} +
+
+ + + {#if titleError} +

{titleError}

+ {/if} +
+ +
+ + +
+ +
+ +
+ + {#if usePassword} +
+ + +
+ {/if} + + +
+ {:else} +
+

共有されたしおりのURLを貼り付け

+
+ + + {#if urlError} +

{urlError}

+ {/if} +
+ + +
+ {/if} +
+ + diff --git a/apps/web/src/routes/home/FeatureCard.svelte b/apps/web/src/routes/home/FeatureCard.svelte new file mode 100644 index 0000000..73ad579 --- /dev/null +++ b/apps/web/src/routes/home/FeatureCard.svelte @@ -0,0 +1,69 @@ + + +
+
+ {@render icon()} +
+

{title}

+

{description}

+
+ + diff --git a/apps/web/src/routes/home/Footer.svelte b/apps/web/src/routes/home/Footer.svelte new file mode 100644 index 0000000..400dbb3 --- /dev/null +++ b/apps/web/src/routes/home/Footer.svelte @@ -0,0 +1,74 @@ + + + + + diff --git a/apps/web/src/routes/home/PreviewCarousel.svelte b/apps/web/src/routes/home/PreviewCarousel.svelte new file mode 100644 index 0000000..491b3cf --- /dev/null +++ b/apps/web/src/routes/home/PreviewCarousel.svelte @@ -0,0 +1,206 @@ + + +
+ +
+ {#each previews as _, i} + + {/each} +
+
+ + diff --git a/apps/web/src/routes/home/RecentItineraries.svelte b/apps/web/src/routes/home/RecentItineraries.svelte new file mode 100644 index 0000000..c92db4f --- /dev/null +++ b/apps/web/src/routes/home/RecentItineraries.svelte @@ -0,0 +1,120 @@ + + +{#if items.length > 0} +
+

最近のしおり

+
+ {#each items as item} +
+ + +
+ {/each} +
+
+{/if} + + diff --git a/apps/web/src/routes/home/ScrollTopButton.svelte b/apps/web/src/routes/home/ScrollTopButton.svelte new file mode 100644 index 0000000..2400cf3 --- /dev/null +++ b/apps/web/src/routes/home/ScrollTopButton.svelte @@ -0,0 +1,62 @@ + + +{#if visible} + +{/if} + + diff --git a/apps/web/src/routes/home/icons/IconAirplane.svelte b/apps/web/src/routes/home/icons/IconAirplane.svelte new file mode 100644 index 0000000..1a475d9 --- /dev/null +++ b/apps/web/src/routes/home/icons/IconAirplane.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/apps/web/src/routes/home/icons/IconBolt.svelte b/apps/web/src/routes/home/icons/IconBolt.svelte new file mode 100644 index 0000000..2011f59 --- /dev/null +++ b/apps/web/src/routes/home/icons/IconBolt.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/apps/web/src/routes/home/icons/IconBook.svelte b/apps/web/src/routes/home/icons/IconBook.svelte new file mode 100644 index 0000000..ae976a1 --- /dev/null +++ b/apps/web/src/routes/home/icons/IconBook.svelte @@ -0,0 +1,19 @@ + + + + + + diff --git a/apps/web/src/routes/home/icons/IconGitHub.svelte b/apps/web/src/routes/home/icons/IconGitHub.svelte new file mode 100644 index 0000000..5eab360 --- /dev/null +++ b/apps/web/src/routes/home/icons/IconGitHub.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/apps/web/src/routes/home/icons/IconLink.svelte b/apps/web/src/routes/home/icons/IconLink.svelte new file mode 100644 index 0000000..89cfe48 --- /dev/null +++ b/apps/web/src/routes/home/icons/IconLink.svelte @@ -0,0 +1,19 @@ + + + + + + diff --git a/apps/web/src/routes/home/icons/IconPalette.svelte b/apps/web/src/routes/home/icons/IconPalette.svelte new file mode 100644 index 0000000..a3543ad --- /dev/null +++ b/apps/web/src/routes/home/icons/IconPalette.svelte @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/apps/web/src/routes/home/icons/IconPhone.svelte b/apps/web/src/routes/home/icons/IconPhone.svelte new file mode 100644 index 0000000..df4c69e --- /dev/null +++ b/apps/web/src/routes/home/icons/IconPhone.svelte @@ -0,0 +1,19 @@ + + + + + + diff --git a/apps/web/src/routes/home/icons/index.ts b/apps/web/src/routes/home/icons/index.ts new file mode 100644 index 0000000..7745e6e --- /dev/null +++ b/apps/web/src/routes/home/icons/index.ts @@ -0,0 +1,7 @@ +export { default as IconAirplane } from "./IconAirplane.svelte"; +export { default as IconPhone } from "./IconPhone.svelte"; +export { default as IconLink } from "./IconLink.svelte"; +export { default as IconPalette } from "./IconPalette.svelte"; +export { default as IconBolt } from "./IconBolt.svelte"; +export { default as IconBook } from "./IconBook.svelte"; +export { default as IconGitHub } from "./IconGitHub.svelte"; diff --git a/apps/web/src/routes/home/index.ts b/apps/web/src/routes/home/index.ts new file mode 100644 index 0000000..9c95c0e --- /dev/null +++ b/apps/web/src/routes/home/index.ts @@ -0,0 +1,8 @@ +export { default as PreviewCarousel } from "./PreviewCarousel.svelte"; +export { default as FeatureCard } from "./FeatureCard.svelte"; +export { default as CreateForm } from "./CreateForm.svelte"; +export { default as RecentItineraries } from "./RecentItineraries.svelte"; +export { default as Footer } from "./Footer.svelte"; +export { default as ScrollTopButton } from "./ScrollTopButton.svelte"; +export { previewItineraries } from "./previewData"; +export type { PreviewItinerary, PreviewStep } from "./previewData"; diff --git a/apps/web/src/routes/home/previewData.ts b/apps/web/src/routes/home/previewData.ts new file mode 100644 index 0000000..f9e24f1 --- /dev/null +++ b/apps/web/src/routes/home/previewData.ts @@ -0,0 +1,44 @@ +export interface PreviewStep { + time: string; + label: string; + icon: string; +} + +export interface PreviewItinerary { + title: string; + theme: string; + steps: PreviewStep[]; +} + +export const previewItineraries: PreviewItinerary[] = [ + { + title: "沖縄旅行 2025", + theme: "tropical", + steps: [ + { time: "10:00", label: "那覇空港到着", icon: "✈️" }, + { time: "12:00", label: "国際通りランチ", icon: "🍜" }, + { time: "15:00", label: "美ら海水族館", icon: "🐠" }, + { time: "18:00", label: "サンセットビーチ", icon: "🌅" }, + ], + }, + { + title: "京都日帰り", + theme: "autumn", + steps: [ + { time: "08:00", label: "京都駅集合", icon: "🚃" }, + { time: "09:30", label: "清水寺", icon: "⛩️" }, + { time: "12:00", label: "祇園でランチ", icon: "🍱" }, + { time: "14:00", label: "金閣寺", icon: "✨" }, + ], + }, + { + title: "北海道グルメ旅", + theme: "winter", + steps: [ + { time: "11:00", label: "新千歳空港", icon: "❄️" }, + { time: "13:00", label: "味噌ラーメン", icon: "🍜" }, + { time: "15:00", label: "白い恋人パーク", icon: "🍪" }, + { time: "18:00", label: "ジンギスカン", icon: "🥩" }, + ], + }, +]; From be14c9492d053a9e3d7ac3aa26decd809239982e Mon Sep 17 00:00:00 2001 From: soranjiro Date: Wed, 26 Nov 2025 02:46:18 +0900 Subject: [PATCH 06/24] =?UTF-8?q?feat:=20update=20ScrollTopButton=20label?= =?UTF-8?q?=20to=20'=E3=83=88=E3=83=83=E3=83=97=E3=81=B8=E6=88=BB=E3=82=8B?= =?UTF-8?q?'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/routes/home/ScrollTopButton.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/routes/home/ScrollTopButton.svelte b/apps/web/src/routes/home/ScrollTopButton.svelte index 2400cf3..d398f28 100644 --- a/apps/web/src/routes/home/ScrollTopButton.svelte +++ b/apps/web/src/routes/home/ScrollTopButton.svelte @@ -19,7 +19,7 @@ > - しおりを作成 + トップへ戻る {/if} From c0a8a45a58f5ecf99217ceb128f8d9e9a94da592 Mon Sep 17 00:00:00 2001 From: soranjiro Date: Wed, 26 Nov 2025 03:11:16 +0900 Subject: [PATCH 07/24] feat: enhance PreviewCarousel and preview data structure with new layout options and theme colors --- .../src/routes/home/PreviewCarousel.svelte | 363 +++++++++++++++--- apps/web/src/routes/home/index.ts | 2 +- apps/web/src/routes/home/previewData.ts | 86 ++++- 3 files changed, 376 insertions(+), 75 deletions(-) diff --git a/apps/web/src/routes/home/PreviewCarousel.svelte b/apps/web/src/routes/home/PreviewCarousel.svelte index 491b3cf..85602bc 100644 --- a/apps/web/src/routes/home/PreviewCarousel.svelte +++ b/apps/web/src/routes/home/PreviewCarousel.svelte @@ -5,10 +5,24 @@ icon: string; } + interface ThemeColors { + primary: string; + secondary: string; + background: string; + text: string; + accent: string; + border?: string; + } + interface PreviewItinerary { title: string; - theme: string; + themeId: string; + themeName: string; + description: string; + layout: "list" | "timeline" | "card"; + colors: ThemeColors; steps: Step[]; + features: string[]; } interface Props { @@ -24,28 +38,80 @@