Back to Source Monitor

Tech Stack

.vbw-planning/codebase/STACK.md

0.13.03.5 KB
Original Source

Tech Stack

Core Platform

LayerTechnologyVersion
LanguageRuby>= 3.4.0 (CI uses 3.4.4)
FrameworkRails>= 8.0.3, < 9.0 (locked at 8.1.1)
DatabasePostgreSQL15 (CI service image)
Background JobsSolid Queue>= 0.3, < 3.0 (locked at 1.2.4)
WebSocket/RealtimeSolid Cable>= 3.0, < 4.0 (locked at 3.0.12)
Frontend InteractivityTurbo Rails~> 2.0 (locked at 2.0.20)
JS FrameworkStimulus (Hotwired)^3.2.2
CSS FrameworkTailwind CSS^3.4.10
Web ServerPuma7.1.0
Asset PipelinePropshaft1.3.1

Project Type

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.

  • Version: 0.2.1
  • Required Ruby: >= 3.4.0
  • License: MIT

Feed Parsing & HTTP

PurposeGemVersion
RSS/Atom/JSON feed parsingFeedjira>= 3.2, < 5.0 (locked 4.0.1)
HTTP clientFaraday~> 2.9 (locked 2.14.0)
HTTP retry middlewarefaraday-retry~> 2.2
HTTP redirect followingfaraday-follow_redirects~> 0.4
HTTP gzip compressionfaraday-gzip~> 3.0

Content Scraping & Parsing

PurposeGemVersion
HTML parsing (fast, C-based)Nokolexbor~> 0.5 (locked 0.6.2)
HTML parsing (standard)Nokogiri1.18.10 (transitive)
Article content extractionruby-readability~> 0.7

Search & Querying

PurposeGemVersion
Search/filter formsRansack~> 4.2 (locked 4.4.1)

Frontend Build Pipeline

ToolPurposeVersion
esbuildJS bundling^0.23.0
Tailwind CSSUtility-first CSS^3.4.10
PostCSSCSS processing^8.4.45
AutoprefixerCSS vendor prefixes^10.4.20
ESLintJS linting^9.11.0
StylelintCSS linting^16.8.0

Build orchestration via package.json scripts:

  • npm run build -- builds both CSS (tailwindcss) and JS (esbuild)
  • cssbundling-rails (> 1.4) and jsbundling-rails (> 1.3) bridge npm builds into the Rails asset pipeline

JS Dependencies (Runtime)

PackagePurpose
@hotwired/stimulus ^3.2.2Stimulus controllers for UI interactions
stimulus-use ^0.52.0Stimulus composable behaviors library

Testing Stack

ToolPurpose
MinitestTest framework (Rails default)
CapybaraSystem/integration test driver
Selenium WebDriverBrowser automation for system tests
WebMockHTTP request stubbing
VCRHTTP interaction recording/playback
SimpleCovCode coverage (branch coverage enabled)
test-profTest profiling (TagProf, EventProf)
StackProfSampling profiler for performance analysis

Code Quality & Security

ToolPurpose
RuboCop (rails-omakase)Ruby/Rails linting (omakase style)
BrakemanStatic security analysis
ESLintJavaScript linting
StylelintCSS linting

CI/CD

  • GitHub Actions with 5 jobs: lint, security, test, release_verification, profiling (scheduled nightly)
  • Ruby 3.4.4, Node 20
  • PostgreSQL 15 as service container
  • Diff coverage enforcement via custom bin/check-diff-coverage
  • Test profiling guardrails via bin/check-test-prof-metrics
  • Parallel test execution (configurable via SOURCE_MONITOR_TEST_WORKERS)