.vbw-planning/codebase/STACK.md
| Layer | Technology | Version |
|---|---|---|
| Language | Ruby | >= 3.4.0 (CI uses 3.4.4) |
| Framework | Rails | >= 8.0.3, < 9.0 (locked at 8.1.1) |
| Database | PostgreSQL | 15 (CI service image) |
| Background Jobs | Solid Queue | >= 0.3, < 3.0 (locked at 1.2.4) |
| WebSocket/Realtime | Solid Cable | >= 3.0, < 4.0 (locked at 3.0.12) |
| Frontend Interactivity | Turbo Rails | ~> 2.0 (locked at 2.0.20) |
| JS Framework | Stimulus (Hotwired) | ^3.2.2 |
| CSS Framework | Tailwind CSS | ^3.4.10 |
| Web Server | Puma | 7.1.0 |
| Asset Pipeline | Propshaft | 1.3.1 |
Mountable Rails 8 Engine gem (source_monitor.gemspec), distributed as a RubyGem. The engine uses isolate_namespace SourceMonitor and provides its own models, controllers, views, jobs, and frontend assets.
| Purpose | Gem | Version |
|---|---|---|
| RSS/Atom/JSON feed parsing | Feedjira | >= 3.2, < 5.0 (locked 4.0.1) |
| HTTP client | Faraday | ~> 2.9 (locked 2.14.0) |
| HTTP retry middleware | faraday-retry | ~> 2.2 |
| HTTP redirect following | faraday-follow_redirects | ~> 0.4 |
| HTTP gzip compression | faraday-gzip | ~> 3.0 |
| Purpose | Gem | Version |
|---|---|---|
| HTML parsing (fast, C-based) | Nokolexbor | ~> 0.5 (locked 0.6.2) |
| HTML parsing (standard) | Nokogiri | 1.18.10 (transitive) |
| Article content extraction | ruby-readability | ~> 0.7 |
| Purpose | Gem | Version |
|---|---|---|
| Search/filter forms | Ransack | ~> 4.2 (locked 4.4.1) |
| Tool | Purpose | Version |
|---|---|---|
| esbuild | JS bundling | ^0.23.0 |
| Tailwind CSS | Utility-first CSS | ^3.4.10 |
| PostCSS | CSS processing | ^8.4.45 |
| Autoprefixer | CSS vendor prefixes | ^10.4.20 |
| ESLint | JS linting | ^9.11.0 |
| Stylelint | CSS linting | ^16.8.0 |
Build orchestration via package.json scripts:
npm run build -- builds both CSS (tailwindcss) and JS (esbuild)cssbundling-rails (jsbundling-rails (| Package | Purpose |
|---|---|
@hotwired/stimulus ^3.2.2 | Stimulus controllers for UI interactions |
stimulus-use ^0.52.0 | Stimulus composable behaviors library |
| Tool | Purpose |
|---|---|
| Minitest | Test framework (Rails default) |
| Capybara | System/integration test driver |
| Selenium WebDriver | Browser automation for system tests |
| WebMock | HTTP request stubbing |
| VCR | HTTP interaction recording/playback |
| SimpleCov | Code coverage (branch coverage enabled) |
| test-prof | Test profiling (TagProf, EventProf) |
| StackProf | Sampling profiler for performance analysis |
| Tool | Purpose |
|---|---|
| RuboCop (rails-omakase) | Ruby/Rails linting (omakase style) |
| Brakeman | Static security analysis |
| ESLint | JavaScript linting |
| Stylelint | CSS linting |
lint, security, test, release_verification, profiling (scheduled nightly)bin/check-diff-coveragebin/check-test-prof-metricsSOURCE_MONITOR_TEST_WORKERS)