← Back to Plan
Human Tasks
Steel Notes — Blocking Human Tasks
These are tasks only a human can do that are **blocking** agent development of other features. Nothing here is optional or forward-looking — each item is gating work that's ready to be built.
Blocking Phase 2 — Cloud Vault Sync
[x] **Set up AWS account and credentials** ✅
Create an AWS account (or confirm you have one)
Install AWS CLI: brew install awscli⧉
Run aws configure⧉ with your access key + secret — agents need this to run Terraform and deploy Lambda
*Blocks: all server infrastructure, S3 storage, RDS database, Lambda deployment*
[x] **Install Rust toolchain and cargo-lambda** ✅
Install Rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh⧉
Install cargo-lambda: brew tap cargo-lambda/cargo-lambda && brew install cargo-lambda⧉
*Blocks: building and testing the server locally, deploying to Lambda*
[x] **Run local Postgres and S3 via Docker** ✅
Install Docker Desktop: brew install --cask docker⧉
Run docker compose up -d⧉ (starts Postgres + MinIO S3)
*Blocks: local server development and integration testing*
[ ] **Enroll in Apple Developer Program ($99/year)**
Sign up at developer.apple.com
Create an App ID with "Sign in with Apple" capability
Create a Services ID for server-side Sign in with Apple validation
Note your Team ID (goes in APPLE_TEAM_ID env var)
Create an APNs key (.p8 file) for push notifications
Enable push notifications entitlement in Xcode Signing & Capabilities
*Blocks: Sign in with Apple auth flow, push notifications, TestFlight, App Store*
[x] **Choose and register an API domain**
Pick a domain (e.g., api.steelnotes.app)
Register it and be ready to point DNS to API Gateway after Terraform runs
*Blocks: deploying the API to a reachable endpoint, client-side API base URL config*
[x] **Generate a JWT secret** ✅
Run: openssl rand -hex 32⧉
Save the output — it goes in the server's JWT_SECRET env var
*Blocks: auth token signing and validation*
Blocking — Deploy Server to AWS Lambda
[ ] **Build and deploy Rust binary to Lambda**
Run: cd server && cargo lambda build --release --features lambda
Deploy: cargo lambda deploy steel-notes-api-production⧉
*Blocks: production API, iOS app connecting to real server*
[ ] **Run database migrations on production RDS**
Get the RDS endpoint: cd server/deploy/terraform && terraform output rds_endpoint
Run migrations: psql <rds_connection_string> < src/db/migrations/001_users.sql (repeat for each migration file)
Alternatively, the server runs migrations on startup — invoke the Lambda once and check logs
*Blocks: user registration, auth, sync state storage*
[ ] **Point API domain DNS to API Gateway**
API Gateway URL: https://bjhfydpwgb.execute-api.us-east-1.amazonaws.com
Create a CNAME record for api.steelnotes.app → the API Gateway URL
Or set up a custom domain in API Gateway with an ACM certificate
*Blocks: iOS app using production URL instead of localhost*
[ ] **Update iOS app baseUrl to production**
Change http://localhost:3000 to https://api.steelnotes.app in ServiceBundle.swift and AuthService.swift
Or use the API Gateway URL directly: https://bjhfydpwgb.execute-api.us-east-1.amazonaws.com
*Blocks: iOS app talking to production server*
[ ] **Verify production health**
curl https://bjhfydpwgb.execute-api.us-east-1.amazonaws.com/health⧉
Register a test user and verify auth flow works
Create a note and verify it appears in S3: aws s3 ls s3://steel-notes-vaults-production/ --recursive⧉
*Blocks: confidence that the full stack works end-to-end*
Blocking Phase 3 — Capture Layer & AI
[ ] **Enable AWS Bedrock model access in your AWS account**
Go to AWS Console → Bedrock → Model access
Request access to Anthropic Claude models (Claude 3.5 Sonnet, Claude 3.5 Haiku)
Access is usually granted instantly, but some models require a brief approval
Verify your region supports Bedrock (us-east-1, us-west-2, eu-west-1 all do)
No API keys needed — Lambda uses IAM role auth
*Blocks: AI-powered capture parsing, vision OCR, transposition engine, auto-classification*
[ ] **Verify Amazon Transcribe is available in your region**
Go to AWS Console → Amazon Transcribe → verify it loads
No special enablement needed — it's available by default in most regions
*Blocks: voice note transcription from Share Sheet captures*
Blocking Plan Site — dev.pittsventures.com
[x] **Create S3 bucket for plan site** ✅
[x] **Configure CloudFlare DNS for dev.pittsventures.com** ✅
[x] **Set up GitHub Actions OIDC for AWS deploys** ✅