Conversation
- Created 422.html for handling "Unprocessable Entity" errors with a user-friendly message and SVG icon. - Created 500.html for handling "Internal Server Error" with a corresponding message and SVG icon. - Added icon.png and icon.svg for branding and visual representation on error pages. - Included a robots.txt file to manage web crawler access. - Added placeholder .keep files in various directories to ensure they are tracked by version control.
- Added package.json with dependencies for React, Inertia.js, Tailwind CSS, and Vite. - Created rails_helper.rb and spec_helper.rb for RSpec configuration. - Added TypeScript configuration files: tsconfig.app.json, tsconfig.node.json, and tsconfig.json. - Set up Vite configuration for React, Inertia.js, and Tailwind CSS integration.
This commit renames config/database.yml to config/database.yml.sample to keep environment-specific database settings out of version control. The sample file can still be copied and customized locally without committing sensitive or machine-specific values.
…reate database.yml for development and production
…ord recovery features
…n concern with tests
… and add corresponding tests
…esponding request specs
…sponding request specs
…onality and corresponding request specs
Feat/front - Authentication/Authorization/Frontend in Ruby side
… into wilbert-ribeiro-dev
…badges, and system tests
Feat/spreadsheet import
…ts, new icons, and manifest updates
…ole filter styling
Feat/layout
…and add entrypoint script
…tier for code formatting
… Compose setup for local development
…t development environment
… configuration in Docker setup
Docker Dev/Kamal Deployment
…pplications in project development
…challenges and repository contents
- Added `useLiveValidation` hook for real-time form validation in various forms. - Introduced validation rules for user registration and import forms. - Enhanced error handling and user feedback for form fields. - Refactored components to improve readability and maintainability. - Updated application layout for better structure and styling. - Removed unused Redis service from Docker configuration. - Improved CI configuration for better test coverage and performance. - Added system tests for client-side validation to ensure functionality.
…for Solid Queue integration
… removing outdated sections
Add .nvmrc (Node 26.8.2) and update Dockerfile/DEVELOPMENT_SETUP to match. Modernize GitHub Actions: upgrade actions/checkout, actions/setup-node and actions/upload-artifact to v7 and use .nvmrc for node-version in CI. Refresh CodeQL workflow to newer action versions, add required permissions, use a language matrix and build-mode none, and simplify steps. These changes align local, Docker and CI Node versions and bring workflows up-to-date for more reliable analysis and caching.
Introduce server-side rendering and related infra, safe client locale formatting, and JIT profiling tooling. Highlights: - Vite SSR: enable ssr build/output and SSR entry (app/javascript/ssr/ssr.ts, vite.config.ts, config/vite.json). - Runtime: keep node binary in final image and wire inertia_ssr plugin (Dockerfile, .dockerignore, config/puma.rb, config/initializers/inertia_rails.rb). Updated docs (DEVELOPMENT_SETUP.md). - Locale-safe hydration: useHydrated/useLocaleFormat hooks + LocalTime component and update pages/components to format numbers/dates without hydration mismatches. - JIT tooling: bin/jit-profile and lib/ruby_jit + jit_profile suite (benchmark, driver, probe, workloads, report) with specs and SSR test helpers. - Enable INERTIA_SSR and default RUBY_JIT=yjit in config/deploy.yml. Adds tests and system spec coverage for SSR and JIT helpers.
This change tidies up Ruby and spec formatting across the app, including quote style, multiline block layout, and metadata ordering in system specs. It also modernizes a few RSpec expectations to newer matcher idioms and keeps Action Cable and rate-limit configuration formatting consistent with the project’s linting rules.
This commit updates the RuboCop config for controller specs, normalizes multiline `rate_limit` blocks, and refactors several specs to use clearer assertions and explicit subject/setup patterns. It also renames the shared-data controller spec and splits the import flow/system examples to better isolate queued and completed behaviors.
Wilbert ribeiro Fullstack-Developer implementation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User Management App — Rails 8.1 + Inertia/React submission
Implements the full challenge: a responsive user-management app on Ruby 4.0.6 / Rails 8.1, with React 19 + Inertia.js via Vite Rails, Tailwind CSS 4, and the native Rails 8 stack — built-in authentication, Solid Queue for background imports, Solid Cable for live updates, Solid Cache. No Redis, no Devise.
Branch:
wilbert-ribeiro-dev→master. Built across six feature PRs (feat/front,feat/react-files,feat/admin-dashboard,feat/spreadsheet-import,feat/layout,feat/deployment); this PR merges the result.Use cases delivered
Admin
.csv/.xlsxspreadsheet; users are created by a background job.User
Visitor
Architecture
Domain logic is kept out of controllers, which stay thin and only render Inertia responses.
UserSearch(filter/sort/paginate),Dashboard::StatsApplicationPolicy/UserPolicy, plain objects, no gemRowSet→CsvRowSet/SpreadsheetRowSet,UserRow,UserImporter,ProgressBroadcasterDashboard::Broadcaster, with a suppression switch for bulk writesProcessImportJob,Dashboard::BroadcastJobNotable choices:
RowSet. CSV and XLSX both yield normalised hashes, soUserImporternever knows which it got. Adding a format is one subclass.DashboardBroadcasts.suppressed?silences the per-record callbacks and the job broadcasts once at the end.before_destroy+ an update validation), not only in the UI, so it holds for imports and the console too.email_addressis encrypted with Active Record deterministic encryption, keeping uniqueness and lookups working.useLiveValidation) that gives interactive feedback without duplicating server truth.Frontend
tsc -bin CI, noanyescape hatches in the page tree.useDashboardStreamand the import page subscribe to Action Cable channels for real-time state.useLocaleFormat/useHydratedkeep server- and client-rendered timestamps consistent so SSR does not mismatch on hydration.SSR (extra credit). Inertia SSR is wired end to end:
bin/vite devanswers Rails on/__inertia_ssrin development, andassets:precompileemitspublic/vite-ssr/ssr.js, kept alive in production by theinertia_ssrPuma plugin. It degrades to client rendering if neither is present, and is off in the test env by default. Covered by spec/system/server_side_rendering_spec.rb.Testing
parallel_tests.rubocop-rails-omakase+rubocop-rspec), Brakeman, bundler-audit,tsc, Prettier, and the parallel suite against Postgres 17, then uploads the coverage report. CodeQL runs separately.Deployment
docker compose build && docker compose upis the whole setup; the Solid Queue worker runs inside Puma so imports work with no extra process. Full walkthrough in DEVELOPMENT_SETUP.md.webandjobroles, kamal-proxy + Let's Encrypt, apostgres:17accessory, and secrets mapped through.kamal/secretswith no values committed.RAILS_ENV: production, DNS, secrets).Ruby 4 JIT profiling
bin/jit-profilebenchmarks this app's own hot paths (serialization, import parsing, row validation, a full page render) under the interpreter, YJIT, and Ruby 4's new ZJIT, each in a fresh process. Findings: YJIT is 1.53×–2.12× faster than the interpreter, ZJIT 1.07×–1.20×, so production runs YJIT — switchable with one env var (RUBY_JIT). Method and numbers in PERFORMANCE.md.AI disclosure
Per the AI policy: GitHub Copilot for inline completion and Claude Opus 5 for planning, debugging, documentation, and PR reviews. Scope detailed in AI_DISCLOSURE.md.
Reviewing locally
App at http://localhost:3000 — admin
admin@umanni.test/password123, plus 25 seeded members.🤖 Generated with Claude Code