State Management in Manifest V3 Extensions
While building LeetSeek, working with Chrome's Manifest V3 required rethinking background persistence. Because service workers terminate when idle, maintaining global in-memory variables is unreliable:
- Session & Storage Hydration: Profile inspection states and temporary search caches are synchronized through
chrome.storage.localrather than background variables. - Isolated DOM Overlays: Injecting UI elements into complex, highly reactive web applications requires careful Shadow DOM scoping to prevent target site styles from bleeding into the extension.
- Message Passing: Explicit request-response cycles between content scripts and background workers to handle user queries cleanly.
Structuring Spoken Retail Inputs with GenAI
Developing "Rush Mode" for DukaanMate showed that retail counter entry needs to be quick and forgiving. Small shopkeepers frequently speak in shorthand mixing English, Hindi, and colloquial terms:
- Schema Enforcement: Leveraging structured outputs via the Google GenAI SDK (
@google/genai) to parse verbal inputs into strictly typed JSON objects (customer, item name, quantity, price, payment status). - Contextual Shorthand: Designing prompts that reliably interpret expressions for credit, repayments, and unit measurements.
- Visual Confirmation: Displaying parsed transactions immediately so users can verify accuracy before saving to the ledger.
Terminal Raw Mode & ANSI Controls in Node.js
Building an interactive terminal music player without external GUI frameworks highlighted the versatility of Node.js stream primitives:
- Raw Stdin Mode: Enabling
process.stdin.setRawMode(true)allows listening to single keypresses (space for pause, arrow keys for navigation) without requiring the user to press Enter. - ANSI Cursor Repositioning: Updating playback progress bars by repositioning the cursor rather than clearing the full screen helps avoid distracting terminal flashing.
Cross-Platform Workflow Nuances
Working on Blitsum reinforced that multi-platform distribution is fundamentally an information architecture problem. Different communities (Reddit discussions, X threads, LinkedIn updates) demand different context, tone, and pacing. Building effective distribution software means respecting those platform dynamics rather than treating them as generic broadcasting channels.