Important
This repository was created for LiKHA-IT's technical test and does not guarantee functionality.
Welcome to the technical assessment phase of our recruitment process. This take-home examination is designed to evaluate your coding standards, problem-solving skills, and ability to navigate an existing codebase.
- Duration: You have 7 calendar days to complete this assessment, starting from the time the invitation email was received.
- Support: If you have any questions regarding the requirements or encounter issues with the repository, please reply directly to this email (careers@likhait.com).
- Forking: Please fork this repository to your personal GitHub account.
- Visibility: Ensure your forked repository is set to Public so our engineering team can review your code submission.
Upon setting up the repository, locate the TICKETS.md file in the root directory. This file contains the detailed specifications for the required tasks:
- 1 Feature Implementation
- 1 Bug Fix
We expect you to follow best practices regarding version control and documentation:
- Branching: Create a dedicated branch for each specific task. Do not commit all changes to the main branch directly. (NOTE: please double check your work and make sure all tests pass)
- Pull Requests: Open a separate Pull Request (PR) for each task.
- Documentation: We place high value on communication. Ensure your PR descriptions are thorough, explaining your logic, architectural decisions, and how you solved the specific problem.
We will review your submission based on the following:
- Solution Quality: Functionality and robustness of the code.
- Code Quality: Cleanliness, readability, and adherence to standard patterns.
- Documentation: The clarity and detail of your Pull Request descriptions.
- Going Above and Beyond: You are encouraged to review the entire codebase. If you identify architectural flaws, security risks, or areas for optimization, feel free to open additional PRs or include a critique in your notes. This initiative is highly valued.
Once you have completed the assessment, please reply to this email (careers@likhait.com) with the direct links to your Pull Requests using the format below:
TASK 1: [Link to Feature PR]
TASK 2: [Link to Bug Fix PR]
BONUS/CRITIQUE: [Link to Optional/Refactoring PR]
Good luck, and we look forward to reviewing your code.
A full-stack expense tracking application with calendar-based visualization for managing personal finances.
- Overview
- Core Concepts
- Technology Stack
- Quick Start
- Running Tests
- Database Operations
- Environment Configuration
- Contributing
- Technical Assessment
The Expense System is a modern web application designed to help users track and visualize their expenses through an intuitive calendar interface. Built with a React frontend and Rails API backend, it provides a seamless experience for recording daily expenses, categorizing spending, and understanding financial patterns.
Expenses are displayed in a monthly calendar grid, making it easy to see spending patterns across days and weeks.
All expenses are organized into 10 predefined categories (Food, Transport, Housing, Entertainment, Healthcare, Education, Shopping, Work, Utilities, Other), each with visual emoji indicators.
The application provides instant feedback when creating, updating, or deleting expenses without page reloads.
Clean separation between frontend and backend enables scalability and maintainability.
- React 18.2 with TypeScript 5.3 for type-safe UI development
- Vite 5.1 as the modern build tool and development server
- Custom "Vibes" component library for consistent design
- Ruby 3.3.7 with Rails 7.2 in API-only mode
- MySQL 8.0 for relational data storage
- RSpec for comprehensive testing
- Docker Compose for containerized development and deployment
- Puma web server for handling concurrent requests
- CORS configured for frontend-backend communication
# Clone and navigate to project
cd expense_system_rails
# Start all services
docker compose up
# Access the application
# Frontend: http://localhost:5173
# Backend API: http://localhost:3000/apicd backend
bundle install
rails db:create db:migrate db:seed
rails server # Starts on port 3000cd frontend
npm install
npm run dev # Starts on port 5173cd backend
bundle exec rspec
bundle exec rubocopdocker compose exec backend rails db:migrate
docker compose exec backend rails db:reset
docker compose exec backend rails consolecd backend
rails db:migrate
rails db:reset
rails consoleDATABASE_HOST=your-db-host
DATABASE_USERNAME=your-db-user
DATABASE_PASSWORD=your-password
RAILS_ENV=production
SECRET_KEY_BASE=$(rails secret)- Follow Rails and React best practices
- Maintain TypeScript type safety
- Write tests for new features
- Run code quality tools:
- Backend:
bundle exec rubocop
- Backend:
Built with Ruby on Rails + React + TypeScript