## Inspiration
写真パズルを専門に作っているサービスがある。写真を送ると数日後にジグソーパズルになって届く。
何十年も商売として成り立っている。あれは物を売っているんじゃなくて、「写真がゆっくり現れる体験」を売っているんだと思った。
誕生日プレゼントをLINEで送るとき、いつも何か足りない感じがある。贈り物なのに、受け取る側の体験が一瞬で終わる。開封が数十分続く贈り物があっ てもいいんじゃないか、そう思って作り始めた。
## What it does 自分の写真をジグソーパズルにして、リンク1本で贈れるアプリ。受け取った人はパズルを完成させるまで写真が見えない。最後のピースがはまった瞬間に 、初めて写真が現れる。
それだけだと「パズルアプリ」で終わってしまうので、贈り物としての体験を少し厚くした。
- とどく日 — 誕生日の朝0時にひらくよう予約できる
- 文通帳 — お返しのパズルを送ると、スレッドとして連なっていく
- 知らせ — 封をひらいた・言葉を読んだ、が贈り主に静かに届く
UIは白黒の明朝体、便箋と封蝋のモチーフ。ゲームというよりは手紙の文脈で作った。
## How we built it
Flutterで実装した。ピースの描画はCustomPainterとベジェ曲線で行っている。 一番時間をかけたのはピース形状の生成アルゴリズム。隣り合うピースは同じ辺を共有しなければならない。—片方が凸なら、もう片方は同じ曲線を反対側から描いた凹でなければならない。シード付き乱数で全境界を先に一括生成し、両側のピースが同じエッジ定義を参照する設計にした。逆向きに走査する ときは法線と方向ベクトルの符号を反転させる。弧長サンプリングで両曲線が0.5px以内で一致するかを確認するテストを書いて、細かい符号ミスをつぶした。
ギフト機能はFirebase Storage + Hostingで動かしている。写真はXOR難読化して独自形式に包み、Storageにアップロードする。受け取り側はURLをタップするだけ。OGPカードはモザイク画像を自動生成して、SNSに貼っても写真が見えない仕組みにした。
## Challenges we ran into
秘密をどこにも漏らさないこと。 ホームのサムネイル、共有カードのプレビュー、OSのファイル選択UI——写真が映り込む可能性のある場所が思った以上に多かった。
最初の受け取り導線。 最初はファイルをiMessageで送る設計にしていた。実際に試したら、受け取った側が何をすればいいかまったくわからなかった 。URLリンクに切り替えたら一発で解決した。「難しい」という指摘をもらうまで自分では気づいていなかった。
どこで機能追加をやめるか。 封筒のモチーフはとどく日を示唆し、とどく日は章立てを示唆し、章立ては通知を示唆する。際限がなかった。
## Accomplishments that we're proud of
ピース形状の再現性。64ビットのシード値一つから、いつでも・どの端末でも完全に同じパズルが再生成できる。保存データはピースの座標とロック済み フラグだけで済み、「もう一度遊ぶ」はシードを変えるだけで実装できた。
UIのトーンがまとまったこと。何度も作り直した末に「手紙」の文脈に落ち着いた。感嘆符を使わない、行間を詰めすぎない、余白を広くとる——細かい判 断の積み重ねで、ようやくゲームっぽくなくなった。
## What we learned
「体験」と「仕組み」は別の話だということ。仕組みは「ジグソーパズル+暗号化写真+リンク共有」で、体験は「開封に時間のかかる贈り物」。同じも のを説明しているのに、全然違う。仕組みの完成度を上げることに長い時間を使ったあと、体験の言語化ができて初めてデザインの判断が速くなった。
─────────────────────────────────────────────────────────────────────────────────────
Built With
- puzzle
Log in or sign up for Devpost to join the conversation.