使用ライブラリの一覧と、実コード(theme.dart / theme_light.dart)から抽出した実際のカラー・フォント・i18n定義。
色は名目上の値ではなく、実際にアプリがレンダリングしている16進値そのもの。
| Layer | Technology |
|---|---|
| Mobile / Web | Flutter >=3.3.0 <4.0.0(apps/mobile/pubspec.yaml、現在バージョン 2.1.0+19) |
| Backend | TypeScript / Node.js, Express ^4.19.2(apps/api/package.json、現在バージョン 2.1.0) |
| State管理 | Riverpod(flutter_riverpod + riverpod_generator) |
| Routing | go_router ^14.2.0 |
| Auth | Supabase Auth(GoTrue)— supabase_flutter + サーバー側はJWT検証(middleware/auth.ts、JWKS + HS256両対応) |
| Database | PostgreSQL(Supabase self-hosted) |
| Cache | Redis(ioredis、インメモリfallback付き — 未設定環境でもサイレントにdegrade) |
| Storage | S3互換オブジェクトストレージ(Supabase Storage) |
| Search | PostgreSQL Full-text Search(tsvector) |
| Payments | Stripe(Web/Android月額)+ Apple IAP(iOS)+ Google Play Billing(Android) |
| Push通知 | OneSignal(onesignal_flutter) |
SMTP(nodemailer) |
|
| AI | Ollama(自前ホスト、AIアシスタント・レシートOCR) |
| 広告 | Start.io(iOS/Android native)、Adsterra(Web) |
| Bot対策 | Cloudflare Turnstile(cloudflare_turnstile、パスワード認証時) |
pubspec.yaml dependencies)| Package | Version |
|---|---|
| supabase_flutter | ^2.5.6 |
| go_router | ^14.2.0 |
| flutter_riverpod | ^2.5.1 |
| riverpod_annotation | ^2.3.5 |
| table_calendar | ^3.1.2 |
| image_picker | ^1.1.2 |
| cached_network_image | ^3.3.1 |
| intl | ^0.20.0 |
| url_launcher | ^6.3.0 |
| http | ^1.2.1 |
| google_fonts | ^6.2.1 |
| shared_preferences | ^2.3.2 |
| flutter_markdown | ^0.7.4 |
| flutter_animate | ^4.5.0 |
| gap | ^3.0.1 |
| geolocator | ^13.0.1 |
| geocoding | ^4.0.0 |
| shimmer | ^3.0.0 |
| qr_flutter | ^4.1.0 |
| web | ^1.1.0 |
| flutter_html | ^3.0.0 |
| onesignal_flutter | ^5.2.9 |
| markdown | ^7.2.2 |
| share_plus | ^10.1.2 |
| in_app_review | ^2.0.10 |
| startapp_sdk | ^1.0.1 |
| google_sign_in | ^7.2.0 |
| in_app_purchase | ^3.3.0 |
| cloudflare_turnstile | ^3.7.1 |
| sign_in_with_apple | ^8.1.0 |
| crypto | ^3.0.7 |
| package_info_plus | ^8.0.0 |
| image_cropper | ^8.0.2 |
dependency_overridesでflutter_inappwebview*系を1.2.0-betaに固定している(AGP 9.0.1がgetDefaultProguardFile('proguard-android.txt')を拒否するための回避策、stableリリースでの解消待ち)。
package.json dependencies)| Package | Version |
|---|---|
| express | ^4.19.2 |
| @supabase/supabase-js | ^2.44.0 |
| pg | ^8.22.0 |
| ioredis | ^5.4.1 |
| jsonwebtoken | ^9.0.3 |
| zod | ^3.23.8 |
| stripe | ^15.12.0 |
| googleapis | ^144.0.0 |
| nodemailer | ^8.0.10 |
| multer | ^1.4.5-lts.1 |
| cors | ^2.8.5 |
| pino | ^10.3.1 |
| pino-http | ^11.0.0 |
| uuid | ^10.0.0 |
| dotenv | ^16.4.5 |
テスト: vitest ^4.1.10 + supertest ^7.2.2(Requirements.mdは「171 tests」と記載)。型: typescript ^5.5.2。実行: tsx ^4.16.0。
apps/mobile/lib/theme.dartから抽出した実際の色値。k*変数はapplyTheme(light)でmutableに切り替わるため、ここではダークモード(デフォルト)と、ライトモード適用時(waydIsLight = true)の両方の実値を示す。
| Token | Hex | |
|---|---|---|
| kGreen | #00FF7F |
|
| kGreenDark | #22C55E |
|
| kBlack | #000000 |
|
| kSurface | #0A0A0A |
|
| kCard | #111111 |
|
| kBorder | #505050 |
|
| kMuted | #8A8A8A |
|
| kForeground | #F0F0F0 |
| Token | Hex | |
|---|---|---|
| kGreen (light) | #B45309 |
|
| kGreenDark (light) | #92400E |
|
| kBlack→bg (light) | #F6EFE1 |
|
| kSurface (light) | #EFE5D0 |
|
| kCard (light) | #FCF7EB |
|
| kBorder (light) | #D9CBAC |
|
| kMuted (light) | #6B5C41 |
|
| kForeground (light) | #2B2113 |
| Token | Hex | |
|---|---|---|
| kAmber(気分) | #FBBF24 |
|
| kBlue(位置情報) | #60A5FA |
|
| kPurple(履歴/バージョン) | #A78BFA |
|
| kRed(削除/危険) | #FF6B6B |
| Token | Hex | |
|---|---|---|
| kPaper | #E9DAB8 |
|
| kPaperEdge | #DCC89E |
|
| kInk | #3C2E1A |
|
| kInkGreen | #6B5426 |
コード確認済みの矛盾(2026-07-28) — ライトモードのアクセント色は実は2系統存在する。ウィジェットが直接読む可変パレット
kGreenはapplyTheme(true)で#B45309(amber-gold, "library/old paper")に切り替わる一方、main.dartがMaterialApp.themeに渡す静的なlightTheme(theme_light.dart)は独自のkLYellow = #CA8A04("readable yellow")をボタン・AppBar・入力欄フォーカス枠に使っている。どちらも黄系だが16進値が異なるため、ライトモードではMaterial標準コンポーネント(ボタン、AppBar等)とカスタムウィジェット(kGreenを直接参照する箇所)でアクセント色が微妙にずれる。theme.dartのコメント自身も「a pixel-perfect flip of every hard-coded surface is a separate refactor」と認めている既知の未収束状態。
UIフォントはロケール別に自動選択される(theme.dartのzmg() / serif() / mono()ショートハンド)。Noto系はLatin/JP/SC用に別ファミリーが用意されているため、1フォントを全スクリプトに引き伸ばさず、ロケールごとに適切な相棒フォントを選ぶ設計。
| 用途 | 関数 | en / de | ja | zh |
|---|---|---|---|---|
UI本文(kTextBody等) |
zmg() |
Noto Sans | Zen Maru Gothic | Noto Sans SC |
| 装飾見出し(日記タイトル等) | serif() |
Noto Serif | Noto Serif JP | Noto Serif SC |
コード/ハッシュ/ID(kTextHash) |
mono() |
JetBrains Mono(ロケール非依存 — ハッシュ/IDは常にLatin) | 同左 | 同左 |
Zen Maru Gothicは日本語専用(アプリのJPアイデンティティ)— 簡体字はカバーしないためZHには使わない。全てGoogle Fonts経由(google_fontsパッケージ)。
apps/mobile/lib/l10n/配下のARBファイル。各言語ファイルともapp_en.arb基準で652キーを持つ(キー数はロケール間で完全一致確認済み)。
| ロケール | 言語 | ファイル | UIフォント |
|---|---|---|---|
en |
English(デフォルト) | app_en.arb |
Noto Sans |
de |
Deutsch | app_de.arb |
Noto Sans |
ja |
日本語 | app_ja.arb |
Zen Maru Gothic |
zh |
中文(簡体字) | app_zh.arb |
Noto Sans SC |
切り替えはメニューバーの翻訳アイコンから。選択は永続化される(Requirements.md P0で実装済み確認)。
ソース: apps/mobile/pubspec.yaml, apps/api/package.json, apps/mobile/lib/theme.dart, theme_light.dart, main.dart, l10n/*.arb(すべて2026-07-28に直接確認)。
最終更新: 2026-07-28