- Check this readme.md
- Create a branch to develop your task
- Push to remote in 1 week (date will be checked from branch creation/assigned date)
- Target Stack: Ruby 4.0+ and Rails 8.0+
- Database: PostgreSQL, MySQL, or SQLite (configured for production-ready WAL mode)
- Write robust unit, integration, and system tests using parallel testing features
- Deliver with a working multi-stage Dockerfile utilizing Thruster/Kamal-ready defaults
- Show senior best practices (e.g., proper design patterns, solid architecture, strict linter configuration)
At Umanni, we value efficiency and the modern developer workflow. You are allowed to use AI coding assistants (ChatGPT, Claude, Copilot, etc.) during this test. However, transparency is part of our culture. If you use any LLM to generate, refactor, or structure your code, you must explicitly state which model you used in a dedicated section at the top of your submission's README.md. Failing to disclose AI usage while using it will invalidate your submission.
Here we'll try to simulate a "real sprint" that you'll probably be assigned while working as Fullstack at Umanni.
- Create a modern, responsive application to manage users.
- A user must have:
- full_name
- avatar_image (ActiveStorage file upload or remote URL)
- role (admin/no-admin)
- As an Admin, I must be able to access a User Admin Dashboard.
- As an Admin, I must be able to see on the Dashboard (updated via real-time streams/frontend state):
- Total number of Users
- Total number of Users grouped by Role
- As an Admin, I must be redirected to the User Admin Dashboard after login.
- As an Admin, I must be able to list, create, edit, and delete Users.
- As an Admin, I must be able to toggle the User Role.
- As an Admin, I must be able to import a Spreadsheet (.csv/.xlsx) into the system in order to asynchronously create new Users.
- As an Admin, I must be able to see the live progress/status of the spreadsheet import process.
- As a User, I must be redirected to my Profile after login.
- As a User, I must be able only to see my info, edit, and delete my profile.
- As a Visitor, I can register myself as a normal User.
- Your deadline is 1 week after accepting this test.
These are mandatory. Failing any of them will invalidate your submission.
- Documentation: You must write down a detailed README.md in English explaining how to build, seed, and run your app, including your AI disclosure if applicable.
- Frontend Stack: You have two choices for the modern monolithic approach:
- Option A (Classic Modern): Hotwire (Turbo 8+ / Stimulus) with smooth, reactive UI states.
- Option B (Modern SPA Monolith): React integrated via Inertia.js (using Vite or the official Rails 8 asset pipeline integration).
- Styling: The Frontend must use a modern CSS framework (Tailwind CSS, Bootstrap, or any utility-first library). Keep it beautiful, responsive, and clean.
- Real-time & Background Processing: You must leverage native Rails 8 tools (Solid Cable for live dashboard counters/import bars and Solid Queue for the background import processing). No Redis installation should be required.
- Authentication: You must use the new built-in Rails 8 Authentication system (
bin/rails generate authentication), customized to fit the role constraints. Avoid legacy heavy gems (like Devise). - Git Hygiene: Clean git history with atomic commits, proper descriptions, and a Pull Request-based workflow.
- Modern asset management using Propshaft or Vite Rails (if choosing Inertia/React).
- .gitignore, .dockerignore configured correctly.
- Clean application configuration using Rails credentials.
- Comprehensive cross-browser support considerations.
- Strict form validations (Frontend interactive feedback + Backend structural validation).
- Parallel testing with at least 90% coverage (using Minitest, RSpec, and Playwright/Capybara for frontend integration).
- Delivery via a clean Kamal 2 deployment configuration (
deploy.yml). - Advanced SSR (Server-Side Rendering) setup if using Inertia.js + React.
- Use of Thruster as a zero-config proxy for asset caching and compression in Docker.
- Advanced performance profiling leveraging Ruby 4's ZJIT compilation optimizations.
- Code's Semantics, Cleanness, and Maintainability (Senior-level object-oriented design and clean React/Stimulus component lifecycle).
- Modern Rails 8 idiom usage (e.g., Strict structural params handling, Solid architecture separation).
- Basic Security testing against traditional vectors (SQLi, XSS, XSRF) and proper encryption of sensitive DB columns where applicable.