Skip to content

Lokuyow/ehagaki

Repository files navigation

eHagaki OGP

eHagaki

https://lokuyow.github.io/ehagaki/

eHagaki(えはがき)は、画像・動画圧縮機能付きの投稿専用Nostrクライアントです。
デバイス上で画像や動画を自動圧縮し、効率的にNostrへ投稿できます。

主な特徴

  • Nostr投稿専用: 投稿機能に特化し、シンプルなUIで快適な利用体験を提供
  • 画像・動画圧縮: 画像・動画はアップロード前に自動で圧縮され、通信量を削減(圧縮レベル調整可能)
  • Tiptapエディター: 画像・動画・リンク・#ハッシュタグ対応のリッチエディター搭載
  • PWA対応: モバイル・デスクトップ両対応、Androidはメディアアプリの共有ボタンからメディアアップロード可能
  • ドラフト機能: 投稿内容を下書きとして保存し、後から編集・投稿が可能
  • 多言語対応: 日本語・英語に対応(ブラウザ設定から自動判定)

URLクエリ

アクセス時にエディターへテキストを事前入力できます:

https://lokuyow.github.io/ehagaki/?content={url-encoded-text-here}

iframe埋め込み

eHagakiは他のWebサイトにiframeとして埋め込むことができます。投稿の成功・失敗時には親ウィンドウへpostMessageで通知されます。

基本的な埋め込み例

<!-- eHagakiをiframeで埋め込み -->
<iframe 
  id="ehagaki-iframe"
  src="https://lokuyow.github.io/ehagaki/"
  width="600" 
  height="400">
</iframe>

<script>
  // postMessageを受信
  window.addEventListener('message', (event) => {
    if (event.origin !== 'https://lokuyow.github.io') return;
    
    const data = event.data;
    if (data.type === 'POST_SUCCESS') {
      console.log('投稿成功:', data);
    } else if (data.type === 'POST_ERROR') {
      console.error('投稿失敗:', data);
    }
  });
</script>

メッセージフォーマット

投稿成功時

{
  type: 'POST_SUCCESS',
  timestamp: 1729788000000  // Unix timestamp (ミリ秒)
}

投稿失敗時

{
  type: 'POST_ERROR',
  timestamp: 1729788000000,
  error: 'empty_content'  // エラーコード
}

エラーコード一覧

エラーコード 説明
empty_content 投稿内容が空
login_required ログインが必要
nostr_not_ready Nostrクライアントが初期化されていない
key_not_found 秘密鍵が見つからない
post_error 一般的な投稿エラー

技術スタック

フロントエンド

Nostr

  • rx-nostr - リレー管理とイベントストリーミング
  • nostr-tools - Nostrプロトコル実装
  • nostr-login - 認証UI(拡張機能/Nostr Connect対応)

メディア処理

PWA

About

A lightweight, post-only Nostr client that compresses media on your device for fast, data-efficient uploads.

Topics

Resources

License

Stars

Watchers

Forks

Contributors