hollo 館・3F

客間

ja· en· ko
はじめての人へholloの、ブラウザで見える公開プロフィールと投稿のページです。

住所を持てます。あなたの投稿は、専用アプリを持たない人にもURLひとつで見せられる——ブラウザで開けば静かなページ、fediから覗けば同じ住所がactorの顔になる。

作りはSPAではなく、サーバで組んだHTMLをそのまま返す静かな流儀です。訪ねてきた人のブラウザには、できあがったページだけが届きます。

見どころ

  • src/pages/index.tsx が一枚のHonoルータで、home・profile(/:handle{@[^/]+})・login・setup・絵文字管理などのサブページをぜんぶ束ねる
  • プロフィールの投稿はdrizzleで直に引く(PAGE_SIZE=30、public+unlistedのみ)。pageやcontのクエリは検分して、怪しければ404
  • 投稿のHTMLは表示前にxssサニタイザを通す
  • 管理画面系はcsrf()+loginRequiredで守られ、federation.tsxには管理者が手でリモートのactor/postを取り寄せて台帳に写す小さな引き込み口まである

経文の一節

      links={[
        ...(atomUrl == null
          ? []
          : [
              { rel: "alternate", type: "application/atom+xml", href: atomUrl },
            ]),
        {
          rel: "alternate",
          type: "application/activity+json",
          href: `/@${accountOwner.handle}`,
        },
      ]}
src/pages/profile/index.tsx L220-L232— 同じ住所の、連合向けのもう一つの顔への案内板

間取り

src/pages/index.tsx
公開/管理ページを束ねる親ルータ
src/pages/profile/index.tsx
公開プロフィール。drizzleのページングとactivity+json alternateリンク
src/pages/profile/profilePost.tsx
投稿一枚の永久リンクページ
src/pages/federation.tsx
管理者がリモートのactor/postを取り寄せるダッシュボード

となりの部屋

そとへのリンク