| Age | Commit message (Collapse) | Author | Lines |
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
+09:00 midnight をパースすると内部では前日15:00UTCになり、
getDay()がシステムタイムゾーン(UTC)で前日の曜日を返していた。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
新宿MARZ翌月スケジュールのHTTP 500がスクレイパー全体を失敗させ、
set -e によりentrypointがcron起動前に終了→再起動ループを引き起こしていた。
- marz-shinjuku: 404/500は未掲載扱いで空配列を返すよう変更
- scraper-entrypoint.sh: set -e を削除し初回スクレイプ失敗でもcronを起動
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
fad-yokohama: replace innerHTML manipulation with Cheerio .clone().text()
so that HTML entities ( etc.) are decoded before storing titles.
pitbar-nishiogikubo: strip non-numeric suffix from day part of element ID
to handle _clone-suffixed IDs that freecalend.com generates after JS renders.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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 <noreply@anthropic.com>
|
|
Serve external event images through /api/image?url=<encoded> 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 <noreply@anthropic.com>
|
|
Port 25 outbound unblocked: send-recap.ts now routes through the
mail container (Postfix + OpenDKIM) for direct MX delivery with
DKIM signing. Removes inline MX lookup logic added in the previous
workaround. Also adds Message-ID header (required by Gmail) and
updates default RECAP_TO to mazideyabai@gmail.com.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
cron runs with a minimal PATH that excludes /usr/local/bin, causing
'node: not found' errors for both scrape and recap jobs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
isoDate() already adds JST_MS; calling it with nowJST() (which also
adds JST_MS) shifted the date +18h, showing tomorrow's date instead
of today's.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Sends an HTML digest of the next 7 days' events to
efemeraladdress+golive@gmail.com at 08:00 JST daily (23:00 UTC cron).
Adds scraper to the web Docker network so it can reach mail:25.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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 <noreply@anthropic.com>
|
|
Both venues are RinkyDink-affiliated live houses in Hachioji.
WordPress + My Calendar plugin; parses mc-list HTML for date, title,
artist, OPEN/START times, and price across 3 months.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
/api/openapi.json
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Extend 8 scrapers (liquid-room, shibuya-o, club-quattro, meets-otsuka,
nishieifuku-jam, fever-shindaita, fad-yokohama, and new duo-music-exchange)
to fetch 3 calendar months instead of 1-2, covering the full 65-day window
- Add duo MUSIC EXCHANGE scraper (渋谷, ~700 cap, /schedule/YYYY/index_YYYY-MM.html)
- Add npm test: Node.js built-in test runner verifies each scraper fetches
all required month URLs via mocked fetch (10 tests, no extra deps)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- 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 <noreply@anthropic.com>
|
|
|
|
|
|
- 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 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Without the lock file, npm install tsx resolved @react-router/dev to its
latest version (7.15.0), which has a peer dependency conflict with the
installed react-router@7.3.0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Add prod-deps stage to run `npm ci --omit=dev` once (was twice)
- Add playwright-base stage to install Chromium once (was twice)
- Both app and scraper stages inherit from playwright-base
- Add BuildKit cache mounts for npm to accelerate repeated builds
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- 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 <noreply@anthropic.com>
|
|
navey floor (赤坂): 29件取得、Cheerio + WordPress カスタムCMS
下北沢ERA: 22件取得、HTTP only (TLS証明書無効のため)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 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 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Rewrote selectors to match actual HTML structure after inspecting each site:
- LIQUID ROOM: article selector, date extracted from URL (_YYYYMMDD suffix)
- WWW/WWW X: article.column selector, month from li.month nav, day rollover detection
- 新宿 LOFT: section.block_schedule_list links, full date from time div.year/month/day
- CLUB QUATTRO: li[data-event-date] with ISO date attribute, jp-label time parsing
Result: 0件 → LIQUID ROOM 25件 / WWW 48件 / LOFT 13件 / QUATTRO 24件
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
STEP, mod
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 <noreply@anthropic.com>
|