an atproto based link aggregator

Split CI and CD into separate workflows

- ci.yaml: lint, type check, tests (runs on all branches/PRs)
- cd.yaml: deploy to Fly.io (runs only on main)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+16 -13
+16
.tangled/workflows/cd.yaml
··· 1 + when: 2 + - event: ['push'] 3 + branch: ['main'] 4 + 5 + engine: nixery 6 + 7 + dependencies: 8 + nixpkgs: 9 + - flyctl 10 + 11 + steps: 12 + - name: Deploy webapp 13 + command: flyctl deploy --remote-only -t "$FLY_API_KEY" 14 + 15 + - name: Deploy ingester 16 + command: flyctl deploy -c fly.ingester.toml --remote-only -t "$FLY_INGESTER_API_KEY"
-13
.tangled/workflows/ci.yaml
··· 11 11 - nodejs_22 12 12 - pnpm 13 13 - gnused 14 - - flyctl 15 14 16 15 steps: 17 16 - name: Install dependencies ··· 34 33 35 34 - name: Run tests 36 35 command: SKIP_BROWSER_TESTS=1 pnpm test 37 - 38 - - name: Deploy webapp 39 - command: flyctl deploy --remote-only -t "$FLY_API_KEY" 40 - when: 41 - - event: ['push'] 42 - branch: ['main'] 43 - 44 - - name: Deploy ingester 45 - command: flyctl deploy -c fly.ingester.toml --remote-only -t "$FLY_INGESTER_API_KEY" 46 - when: 47 - - event: ['push'] 48 - branch: ['main']