<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tokyo-livehouse-events/app/routes, 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>Fix image proxy 400 for application/octet-stream responses</title>
<updated>2026-06-17T13:41:55+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-17T13:41:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=243d222c35f4607ac13a400e827333f44a0f44c7'/>
<id>243d222c35f4607ac13a400e827333f44a0f44c7</id>
<content type='text'>
GCS-backed Active Storage (omatsuri.tech, used by rinky.info venues)
returns application/octet-stream instead of image/*. Detect actual image
type from magic bytes (JPEG/PNG/GIF/WebP) and serve with correct
Content-Type. Also add X-Content-Type-Options: nosniff.

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>
GCS-backed Active Storage (omatsuri.tech, used by rinky.info venues)
returns application/octet-stream instead of image/*. Detect actual image
type from magic bytes (JPEG/PNG/GIF/WebP) and serve with correct
Content-Type. Also add X-Content-Type-Options: nosniff.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add image proxy endpoint to avoid mixed content issues</title>
<updated>2026-06-17T13:27:47+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-17T13:27:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=5f653a4c9f7c76d461ee4377fb4e025771cff872'/>
<id>5f653a4c9f7c76d461ee4377fb4e025771cff872</id>
<content type='text'>
Serve external event images through /api/image?url=&lt;encoded&gt; so HTTP
image URLs from venue sites are fetched server-side and delivered over
HTTPS. Validates Content-Type is image/*, blocks private IPs (SSRF),
and caches responses in memory (24h TTL, 200-entry LRU).

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>
Serve external event images through /api/image?url=&lt;encoded&gt; so HTTP
image URLs from venue sites are fetched server-side and delivered over
HTTPS. Validates Content-Type is image/*, blocks private IPs (SSRF),
and caches responses in memory (24h TTL, 200-entry LRU).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add filters to date view (keyword, venue, area, capacity)</title>
<updated>2026-05-22T01:31:14+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-05-22T01:31:14+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=3a961122bdf64cf72cf1b3770e9d71865a3aac52'/>
<id>3a961122bdf64cf72cf1b3770e9d71865a3aac52</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 venue visibility toggles with localStorage persistence</title>
<updated>2026-05-19T13:32:14+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-05-19T13:32:14+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=7c5860ce57a334b7ab4a501de78f1a7f41c8cdcc'/>
<id>7c5860ce57a334b7ab4a501de78f1a7f41c8cdcc</id>
<content type='text'>
Each venue on /venues can be toggled on/off; state persists in
localStorage. Hidden venues are filtered out of the event list,
with a notice linking back to the venues page to manage the setting.

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>
Each venue on /venues can be toggled on/off; state persists in
localStorage. Hidden venues are filtered out of the event list,
with a notice linking back to the venues page to manage the setting.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<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>Remove unused template files home.tsx and welcome.tsx</title>
<updated>2026-05-14T14:07:38+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-14T14:07:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=ca71f49b9cccb8ad83170b123eeaf9a6af7fc684'/>
<id>ca71f49b9cccb8ad83170b123eeaf9a6af7fc684</id>
<content type='text'>
Routes not registered in routes.ts caused a persistent tsc error
on the auto-generated +types/home module.

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>
Routes not registered in routes.ts caused a persistent tsc error
on the auto-generated +types/home module.

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>Fix all TODO bugs and implement feature additions</title>
<updated>2026-05-07T23:38:32+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-07T23:38:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=1246c8382c8734dc705f96bf9fa6b5efdd3819bc'/>
<id>1246c8382c8734dc705f96bf9fa6b5efdd3819bc</id>
<content type='text'>
- SCRAPE_TARGETS.md: add 5 missing venues (nine-spices, nishieifuku-jam,
  fever-shindaita, moon-step-nakano, mod-shibasaki)
- Navigation: add 日付別 link to venues.tsx and events.$id.tsx headers
- venues.tsx: add official site external links per venue card
- ScrapeButton: new component with useFetcher-based trigger + 2s polling
  progress UI showing per-venue status and event count
- venues.tsx / events._index.tsx: wire in ScrapeButton
- FilterBar + db.server.ts: add area filter derived from venues, threaded
  through queryEvents

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>
- SCRAPE_TARGETS.md: add 5 missing venues (nine-spices, nishieifuku-jam,
  fever-shindaita, moon-step-nakano, mod-shibasaki)
- Navigation: add 日付別 link to venues.tsx and events.$id.tsx headers
- venues.tsx: add official site external links per venue card
- ScrapeButton: new component with useFetcher-based trigger + 2s polling
  progress UI showing per-venue status and event count
- venues.tsx / events._index.tsx: wire in ScrapeButton
- FilterBar + db.server.ts: add area filter derived from venues, threaded
  through queryEvents

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add capacity filter for live houses (~100 / 100~300 / 300~)</title>
<updated>2026-05-07T18:50:45+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-07T18:50:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=ae6f6f7f74fd4df7704f963d2f1fdd1f3100668f'/>
<id>ae6f6f7f74fd4df7704f963d2f1fdd1f3100668f</id>
<content type='text'>
- Add capacity field to VenueMeta and all 17 scrapers (researched values)
- Add capacity column to venues table with auto-migration for existing DBs
- Add capacity_range filter to queryEvents (small/medium/large)
- Add capacity selector to FilterBar UI

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>
- Add capacity field to VenueMeta and all 17 scrapers (researched values)
- Add capacity column to venues table with auto-migration for existing DBs
- Add capacity_range filter to queryEvents (small/medium/large)
- Add capacity selector to FilterBar UI

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix mobile layout for iPhone-sized viewports</title>
<updated>2026-05-07T13:51:40+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-07T13:51:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=747e0007e0f1fe5cae9d9645d8b9c334f3698645'/>
<id>747e0007e0f1fe5cae9d9645d8b9c334f3698645</id>
<content type='text'>
- Stack header vertically on mobile (flex-col sm:flex-row) to prevent logo+nav overflow
- Hide venue and price columns in list/row views on mobile to give title room
- Shrink date/time columns on mobile (w-24 sm:w-32, w-20 sm:w-28)
- Make keyword filter input full-width on mobile (w-full sm:w-52)

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>
- Stack header vertically on mobile (flex-col sm:flex-row) to prevent logo+nav overflow
- Hide venue and price columns in list/row views on mobile to give title room
- Shrink date/time columns on mobile (w-24 sm:w-32, w-20 sm:w-28)
- Make keyword filter input full-width on mobile (w-full sm:w-52)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
