Skip to content

anipopina/monacube

Repository files navigation

About

  • App Name: MonaCube
  • Key Features
    • モナコインによるtipができる画像作品の投稿プラットフォーム
    • Passkeyから生成したモナコインウォレットによってユーザを認証する
    • スパムや人気工作への対策としてモナコインウォレットの残高(MONA高)を参照する
      • MONA高によってアップロードできる作品の総数と総サイズをアンロック
      • 投稿者のMONA高を人気の指標として扱う
      • 作品へのtip額などは工作可能なので指標としては使わない

Directories

project-root/
  sst.config.ts          # サーバレスアーキテクチャ管理: SST
  package.json
  apps/
    web/
      nuxt.config.ts     # フロントエンド: Nuxt SPA
      package.json
      app/
        app.vue
        lib/
        pages/
        components/
        composables/
        assets/
          css/
  packages/
    functions/           # バックエンド: Lambda
      package.json
      src/
        lib/
        api/
        batch/

S3 ImageBucket Path Design

users/
  <userId>/
    icon.webp (128x128)
    icon@2x.webp (256×256)

works/
  <workId>/
    original (ユーザがアップロードした画像を EXIF削除, カラープロファイルをsRGBに変換 してから保存)
    large.webp (長辺 1920px, 想定サイズ 300KB〜1MB)
    medium.webp (長辺 960px, 想定サイズ 100KB〜300KB)
    thumb.webp (square crop 320x320, 想定サイズ 20KB〜60KB)

uploads/
  <uploadId>/
    tmp

Upload Sequence

  1. init API でtmpへのアップロードURLを発行
  2. クライアントが画像をtmpにアップロード
  3. finalize API で
    1. tmpにアップロードされた画像のサイズなどをチェック
    2. 画像のバリエーションを生成して保存
    3. DB更新

Delivery

  • original が一定サイズ以下ならアートワーク詳細で original を表示 / 一定サイズ以上なら large.webp を表示
  • blurHash, thumbBHash でロード時間をつなぐ

Other Definition Files

  • API Interface: shared/apiInterface.ts
  • DynamoDB Record: shared/ddbRecord.ts

TODO

  • blurHash表示
  • MONA高の手動更新の実装
  • Tip機能
  • Tip履歴表示
  • 作品ごとにOGP設定
  • 利用規約 v1.0
  • プライバシーポリシー v1.0
  • Adminアカウントの定義と専用UI追加
  • プロフィール編集機能
  • プロフィールアイコンアップロード
  • アートワーク編集機能
  • クォータ超過時の削除処理

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors