A small React + .NET + SQLite app for the ReadyTech technical assessment. The web page, REST API and database are already connected, and four employees are loaded. You'll build the features during the interview.
Please don't build the features in advance. Just check that everything below works, ideally on the same laptop and network you'll use on the day.
Please clone this repository rather than forking it, and keep your work private. Don't push your changes to GitHub or share them anywhere public, before or after the interview, so the exercise stays fair for other candidates.
| Tool | Version | Check with |
|---|---|---|
| .NET SDK | 10.0.100 or later | dotnet --version |
| Node.js | 22 or later | node --version |
| Git | any recent version | git --version |
| VS Code | latest | |
| C# Dev Kit extension | latest | VS Code suggests it when you open the folder |
| Your AI coding agent (for example Claude Code) | latest | it can edit files and run terminal commands |
Open a terminal in a folder of your choice, for example C:\dev or ~/dev, and run the commands below. Avoid OneDrive or other synced folders, which can lock files while the app is running. You don't need a GitHub account.
git clone https://github.com/rdytech/payroll-exercise-starter.git
cd payroll-exercise-starter
npm installThen open the payroll-exercise-starter folder in VS Code (File → Open Folder).
The clone gives you a clean starting point, so during the interview you and your agent can see exactly what changed with git diff or VS Code's Source Control view. Commit locally as often as you like, but don't push. npm install installs the web dependencies and restores the .NET packages. The first run of .NET on a new machine also does some one-off setup, which is one reason to do this before the day.
- Run the app: in a VS Code terminal, run
npm run dev, then open http://localhost:5173. You should see Alice, Bob, Charlie and Dana in the employee table. Leave it running. - Run the tests: in a second terminal, run
npm test. You should seePassed! - Failed: 0, Passed: 1. - Check your agent: start your agent in the project folder and ask it to "run
npm testand tell me the result". Confirm that it can run the command and edit a file, and that it doesn't need you to approve every command. In Claude Code, allownpmanddotnetcommands with/permissions, or pick the permission mode you're comfortable with. - Check a restart: stop the app with
Ctrl+C, then runnpm run dev:fresh. The app should start again with the same four employees.
If all four work, you're ready. Stop the app with Ctrl+C. If anything doesn't, let us know before the interview.
| Command | What it does |
|---|---|
npm run dev |
Starts the API (http://localhost:5080) and web page (http://localhost:5173). When you save, the API restarts (a few seconds) and the page reloads |
npm run dev:fresh |
Deletes the database, then starts the app. Use it after changing the data model |
npm test |
Runs all tests once. Fine to run while the app is running |
npm run test:api |
Runs only the .NET tests |
npm run db:reset |
Deletes the database (stop the app first) |
In VS Code you can also use Terminal → Run Task (dev: API + web, test: all) and Run and Debug → Debug API.
Tip: keep npm run dev running in its own terminal for the whole session, and let your agent use npm test. Running two copies of the app fights over the same ports.
client/ React + TypeScript (Vite)
server/
Payroll.slnx
Payroll.Api/ ASP.NET Core minimal API + EF Core (SQLite)
Payroll.Tests/ xUnit tests
scripts/ Helper scripts
AGENTS.md Project notes for AI agents (CLAUDE.md points to it)
no such tableorno such column: the database was created before the data model changed. Stop the app (Ctrl+C) and runnpm run dev:fresh.- "Port 5173 is already in use" or "address already in use: 5080": another copy of the app is still running, perhaps one your agent started. Close the other terminal, or end the leftover
node/dotnetprocess (in PowerShell:Get-Process node, dotnet | Stop-Process, which also closes other Node and .NET programs). - The employee table is empty, with "Could not load employees": the API isn't running, or it returned an error. Check the
[api]lines in thenpm run devoutput. - "The database is in use" from
db:reset: stopnpm run devfirst. - "Access is denied" when the API starts: some managed laptops block new
.exefiles. This project already runs the API throughdotnet Payroll.Api.dllto avoid it. Tell us if you still see it. - Something else: let us know before the interview and we'll help.