tradepulse.ai / infrastructure

Four functions,
and nothing else.

A Bitcoin trading system with no server to keep alive. Four Lambdas wake on a schedule, write to one table and go back to sleep. The interesting part is not that it is cheap — it is what has to be in place before a system this quiet can be trusted to still be working.

Reading the live ledger…
Strategy
Market
Equity
Position
Trades
Last bar
Region eu-west-2 London Compute 4 Lambdas, 0 servers State 1 DynamoDB table Alarms 9 Provisioned with Terraform
Trigger · once per daily bar

EventBridge Scheduler

Wakes the bot after the daily candle closes

cron(10 0 * * ? *) — 00:10 UTC, once

step 1
Decide · eu-west-2 London

Paper bot Lambda

Computes the target position, then reconciles the virtual portfolio

Runs for seconds a day — billed for nothing in between

step 2

Market data

Pulls the closed daily bars it needs, nothing more

Public endpoint — no key, no account

step 3

DynamoDB

Portfolio state, plus an append-only record of every decision

Keyed by bar — a repeat run cannot trade twice

step 4
If it goes wrong

SQS dead-letter queue

Catches an invocation the scheduler could not deliver

A message landing here raises its own alarm

on failure

CloudWatch alarms

Errors, dead letters — and a run that never happened

The no-invocation alarm is the one that matters most

watching
Compute running right now
0 until 00:10 UTC

A scheduled function that stops being scheduled fails silently — no error, no log, no page. That is why absence of invocation is alarmed as loudly as failure of one.

Decisions worth defending

Silence is alarmed, not just failure
Each bot carries three alarms: errors, dead letters, and no-invocation. A schedule that quietly stops firing produces no error to catch, which makes absence the failure mode worth watching.
Blast radius drawn per bot
Three schedules, three functions, three roles, three queues, nine alarms. They share a table and an SNS topic; everything else is separate, so one deploy cannot disturb another's run.
Reading cannot become writing
The public status endpoint is a different function with a read-only role. Exposing the ledger to the internet does not expose the ability to trade.
Idempotent by bar
State is keyed to the market bar being processed, so a retry, a duplicate fire or a manual invoke converges on the same result rather than opening a second position.