.cursor/skills/ct-init-todo/SKILL.md
For the given feature, create a TODO.md file in the root of the project.
npx skillsauth add vguleaev/cursor-todo-prompt-kit ct-init-todoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
For the given feature, create a TODO.md file in the root of the project.
CT-<number>.✅ DONE, 🔲 TODO.CT- for the task ID.YOU MUST USE THE FOLLOWING TEMPLATE:
# TODO: {{FEATURE_NAME}}
{{FEATURE_DESCRIPTION}}
## Progress Tracker
| Ticket | Description | Status |
| ------ | --------------- | ------------ |
| CT-1 | {{TASK_1_NAME}} | {{STATUS_1}} |
| CT-2 | {{TASK_2_NAME}} | {{STATUS_2}} |
## Tasks
#### CT-1: {{TASK_1_NAME}}
**Description:**
{{TASK_1_DESCRIPTION}}
**Acceptance Criteria:**
- [ ] {{ACCEPTANCE_CRITERIA_1}}
- [ ] {{ACCEPTANCE_CRITERIA_2}}
- [ ] {{ACCEPTANCE_CRITERIA_3}}
- [ ] {{ACCEPTANCE_CRITERIA_4}}
---
#### CT-2: {{TASK_2_NAME}}
**Description:**
{{TASK_2_DESCRIPTION}}
**Acceptance Criteria:**
- [ ] {{ACCEPTANCE_CRITERIA_1}}
- [ ] {{ACCEPTANCE_CRITERIA_2}}
- [ ] {{ACCEPTANCE_CRITERIA_3}}
---
## Notes
- {{NOTE_1}}
- {{NOTE_2}}
- {{NOTE_3}}
# TODO: Expenses Tracker Backend
Implement insertion of a new expense into the database for our expenses tracker.
## Progress Tracker
| Ticket | Description | Status |
| ------ | ---------------------- | ------- |
| CT-1 | CDK Backend Stack | ✅ DONE |
| CT-2 | Deploy Lambda Handlers | ✅ DONE |
| CT-3 | Custom Domain for API | ✅ DONE |
| CT-4 | API Gateway Auth | 🔲 TODO |
## Tasks
#### CT-1: Create CDK Backend Stack for Lambda + DynamoDB
**Description:**
Create a new CDK stack (`backend-stack.ts`) that provisions:
- DynamoDB table for expenses with `id` as partition key and `userId-index` GSI
- Lambda functions for expense CRUD operations
- API Gateway REST API with proper CORS configuration
- IAM roles and permissions for Lambda to access DynamoDB
**Acceptance Criteria:**
- [x] DynamoDB table created with proper indexes
- [x] Lambda functions deployed for list/create expenses
- [x] API Gateway configured with routes
- [x] Stack outputs API URL
---
#### CT-2: Deploy Expense Lambda Handlers
**Description:**
Bundle and deploy existing Lambda handlers (`create.ts`, `list.ts`) to AWS via CDK. Ensure environment variables are properly configured.
**Acceptance Criteria:**
- [x] Create expense Lambda deployed
- [x] List expenses Lambda deployed
- [x] Environment variables set (EXPENSES_TABLE_NAME)
- [x] Handlers return proper responses
---
#### CT-3: Add Custom Domain for API Gateway
**Description:**
Configure custom domain `api.expenses.example.com` for API Gateway. Reuse existing certificate if it supports wildcards, or update certificate to include the API subdomain.
**Acceptance Criteria:**
- [x] Check if existing certificate supports `*.expenses.example.com` or `api.expenses.example.com`
- [x] If not, request new/updated certificate with wildcard support
- [x] Add custom domain to API Gateway in CDK
- [x] Created DNS record for `api.expenses.example.com`
- [x] API accessible via `https://api.expenses.example.com`
---
#### CT-4: Configure API Gateway with Clerk Auth Integration
**Description:**
Set up API Gateway to validate Clerk JWT tokens. Configure Lambda authorizer or pass user ID from Clerk session to backend.
**Acceptance Criteria:**
- [ ] API Gateway validates auth headers
- [ ] User ID extracted from Clerk token
- [ ] Unauthorized requests return 401
---
## Notes
- Backend handlers already exist in `/backend/src/handlers/expenses/`
- Auth utility exists in `/backend/src/lib/auth.ts`
- Frontend uses Clerk for authentication
- DynamoDB requires `userId-index` GSI for listing user's expenses
NOW, CREATE A TODO.md FILE FOR THE GIVEN FEATURE:
tools
For the given task ID, start working on it.
testing
For the given task ID, check if it is completed.
tools
For the given task, add a new task to the TODO.md file.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.