Notes
Quick thoughts, things I learned, and bookmarks. A public notebook.
TIL: ECPay Webhook Verification on Edge
ECPay webhooks need CheckMacValue verification. On Edge Runtime, no crypto.createHash. Web Crypto Version typescript async function sha256(message: string): Promise<string> { const msgBuffer = ne...
TIL: FFmpeg Fails on AI Videos Without Audio
AI-generated videos from photo animation (Veo, BytePlus, Kling) usually have no audio track. FFmpeg commands that assume audio will fail. The Error Stream map '0:a:0' matches no streams. Detect...
TIL: Cloudflare R2 Video Archival Pattern
Videos from AI providers expire (usually 24h). Archive them to R2 for permanent storage. The Pattern typescript // When video generation completes async function archiveVideos(jobId: string, cdnUrl...
Prompting: Be Specific About Format
When working with LLMs, always specify the output format explicitly. Instead of: "Summarize this document" Try: "Summarize this document in 3 bullet points, each under 20 words" The more specific y...
TIL: IBKR Flex Queries
Interactive Brokers' Flex Queries are incredibly powerful for automating trade reports. You can pull historical trades, positions, and account data via XML. Key gotcha: The token expires after 24 hou...
Podcast: Naval on Wealth
Re-listened to the Naval podcast on wealth. The key insight that stuck with me this time: "Seek wealth, not money or status. Wealth is having assets that earn while you sleep." This is why I'm focus...
Cloud Run: Always Use Concurrency
Rookie mistake I made early on: leaving Cloud Run concurrency at 1. For most web services, you want concurrency at 80-100. Your Python/Node service can handle multiple concurrent requests — that's th...
Book: Psychology of Money
Finished Morgan Housel's "Psychology of Money." Best takeaways: 1. Wealth is what you don't see (spending less than you earn) 2. Compounding needs time, so start early and stay in the game 3. Room fo...