<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tokyo-livehouse-events/app/routes.ts, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/'/>
<entry>
<title>Add JSON REST API: GET /api/events, /api/events/:id, /api/venues, /api/openapi.json</title>
<updated>2026-05-14T14:14:49+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-14T14:14:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=1c0df5a6eadf20d3dce490b5c5c87a3ee750fe34'/>
<id>1c0df5a6eadf20d3dce490b5c5c87a3ee750fe34</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add calendar export (Google/ICS) and extend scrape window to 65 days</title>
<updated>2026-05-10T13:47:46+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-10T13:47:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=05d2b35a85a46dde9a1264d3002ba86e02e3d5eb'/>
<id>05d2b35a85a46dde9a1264d3002ba86e02e3d5eb</id>
<content type='text'>
- Event detail page: add Google Calendar link and .ics download button
- New route GET /api/events/:id/calendar.ics returns RFC 5545 iCalendar
- Scrape window extended from 35 → 65 days (~2 months ahead)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Event detail page: add Google Calendar link and .ics download button
- New route GET /api/events/:id/calendar.ics returns RFC 5545 iCalendar
- Scrape window extended from 35 → 65 days (~2 months ahead)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add 5 new venue scrapers; extract artist info for WARP, shibuya-o, MOON STEP, mod</title>
<updated>2026-05-07T10:27:50+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-07T10:27:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=d5e975b601e70adf901c8e1eb7e61f0388941195'/>
<id>d5e975b601e70adf901c8e1eb7e61f0388941195</id>
<content type='text'>
New scrapers: Fever 下北沢, Nine Spices 下北沢, 西荻窪 JAM, mod 柴崎, 中野 MOON STEP

Artist extraction added/fixed:
- warp-kichijoji: parse div.w-flyer (clone + remove nested notes-wrapper)
- shibuya-o: rewrite to scrape each sub-venue; artist from li.p-scheduled-card__artist-item
- moon-step-nakano: parse 出演 section from WordPress API description HTML
- mod-shibasaki: fetch individual event pages in parallel; handle live:/出演:/・ bullet formats

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
New scrapers: Fever 下北沢, Nine Spices 下北沢, 西荻窪 JAM, mod 柴崎, 中野 MOON STEP

Artist extraction added/fixed:
- warp-kichijoji: parse div.w-flyer (clone + remove nested notes-wrapper)
- shibuya-o: rewrite to scrape each sub-venue; artist from li.p-scheduled-card__artist-item
- moon-step-nakano: parse 出演 section from WordPress API description HTML
- mod-shibasaki: fetch individual event pages in parallel; handle live:/出演:/・ bullet formats

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add date-based event view grouped by venue</title>
<updated>2026-05-07T01:26:10+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-07T01:26:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=bffc2c74408ff7163cea0c0392dfc4b15c620a5f'/>
<id>bffc2c74408ff7163cea0c0392dfc4b15c620a5f</id>
<content type='text'>
New route /events/by-date shows events for a single day (default today)
with prev/next day navigation and a date picker, grouped by livehouse.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
New route /events/by-date shows events for a single day (default today)
with prev/next day navigation and a date picker, grouped by livehouse.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Playwright scraping for FLAT/Pitbar; web UI display-only</title>
<updated>2026-05-07T01:16:43+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-07T01:16:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=0cd5fb770ca9bd3f304d9556a4b33a4ad4f45e7e'/>
<id>0cd5fb770ca9bd3f304d9556a4b33a4ad4f45e7e</id>
<content type='text'>
- Install Playwright + Chromium; add shared browser singleton (playwright.server.ts)
- Rewrite flat-nishiogikubo scraper: Wix calendar via headless browser,
  month navigation via date picker, extracts .WPczEB/.ExCBIq selectors
- Rewrite pitbar-nishiogikubo scraper: freecalend.com via headless browser,
  parses cal-{member}-{year}-{month}-{day} cell IDs
- scraper-runner: close shared browser after each run with closeBrowser()
- Remove all scrape trigger buttons from web UI (events index, venues page);
  remove /api/scrape and /api/scrape-status from routes.ts

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Install Playwright + Chromium; add shared browser singleton (playwright.server.ts)
- Rewrite flat-nishiogikubo scraper: Wix calendar via headless browser,
  month navigation via date picker, extracts .WPczEB/.ExCBIq selectors
- Rewrite pitbar-nishiogikubo scraper: freecalend.com via headless browser,
  parses cal-{member}-{year}-{month}-{day} cell IDs
- scraper-runner: close shared browser after each run with closeBrowser()
- Remove all scrape trigger buttons from web UI (events index, venues page);
  remove /api/scrape and /api/scrape-status from routes.ts

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Async scraping, scrape_logs, and CLI</title>
<updated>2026-05-06T13:24:38+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-06T13:24:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=538fd636e25595d88a958344d285c0e7cf44e530'/>
<id>538fd636e25595d88a958344d285c0e7cf44e530</id>
<content type='text'>
Background scraping:
- POST /api/scrape returns 202 immediately with run_id; scraping runs async
- GET  /api/scrape-status?run_id=xxx polls for results per venue
- scrape_logs table: per-venue status (running/ok/error), events_saved, error, timestamps

CLI (npm run scrape):
- npm run scrape              — 全会場をスクレイプ、結果を色付きで出力
- npm run scrape liquid-room  — 特定会場のみ
- npm run scrape -- --list    — 登録済み会場一覧を表示
- エラー時は exit code 1 + エラーメッセージを dim 表示

Venues page:
- 最終スクレイプ日時・成否をインラインで表示
- 会場ごとの「更新」ボタンを追加

Bug fix: upsertEvent に description/optional fields のデフォルト値を設定し
better-sqlite3 の "Missing named parameter" エラーを解消

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Background scraping:
- POST /api/scrape returns 202 immediately with run_id; scraping runs async
- GET  /api/scrape-status?run_id=xxx polls for results per venue
- scrape_logs table: per-venue status (running/ok/error), events_saved, error, timestamps

CLI (npm run scrape):
- npm run scrape              — 全会場をスクレイプ、結果を色付きで出力
- npm run scrape liquid-room  — 特定会場のみ
- npm run scrape -- --list    — 登録済み会場一覧を表示
- エラー時は exit code 1 + エラーメッセージを dim 表示

Venues page:
- 最終スクレイプ日時・成否をインラインで表示
- 会場ごとの「更新」ボタンを追加

Bug fix: upsertEvent に description/optional fields のデフォルト値を設定し
better-sqlite3 の "Missing named parameter" エラーを解消

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add Tokyo livehouse event aggregator service</title>
<updated>2026-05-06T13:07:53+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-06T13:07:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=be55729482296663da8c96723bfd22080e6762c1'/>
<id>be55729482296663da8c96723bfd22080e6762c1</id>
<content type='text'>
Full-stack React Router v7 app that scrapes event listings from major
Tokyo live venues (Liquid Room, WWW/WWW X, Shibuya O-EAST, Shinjuku LOFT,
Club Quattro) and stores them in SQLite for browsing and search.

- Modular scraper architecture: add a new venue by dropping a file in
  app/scrapers/ and registering it in index.ts
- Routes: /events (filter by keyword/venue/date), /events/:id, /venues,
  GET /api/scrape
- EventCard shows artist, date/time, venue, ticket URL, and fee
- Post-scrape per-venue Markdown files generated to events/ (dev reference)
- /add-livehouse Claude Code skill defined in .claude/commands/

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Full-stack React Router v7 app that scrapes event listings from major
Tokyo live venues (Liquid Room, WWW/WWW X, Shibuya O-EAST, Shinjuku LOFT,
Club Quattro) and stores them in SQLite for browsing and search.

- Modular scraper architecture: add a new venue by dropping a file in
  app/scrapers/ and registering it in index.ts
- Routes: /events (filter by keyword/venue/date), /events/:id, /venues,
  GET /api/scrape
- EventCard shows artist, date/time, venue, ticket URL, and fee
- Post-scrape per-venue Markdown files generated to events/ (dev reference)
- /add-livehouse Claude Code skill defined in .claude/commands/

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Initial commit from create-react-router</title>
<updated>2026-05-06T12:56:00+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-06T12:56:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=014b29bc22b1c207a03dd560051ecdd5df63f0b1'/>
<id>014b29bc22b1c207a03dd560051ecdd5df63f0b1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
