summaryrefslogtreecommitdiff
path: root/app/lib
AgeCommit message (Collapse)AuthorLines
7 daysAdd calendar export (Google/ICS) and extend scrape window to 65 daysyyamashita-1/+1
- 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>
10 daysFix all TODO bugs and implement feature additionsyyamashita-1/+6
- 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>
10 daysAdd capacity filter for live houses (~100 / 100~300 / 300~)yyamashita-10/+30
- 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>
10 daysAdd Docker + Hetzner deploy setupyyamashita-1/+3
11 daysPlaywright scraping for FLAT/Pitbar; web UI display-onlyyyamashita-0/+22
- 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 <noreply@anthropic.com>
11 daysAsync scraping, scrape_logs, and CLIyyamashita-38/+145
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 <noreply@anthropic.com>
11 daysLimit scrape window and default event list to ~1 monthyyamashita-2/+26
Scraper runner now filters events to today + 35 days before upserting, so the DB only holds the upcoming month of events. Event list loader defaults date_from/date_to to the same window when no query params are set, and passes the values down to FilterBar so the date inputs are pre-filled on first load. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
11 daysAdd Tokyo livehouse event aggregator serviceyyamashita-0/+363
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 <noreply@anthropic.com>