|
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
| 4 | + |
| 5 | +## Project Overview |
| 6 | + |
| 7 | +VanRuby is the website for Vancouver's Ruby community (vanruby.org), built with Jekyll static site generator. The site showcases meetup events, sponsors, and community information. |
| 8 | + |
| 9 | +## Development Commands |
| 10 | + |
| 11 | +### Local Development |
| 12 | +```bash |
| 13 | +bundle install # Install dependencies |
| 14 | +bundle exec jekyll serve --watch # Start development server at http://localhost:4000 |
| 15 | +``` |
| 16 | + |
| 17 | +### Linting |
| 18 | +```bash |
| 19 | +bundle exec rubocop # Run RuboCop linter |
| 20 | +``` |
| 21 | + |
| 22 | +## Architecture |
| 23 | + |
| 24 | +### Jekyll Static Site |
| 25 | +- Uses **rdiscount** markdown processor with smart extensions |
| 26 | +- Layouts in `_layouts/`: `layout.html` (main), `post.html` (blog posts) |
| 27 | +- Data files in `_data/`: `companies.csv`, `meetups.yml` (symlink to `meetup/meetups.yml`) |
| 28 | +- Generated site output in `_site/` (excluded from git) |
| 29 | + |
| 30 | +### Meetup Data Management |
| 31 | +The site maintains historical meetup data fetched from Meetup.com API: |
| 32 | + |
| 33 | +1. **fetch_meetups.rb** - Fetches events and comments from Meetup.com API |
| 34 | + - Uses `bundler/inline` with `meetup_client` gem |
| 35 | + - Requires `MEETUP_API_KEY` environment variable |
| 36 | + - Fetches from 'vancouver-ruby' group (ID: 573925) |
| 37 | + - Outputs to `raw_meetups.yml` |
| 38 | + |
| 39 | +2. **transform_meetups.rb** - Processes raw data into clean format |
| 40 | + - Uses `bundler/inline` with `virtus` gem |
| 41 | + - Reads from `meetups.yaml` (note: expects `.yaml` not `.yml`) |
| 42 | + - Extracts slides (SpeakerDeck, SlideShare, Gist) and videos (YouTube) |
| 43 | + - Filters out "Developer Night" and "Hack Night" events |
| 44 | + - Outputs to `clean_meetups.yml` |
| 45 | + |
| 46 | +3. **_data/meetups.yml** - Symlink to `meetup/meetups.yml` for Jekyll consumption |
| 47 | + |
| 48 | +### Frontend Stack |
| 49 | +- Bootstrap 5 for styling |
| 50 | +- Custom SVG logos for sponsors (Clio, NorthEast, GitHub, Zayzoon) |
| 51 | +- Responsive design with mobile-first approach |
| 52 | +- Luma calendar integration for upcoming events |
| 53 | + |
| 54 | +### Key Pages |
| 55 | +- `index.html` - Homepage with hero, sponsors, stats, and event calendar |
| 56 | +- `meetups.html` - Historical meetup listings |
| 57 | +- `companies.html` - Companies using Ruby in Vancouver |
| 58 | +- `2014-heroes.html` - Historical tribute page |
| 59 | + |
| 60 | +## Ruby Version |
| 61 | +Ruby 3.4.6 (see `.ruby-version`) |
| 62 | + |
| 63 | +## Git Commit Standards |
| 64 | + |
| 65 | +Follow the Conventional Commits specification for all commit messages. |
| 66 | + |
| 67 | +**IMPORTANT**: Do not include AI tools (Claude, ChatGPT, etc.) as co-authors or mention them in commit messages. All commits should be attributed to human authors only. |
| 68 | + |
| 69 | +### Format |
| 70 | +``` |
| 71 | +<type>(<scope>): <subject> |
| 72 | +
|
| 73 | +[optional body] |
| 74 | +
|
| 75 | +[optional footer] |
| 76 | +``` |
| 77 | + |
| 78 | +### Types |
| 79 | +- **feat**: A new feature |
| 80 | +- **fix**: A bug fix |
| 81 | +- **docs**: Documentation only changes |
| 82 | +- **style**: Changes that do not affect the meaning of the code (white-space, formatting, etc) |
| 83 | +- **refactor**: A code change that neither fixes a bug nor adds a feature |
| 84 | +- **perf**: A code change that improves performance |
| 85 | +- **test**: Adding missing tests or correcting existing tests |
| 86 | +- **build**: Changes that affect the build system or external dependencies |
| 87 | +- **ci**: Changes to CI configuration files and scripts |
| 88 | +- **chore**: Other changes that don't modify src or test files |
| 89 | + |
| 90 | +### Scopes (optional) |
| 91 | +- `meetups`: Meetup data management |
| 92 | +- `sponsors`: Sponsor-related changes |
| 93 | +- `content`: Website content updates |
| 94 | +- `deps`: Dependency updates |
| 95 | + |
| 96 | +### Examples |
| 97 | +``` |
| 98 | +feat(meetups): add video extraction from Vimeo |
| 99 | +fix(sponsors): correct logo alignment on mobile |
| 100 | +docs: update README with deployment instructions |
| 101 | +chore(deps): update jekyll to 4.3.0 |
| 102 | +``` |
| 103 | + |
| 104 | +## Important Notes |
| 105 | +- The transform script expects `meetups.yaml` but the actual file is `meetups.yml` - this inconsistency may cause errors |
| 106 | +- Meetup data scripts use inline Gemfiles, separate from main project dependencies |
| 107 | +- Sponsor logos are SVG files in `images/sponsors/` |
0 commit comments