Find the idea in the code
Read one module at a time. Start at the route, then follow its named domain function.
A request has a small path
For a task creation, app.ts parses the JSON body, checks the session and CSRF token, and calls createTask.
tasks.ts checks workspace membership, binds the project to that workspace, and handles the idempotency key. Its transaction stores the task, activity event, job, and response record together.
jobs.ts claims the durable job. The separate worker publishes an event through Postgres. realtime.ts rechecks recipients before sending a Socket.IO notification. The browser reloads authoritative task data.
Pick the question you have
| Your question | Read this file |
|---|---|
| Which HTTP route accepts this input? | app.ts |
| How is a session created or revoked? | auth.ts |
| How are tokens and passwords hashed? | security.ts |
| Which tenant and role can act? | tenancy.ts |
| How do tasks, versions, comments, and pagination work? | tasks.ts |
| What does the database enforce? | schema.ts |
| What happens when a provider retries? | billing.ts |
| What happens when a worker crashes? | jobs.ts |
| Which settings are valid? | config.ts |
| How do processes start and stop? | server.ts and worker-main.ts |
| How does the reference browser call the API? | app.js |
The module boundary separates HTTP parsing from domain decisions. It lets integration tests run the same domain logic through a real HTTP server.
Find the route in app.ts. Follow one domain function. Open the schema only for the rows that function touches.