← Home

Product & engineering work

I turn business and user problems into working software, and I've done it across a 25-year career: enterprise CRM consulting, then 8 years as a business systems analyst and product owner, now building full-stack, AI-native products end to end.

I hand-coded production-ready products for about three years before AI coding tools were any good, and I build with those tools now. So I read and reason about the code, not just generate it. I also do the whole delivery process, not only the code: requirements, design, QA, and keeping stakeholders aligned.

raj@withmagic.ai · GitHub · Hermosa Beach, CA · remote-friendly
Selected work — case studies

Click any card for the business need, the design decisions I made, the stack, and what I actually wrote.

IB Invoice Bot Snap a vendor invoice; it reads, validates, and files it into the Lightspeed POS — with a human approving in Discord. Consulting AI vision Process automation Python · Postgres Case studyClose

Business need

A multi-location retail client (7 stores, 8+ vendors) was processing paper vendor invoices by hand through an offshore back-office team. Slow, costly, and error-prone, and the line-item data still had to land in their Lightspeed POS accurately. They needed the data entered reliably without adding headcount.

Design decisions

Human-in-the-loop, not full automation. Money and inventory are on the line, so every invoice goes to a reviewer in Discord who approves or corrects it in plain English. The system learns from each correction — vendor and item-code mappings are saved, so the volume that needs review shrinks over time. Math (line items, discounts, totals) is validated independently before anything reaches a person.

What I built & the engineering call

I ran the whole thing: requirements, as-is → to-be, build, QA, UAT, and production support. The hard part was extraction, so I benchmarked six pipelines — Claude Vision alone, PaddleOCR→Claude, a PaddleOCR+Vision hybrid, Google Cloud Vision, a Vision+OCR hybrid, and Google Document AI. Traditional OCR kept garbling item codes and digits on thermal receipts, so the data made the call: sending the image straight to multimodal Claude Vision won, backed by fuzzy matching (rapidfuzz) to recover digit errors and a math validator as a safety net. A Discord bot handles review; a cheaper model parses natural-language corrections.

PythonClaude Sonnet VisionClaude HaikuPostgreSQLdiscord.pyLightspeed OAuth APIrapidfuzzRailway
📷 Photo of invoice
Dropped into Discord by store staff
Claude Vision reads it
Line items, quantities, prices → JSON
Math validator
Checks totals, discounts, fees
👤 Human review in Discord
Approve, or correct in plain English
Lightspeed POS
Entered against the matched catalog
Corrections feed back as saved mappings, so less needs reviewing each week.

Internal client tool, gated — no public screenshot to share.

Movies, Take It Slow homepage Movies, Take It Slow A $5 weekly 10-minute 1:1 video chat about one movie. A full-stack SaaS built to fight loneliness. Live Full-stack SaaS Stripe · Zoom OAuth Visit ↗ Case studyClose

Business need

People watch alone and have no one to talk to about it. The idea: a tiny, low-pressure ritual — one short conversation, one other person, once a week — that's easier to say yes to than a club or a long call.

Design decisions

One Friday, one movie, one person. Constraints are the product: a fixed weekly slot, 1:1 pairing instead of a group, and a single shared film remove all the scheduling friction. Cheap enough ($5) to be impulse-easy. The site is styled like a cinema program to set the tone before anyone pays.

What I built

End to end: the pairing logic, payment and ticketing, magic-link auth, and the scheduled jobs that pair people and send reminders. Zoom rooms are provisioned automatically through server-to-server OAuth so no one has to set anything up.

Vanilla JSNetlify FunctionsNeon / PostgresStripeResend (magic link)Zoom S2S OAuthScheduled functions
AI Pickleball Swing Check homepage AI Pickleball Swing Check Record a 10-second swing; an AI coach hands back the single most useful fix — not a lecture. Live AI vision Free · no signup Visit ↗ Case studyClose

Business need

Coaching is expensive and intimidating, and most players don't want a 20-minute breakdown. They want one concrete thing to fix that actually moves their game.

Design decisions

One swing, one fix. Scope discipline is the whole point — the tool returns a single change, why it matters, and a drill, then stops. No signup, and the clip is deleted right after analysis to kill the privacy objection up front. It works on a shadow swing at home, so no ball, court, or coach is required.

What I built

The phone capture flow (prop-up, 3-2-1 countdown, 10-second record or upload), the prompt-and-eval loop that reads body rotation, swing path, contact, and follow-through across the whole motion, and the constrained "one fix" output. A clear "dev with AI" project: the value is in framing the model and the product around a single job.

Vanilla JSVideo captureMultimodal vision modelNetlify FunctionsPrompt + eval loop
RingPilot homepage RingPilot Sign up for an AI phone number that answers the calls you can't, and emails you what they wanted. Live AI phone agent Pre-clients Visit ↗ Case studyClose

Business need

For contractors and solo operators, a missed call is a missed job. They can't answer mid-task, and voicemail doesn't get returned. They need calls picked up and the message captured.

Design decisions

An AI number you forward to or hand out directly. The agent runs a tight four-step call — acknowledge, get the name, get the number, recap and close — instead of open-ended chat, so it reliably captures a usable lead. It blocks robocalls and anonymous/1-800 callers, and flags urgent jobs (a burst pipe, a gas leak) so the owner sees those first. Pricing sits next to the competitors on purpose, because the real objection is "isn't this expensive?"

What I built

The hard part is the live voice loop: I bridge Twilio Voice to the OpenAI Realtime API over a WebSocket so the caller hears a natural voice with low latency, with Whisper transcription as a fallback to still extract the lead if the call goes sideways. Stripe checkout provisions a real Twilio number on payment, and a magic-link dashboard lets owners edit their greeting and tune the agent with an AI prompt assistant. Usage is metered per plan with 80% / 100% emails and a friendly spoken message at the cap.

Twilio VoiceOpenAI Realtime APIWebSocket bridgeWhisperNode / ExpressPostgreSQLStripeResendNetlify + Railway
More live products

All built and live, same depth — click for the story on each.

SendLetters homepage SendLetters Type a message; it's AI-drafted, handwritten on real paper, and mailed via USPS — including letters to your representatives. Live AI + fulfillment Stripe · Lob Visit ↗ Case studyClose

Business need

A real handwritten letter lands differently than email, but almost no one will actually pen one and mail it. And writing to Congress feels like more friction than it's worth. Remove the friction on both.

Design decisions

AI drafts and polishes in the right tone, then a real pen-and-paper letter goes out for $4.99 — priced as an impulse, not a subscription. Two lanes: personal notes, and a "Write Your Congress Member" flow that pre-fills all three of your reps for your district, single or all three at once.

What I built

Claude drafting with per-letter-type prompts (personal, thank-you, sales, real-estate, nonprofit) plus polish / shorten / proofread; the Lob integration that prints, validates the address, and mails, with a webhook tracking each letter from in-transit to delivered; Stripe checkout with server-side price validation; magic-link auth; and an admin dashboard for orders, waitlist, and pricing.

Claude APILob (print + mail)StripeNode / ExpressPostgreSQLPuppeteer (PDF)ResendNetlify + Railway
Send with Magic homepage Send with Magic Set it once; it remembers the birthdays and anniversaries you forget, then suggests a gift and a note in time. Live AI gift concierge Scheduled jobs Visit ↗ Case studyClose

Business need

People want to be thoughtful but forget the dates, then scramble for a last-minute gift. The job is to remember for them and make the right move easy and early.

Design decisions

Set and forget. You add the people once; a daily job watches the calendar and reaches out ahead of each date with a specific gift pick, not a generic reminder. Quiet by design — a short brief in your inbox, with a cooldown so it never spams.

What I built

A daily cron that computes the next birthday or anniversary with a lead-time window and cooldown; a Claude-Haiku curator that picks gifts from the recipient's profile and past signals with a diversity constraint; an Amazon-affiliate catalog with tracked click tokens; CSV contact import that extracts relationships and interests; magic-link auth; and a daily AI metrics digest.

Claude HaikuNode / ExpressPostgreSQLnode-cronResend / Amazon SESBigQueryNetlify + Railway
Buzmo Clips homepage Buzmo Clips Faceless short-form video for local businesses — 25 branded Shorts a month from one templated pipeline. Live AI video Remotion pipeline Visit ↗ Case studyClose

Business need

Local businesses know short-form video brings customers but can't produce it consistently. A fully templated pipeline makes it cheap and repeatable across many clients at once.

Design decisions

One production pattern, many brands. Each client gets their own colors, CTA, and channel from a config, so the same engine serves a law firm and a dentist. Batch-and-approve in a single pass; one price, $497/mo for 25 Shorts.

What I built

The Remotion video pipeline — a "KineticShort" template with B-roll, kinetic captions, and a branded end card, voiced by OpenAI TTS and auto-captioned with Whisper, pulling B-roll from Pexels and Pixabay. Plus a config-driven multi-brand system and the subscribe flow (Postgres upsert, Resend welcome email, a Telegram ping to me on every signup).

RemotionOpenAI TTSWhisperPexels / PixabayNode / ExpressPostgreSQLTelegram APINetlify + Railway
LawMarketing.ai homepage LawMarketing.ai An AI-native marketing brand for small law firms — short-form video plus visibility in AI answer engines, not just Google. Live Productized service Positioning + AEO Visit ↗ Case studyClose

Business need

Legal marketing is crowded at blog-SEO and empty where attention is moving — YouTube Shorts and AI answer engines (ChatGPT, Perplexity). No recognized brand owns "AI-native legal marketing," so there's a lane to take.

Design decisions

Three honest tracks instead of a vague "marketing" pitch: a Shorts studio, full-surface SEO across Google / YouTube / AI engines, and a personal consulting sprint ("talk to Raj, no account manager"). The catalog proves itself — the brand's own channel runs the exact same Shorts system, in public.

What I built

The positioning and go-to-market out of competitive research, and the landing that sells it: semantic HTML with FAQ schema so AI engines can quote it, and lead capture. The production engine is the same Remotion pipeline behind Buzmo. A self-serve firm-surface scanner and a citation dashboard are the next phase — not claimed as live.

Vanilla JSNetlifyFAQPage schema (AEO)Shared Remotion pipeline
Internal tools
Self-hosted AI video pipeline
Script and voice to a finished vertical Short: text/image→video, auto-clipping, captions, score, and publish. Python-orchestrated, run daily on a local RTX 4090.
PythonRemotion · ffmpeg
How I build

Front end: vanilla JS, HTML, and CSS — no frameworks. Back end: Netlify Functions (Node) and some Rails 8. Data: Neon / Postgres. Payments: Stripe. Auth: magic-link via Resend. First-party analytics and UTM tracking on everything.

AI & video: Claude, OpenAI, and Gemini for product AI (prompts, evals, RAG, agents, MCP); Python, Remotion, ffmpeg, Whisper, and a local RTX 4090 for the video stack. I lean open-source where I can and own the pipeline end to end.

Beyond the code: requirements gathering with business and technical stakeholders, QA and UAT, code review, and clear communication from the front line to the executive. Full SDLC, not just commits.