demo.mp4
近年、場所に縛られずに働く「ノマド」という働き方が注目されています。
フリーランスや学生など、環境を変えて作業することを好む人は多くいます。
しかし、「いつも同じカフェで飽きた」「新しい場所を探したいが雰囲気が分からない」といった悩みを抱える人も少なくありません。
また、気分転換をしたいときに「どこに行けばいいか分からない」という課題もあります。
そこで、そのときの気分で選べる新しい作業場所との出会いを提供するアプリを開発しました。
「SerenSpot」は、ユーザーのレビューをもとに新しい作業場所を発見できるアプリです。
Google マップのように「場所」そのものを中心に表示するのではなく、「レビュー単位」でスポットを可視化する点が特徴です。たとえば、「個人経営の〇〇カフェは静かで集中できる」「公園のベンチで新しいアイデアが浮かんだ」「多摩川の河川敷は意外と開発作業に適している」といった実体験の投稿から、ユーザーは思いがけない作業スポットを直感的に見つけられます。
なお「SerenSpot」の由来は Serendipity + Spot です。
このサービスで、いつものカフェや変わり映えのないコワーキングスペースから一歩踏み出し、気分転換はもちろん、集中力や発想力を高める「新しいお気に入りの作業場所」を見つけましょう。
名前:松永藍
年齢:27歳
職業:フリーランスデザイナー
居住地:東京都・中目黒
利用デバイス:Macbook Pro/iPhone
主な活動場所:カフェ・コワーキングスペース
- 場所を変えることで気分を変えて作業に集中したいが、どうしても同じような場所になりがちで飽き飽きしている。
- 新しい場所を開拓したいが、実際に行かないと作業のしやすさなどが判断できないのが面倒。
- SNSやGoogleマップは情報が多すぎて、自分の作業スタイルに合った場所を見つけづらいと感じている。
- 基本的に一人で作業しているため、他のノマドワーカーとのつながりを欲している。が、ダイレクトなつながりより”ゆるいつながり”がいい。
- 偶発的な出会いで日常を変えたい。
- 朝カフェで作業→昼過ぎに集中が切れる。
- 気分転換をしたくて別の場所を探すが、時間をかけたくない。
- 「SerenSpot」でレビューを眺めながら、自分の“作業モード”に合いそうな場所を見つける。
- 実際に行って作業し、「静かで集中できた」など簡単なレビューor「作業のしやすさ」「混雑度」など定型情報を投稿。
- 後日、自分の投稿した場所に誰かが行ったという通知が届き、ちょっと嬉しい。また投稿しようと思う。
| ニーズ | 背景課題 |
|---|---|
| 気分転換できる場 | 同じカフェだと刺激がなく集中できない |
| 失敗のない場所選びをしたい | 行ってみたら混雑・騒音などで作業できないことがある |
| 他の人のリアルな体験を知りたい | 星評価よりも、どんな雰囲気だったかを重視している |
| さりげない繋がりを感じたい | 一人作業が多く孤独を感じやすい |
ユーザーがまず目にするのはマップではなく「ひとこと」レビュー。他のユーザーのリアルな体験をもとに、直感的な場所選びが可能です。
カフェだけでなく、海辺や公園など「意外な場所」も提案対象。ユーザーの作業スタイルや気分に合わせたスポットを提案します。
- 新しい作業場所を探す手間を削減
- 気分転換先を手軽に発見
- 新しい場所に行く不安や心理的ハードルを軽減
- こだわり検索(コンセントの有無、混雑度、テーブルの有無など)
- 投稿者と訪問者がゆるくつながることができるフィードバック機能(「あなたの投稿を見た人が〇〇に訪問しました」通知)
- AI によるユーザー嗜好に基づいたスポット提案機能
- ノマドワーカーに向けた AI チャットによるワーケーションプランニング機能
-
ユーザーが新しい場所へ“偶然”出会えるよう、メイン画面にはマップベースではなく SNS ライクなフィードベースの UI を採用しました。
-
そのときの気分に応じて絞り込めるフィルター機能を用意し、利用シーン(リラックス・集中・発想・雑談)に合った場所を見つけやすくしました。
-
「ここだ!」と思えるスポットが見つかった際にすぐナビゲーションできるよう、スポット投稿の経路ボタンからワンタップで Google マップのルート検索へ飛べる導線を設けました。
多くのユーザーが使えば使うほど新しい場所との偶発的な遭遇ができるようになりますので、楽しんで使っていただけると幸いです。
- Google Maps API(位置情報取得、ナビゲーション)
- フロントエンド: Next.js, TypeScript, Tailwind CSS, shadcn/ui
- データベース: CockroachDB
- デプロイ: Vercel
- ORM:Prisma
- Web (Google Chrome, Firefox, Microsoft Edge)
erDiagram
User {
BigInt id PK
String name UK
String password
String avatar "nullable"
String home_town "nullable"
Boolean isValid
DateTime created_at
DateTime last_login_at
}
UserSession {
String id PK
BigInt userId FK
DateTime issued_at
DateTime expires_at
Boolean revoked
DateTime revoked_at "nullable"
String revoked_reason "nullable"
DateTime last_used_at "nullable"
String refresh_token_hash
String fingerprint_hash "nullable"
String device_label "nullable"
DateTime created_at
DateTime updated_at
}
Place {
BigInt id PK
String name
Unsupported geom
String place_id "nullable"
}
Post {
BigInt id PK
Mood mood_type
String contents
DateTime post_at
Int views_count
String img "nullable"
Float random_key_1
Float random_key_2
Float random_key_3
Float random_key_4
Float random_key_5
BigInt placeId FK
BigInt authorId FK
}
Reaction {
BigInt id PK
String reaction_type
DateTime created_at
BigInt postId FK
BigInt userId FK
}
PostView {
BigInt postId PK, FK
BigInt userId PK, FK
}
%% --- Relationships ---
UserSession }o--|| User : "belongs_to"
Post }o--|| User : "authored_by"
Post }o--|| Place : "located_at"
Reaction }o--|| User : "by_user"
Reaction }o--|| Post : "on_post"
PostView }o--|| User : "by_user"
PostView }o--|| Post : "of_post"
-
ランダムキーを用いたフィード表示の工夫(/src/lib/feed-types.ts, /src/app/search/page.tsx)
投稿ごとに複数のランダム値を事前計算・保持し、毎回異なるキーでソートして投稿一覧を取得することで、効率的に順番をシャッフルしたフィード表示を実現しました。これによりユーザーはアクセスのたびに新鮮な投稿に出会え、偶発的な発見を促します。 -
レビュー内容付きマップピン表示(/src/components/Map/GoogleMap.tsx, /src/app/search/page.tsx)
Google Maps API を活用し、地図上のピンにスポット名と短文レビューを吹き出し表示する独自 UI を実装しました。ユーザーはフィードに加え、地図上でも直感的にスポットの雰囲気をつかむことができます。投稿データをマップピン(座標と内容)に変換して表示することで、場所探しとレビュー閲覧をシームレスに統合しています。
レンダリングの都合上、ログイン後のフィード表示に時間がかかる場合があります。その際は一度「気分で絞り込み」ボタンをクリックして強制的にレンダリングを実行してください。