Tangy is building your next step
Shaping the lesson around what you want to make.
Tangy is building your next step
Shaping the lesson around what you want to make.
Computer Science
Leo, you already have a basic HTML site and six lessons of a React full-stack app behind you. This course uses that existing app—not a beginner reset—to help you read the real Hermes repository and documentation, understand how the agent works, and ship a practical workflow tool you can demo in a FAANG-oriented portfolio.
Build it yourself, get guided when you are stuck, and leave with proof you can actually show.
Reconnect With Your Existing Full-Stack App
3 lessonsTurn the current React project into a dependable starting point before introducing Hermes. You will use familiar components and state while repairing the weak API, Express, TypeScript, and styling foundations that the later agent workflow depends on.
Read Hermes From the Real Source
4 lessonsBuild an accurate mental model from the Hermes repository and documentation instead of guessing how an agent works. The result is an in-app reference view that anchors each later workflow to an actual Hermes concept, interface, or example.
Design Workflows That Solve Real Tasks
5 lessonsMove from understanding Hermes to using it deliberately. You will design small workflows for learning and software work, define their inputs and outputs, and make the project show why a workflow is better than an unstructured prompt.
Connect the Workbench to Hermes
5 lessonsIntroduce the real Hermes interaction only after the project has a typed workflow model, validation, and a visible UI. You will adapt the repository's documented integration pattern and make one useful workflow run end to end.
Make Agent Workflows Trustworthy
4 lessonsTurn a working demo into a tool someone could confidently use. You will add evaluation, traceability, safe boundaries, and focused tests around the workflow behavior without introducing a second heavy framework or runtime.
Package the Project as a Portfolio Demo
3 lessonsFinish with a clean, reproducible project that shows engineering judgment as well as an agent feature. The app stays runnable from the repository, and the documentation makes the Hermes-based workflow easy to inspect and evaluate.
Public lesson
Leo, today you will understand the project you already have before adding another feature. By the end, you should be able to answer:
Do not reorganize files yet. First, make the existing system legible.
Tasks
From the repository root, run:
git status
git log -1 --oneline
git status
git log -1 --oneline
If git status shows changes you made earlier, do not delete them. Note them in your scratch notes so you know which files belong to the current baseline.
Tasks
Now list the project files without opening dependencies:
find . -maxdepth 3 \
-not -path './node_modules*' \
-not -path './.git*' \
-type f | sort
find . -maxdepth 3 \
-not -path './node_modules*' \
-not -path './.git*' \
-type f | sort
If find is unavailable, use your editor’s file tree instead.
Tasks
Check: You should be able to identify whether this is:
client and server folders,Write that structure down in one sentence.
Tasks
Find every package.json:
find . -name package.json -not -path './node_modules/*' -print
find . -name package.json -not -path './node_modules/*' -print
Tasks
Open each relevant file and inspect its "scripts" section. You can print the root one with:
node -e "console.log(JSON.stringify(require('./package.json'), null, 2))"
node -e "console.log(JSON.stringify(require('./package.json'), null, 2))"
For a nested package, replace the path with its location:
node -e "console.log(JSON.stringify(require('./path/to/package.json'), null, 2))"
node -e "console.log(JSON.stringify(require('./path/to/package.json'), null, 2))"
Tasks
Make a small table in your notes:
| Package | Script | What it appears to start |
|---|---|---|
| root/client/server | dev | ___ |
| root/client/server | build | ___ |
| root/client/server | start | ___ |
Do not guess from script names alone. Read the command after each script name. For example, a script may call Vite, Nodemon, tsx, or a compiled dist file.
Tasks
Check: You should know the exact command that starts the React side and the exact command that starts the Express side. If either is unclear, follow the command into the next file or tool configuration.
Tasks
Start with the script that launches the frontend. Look for a source folder containing files such as:
main.jsxmain.tsxindex.jsxindex.tsxApp.jsxApp.tsxUse your editor’s “find references” or search for:
createRoot
<App
ReactDOM
createRoot
<App
ReactDOM
Tasks
Your trace should look like this, with your actual filenames filled in:
frontend script: ______
↓
HTML entry: ______
↓
React entry file: ______
↓
root component: ______
↓
first visible page/component: ______
frontend script: ______
↓
HTML entry: ______
↓
React entry file: ______
↓
root component: ______
↓
first visible page/component: ______
Tasks
Open the React entry file and identify:
Write down only the answers that apply to this project.
Tasks
Check: Start the frontend using the project’s actual script. Then open the printed local URL in your browser.
Confirm:
If it fails, copy the first error and fix only the startup problem before continuing. Do not refactor yet.
Tasks
Now locate the backend script from package.json. Search for:
express()
app.listen
server.listen
app.use
express()
app.listen
server.listen
app.use
Tasks
Trace the server in the same format:
backend script: ______
↓
server entry file: ______
↓
Express app creation: ______
↓
middleware registration: ______
↓
route registration: ______
↓
listen call and port: ______
backend script: ______
↓
server entry file: ______
↓
Express app creation: ______
↓
middleware registration: ______
↓
route registration: ______
↓
listen call and port: ______
Pay attention to whether the project separates the Express app from the file that calls .listen(). That distinction matters when testing an app without opening a real network port.
Tasks
Record these details:
/api,Tasks
Check: Start the backend using its actual script. Look for a startup message or a listening port.
If the project already has a health or test route, call it:
curl -i http://localhost:PORT/ROUTE
curl -i http://localhost:PORT/ROUTE
Replace PORT and ROUTE with the values you found.
If no route exists, do not invent one yet. Your check is simply that the server starts and remains running without crashing.
Tasks
Search the frontend for network calls:
fetch(
axios
/api
http://localhost
fetch(
axios
/api
http://localhost
Pick one request that the current app actually uses. Trace it through these questions:
Tasks
Write the path in this form:
User action or component effect:
______
Frontend request:
method ______
URL ______
Express route:
method ______
path ______
handler ______
Response:
status ______
JSON/body shape ______
React result:
state updated/rendered by ______
User action or component effect:
______
Frontend request:
method ______
URL ______
Express route:
method ______
path ______
handler ______
Response:
status ______
JSON/body shape ______
React result:
state updated/rendered by ______
If the current app has no frontend-to-Express request yet, write:
No client-to-server request exists in the current baseline.
No client-to-server request exists in the current baseline.
That is a valid finding. Do not add a feature just to make the diagram longer.
Tasks
Check: Open the browser’s Network tab, trigger the action that makes the request, and verify that the request appears. Compare the actual method, URL, status, and response with your notes.
If the request fails, identify whether the failure is:
Fix the smallest cause you can verify.
Tasks
Create a short file at the repository root:
ARCHITECTURE.md
ARCHITECTURE.md
Use this structure, replacing every blank with facts from your project:
# Current Architecture
## Repository shape
This repository is organized as:
- ______
The main packages are:
- ______
- ______
## Running the project
Install dependencies with:
```bash
______
# Current Architecture
## Repository shape
This repository is organized as:
- ______
The main packages are:
- ______
- ______
## Running the project
Install dependencies with:
```bash
______
Start the frontend with:
______
______
Start the backend with:
______
______
The frontend runs at:
The backend runs at:
The browser loads:
The React entry point is:
It renders:
The Express entry point is:
The server listens on:
Middleware is registered in:
Routes are registered in:
[Describe one real request, or state that no client-to-server request exists yet.]
Browser/component:
Request:
Express route:
Response:
React result:
I verified that:
Tasks
Keep the note factual. Do not describe planned architecture as if it already exists.
Check: Close your editor, reopen ARCHITECTURE.md, and confirm another developer could identify the startup commands without asking you.
Tasks
Use the project’s existing lockfile when installing dependencies. From the package directory that owns the lockfile, run:
npm ci
npm ci
If there is no lockfile, use:
npm install
npm install
Do not manually edit dependency versions during this lesson.
Tasks
Then run the project again from a clean pair of terminals:
Terminal 1
# use the frontend command you recorded
npm run ______
# use the frontend command you recorded
npm run ______
Terminal 2
# use the backend command you recorded
npm run ______
# use the backend command you recorded
npm run ______
The blanks are intentional: use this project’s scripts rather than copying a generic command.
Now verify the browser page and one backend check again.
Tasks
If the project has a production build script, run it too:
npm run build
npm run build
If the build fails, record the first meaningful error in ARCHITECTURE.md under a new section:
## Known baseline issue
- Command: ______
- Error: ______
- Reproduction: ______
## Known baseline issue
- Command: ______
- Error: ______
- Reproduction: ______
Only fix it if the cause is clear and local. Avoid broad upgrades or rewrites.
Tasks
Final check: Run:
git diff --stat
git status
git diff --stat
git status
Your changes should be limited to the architecture note and any small, verified startup fix. The application should still start in the same way it did before this lesson.
6 modules · 24 lessons
Reconnect With Your Existing Full-Stack App
Read Hermes From the Real Source
Design Workflows That Solve Real Tasks
Connect the Workbench to Hermes
Make Agent Workflows Trustworthy
Package the Project as a Portfolio Demo
Learn by building your own version.
Remix this public project to open the workspace, follow the guided build, and let the AI mentor teach you through the work instead of doing it for you.