This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
bin/setup- Full setup including database seeding via docker-composebin/dev- Start Rails server, SolidQueue jobs, and Vite (for CSS/JS)bin/lint- Run all formatters and linters (StandardRB, JS Standard, ERB lint, YAML prettier)bin/rails db:seed- Seed database with conference data manually
bin/rails test- Run the full test suite (uses Minitest)bin/rails test test/system/- Run system testsbin/rails test test/models/speaker_test.rb- Run specific test file
bundle exec standardrb --fix- Fix Ruby formatting issuesyarn format- Fix JavaScript formattingbundle exec erb_lint --lint-all --autocorrect- Fix ERB templatesyarn format:yml- Format YAML files in data/ directory
bin/jobs- Start SolidQueue job worker- Search reindexing happens automatically in test setup
- Event: Ruby conferences/meetups (belongs_to Organisation)
- Talk: Conference presentations (belongs_to Event, has_many SpeakerTalks)
- Speaker: Presenters (has_many SpeakerTalks, has social media fields)
- Organisation: Conference organizers (has_many Events)
- Topic: AI-extracted talk topics (has_many TalkTopics)
- WatchList: User-curated lists (belongs_to User, has_many WatchListTalks)
Conference data is stored in YAML files under /data/:
data/organisations.yml- Conference organizersdata/speakers.yml- Global speaker databasedata/{org-name}/playlists.yml- YouTube playlist mappingsdata/{org-name}/{event-name}/videos.yml- Individual talk datadata/{org-name}/{event-name}/schedule.yml- Event schedules
- Backend: Rails 8.0, SQLite, Solid Queue, Solid Cache
- Frontend: Vite, Tailwind CSS, daisyUI, Stimulus
- Search: MeiliSearch
- Admin: Avo admin panel at
/admin - Authentication: Custom session-based auth with GitHub OAuth
- Deployment: Kamal on Hetzner VPS
- View Components: Located in
app/components/, follows ViewComponent pattern - Clients: API clients for YouTube, GitHub, BlueSky in
app/clients/ - Search: Full-text search for Talks and Speakers using MeiliSearch
- Jobs: Background processing for video statistics, transcripts, AI summarization
- Analytics: Page view tracking with Ahoy
- Custom
Authenticatormodule provides role-based route constraints - Admin access required for Avo admin panel and Mission Control Jobs
- GitHub OAuth integration for user registration
- Session-based authentication (not JWT)
- Uses slug-based routing for SEO-friendly URLs
- Talks support multiple video providers (YouTube, Vimeo, etc.)
- AI-powered features: transcript enhancement, topic extraction, summarization
- Responsive design with mobile-first approach
- Canonical references to deduplicate speakers/events/topics
- Uses Minitest (not RSpec)
- VCR for API mocking
- Parallel test execution
- Search indexes are reset in test setup
- System tests use Capybara with Selenium
- YAML files define conference structure
- Rake tasks process video metadata
- Background jobs fetch additional data (transcripts, statistics)
- AI services enhance content (summaries, topics)