大まかな要件定義
要件レベル
最低限リリースする上で必要な機能
ActivityPub実装
JSON-LD compacted処理
ジョブワーカー処理
アカウント
登録オープンとクローズ
登録時のフォームにCAPTCHA機能
アカウントの名前、自己紹介とか基本的なプロフィールが書ける
2段階認証(TOTP)
他アカウントのリレーション管理(フォロー、ミュート、ブロックなど)
フォロー承認機能
メールアドレスの認証機能
パスワードリセット
投稿
投稿の作成・削除
CW
返信
リアクション(いいね)
ReText(リツイートに値する機能)
SNSの基本的な機能
API(RESTful)
通常のアカウント操作であれば通常のAPI
ベースとする認証方法はOAuth
メールアドレス・パスワード変更など、アカウントに大きく影響する部分は通常のAPIではなく、SSRで処理すること
単体の実行ファイルにまとめる(go:embedでできるはず)
コア設定(設定ファイルで管理)
設定を適用するには再起動が必要になる設計になりそう
例えば
インスタンス名
エンドポイント(FQDN名)
reCAPTCHAなどのAPIキー
アカウント削除の可否
など・・・
要求レベル
要件レベルが完了したら随時実装していく機能
ActivityPub
LD-Signature
セキュリティレベル
低、中、高の三段階
HTTPSignatureがなかったら拒否するなど
リレー機能
アカウント
登録を招待制・承認制にできるようにする
二段階認証(WebAuthn)
アカウント引っ越し機能(Mastodonモデルを継承)
ロールでできることの管理
ロールはロール単位でプロフィールに表示・非表示ができる
ローカルタイムライン、スマートタイムライン(ソーシャル)、グローバルタイムラインの表示
アンテナ(Misskeyの機能を継承)
データエクスポート、インポート(他アカウントのリレーション情報とか、投稿データ)
WebSocketによるリアルタイムストリーミング
など
フォローしている人を除き、指定した連合をミュートにする機能(ブロックではない)
指定した連合からのフォローのホワイトリスト・ブラックリストな制度
セキュリティ監査
ログインがあったら知らせる
新たなアプリを承認した時にメールを送信する機能
個々のアカウントのセキュリティ監査ログ(パスワードを変えたなどの)
通報機能
通報チケットを受領したらWebhookで知らせる
SlackモデルのWebhookで。もし要望があれば別形式のWebhookなども検討する
API(GraphQL)
GraphQLによるAPI呼び出し(ログインユーザーのみの予定)
投稿
画像・動画などの添付ファイル
NSFW設定
画像のオブジェクトストレージに対応
多言語対応
要件レベルでは日本語主体の対応で始める
検索機能
ユーザーや投稿を検索できる
ウェブクライアントの情報を保存することができる機能
データベースに保存
要望レベル
できたらいいな、のレベルの機能
アカウント
バックアップ用のメールアドレス
ユーザーアイコン絵文字(:@username:ってやるとYuzuRyo61.iconみたいになるやつ)
PWA・SW対応
OpenID対応
IPFS対応
投稿を他のサイトへHTML埋め込みできるようにする
Webクライアントのショートカットキーをカスタマイズできるようにする
ウェブでセットアップ(構築)ができるようにする