000%
CAMPAIGN Nº 01 · 2026 — ELECTION ENGINEERING
CHOIWOONGJU · 2026

ニューヨークから来たデザイン、AX 時代の選挙。

一か月ほどの地方選挙キャンプで、候補のデジタル運営全体を一人で担いました。ライブの広報 web サイトと独自に確立したビジュアルデザイン言語、候補チャットボットから、遊説立地の 分析ツール、郵便発送の住所算出パイプライン、法定会計書式の自動差し込みまで、自分で 実装しました。

FIG. 01CHOI WOONGJU CAMPAIGN — WEB · DATA — CHOIWOONGJU · 2026
CAMPAIGNWEB · DESIGN · DATA · INFRA · ACCOUNTINGNEXT 16 EDGE · SSE · SONNETDESIGN LANGUAGE · ISOMETRIC MAP · MARQUEENESTJS · CLOUD SQL · POSTGIS · GCP · PYTHON

中心は候補の広報 web サイトでした。Next.js Edge Runtime で企画・開発・デプロイし、choiwoongju.com で運用しました。候補紹介・公約・選挙情報を一つの editorial な流れに収めました。選挙事務所で実際にあった詳しい話は、このマガジンのインタビューシリーズ — Magazine の「The Election」 — でご覧いただけます。

フロントエンドを書く前に、まず自分のビジュアルデザイン言語を確立しました。2018・2020 年のアレクサンドリア・オカシオ=コルテス(AOC)の選挙運動 — ニューヨークの Tandem スタジオの仕事 — を、web にアーカイブされたキャンペーンサイトと公開されたデザイン分析から直接研究し、表面ではなく原則を抽出しました:定番の政党カラーのクリシェを壊すこと、メッセージを写真ではなくタイポグラフィに担わせること、モーションを静的なポスターを「運動」のように感じさせる手段として扱うこと。そこから独自のシステムを作りました — 既定の政党色を避けたネイビー+レッドのパレット、一つのタイポグラフィの声のための Pretendard、「運動を増幅する」という原則の web への翻訳である活動写真の右→左マーキー、そしてドロップキャップと蛍光ペンの下線アクセント — これを web・印刷・共有画像に一貫して適用しました。

「冠岳区の明るい未来」というキャンペーンのコンセプトは、絵に移しました。冠岳区をアイソメトリックな都市風景として視覚化し、その上に HUD スタイルのコールアウトを重ね、公約の一つひとつをそれが属する町にピンで留めました — 三聖洞・大学洞・道林川・冠岳山の歩行路 — そして自分で一文字ずつタイピングされる見出しを載せました。地図は「私たちの町のための約束」を、リストとして読む代わりに一目で見えるようにします。

画像そのものについてもコンサルティングしました。人物写真は、候補の視線が右上方へ向かう構図を勧めました — 前へ、上へ、前進する方向。そして整ったプロフェッショナルなカットのほかに、実際の活動が写った写真 — 国会での議政活動、学術活動、市民と会う場 — を使おうと推しました。サイトが候補を専門の政治家としてだけでなく、有権者の中に立つもう一人の市民として読ませるためです。

候補についての質問に答えるチャットボットを自分で実装しました。Claude Sonnet を SSE でストリーミングし、セキュリティは別々の 2 段で組みました — 応答前の段階でプロンプトインジェクションを止める関門(エンコードで回り込む試み・役割を乗っ取るパターンを捕まえます)、そして応答後の段階で公職選挙法が禁じる 8 カテゴリの表現をふるい落とすフィルタ(直接の投票呼びかけ・当選予測・世論調査の推定など)です。

検索での露出のために、構造化データ(JSON-LD)・sitemap・robots で検索エンジン最適化(SEO)を付け、llms.txt route で生成 AI 検索(GEO)対応をコードレベルで実装しました。新規ドメインが Google・Naver の検索1ページ目に上がり、Naver のサイトリンク(リッチリザルト)を獲得し、検索は最大の識別可能な流入チャネルになりました — 選挙週間の識別流入の88%。AI 側は2026年7月の実測で、Google AI Overviews・Claude・Gemini・Perplexity の4エンジンすべてが現職の身分を正確に回答し、うち3つが公式サイトを回答の根拠として直接引用しました。

データを基に遊説の動線を決めるために、時間帯別の人流に基づく立地分析ツールを作りました。生活人口・地下鉄・バスなど公共データ 6 種を PostGIS の 100m グリッド上で、時間帯別の人口・交通拠点に重みを付けてスコアリングし、Kakao Maps の上に立地スコアとして描きました。最初は Supabase と Vercel で回していましたが、容量・クエリメモリ・タイムアウトが限界として立ち上がってきたため、GCP へまるごと移しました — NestJS のヘキサゴナルサーバ + Cloud SQL(ソウル)へリファクタリングし、pg_dump→pg_restore の無損失カットオーバーののち、17 のテーブルを全数照合してスコアまで bit-perfect で検証しました。

郵便発送の側は Python パイプラインで処理しました。広報物の発送対象 2,000 世帯の住所を原資料 7,798 世帯から算出し、不動産院・建築 HUB・道路名住所・Kakao Local の 4 チャネルで相互検証したうえで、郵便局の一括発送書式を自動生成しました。

法定会計書式の記入も自動化しました。韓国の HWPX 形式を zip+XML として直接開き、表の行を複製・差し込みするパイプラインを作り、政治資金の収入支出簿は銀行取引明細と 1:1 で照合して検証しました。選挙が終わったあとの選挙費用補填請求の会計まで、同じやり方で処理しました。

就任後、選挙サイトを最新ニュース・議会活動・公約と議会での取り組み・議員紹介を伝える公式議会活動サイトへ転換しました。住民陳情(民願)の収集システムも運営しています。GmailコレクターとSMS・RCS・MMSを収集するAndroidアプリが、陳情を認証付きの管理者バックオフィスへ自動で取り込み、新たなインフラを追加せず同じデプロイ上に載せました。

第2期開発では、この公開サイトに記事発行システムを接続しました。冠岳区議会の公式原文を収集して版を固定し、Claudeで記事の草稿を生成した後、別のClaude呼び出しによる事実確認と、根拠・メディア・アクセシビリティの検査を経て自動公開するパイプラインを構築しました。CMSでは記事・構造化本文・根拠・画像・動画・注目記事の配置と、公開版の承認・保管・復元・ロールバックを管理します。Web・検索・チャットボットを同じ承認済み公開版に接続し、コードの再デプロイなしで内容を更新できるようにしました。

他の開発者によるピアレビューで、ホームがCMSの原本JPEGをそのまま転送するボトルネックが見つかりました。再現後、原本を保持し、公開に関する権利とアクセス権限を確認しながら、レスポンシブなWebP派生画像を配信するよう改善しました。2026年9月19日のChrome実測では、ホームの画像転送量が1440px画面で40.74MBから0.390MB、390px画面で40.66MBから0.198MBへ減少しました。それぞれ99.0%、99.5%の削減です。

2026年9月28日には、議会活動サイトのSEO・生成AI検索最適化(GEO)・回答エンジン最適化(AEO)を拡張しました。執筆者・発行主体、原資料の出典、初回公開日・更新日・活動日、代表画像がページと構造化データで一致するよう整理しました。6つの質問を3回ずつ繰り返し、Google検索18件とChatGPT・Gemini・Perplexity・Claudeの回答72件を観測して、実際の回答に現れる身分の混同、役職の欠落、別の出典への置き換えを調べました。

— FIN —