Waldi: Goで動く、エンゲージメント指標を拒否するブログプラットフォーム
Waldiは、GoとPostgresで構築されたマルチテナントブログプラットフォームで、すべての投稿に読者を保証し、公開コメントをプライベートレターに置き換え、通常のエンゲージメントベイトを回避します。

Waldiは、現代のソーシャルメディアの指標駆動型デザインに意図的に反対する新しいオープンソースのブログプラットフォームです。単一のGoバイナリとPostgresバックエンドで構築され、Goのhtml/templateと単一のTiptapエディターアイランドを使用してサーバーサイドレンダリングされたページを提供します。プロジェクトはwaldi.blogで公開されており、誰でも読むことができ、執筆は現在招待制です。
テナントごとのデプロイメント不要のマルチテナンシー
Waldiのアーキテクチャは非常に簡潔です。すべてのリクエストは中央のServeHTTPを通過し、Hostヘッダーをチェックしてどのブログを提供するかを決定します。最初に安価なサブドメインマッチ(例:username.<base-domain>)を試し、次にPostgres内のカスタムドメインのキャッシュされたルックアップにフォールバックします。つまり、同じバイナリがすべてのブログを提供するため、テナントごとのデプロイメントを管理する必要はなく、セッションクッキーはサブドメイン間でのログインを保持するようにスコープされますが、カスタムドメインでは保持されません。
コメントなし、いいね数なし、リーダーボードなし
プラットフォームのコアループは意図的にアンチバイラルです:公開すると、100人の見知らぬ人が読み、フォローまたはプライベートレターが返ってきます。公開コメント、いいね数、リーダーボードはありません。返信はプライベートレターであり、すべての投稿はアルゴリズムが判断する前に最低限の読者が保証されます。新しい書き手が沈黙の中で公開することはなく、読者は終わらせられる一日を得られます——フォローしている書き手からの数件の投稿、見知らぬ人からの1つのサプライズ、そしてそれで終わりです。
アーキテクチャとスタック
コードベースは明確なレイヤーに整理されています:internal/webはHTTPルーティングとハンドラー、internal/storeはすべてのSQLクエリ(*pgxpool.Poolをラップ)、internal/postはTiptapドキュメントモデルに関する純粋なドメインロジック——JSONスキーマ検証、サニタイズされたHTMLレンダリング、画像URLの修正。フロントエンドは最小限:web/templates/*.htmlのサーバーサイドレンダリングテンプレート、手書きCSS、esbuildでバンドルされたTiptapエディター。PostgresはTiptapドキュメントをjsonbカラムとして保存し、プリレンダリングされサニタイズされたHTMLを読み取り時に提供します。
インフラストラクチャはPostgreSQL、画像ストレージにCloudflare R2(アップロード時にWebP変換)、TLSとカスタムドメインにCaddy、デプロイメントに単一VM上のDocker Composeを使用します。Telegramボットが管理パネルとして機能し、ウェブベースの管理インターフェースはありません。
セルフホスティングとi18n
WaldiはMITライセンスで、セルフホスティングはDEPLOY.mdに文書化されていますが、著者はセルフホストインスタンスはそれぞれ静かな島であり、保証された読者ループはインスタンスの読者の数に依存すると述べています。プラットフォームは設計上バイリンガルで、翻訳文字列はフラットなJSONカタログとしてバイナリに埋め込まれています。テンプレートは言語間で共有され、リクエストごとの言語解決はユーザーの保存されたロケール、クッキー、CF-IPCountryヘッダーをチェックし、最終的にデフォルトでペルシア語になります。
エンゲージメント最大化のトレッドミルに疲れたエンジニアにとって、Waldiはブログプラットフォームのあり方について新鮮で異なる視点を提供します——指標ではなく、執筆と読書が目的であるプラットフォームです。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。