QR コードはバックエンドでは生成せず、クライアント(コンソールやモバイルアプリ)で生成する。
イベント参加者とイベント運営が使用するアプリ。 Flutter で iOS/Android 向けに作成する。
URL からパラメータのイベント ID のみを解釈し、サーバーに送信する。 内部的にこのタイミングでアカウントが作成される。 イベント参加 QR コードの仕様
アプリを起動するたびに、広告用の Token をサーバーに送信し、現在の写真等をサーバーから受信する。 受信した写真に差分が発生している場合は、あらためて写真を取得し直す。
ServiceUUID でビーコンを購読して、スポットに入った、出たことを LINE Simple Beacon を使い検出し、サーバーに送信する。
JSON の QR コードを読み込み、サーバーに送信する。 QR コードと対応したスポット内でスキャンしなければピックできない。 ピックスポットのパレット取得 QR コードの仕様
現在の収集状況に応じて、画像を表示する。 画像はアプリ使用者の意思によって任意のタイミングで保存できる。 デフォルト画像(複数枚)と撮影した画像(0..1)を選択することができる。
画像を開いている状態で画像処理が完了したり、パレットを取得した等の事情で画像が更新される場合、自動的に画像を更新する。 画像の更新は、透過度を 0%-100%で徐々に変化させるアニメーションを行う。
参加者識別 QR を表示する。 すでに写真が登録されていた場合は、上書きすると元の撮影写真が消える旨の説明を行う。 参加者識別 QR コードの仕様
イベント HP や、イベント運営の連絡先などを表示する。
二つのタイミングで通知を行う。
任意のタイミングでアカウントを削除できるようにする。 削除をすると、バッチ処理により event_log に定義されるデータ以外の全てのデータが破棄されることが保証される。
ビーコンの HWID とスポットの ID を紐付ける。 登録時にスポットの登録名を入力する。
近くにあるスポットを確認する。 電波強度により、どのビーコンをどのスポットとして登録したかを確認できる。
イベント運営が使用するアプリ。 Node.js で Web アプリとして作成する。
モバイルとコンソールは共通のアカウントでログインする必要がある。
参加者の QR コードを読み込み、参加者の写真を撮影し、サーバーに送信する。 複数人の写真を同時に撮影ができ、その場合は参加者の QR を連続して読み取る。 参加者識別 QR コードの仕様
イベントを作成し、設定する。
イベントデータ
イベント参加者が参加するための QR コードが生成される。
LP/イベント参加兼用コード
イベント管理者を既存のイベントに招待する。 招待 URL メールアドレス宛に送り、Auth0 のアカウントをイベントに関連付ける。
あるスポットから別のスポットへの人流制御を行う。 あるスポットにいるランダムな参加者に通知が行く。 人流制御先のスポットはボーナスとなり、パレットが増加する。
終了タイミングは、B にいる人間が A の n%になるまで、または増加イベントの時間制限がくるまで
イベントログを Grafana で可視化する。 イベントログ
API サーバーは Rust で作成する。 そのほかは後述する。
各要件を満たすような API を提供する。 API スキーマのリポジトリ
Pub/Sub により、バックエンド API サーバーから画像処理のリクエストを受け取り、画像処理を行う。
画像の色をパレットに分けて、パレット別の透過 png を生成する。
リクエストをもとにパレットの透過 png を合成する。
Nginx と連携し、通常の URL をワンタイム URL にする。
画像取得 URL が、https://example.com/image/1234567890
の場合、https://example.com/image/1234567890?token=abcdefg
のように、token
パラメータを付与する。