Price drops as more people join
We build AI products. Phone apps, voice agents, Shopify tools, AI video and the systems a retail chain runs on.
They answer questions about the Quran, read trading charts, turn speech into text and track how AI assistants mention your brand.
Chapter 01 · 5 projects
Everyday AI apps
Five consumer apps, each built around one everyday moment: asking the Quran a question in your own language, hiding photos behind a pattern, logging an expense by voice, reading a trading chart and choosing skincare. Where a model answers, code checks it first: a cited verse must exist, chart levels must fit the price axis, and an unsafe ingredient blocks a recommendation.
- NUR AI Quran
- ShyVault
- Bujit
- CandleScan
- KareAI
نور NUR AI Quran
Read, hear and ask the Quran anything, in your own language.
- Ask by voice or text, and it finds the verses that answer you by meaning, not keywords
- Read offline, with 70+ translations and 30+ tafsirs to choose from
- Real Mushaf pages and famous reciters, with background playback
- Prayer times, a Qibla compass and the Hijri calendar
Searching in Urdu
- Al-Baqarah 2:153Seek help through patience and prayer.
- Az-Zumar 39:10The patient will be given their reward without account.
- Aal-Imran 3:200Persevere and endure.
How NUR AI Quran is built
- One search index for every languageGemini translates each question into English, then it's matched by meaning against 6,236 verses embedded once with text-embedding-004.
- Answers cite only real versesGemini answers in structured JSON, and every verse it cites is checked against the real length of its surah, so an invented reference is dropped before anyone sees it.
- No AI keys inside the appEvery AI call carries a Firebase ID token and App Check proof to a Cloud Run proxy that enforces quotas.
On the phone
- Expo SDK 54
- React Native
- TypeScript
- expo-sqlite
- RevenueCat
- EAS Update
Server
- Cloud Run
- Express
- Firebase Auth
- App Check
- Firestore
AI
- Gemini 3.1 Flash Lite
- text-embedding-004
- Cloud TTS Chirp 3 HD
- Amazon Polly
- 6,236verses embedded
- 72translations on demand
- 25API routes
ShyVault
Hide photos, videos and documents behind a pattern only you know.
- Every pattern opens its own encrypted vault
- Forced to unlock? A decoy pattern opens a harmless vault
- Screenshots and screen recordings come out black
- Disguise the app as a calculator, weather or notes app
- Encrypted iCloud backup and sync between your devices
How ShyVault is built
- Deniable by designA pattern is stretched with Argon2id and mixed with a Secure Enclave secret; the result unlocks one vault. A wrong pattern simply opens an empty one.
- A duress vault that leaves no traceThe decoy pattern overwrites the other vaults' key slots with same-size random bytes, so nothing on disk looks different.
- Screenshots come out blackiOS only reports a screenshot after it is taken, so content is drawn inside a secure layer that iOS leaves out of screenshots, screen recordings and mirroring.
App
- Swift
- SwiftUI
- Swift actors
- App Intents
- Share extension
- XcodeGen
Cryptography
- CryptoKit
- Chunked AES-256-GCM
- Argon2id
- Secure Enclave ECDH
- HPKE
Sync without a server
- CloudKit
- Size-padded records
- Silent push
- Conflict-safe merges
Web tools that never upload
- Astro
- TensorFlow.js
- pdf.js
- CSP connect-src 'none'
- 66VaultCore tests
- 34app languages
- 5in-browser privacy tools
Bujit
Say or snap an expense, and AI logs, sorts and explains it.
- Say several expenses in one breath, and Bujit splits them and picks each amount, category and icon
- Snap a receipt for its line items, converted at that day's rate if it's in another currency
- Apple Pay and Google Wallet payments log themselves
- Ask the AI advisor about your spending and get answers with charts
- Budgets, recurring expenses and alerts as you near a limit
Today
“Coffee with Sam, six fifty”
- Merchant
- Corner Market
- Amount
- $18.40
- Date
- Nov 6
How Bujit is built
- Apple Pay purchases that log themselvesWallet's tap trigger carries no transaction data, so Bujit uses the iOS 17 Transaction automation and an App Intent that parses the amount for your locale and saves it without opening the app.
- Money that adds up in every localeAmounts are parsed with each locale's separators and Arabic-Indic digits, and AI amounts are rounded to exact cents with Decimal, so floating-point noise never reaches a budget.
- A free allowance that can't be farmedThe server verifies Apple's signed AppTransaction and spends allowance through an idempotent reserve-and-commit journal in Firestore transactions, so reinstalls and parallel devices can't overspend.
iPhone
- Swift
- SwiftUI
- SwiftData
- App Intents
- StoreKit 2
Android
- Kotlin
- Jetpack Compose
- Hilt
- Room
- Glance widget
Backend
- Cloud Functions
- Firestore
- App Check
- App Store Server Library
AI
- Gemini 3 Flash
- Gemini 3.1 Flash-Lite
- JSON schemas
- Deepgram streaming
- 217Swift tests passing
- 32interface languages
- 8typed AI request kinds
CandleScan
Snap any trading chart, and AI explains its trend, levels and context: an educational second opinion, not trading signals.
- Photograph your broker's screen or upload a screenshot, and AI reads the instrument, timeframe, trend and momentum
- Support and resistance zones drawn onto your own chart, only once its price axis checks out
- Live research on the instrument, with real source links
- Follow-up questions in chat about any saved chart
- A daily briefing for the markets you follow, and a journal to compare charts over time
Price is ranging between two tested zones.
How CandleScan is built
- Price axes checked against the pixelsVision models invent evenly spaced price rows on photographed screens, so the server measures the tick labels itself and draws levels only once the axis verifies. A wrong line on your own chart is worse than none.
- Analyses that outlive the connectionA full analysis can outlast a mobile request, so each one runs as a server-owned background task with a status for every stage; the app polls, and a push says when it's ready.
- Anonymous accounts can't farm the AIAnonymous sign-ins could mint endless identities with fresh rate limits, so paid endpoints refuse anonymous sessions and check entitlements on the server.
App
- Expo SDK 57
- React Native
- TypeScript
- expo-router
- TanStack Query
- lightweight-charts
Backend
- Supabase Postgres
- Row-level security
- Supabase Vault
- Deno edge functions
AI, via OpenRouter
- OpenAI models
- Anthropic models
- Google models
- Two-pass grounding
Code that checks the model
- Axis-ladder check
- Candle detector
- Level evidence
- Pattern policy
- 398tests passing at release
- 6edge functions
- 7languages
KareAI
A selfie skin analysis that finds products that actually fit you.
- A selfie maps 14 skin concerns, with overlays that show where each one appears
- A “% fit” score for every product, from your skin type, concerns and sensitivities
- Snap a product on the shelf to see if it suits you, with safety warnings for conditions like pregnancy
- Morning and evening routines, with how and when to apply each product
- An AI skincare coach that knows your scan results
How KareAI is built
- Fit scores without per-user AIGemini works out each product's effectiveness, skin-type fit and safety once; your fit is then plain arithmetic, so it's instant, costs no AI call and matches on every screen.
- Safety checks that come firstA scanned product's ingredients are matched against unsafe patterns for the conditions you've shared, such as pregnancy, and a match blocks the recommendation.
- Scans that outlive the analysis serviceThe service keeps results only briefly, so a private worker, called by Cloud Tasks with an OIDC token, measures the masks, renders the overlays and stores them in Cloud Storage and Postgres.
Mobile
- Expo SDK 54
- React Native
- TypeScript
- Reanimated 4
API and worker
- Node.js
- Fastify
- Zod contracts
- Sharp
- PostgreSQL
Google Cloud
- Cloud Run
- Cloud SQL
- Cloud Tasks
- Cloud Storage
- Terraform
AI
- Skin-analysis vision API
- Gemini
- Google Search grounding
- In-house mask metrics
- 14skin concerns mapped
- 44app screens
- 28SQL migrations
Chapter 02 · 3 projects
Voice
Three products you talk to: dictation for computers and phones, an AI receptionist that answers a business’s calls, and a shopping assistant that lives on a store. The two agents act only through permissions the system grants, never on anything a model writes: a booking needs a signed capability bound to the call, and a cart change needs the shopper’s own tap.
- FluidVox
- AI Receptionists
- VoiceAgent
FluidVox
Don't type. Just speak.
Speak anywhere on your computer or phone; polished text types itself.
- Hold one key, talk, and your words type themselves into the app you're in
- Filler words cleaned up, in a writing style that switches to suit each app
- Dictation in 99 languages, in an app translated into 26
- Private mode keeps speech recognition and cleanup on your own computer
- On iPhone, a voice keyboard that works in any app, plus audio notes with AI summaries
um so basically can you uh send the deck to sara by friday
Can you send the deck to Sara by Friday?
How FluidVox is built
- Keeps the first wordAudio is buffered while the streaming connection opens, and a parallel recording lets the whole utterance run again if the live session drops.
- Typing into other apps without mangled textSimulated keystrokes lost letters in some editors, so delivery now picks a transport for each app (a guarded paste, newline isolation, focus checks) and puts your clipboard back only with proof the paste landed.
- Dictation from an iPhone keyboardKeyboard extensions can't record, so the app keeps a background audio session alive with a Live Activity, and the keyboard drives it over Darwin notifications and shared App Group state.
Native apps
- Swift 6
- SwiftUI
- CGEventTap
- Accessibility API
- WinUI 3
- .NET 8
- iOS keyboard extension
Speech, cloud and on-device
- Streaming speech-to-text
- whisper.cpp
- Parakeet on Core ML
- Whisper.net with CUDA
Cleanup and backend
- Gemini 3.5 Flash
- Hedged requests
- Cloud Functions
- Cloud Run WebSockets
- Firestore
Shipping without an app store
- Sparkle updates
- Notarized builds
- Velopack
- Signed offline licenses
- 99speech languages
- 140releases shipped
- 924Windows tests
AI Receptionists
An AI receptionist that answers your calls, captures leads and books appointments.
- Picks up every call, day or night, in 33 languages
- Uses only answers you approve: every fact, document and price is reviewed before it goes live
- Checks your Google Calendar or Calendly and books the slot during the call
- Hands callers to a person when needed, and sends you a summary of every call
- Try it in your browser, or on the demo line, before you sign up
Booked Thursday at 10:30.
Appointment booked- Can I come in on Thursday?
- Sure, 10:30 or 2:00 works.
- 10:30, please.
- Opening hoursApproved
- Services and pricesApproved
- Booking rulesApproved
How AI Receptionists is built
- An AI agent that can't authorize itselfBooking, transfer and lead tools act only with a short-lived signed capability bound to the call when it is admitted, never with anything the model writes.
- Phone-system actions that never fire twiceEvery command to the phone system is recorded with a stable ID before it runs; a timeout is settled by verified events or a read-back, never a blind retry.
- Bookings that survive time zonesOpenings come from the business's hours in its own time zone, clock times made ambiguous by daylight saving are refused, and the calendar is checked again before every booking.
Phone line
- Telephony and SMS
- Signed webhooks
- Human fallback number
Voice AI
- Real-time voice agent
- Approved-answers knowledge base
- Call summaries and outcomes
Calendar booking
- Google Calendar
- Calendly
- Time-zone-aware availability
Business portal
- Multi-tenant customer portal
- Billing
- Postgres with row-level security
- Durable job worker
- 33receptionist languages
- 5,299tests passing
- 99database migrations
VoiceAgent
A voice and chat shopping assistant that answers from your live Shopify store.
- Shoppers talk or type to one assistant, right on your store
- Answers come from your real catalog and policies, with product cards to tap
- Replies in the shopper's language (tested in English and Urdu), and product names stay exact
- Adds to the cart only after the shopper says yes, and never more than once
- A monthly spending cap keeps costs predictable, and no raw audio is kept
How VoiceAgent is built
- Cart changes the AI can't make aloneA cart proposal pins the exact variant, quantity and price; only the shopper's tap releases a one-use permission, and an add that may not have landed is reconciled, never sent again.
- Urdu answers that stay in UrduAfter reading an English policy, the voice model drifted into English, so the shopper's reply language now travels apart from the catalog search language, and the server checks it.
- Realtime voice that can't run up a billThe browser streams audio only; a server-side sideband owns replies and tools, reserves cost before every reply, and shares one budget across reconnects and modes.
Storefront widget
- Theme app extension
- Vanilla JS
- AudioWorklet recorder
- WebRTC
- Signed App Proxy
Voice and AI
- OpenAI Realtime
- Gemini Live
- gpt-5.6-luna for typed answers
- Grounded catalog tools
Commerce backend
- React Router
- Node 22
- Shopify Admin API
- Storefront API
- App Events billing
Data
- Prisma
- Supabase Postgres
- Row-level security
- Upstash Redis with Lua
- 2,741tests passing in CI
- 679commits
- 8access scopes, no customer data
Chapter 03 · 6 projects
Growth engines
Six products built to grow an audience or a business: a tracker for how AI assistants cite your brand, a skincare ingredient checker, done-for-you directory listings, a chat button and a stock sync for Shopify stores, and a group-buying marketplace. In several of them, code makes the decisions that matter, not the model or the browser: a risk score is computed, a listing is sent only once, and a deal’s price comes from one shared formula.
- LLMRanks
- AcneSafe
- Directory Submit
- WA Chat Button
- Bachat Gang
- Inventory Sync Pro
LLMRanks
Tracks and improves how AI assistants mention and cite your brand.
- Tracks whether ChatGPT, Perplexity, Gemini, Claude, Google AI Overviews and Grok cite you, mention you or leave you out
- Shows why you're missing: what each AI searched, and whether it found your pages but didn't quote them
- Maps the sites each AI quotes for your prompts, and flags the ones where competitors appear and you don't
- Audits your site for AI crawlers, schema and content depth, with an AI-readiness score for every page
- Writes research-grounded articles and publishes them to WordPress, Shopify, Webflow, Ghost, Wix or Blogger
best voice typing app for mac
AI answerFor voice typing on a Mac, Your app is a strong pick: dictate anywhere and get clean, punctuated text.
- 1Your site
- 2Comparison guide
- 3Forum thread
- 4Video review
How LLMRanks is built
- A judge that couldn't see the sourcesShown only the answer text, the AI judge called a brand “mentioned” when it was the top cited source, so the engine's own source list now decides first in every detection path: a structural fix, not a bigger model.
- Hundreds of AI calls against capped APIsEach engine draws from a slot pool sized to its real upstream limit, held in a cross-instance Redis semaphore whose slots expire, so a crashed function can't leak one and a full scan fits inside one workflow step.
- Long audits on serverless time limitsEvery audit stage is its own durable workflow step with a fresh time budget and automatic retries, and a failure after the crawl resumes from the saved analysis instead of paying for another crawl.
Product
- Next.js 15 App Router
- React 19
- Shopify embedded app
- WordPress plugin
Pipelines
- Vercel Workflow durable steps
- Vercel Cron
- Prompt × engine scans
- Site crawl and audit
AI
- Multi-model routing across frontier LLMs
- Live AI-answer capture
- LLM judge with a citation floor
- Outline, draft, critique, rewrite
Data
- Supabase Postgres
- Row-level security
- Postgres RPCs
- Upstash Redis
- 1,811commits
- 203API route handlers
- 10durable workflow pipelines
AcneSafe
Scan a skincare label to spot pore-clogging, acne-triggering ingredients.
- Snap the label or paste the ingredient list, with no account needed
- Instant red, amber and green flags from 168 rated ingredients (381 names, aliases included), each with a cited source
- One risk score that weighs pore clogging, barrier damage, fungal-acne risk, oxidation and real-world breakout reports
- Scores for dry, oily, sensitive and acne-prone skin, with warnings when ingredients make each other worse
- About 2,695 analyzed products and about 126 guides to browse before you buy (as of its first audit)
- Aqua (Water)
- Glycerin
- Isopropyl Myristate
- Cocos Nucifera (Coconut) Oil
- Sodium Lauryl Sulfate
- Cetearyl Alcohol
- Squalane
How AcneSafe is built
- An AI that never decides the verdictThe model only reads the label and rates each ingredient; code owns the weighted score, the adjustments for where an ingredient sits in the list, the risk bands and the skin-type profiles, with a full local fallback.
- Flags before the AI answersA local matcher flags ingredients the moment the list is read, normalizing names, matching INCI aliases, allowing partial matches only on long names and ignoring commas inside parentheses.
- A product catalog with no background workersEach import step is one client-driven request over durable job, URL-queue and sitemap-progress tables, so a long catalog build can pause, resume and skip failures on serverless hosting.
Web app
- Next.js 16 App Router
- React 19
- Server Actions
- Installable PWA
AI
- Gemini 2.5 Flash-Lite for label OCR and scoring
- Gemini 3 Flash for articles
- Deterministic scoring in code
Content engine
- Keyword queue on a cron
- JSON-LD rich results
- Sitemap index
- RSS and ISR
Data
- Prisma 5
- Vercel Postgres
- Vercel Blob
- 168rated ingredients
- 381matchable names
- 169commits
Directory Submit
Done-for-you directory submissions, from a profile drafted from your own site to accepted listings.
- Drafts your product profile from your website, quoting the sentence behind every detail
- Picks the software, AI-tool and startup directories that fit your product, from a catalog of 296
- Nothing goes out without your OK: you see the exact submission first, and any profile edit resets the approval
- A screenshot before every submission and the receipt after, in a private report of what was accepted
- Tracks which listings go live, and your domain's authority score over time
You approve
Exact submission- Name
- Tagline
- Website
- Category
Matched directories
- AI tools QueuedSubmittedApprovedLive
- SaaS QueuedSubmittedApprovedLive
- Startups QueuedSubmittedApprovedLive
- Developer tools QueuedSubmittedApprovedLive
- No-code QueuedSubmittedApprovedLive
- Productivity QueuedSubmittedApprovedLive
- Design tools QueuedSubmittedApprovedLive
- Marketing QueuedSubmittedApprovedLive
How Directory Submit is built
- Made-up facts on public listingsThe model may cite only server-made span IDs, every quote is rebuilt from the page on the server, and per-field validators reject any URL, price or platform name the quote doesn’t contain.
- Never submitting a listing twiceWorkers claim jobs with a lease and attempt fencing, a “committing” mark is written before the one permitted send, and an interrupted send becomes “unknown” instead of being sent again.
- Approvals that can't go staleProfile versions never change once saved, and each exact preview is bound to its approved fields, destination, adapter version, campaign policy and an expiry, so any edit voids the approval.
Web app
- Next.js 16
- React 19
- Invite-only magic links
- Tailwind CSS 4
Worker
- Node worker on Render
- pg-boss queue
- Playwright over CDP
- Cloud browser sessions
Grounded AI
- Versioned LLM extraction contract
- Span-ID citations
- Per-field validators
Data
- Supabase Postgres
- Drizzle ORM
- Row-level security
- 1,262tests in its README run
- 296catalog directories
- 37row-level security policies
WA Chat Button
Adds a WhatsApp chat button to any Shopify store, with no code.
- Free: a floating button that opens a WhatsApp chat with your number and a ready-typed first message
- Pro: a friendly welcome popup that slides in after a moment and gets out of the way on its own
- Pro: your colors, size, label and placement, with separate desktop and mobile offsets
- Pro: the message can include the product page the shopper was viewing
- Pro, in beta: short video avatars in place of the icon, limited so returning visitors aren't shown them again and again
Hi there! Questions about this shirt? We’re happy to help.
How WA Chat Button is built
- Pro features the browser can't fakePro status is written server-side to an app-owned shop metafield the theme reads as it renders, and the widget re-checks it through Shopify's signed App Proxy behind a short per-shop cache that never caches a failure.
- Billing that never wrongly downgradesPro needs an active paid subscription, an old cancelled plan can’t hide a newer one, a failed lookup is never saved as Free, and plan webhooks re-read the live state and ask Shopify to retry on failure.
- Avatars that don't nag shoppersMerchants choose every visit, once a session or a few plays with a cooldown; a play counts only once the video really starts, a blocked autoplay shows a still icon, and the popup waits for the video to end.
Storefront
- Theme app extension
- Liquid app embed
- Vanilla JS widget
- wa.me deep link
Admin app
- React Router 7
- App Bridge v4
- Polaris
- Shopify Managed Pricing
Backend
- Node 22
- Admin GraphQL API
- Signed App Proxy
- Compliance webhooks
Data and deploy
- Prisma and PostgreSQL
- Docker on Render
- GitHub Actions checks
- 945commits
- 29theme-editor settings
- 21admin languages
Bachat Gang
A group-buying marketplace for Pakistan: the more people join a deal, the lower its price.
- Watch the price fall live as people join, with a heat meter showing how close the deal is to its best price
- Join free with your name, your WhatsApp number and a one-time code sent on WhatsApp
- Pay only after the deal closes, by JazzCash, Easypaisa or bank transfer, quoting the payment reference you're given
- Updates on WhatsApp: your confirmation, the final price and how to pay, reminders and a tracking number
- Browse deals by category and seller, and share links that open as rich previews
How Bachat Gang is built
- A live price that's the same for everyoneThe price is never stored: one shared formula works it out from the count of verified members, so the server, the browser and the cron can't disagree, and live updates are de-duplicated so no join counts twice.
- Payments on rails with no APIEach member gets a unique payment reference and moves from unpaid to claimed to verified, reminders are timestamped so each sends once, and only unpaid members can be forfeited at the deadline.
- Ending a deal exactly onceA full deal and the every-minute cron can race to close it, so each status change is guarded on the current status, and only the first caller ends the deal and sends the WhatsApp message.
Web app
- Next.js 16 App Router
- React 19
- Server actions
- Tailwind CSS v4
Live deals
- One shared pricing function
- Supabase Realtime
- Vercel Cron
- WhatsApp Cloud API
- Approved message templates
- Signed webhooks
- One-time codes
Data
- Prisma 7
- Supabase Postgres
- NextAuth admin roles
- 93commits
- 62test cases
- 6WhatsApp message templates
Inventory Sync Pro
Keeps stock levels matched across several Shopify stores automatically.
- Link your stores with a step-by-step wizard, syncing one way or both ways
- Products match by SKU first, then handle, then title, so nothing is listed twice
- Sync the moment stock changes, on a schedule or by hand, with history and logs
How Inventory Sync Pro is built
- No duplicate products across storesMatching tries the exact SKU, then the handle, then the title, checks the saved mappings first, and rejects a handle or title match whose SKU differs.
- One warehouse, many locationsSplit mode remembers each location’s share, so a reverse sync redistributes stock in proportion, and the rounding remainder goes to one primary location so totals never drift.
- Webhook storms and stuck syncsRepeated webhooks are de-duplicated, rate-limited calls back off exponentially, and a cleanup job times out any sync left stuck in progress.
Embedded admin
- Remix 2
- Polaris 12
- App Bridge 4
Sync engine
- Shopify webhooks
- Scheduled syncs
- Postgres job queue
- Admin REST and GraphQL
Data
- PostgreSQL
- Hand-written SQL
- Prisma for sessions
- 20commits of our own
- 33routes added
- 8webhook subscriptions
Chapter 04 · 7 projects
A retail chain’s whole operating system
Six in-house systems around one Shopify store for a multi-branch retail chain in Pakistan, plus a group-deals site. Shopify is the single ledger: every system writes to it or listens to it. Webhook handlers are idempotent, so a replayed or out-of-order delivery can’t count twice, and reconciliation jobs catch anything a webhook misses.
- Retail POS
- Staff sales app
- Reviews widget
- Loyalty portal
- Refill punch card
- Owner dashboard
- Group deals
- 6 in-house systems
- 1,193 commits
- about 118,000 lines of source
- 2,321 automated tests
- 19 Shopify webhook endpoints
- 8 ways to pay at the till
Retail POS
An iPad till that keeps selling offline and syncs every sale to Shopify.
- Scan a barcode with the tablet’s camera, or search the catalogue, and see your branch’s live stock before you sell
- Take cash, card, bank transfer, mobile wallets or QR, or split one bill across several
- Keeps selling through internet outages: orders queue on the tablet and sync by themselves
- Refunds, exchanges and pay-later tabs that hold stock until the customer pays
- A nightly day close that balances the cash drawer, plus branch reports for managers
Day closeBalanced
- Opening float
- Cash sales
- Cash refunds
How Retail POS is built
- Exactly-once checkout on APIs with no idempotencyShopify’s order, draft and refund endpoints ignore idempotency keys, so the till mints one per checkout, the server claims it in a unique row first, and each order is tagged so a lost response can be found again.
- An offline queue that never doubles a saleQueued orders post in order and an ambiguous one blocks the rest, the session is rechecked before any replay, and orders the server already finished are acknowledged, never replayed.
- Pay later as a crash-safe sagaAn unpaid tab is a draft order that holds stock; collecting it runs a state machine, and after an ambiguous result recovery only looks up a deterministic marker, so the order is never made twice.
iPad till
- React 18 + Vite
- Camera barcode scanning
- Offline order queue
- Version-skew guard
API
- Node + Express
- PostgreSQL
- Idempotency claims
- Reconciliation sweeps
Shopify
- Admin REST + GraphQL
- Draft orders
- HMAC-verified webhooks
- 727till-app test cases
- 66SQL migrations
- 8background jobs
Staff sales app
Sales staff see their sales, goals and commission live on their phones.
- Today’s, this week’s and this month’s sales and commission at a glance
- A phone notification when a sale is credited or a goal is hit, and a summary every morning
- Refunds and cancellations adjust commission automatically, so the numbers stay fair
- Installs like a normal app on iPhone and Android, with no app store needed
Earlier
How Staff sales app is built
- Push notifications on iPhone web appsiOS pushes only to web apps on the home screen, through Apple’s push service, so the app runs two channels, Firebase and Web Push, with one subscription per person.
- Commission exactly onceSales are recorded once per Shopify order, settlements carry a deterministic marker so a replayed webhook can’t race them, and the database refuses a second commission row.
- Commission that follows the moneyPay-later commission waits for the money but still counts on the day of the sale, and refunds and cancellations reverse it.
Phone app
- Installable PWA
- React 18 + Vite
- Recharts
Push
- Firebase Cloud Messaging
- Web Push (VAPID)
Sales pipeline
- Shopify webhooks
- Idempotent sales
- Node + Express
- PostgreSQL
- 94commission and goal tests
- 11sales backend modules
- 2push channels
Reviews widget
Photo and video customer reviews on every product page, in a system the store owns.
- Star ratings right under each product title, loaded with the page itself, so search engines read them too
- A reviews section with photos and videos, sorting and “load more”
- A homepage wall of photo and video reviews that opens into a full-screen viewer
- The store’s reviews, photos and videos moved off a third-party app, with its stars kept in search results
Fits true to size, and comfy all day.
Verified buyerArrived quickly and well packed.
Verified buyerHow Reviews widget is built
- Switching platforms without losing search starsThe rating’s structured data is server-rendered from product metafields into the theme’s own product schema, and the switch ran on a duplicate theme, the live one kept as a rollback.
- Moving the media off another vendor’s serversEach photo and video is re-hosted on Shopify Files and polled until it’s ready, and anything a crash left mid-upload is retried, not trusted.
- Stars where app blocks can’t goApp blocks can’t render in a theme’s product-card loop, so card stars are a one-line snippet reading the same metafield, with no API call.
Storefront
- Theme extension
- Structured data
- Server-rendered stars
In Shopify
- Product metafields
- Shopify Files CDN
- Zero-scope app
Review API
- Node + Express
- PostgreSQL
- Idempotent import
- 40commits, in about a week
- 32test cases
- 4theme app blocks
Loyalty portal
Customers earn points on every purchase and turn them into discount codes.
- Points land automatically on every paid purchase, in a branch or online
- Turn points into a personal, one-time discount code, valid for 7 days
- Staff check and redeem points at the till as soon as the customer is added
- Points stay active while you keep shopping, and expire only after 90 days without activity
How Loyalty portal is built
- Points exactly once from two “paid” signalsBranch sales arrive already paid and online orders turn paid later, so both pass through one function under a per-order lock, and a late “paid” can’t restore points after a refund.
- Redeeming at the till without double-spendingA till code deducts points only when a paid order uses it, gives them back on a refund or if it leaves the cart, and is deleted after use, so it can’t be spent online.
- Webhooks that go missingA scheduled job re-checks recent orders against Shopify, skips any an admin has adjusted, and never overlaps its last run.
Customer portal
- Express + EJS
- Installable PWA
- Web push
Points engine
- HMAC-verified webhooks
- Per-order advisory locks
- Audited adjustments
Redemption
- Shopify price rules
- One-time codes
- PostgreSQL ledger
- 36test cases
- 5webhook endpoints
- 3scheduled jobs
Refill punch card
A digital punch card at the till that rewards regular customers with free refills.
- The rule: 10 eligible visits, then about 10% of that cycle’s units free
- No paper cards: every eligible visit is counted on the customer’s profile automatically
- The till shows how close each customer is, and applies the reward with one tap
- Rewards wait until they’re used, and texts tell customers how close they are
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- Free
This cycle: 20 units bought, so 2 come free
How Refill punch card is built
- A fair reward for big and small buyersCycles count visits, not units: after 10 eligible visits, about 10% of that cycle’s units come free, at least one, so small and bulk buyers get the same share.
- Webhooks that counted twiceDuplicate deliveries once moved a count by two, so each delivery is recorded by its webhook ID and applied in one transaction with a race-safe increment.
- Rewards that are never lostThe count holds at its last step until a paid order uses the reward, so a missed one waits for the next visit, and texts go out only a visit before and on redemption.
At the till
- Shopify POS UI extension
- Cart API discounts
- Also in the Retail POS
Rules
- Shared pure functions
- Discount Function on standby
Server
- Node + Express
- PostgreSQL
- Webhook de-duplication
- 135commits
- 5webhook endpoints
- 24reward-rule assertions
Owner dashboard
One private screen that shows the owner sales, profit and stock across every branch.
- Sales, orders, margin and profit for any date range, with a month-by-month trend
- Branches side by side, best sellers, and stock that’s about to run out
- Automatic insights flag big movers, stock-out risks and months where the books and sales disagree
- Refreshes itself every day, and warns when a month’s books aren’t closed, so profit is never overstated
- JulyReconciled
- AugustReconciled
- SeptemberReconciled
- OctoberBooks open
How Owner dashboard is built
- Months whose books aren’t closed yetBookkeeping trails sales, so a month with little cost posted looked too profitable; a check against earlier closed months keeps it out of profit, labelled “pending close”.
- Reconciling the store with the booksJoining QuickBooks transactions to revenue came back empty, since they sit under bank and receivables accounts, so the monthly check compares Shopify’s net sales with P&L income.
- Every order, without running out of memoryA one-time backfill streams Shopify’s bulk export to disk, loads it line by line in batches, and checks the count against Shopify’s own.
App
- Next.js
- Owner-only login
- Server-rendered SVG charts
Sync
- Shopify bulk operations
- QuickBooks Online API
- Daily cron
Warehouse
- Neon Postgres
- SQL views
- Rule-based insights
- 2days to a working dashboard
- 165test cases
- 7insight rules
Group deals
A deals site for the store’s own customers, where every new member of a capped deal brings its price down for the whole group.
- Example deals walk through the price curve before anyone signs up
- Every deal has a fixed number of places, and claiming one takes no account and no money up front, only a code texted to the customer’s phone
- Once a deal ends, each buyer gets a private order page with their total, and settles it by bank or wallet transfer or picks cash on delivery
- A deal that falls short of its goal waits for the store team to honour, reopen or cancel it, rather than closing at a price nobody planned
Lower prices unlock as the member count grows
Your number03•• •••• •42
How Group deals is built
- Many joins at once on a capped dealVerification runs in a transaction that re-checks the cap and hands out the next participant number, a unique constraint catches any race, and texts go out after the response.
- Codes that can’t be farmed or guessedEvery text costs money, so each number gets only a few codes an hour; codes are cryptographically random, attempts are capped, and codes are never logged.
- A private checkout without accountsEach join gets an unguessable order link as its only key, on a page that’s never indexed and sends no referrer, where the buyer pays by transfer or picks cash on delivery.
Web app
- Next.js server actions
- React
- Zod-checked forms
Messaging
- Corporate SMS API
- One-segment texts
Data
- Row-level security everywhere
- Private live broadcasts
- Per-minute deal cron
- 121test cases
- 14pages
- 9staff permissions
Chapter 05 · 5 projects
Media and labs
The screening room: two pipelines that turn scripts into finished videos, and three lab pieces that put models to work on chess, screenshots and songs. The models generate and play; code and people keep them honest. Every image is checked against a depiction rule, every edit must validate against a schema, and every chess move against the rules.
- Prophetic Journey
- AI video pipeline
- Model Gambit
- /vision
- ChordMelody
Prophetic Journey
The life of the Prophet ﷺ, told as a calm, cinematic English series on YouTube.
- Short chapters in order, across three eras: before prophethood, Mecca and Medina
- Slow, painterly 4K scenes of sixth-century Arabia, with calm narration, an original score and English subtitles
- Made with AI, and says so: the scenes, narration and score are AI-generated, and every video carries an AI disclosure
- Out of respect, the Prophet ﷺ is never shown: a pool of golden light on the ground marks his presence
- Before prophethood10
- Mecca26
- Medina31
How Prophetic Journey is built
- One depiction rule across every imageThe rule is in every image prompt: no figure, silhouette or shadow of the Prophet ﷺ, only light on the ground. Each still is checked at full size against its storyboard, and failures are set aside.
- Every scripted word, exactlyEach script is locked by SHA-256 and word count before any paid call, and the narration’s timing must account for every word, so the captions come straight from it.
- Smooth 4K motion from stillsA custom NumPy and OpenCV renderer draws every 60 fps frame from the original still at a fractional camera position, so the slow drift never jitters. AI video models were tried and set aside.
Script
- Read-only SQLite source
- SHA-256 locks
- Word-exact storyboards
Generation
- Seedream 5.0 Pro stills
- ElevenLabs v4 voice
- ElevenLabs Music
Render and release
- NumPy + OpenCV, 60 fps
- ffprobe encode gate
- Scheduled releases
- 1,751AI stills accepted
- 66stills set aside
- 6,423lines of core pipeline code
AI video pipeline
Turns a script into a finished, on-brand 4K explainer and a vertical Short.
- An AI plans each video as an edit list, and code renders it the same way every time
- Narration in the creator’s cloned voice, with graphics and karaoke captions that land on the spoken word
- Three human sign-offs before anything costly is spent, so a rejected draft costs nothing
- One edit renders a 4K landscape video and a 4K vertical Short
- 11 color themes, so every video looks distinct but on-brand
Edit decision list
Code renders the edit
- 01Same list in
- 02Same video out, every time
- Gate 1 Placeholder voice Approved
- Gate 2 Final voice Approved
- Gate 3 Avatar + 4K Approved
- Render 4K
How AI video pipeline is built
- Keeping AI from improvisingModels only write an edit decision list that must pass a strict JSON Schema, Remotion renders it deterministically, and measured narration lengths drive the timeline.
- Graphics on the spoken wordCharacter-level timestamps turn each cue word into a reveal time, a preflight checks the cues come in spoken order, and a speed-up rescales the timestamps so captions stay in sync.
- No credits spent on a rejected draftThree gates, each opened by a blocking preflight: a free placeholder voice and stand-in, then the cloned voice, then the avatar and 4K, so a rejected draft costs nothing.
Direction
- Gemini 3.5 Flash analysis
- Claude Code agents
- JSON Schema edit list
Voice
- ElevenLabs voice clone
- Character timestamps
- Two-pass loudnorm
Render
- Remotion 4 + React 19
- HeyGen, two tiers
- ffmpeg checks
- 11final 4K renders
- 646lines of edit-list schema
- 39commits
Model Gambit
Two AI models play chess while a rules engine checks every move and an AI referee weighs in.
- Pick two AI players and watch them on a 3D board, a move at a time or on auto play
- Every move is checked against the rules: an illegal one is caught, and a second forfeits the game
- An independent AI referee reviews each accepted move and says whether it agrees
- See how long each model thought and how many tokens it used, on a running scoreboard
- A built-in demo replays Légal’s Mate, a classic seven-move trap, without a single AI call
Move ledgerReferee
- 1. e4 Legal Agree
- 1… e5 Legal Agree
- 2. Nf3 Legal Judging…Agree
How Model Gambit is built
- Perfect memory for stateless modelsEvery turn is rebuilt from the saved match with the same versioned ruleset, board and full move history, so neither model relies on memory and both see the same facts.
- No double moves on serverlessWrites are versioned compare-and-sets, and a move, its referee job and the new state commit in one D1 batch, so a second Step fails fast instead of playing twice.
- A referee that can’t stall the gameReferee jobs sit in an outbox written with the move, and a lease lets one run at a time, so auto play never fans out; an expired lease reads “engine ruling stands”.
Arena
- Next.js 16 on vinext
- React Three Fiber
- Lathe-turned pieces
Rules and models
- chess.js authority
- OpenRouter, JSON moves
- Advisory AI referee
Data
- Cloudflare Workers
- D1 + Drizzle
- Leased outbox
- 9commits, all in one day
- 16test cases
- 13plies in the demo game
/vision
Lets any coding model read screenshots, PDFs and Office files.
- One command: /vision and a file, plus a question if you have one
- Reads images, PDFs, text and data files, and Word, PowerPoint and Excel documents
- Picks the right reader for each file, and falls back to a second one if the first fails
- Runs on free tiers, on Mac, Linux and Windows
>/vision screenshot.png
your file → outside model → plain text
A sign-in form. The error under the email field says it’s empty.
How /vision is built
- A model that can’t seeDeepSeek’s API takes text only, so the skill borrows eyes: Gemini reads what it can, and the DeepSeek web app, which parses uploaded documents, covers the rest.
- Routing by capability, not trial and errorOne file-type table runs in Bash, Python and Windows batch, and an exit-code contract decides each fallback, so Office files go straight to the second reader.
- A browser that stays out of sightIt drives the DeepSeek web app with your own logged-in session in a persistent, headless browser, and opens a window only when the site asks you to sign in again.
Skill
- Claude Code skill
- Explicit /vision trigger
- Bash and Windows batch
Readers
- Gemini 2.5 Flash, stdlib Python
- DeepSeek web app via Playwright
- Your own logged-in session
- 874lines across its four scripts
- 13Office file types it recognizes
- 8commits
ChordMelody
Paste a YouTube link, get playable guitar chords synced to the song.
- Works from a YouTube link or your own audio file
- The chord playing now glows, and a click on any chord jumps the song there
- A guitar diagram for every chord, with finger numbers and open or muted strings
- Easy mode turns hard chords into plain major and minor ones and suggests a capo
- G
- Am
- Em
- C
- G
- Am
- Em
- C
- G
- Am
- Em
fingeropen× muted
How ChordMelody is built
- From frame votes to a chartThe third-party ChordMini BTC model (MIT) labels the audio frame by frame; votes are combined, clipped to the song and merged into timed chords, with no-chord spans dropped.
- A capo a beginner can useChords become plain major or minor triads, then each capo from fret 0 to 7 is scored by how much sounding time lands on open shapes; a tie keeps capo 0.
- Live progress from a blocking jobThe download and PyTorch job runs on a thread pool, progress reaches the event loop through a thread-safe queue, and the browser reads Server-Sent Events from a POST.
Model
- ChordMini BTC (MIT, third-party)
- Constant-Q features
- PyTorch
Server
- FastAPI + SSE
- yt-dlp + FFmpeg
- File cache
Player
- Vanilla JS
- SVG diagrams
- Pure easy-mode logic
- 170chord classes
- 8open shapes for the capo
- 19easy-mode tests
Chapter 06 · 2 projects
Built for clients
Two projects delivered to clients, who stay unnamed here: store TVs that keep playing through outages, and proofing, verse and audio tools for a Bible publisher. Both run on the client’s own screens and files, so each checks its own work: a TV deletes old media only once the server confirms a new playlist, and each LORD the checker finds is compared with the client’s database.
- Retail TV signage
- Bible Publishing Toolkit
Retail TV signage
Store TVs that play promotions around the clock, even when the internet drops.
- Pair a TV in seconds: it shows a short code, and staff type it into the dashboard
- One always-on loop of posters and videos, in the order and timing you set
- Flash sales take over the screens, everywhere or at one location, from the minute they start until they end
- Never a blank screen: each TV plays from its own copy through Wi-Fi drops, outages and power cuts
How Retail TV signage is built
- Auto-start and a kiosk lockNewer Android blocks apps at boot and Google TV won’t swap its home screen, so a one-time device-owner setup pins the player as home and locks it there.
- Never stuck on an expired saleSale posters download before their window opens, the copy that survives a reboot holds only the regular loop, and old files go only once the server confirms a new playlist.
- Big posters on small-memory TVsPosters decode at no more than 1280×720, the image cache keeps one entry and nothing is decoded ahead, so low-memory panels stop crashing.
TV player
- Flutter on Android TV
- Kotlin kiosk mode
- Offline media cache
Server
- Node.js + Express
- SQLite
- Revision-checked playlists
Dashboard
- Vanilla JS admin
- JWT + bcrypt
- Live screen preview
- 26Dart test cases
- 37API route registrations
- 5seconds between sale checks
Bible Publishing Toolkit
Automated proofing, verse extraction and audio tools for a Bible publisher.
- Flags the real edits between two proofs and ignores rendering jitter, in batches or from a watched folder
- Checks typesetting on every page: running heads, page geometry and small-caps LORD
- Turns tagged text, RTF and XML into clean verse tables, and fills verse text into a Word index
- Narration samples read bracketed notes in the same voice, with pitch, rate and volume changes
How Bible Publishing Toolkit is built
- Small-caps LORD, checked glyph by glyphExtracted text can’t tell LORD from Lord, so the checker reads each font’s glyph encoding, walks every content stream and maps each hit to its verse: 96.7% agreement with the client’s database for LORD, 99.5% for Lord GOD.
- Real edits, not rendering jitterProof pages are compared pixel by pixel, filtered for tiny position shifts and checked for structural similarity (SSIM), and a text-layer pass labels each flagged page a content change, a reflow or a shift.
- One parser, five tag dialectsFive editions tag books, chapters and verses differently, so each gets its own rule set, and a verifier cross-checks gaps against another edition to tell textual variants from extraction failures.
- PyMuPDF
- pikepdf glyph encodings
- Annotated proofs
Vision
- OpenCV diff + SSIM
- Color-band detection
Data and audio
- SQLite FTS5 verse index
- python-docx
- SSML prosody on neural TTS
- 11standalone tools
- 10translations and editions handled
- 7,632names in its pronunciation lexicon
28 products, one studio.
Each one designed and built by AZ Digital, on the surface and underneath. Bring us the next one.
Start a projectAbout
Abubakr Latif
AI-first product developer
Product strategy, design, AI systems, and engineering—built as one connected practice.
- support@azdigitalinc.com
- Phone
- +1 416 509 5797
- Studio
- Milton, Ontario · Canada
- Address
- AZ Digital Inc.
338 Baverstock Cres
Milton, ON L9T 5K9, Canada
Contact
Have a difficult product idea?
Good.
Bring the problem, the rough prototype, or the thing everyone else says is too ambitious. Let’s find the signal and ship it.
Product conversations are open