<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DevTECH</title>
    <description>The latest articles on DEV Community by DevTECH (@inoxx_protocol_0658f35b52).</description>
    <link>https://dev.to/inoxx_protocol_0658f35b52</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3884689%2Fe909cf39-b078-45ce-8ed3-2f613f96f637.png</url>
      <title>DEV Community: DevTECH</title>
      <link>https://dev.to/inoxx_protocol_0658f35b52</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/inoxx_protocol_0658f35b52"/>
    <language>en</language>
    <item>
      <title>I Checked 10 Indian Startups on ChatGPT. The Scores Shocked Me</title>
      <dc:creator>DevTECH</dc:creator>
      <pubDate>Mon, 25 May 2026 11:04:01 +0000</pubDate>
      <link>https://dev.to/inoxx_protocol_0658f35b52/i-checked-10-indian-startups-on-chatgpt-the-scores-shocked-me-5bj5</link>
      <guid>https://dev.to/inoxx_protocol_0658f35b52/i-checked-10-indian-startups-on-chatgpt-the-scores-shocked-me-5bj5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskzy5l1wnrewop2brelp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskzy5l1wnrewop2brelp.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was running MealCoreAI, a health app with 12,000 active users in India.&lt;/p&gt;

&lt;p&gt;I asked ChatGPT to recommend meal planning apps for people managing &lt;br&gt;
diabetes in India. It gave me three tools. None of them were Indian. &lt;br&gt;
MealCoreAI did not appear at all.&lt;/p&gt;

&lt;p&gt;That was the moment I knew something was structurally broken.&lt;/p&gt;

&lt;p&gt;So I spent two weeks systematically testing every major Indian startup &lt;br&gt;
I could think of across ChatGPT, Gemini, and Perplexity using GeoIQ's &lt;br&gt;
audit tool. The results were worse than I expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Brand&lt;/th&gt;
&lt;th&gt;Sector&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;ChatGPT&lt;/th&gt;
&lt;th&gt;Gemini&lt;/th&gt;
&lt;th&gt;Perplexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zoho&lt;/td&gt;
&lt;td&gt;B2B SaaS&lt;/td&gt;
&lt;td&gt;72/100&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freshdesk&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;td&gt;61/100&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OYO&lt;/td&gt;
&lt;td&gt;Travel&lt;/td&gt;
&lt;td&gt;55/100&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Razorpay&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;td&gt;54/100&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PhonePe&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;td&gt;47/100&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groww&lt;/td&gt;
&lt;td&gt;Fintech&lt;/td&gt;
&lt;td&gt;38/100&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meesho&lt;/td&gt;
&lt;td&gt;E-commerce&lt;/td&gt;
&lt;td&gt;33/100&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MealCoreAI&lt;/td&gt;
&lt;td&gt;Health&lt;/td&gt;
&lt;td&gt;30/100&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zepto&lt;/td&gt;
&lt;td&gt;Q-commerce&lt;/td&gt;
&lt;td&gt;22/100&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unstop&lt;/td&gt;
&lt;td&gt;EdTech&lt;/td&gt;
&lt;td&gt;18/100&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;GeoIQ audit, May 25 2026. Total score out of 100.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Average score: &lt;strong&gt;43/100.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unstop serves 10 million students. It scored 18/100.&lt;br&gt;
Meesho has 150 million users. It scored 33/100.&lt;br&gt;
That gap between product scale and AI visibility is the whole problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the numbers actually mean
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zoho and Freshdesk&lt;/strong&gt; top the list not because of any secret strategy.&lt;br&gt;
They have been building global citations for 20+ years — G2, Capterra, &lt;br&gt;
Crunchbase, TechCrunch, analyst reports. Their scores reflect the &lt;br&gt;
compounding effect of a long citation history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MealCoreAI&lt;/strong&gt; is the most telling result.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT score: 0&lt;/li&gt;
&lt;li&gt;Gemini score: 0
&lt;/li&gt;
&lt;li&gt;Perplexity score: 30&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What does this mean? Perplexity uses live web search and can find &lt;br&gt;
MealCoreAI. But ChatGPT and Gemini rely on training data — and the &lt;br&gt;
brand launched too recently, has no Crunchbase profile, and no &lt;br&gt;
ProductHunt page. The web knows it exists. The AI models' training &lt;br&gt;
data does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meesho and Zepto&lt;/strong&gt; are the surprise. Combined they have &lt;br&gt;
over 150 million users and $1B+ in funding. Both score under 35/100.&lt;/p&gt;

&lt;p&gt;The reason: their user base is hyperlocal India, their press is &lt;br&gt;
primarily Hindi-language or regional, and their product categories &lt;br&gt;
don't map cleanly to the English query templates that dominate &lt;br&gt;
AI training data.&lt;/p&gt;




&lt;h2&gt;
  
  
  The three things separating Zoho (72) from Unstop (18)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Years of English-language, globally-indexed citations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Zoho has been covered in TechCrunch, Wired, Forbes for two decades. &lt;br&gt;
Every article is a training data citation. Unstop has been covered &lt;br&gt;
primarily in campus newsletters and Hindi startup press — most of &lt;br&gt;
which never made it into GPT-4 or Gemini's training pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Presence on global review platforms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;G2, Capterra, ProductHunt, and Crunchbase are crawled heavily by &lt;br&gt;
AI training pipelines. Zoho has thousands of G2 reviews. &lt;br&gt;
Unstop and MealCoreAI have near-zero presence on these platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Consistent entity signals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Search for "Zoho" across LinkedIn, Crunchbase, Wikipedia, and G2 — &lt;br&gt;
you get consistent descriptions of the same company. AI systems use &lt;br&gt;
this consistency to build strong entity signals. For newer Indian &lt;br&gt;
brands, descriptions are often inconsistent across platforms, &lt;br&gt;
which fragments the signal.&lt;/p&gt;




&lt;h2&gt;
  
  
  The five fastest fixes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Allow AI crawlers in robots.txt (10 mins)
&lt;/h3&gt;

&lt;p&gt;Visit &lt;code&gt;yourdomain.com/robots.txt&lt;/code&gt; right now. Add:&lt;br&gt;
User-agent: GPTBot&lt;br&gt;
Allow: /&lt;br&gt;
User-agent: ChatGPT-User&lt;br&gt;
Allow: /&lt;br&gt;
User-agent: PerplexityBot&lt;br&gt;
Allow: /&lt;br&gt;
User-agent: Claude-Web&lt;br&gt;
Allow: /&lt;br&gt;
User-agent: anthropic-ai&lt;br&gt;
Allow: /&lt;br&gt;
User-agent: ClaudeBot&lt;br&gt;
Allow: /&lt;br&gt;
User-agent: Bingbot&lt;br&gt;
Allow: /&lt;/p&gt;

&lt;p&gt;If these crawlers are blocked, no other fix matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create llms.txt (15 mins)
&lt;/h3&gt;

&lt;p&gt;Put a plain text file at &lt;code&gt;yourdomain.com/llms.txt&lt;/code&gt;:&lt;br&gt;
Your Brand Name&lt;/p&gt;

&lt;p&gt;One sentence description.&lt;/p&gt;

&lt;p&gt;About&lt;br&gt;
2-3 paragraphs about your product and who it serves.&lt;br&gt;
Key Pages&lt;/p&gt;

&lt;p&gt;Homepage: Main page&lt;/p&gt;

&lt;p&gt;Contact&lt;br&gt;
&lt;a href="mailto:hello@yourdomain.com"&gt;hello@yourdomain.com&lt;/a&gt;&lt;br&gt;
Sitemap&lt;br&gt;
&lt;a href="https://yourdomain.com/sitemap.xml" rel="noopener noreferrer"&gt;https://yourdomain.com/sitemap.xml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under 5% of Indian startups have done this. Takes 15 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Create a Crunchbase profile (20 mins)
&lt;/h3&gt;

&lt;p&gt;Go to &lt;code&gt;crunchbase.com/add-new/organization&lt;/code&gt;. Fill every field.&lt;/p&gt;

&lt;p&gt;This is the single highest-impact citation for ChatGPT visibility. &lt;br&gt;
ChatGPT's training data indexes Crunchbase heavily and it gives your &lt;br&gt;
brand a structured, authoritative identity on the global web.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Submit to ProductHunt and G2 (1-2 hours)
&lt;/h3&gt;

&lt;p&gt;Each contributes independent citations that AI training data picks up. &lt;br&gt;
Encourage your existing users to review you on G2 — &lt;br&gt;
3 minutes per reviewer, outsized impact on AI visibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Get covered in YourStory and Inc42 (2-4 weeks)
&lt;/h3&gt;

&lt;p&gt;For Gemini specifically, Indian publication coverage matters. &lt;br&gt;
YourStory (DR 71) and Inc42 (DR 71) are indexed in Google's &lt;br&gt;
knowledge graph which feeds Gemini's India entity recognition.&lt;/p&gt;




&lt;h2&gt;
  
  
  The window is still open
&lt;/h2&gt;

&lt;p&gt;Less than 5% of Indian startups have an &lt;code&gt;llms.txt&lt;/code&gt; file.&lt;br&gt;
Less than 30% allow all AI crawlers in &lt;code&gt;robots.txt&lt;/code&gt;.&lt;br&gt;
Most have no Crunchbase profile, no G2 reviews, &lt;br&gt;
and no Organization schema on their homepage.&lt;/p&gt;

&lt;p&gt;The brands that move on this in the next 3-6 months will have &lt;br&gt;
a meaningful head start. AI visibility, like SEO a decade ago, &lt;br&gt;
rewards early movers significantly.&lt;/p&gt;

&lt;p&gt;The window is open right now.&lt;/p&gt;




&lt;h2&gt;
  
  
  Check your own score
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://geoiqai.com" rel="noopener noreferrer"&gt;GeoIQ&lt;/a&gt; to track this — &lt;br&gt;
it checks your brand across 6 AI systems in 60 seconds.&lt;/p&gt;

&lt;p&gt;Free audit, no signup needed.&lt;/p&gt;

&lt;p&gt;Drop your score in the comments — &lt;br&gt;
genuinely curious what Indian devs and founders are getting.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>startup</category>
      <category>ai</category>
      <category>seo</category>
    </item>
    <item>
      <title>I Built an AI Islamic Companion App. Here's What Actually Surprised Me</title>
      <dc:creator>DevTECH</dc:creator>
      <pubDate>Thu, 14 May 2026 09:12:11 +0000</pubDate>
      <link>https://dev.to/inoxx_protocol_0658f35b52/i-built-an-ai-islamic-companion-app-heres-what-actually-surprised-me-4glb</link>
      <guid>https://dev.to/inoxx_protocol_0658f35b52/i-built-an-ai-islamic-companion-app-heres-what-actually-surprised-me-4glb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9n3o6wiirkmtxzzp9q8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9n3o6wiirkmtxzzp9q8h.png" alt=" " width="799" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mytazki.com/" rel="noopener noreferrer"&gt;https://mytazki.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building for a faith-based audience is the same as building for any other audience.&lt;br&gt;
Just ship fast, iterate, repeat.&lt;br&gt;
That's what I thought before I started &lt;strong&gt;MyTazki&lt;/strong&gt;  an AI-powered Islamic&lt;br&gt;
companion PWA with Quran audio, Duas, prayer times, a Qibla compass, AI dhikr&lt;br&gt;
sessions, and push notifications for Adhan. Six months and 35+ features later,&lt;br&gt;
here are the technical decisions that genuinely surprised me  for better&lt;/p&gt;

&lt;h2&gt;
  
  
  and worse.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Contract-First API Changed Everything (and I Almost Skipped It)
&lt;/h2&gt;

&lt;p&gt;The most impactful DX decision in the project wasn't the AI stack or the database&lt;br&gt;
choice. It was writing the OpenAPI spec &lt;em&gt;first&lt;/em&gt; and generating everything from it.&lt;br&gt;
Here's the flow:&lt;/p&gt;

&lt;p&gt;lib/api-spec/openapi.yaml&lt;br&gt;
↓ (pnpm --filter &lt;a class="mentioned-user" href="https://dev.to/workspace"&gt;@workspace&lt;/a&gt;/api-spec run codegen)&lt;br&gt;
lib/api-client-react/src/generated/api.ts ← React Query hooks&lt;br&gt;
lib/api-zod/src/generated/api.ts ← Zod validators&lt;/p&gt;

&lt;p&gt;Orval reads the spec and generates type-safe React Query hooks &lt;strong&gt;and&lt;/strong&gt; Zod schemas&lt;br&gt;
in one command. The server validates inputs with the generated Zod schemas. The&lt;br&gt;
frontend calls the generated hooks. If the contract changes, a single codegen run&lt;br&gt;
propagates it everywhere  TypeScript screams at every inconsistency before a&lt;br&gt;
single test runs.&lt;br&gt;
Before this, I was hand-writing &lt;code&gt;fetch()&lt;/code&gt; calls, manually keeping types in sync,&lt;br&gt;
and debugging a mismatch between what the server sent and what the client expected.&lt;br&gt;
After? I haven't written a raw &lt;code&gt;fetch()&lt;/code&gt; on the frontend in four months.&lt;br&gt;
The lesson: **the five hours you spend writing the OpenAPI spec saves you fifty&lt;/p&gt;

&lt;h2&gt;
  
  
  hours of type drift.**
&lt;/h2&gt;

&lt;h2&gt;
  
  
  2. I Used a Key-Value Store Instead of PostgreSQL — No Regrets
&lt;/h2&gt;

&lt;p&gt;MyTazki runs on &lt;code&gt;@replit/database&lt;/code&gt;, a simple key-value store. No schema migrations.&lt;br&gt;
No SQL. No connection pooling. Just &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;set&lt;/code&gt;, and &lt;code&gt;list&lt;/code&gt;.&lt;br&gt;
That sounds naive for a production app, but here's the reality: every entity that&lt;br&gt;
would live in a relational table maps cleanly to a key pattern:&lt;/p&gt;

&lt;p&gt;user:{userId} → profile object&lt;br&gt;
streak:{userId} → { currentStreak, totalDays, lastCheckin }&lt;br&gt;
push:{userId} → subscription object&lt;br&gt;
aiUsage:{userId}:{date} → number (daily AI call count)&lt;br&gt;
duas:{duaId} → dua object&lt;br&gt;
sessions:{sessionId} → session object&lt;/p&gt;

&lt;p&gt;The gotcha is the return type. &lt;code&gt;db.get()&lt;/code&gt; returns &lt;code&gt;OkResult | ErrResult&lt;/code&gt; — not the&lt;br&gt;
value directly. Every single read needs:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
typescript
const result = await db.get(`user:${userId}`);
const user = result.ok ? result.value : null;

Forget that check and you're silently working with an error object that looks truthy.
I forgot it exactly twice. Both times were memorable.

The real limitation is joins. When you need "all duas favorited by user X," you
either store an index (favs:{userId} → [duaId, duaId, ...]) or do a full scan.
For a prayer app at this scale, that trade-off is acceptable. For anything with
complex relational queries, it's a pain.

3. The iOS Safari Audio Hack No One Writes About
The Quran reader plays 114 surahs with per-ayah audio from everyayah.com. Each
ayah is a separate .mp3 file in the format SSSAAA.mp3 (surah + ayah, zero-padded).

On desktop Chrome: trivial. Create an Audio element, update src on each ayah,
call play(). Works perfectly.

On iOS Safari: the moment you update audio.src and call play(), Safari
treats it as a new user-initiated play event — and blocks it, because iOS requires
audio to be triggered directly by a user gesture. Autoplay restrictions apply to
every new src assignment.

The fix: one persistent Audio element, never replaced — only src swapped.

// Created once, at component mount  never recreated
const audioRef = useRef(new Audio());
function playAyah(surah: number, ayah: number) {
  const src = `https://everyayah.com/data/Alafasy_128kbps/
    ${String(surah).padStart(3,'0')}
    ${String(ayah).padStart(3,'0')}.mp3`;
  audioRef.current.src = src;
  void audioRef.current.play(); // Works — iOS sees this as continuation
}

The first play() call must happen inside a user gesture handler (a tap). After
that, swapping src and calling play() on the same element inherits that
gesture permission for the session. Destroying and recreating the Audio element
resets the permission.

This took me a day and a half to figure out. Saving you the half.

4. AI Rate Limiting in a KV Store  Simpler Than You Think
The AI companion routes through Anthropic's Claude. Without rate limiting, one
motivated user could burn through significant API credits in an afternoon. The
solution is 20 AI requests per user per day, tracked with a single KV key:

const dateKey = new Date().toISOString().split('T')[0]; // "2026-05-14"
const usageKey = `aiUsage:${userId}:${dateKey}`;
const result = await db.get(usageKey);
const count = result.ok ? Number(result.value) : 0;
if (count &amp;gt;= 20) {
  return res.status(429).json({ error: "Daily AI limit reached. Resets at midnight." });
}
await db.set(usageKey, count + 1);
// ... call Claude

Keys naturally expire with the date — no cron job needed to clean up. Today's key
is aiUsage:user123:2026-05-14. Tomorrow it's aiUsage:user123:2026-05-15. The
old key just sits there taking up negligible space until you decide to clean it.

5. Qibla Compass: Web APIs Are Wilder Than I Expected
The Qibla page shows a compass needle pointing toward Mecca. The math is
straightforward — a great-circle bearing from the user's coordinates to
(21.4225° N, 39.8262° E). The Web part is where it gets interesting.

The Web Magnetometer API (DeviceOrientationEvent + webkitCompassHeading on
iOS) gives you the device's heading relative to magnetic north. Android exposes
DeviceOrientationEvent.alpha (rotation around Z-axis). But:

iOS requires HTTPS and explicit permission (DeviceOrientationEvent.requestPermission())
only available in a user gesture handler.
Android Chrome exposes the API but many mid-range devices have poor magnetometer
calibration  the needle drifts.
Desktop browsers mostly return null for magnetometer data.
The fallback chain I settled on:

GPS bearing (always available) → show Qibla direction on map
+ Magnetometer (when available) → animate live compass needle
+ Calibration prompt when accuracy is low → "Wave your phone in a figure-8"

The figure-8 calibration prompt was the most-commented feature in user feedback.
Turns out most people have never calibrated their phone compass and find it
genuinely surprising that this is a thing.

6. Push Notification Scheduling Is a Scheduler Problem
Prayer times differ by location. Fajr in London in January is 7:14 AM. In Karachi
in June, it's 4:02 AM. You can't pre-schedule notifications — you have to compute
them fresh for each user, each day, from their stored coordinates.

The approach: a scheduler loop running every 60 seconds on the API server, checking
whether any prayer time falls within the next minute for any subscribed user:

setInterval(async () =&amp;gt; {
  const subscribers = await getAllPushSubscribers(); // list prefix scan
  for (const { userId, subscription, preferences } of subscribers) {
    const user = await getUser(userId);
    const times = await getPrayerTimes(user.lat, user.lon);
    for (const prayer of PRAYERS) {
      if (!preferences[prayer]) continue;
      const prayerTime = times[prayer]; // e.g. "05:23"
      if (isWithinOneMinute(prayerTime)) {
        await sendPushNotification(subscription, {
          title: `${prayer} time`,
          body: `It's ${prayerTime} — time for ${prayer} prayer`,
        });
      }
    }
  }
}, 60_000);

The cold-start problem: if the server restarts at 5:22 and Fajr is at 5:23, the
first tick runs at 5:22:00 and sends the notification. If the restart takes more
than 60 seconds, you miss the window. For a prayer app, missing Fajr is bad UX.
The mitigation: start the interval with an immediate first tick (setImmediate +
setInterval), and log all misses for monitoring.

7. The Cultural UX Layer Is a Real Engineering Problem
Every technical decision in an Islamic app has a cultural dimension that isn't
obvious until you're building it.

Arabic RTL: React renders fine with dir="rtl", but flexbox reverses
direction in unintuitive ways. Every flex container near Arabic text needs explicit
direction management. I standardized on Amiri (font-family: "Amiri, serif") for
all Arabic text — it renders Quranic Arabic with correct diacritics and ligatures.
Using a generic serif font for Quranic text is visually wrong in a way that users
notice immediately.

Hijri calendar: The Hijri date doesn't map 1:1 to Gregorian — it's a lunar
calendar that shifts by ~11 days per year. I use aladhan.com for both prayer
times and Hijri date conversion. Trying to calculate this locally is a rabbit hole
I'm glad I didn't go down.

Tasbih counter: A simple counter with a haptic feedback tap. Sounds trivial.
The UX constraint: it must work with one hand while sitting in prayer. No accidental
resets. Every interaction must be deliberate. The reset button is hidden behind a
long-press, not a tap. Users asked for this explicitly.

Gender-neutral Duas: Some duas in classical Arabic are grammatically gendered.
For a library of 110+ duas, deciding which to include, how to present gender
variants, and whether to show transliteration by default required real product
thinking — not just copy-paste from an API.

What I'd Do Differently
Start with SSR or a static shell. The SPA approach means search crawlers that
don't execute JavaScript see an empty &amp;lt;div id="root"&amp;gt;. I added a pre-render
trick (H1 inside #root that React replaces on mount) but proper SSR or
prerendering would have been cleaner from day one.

Use Postgres earlier. The KV store got me to v1 fast, but the index management
complexity starts compounding around feature #15. A lightweight Postgres setup
from the start would have been worth the initial overhead.

Design the push notification UX before the infrastructure. The scheduler was
fun to build. Designing the permission request flow — when to ask, what to say,
how to handle denial gracefully — took longer than the scheduler itself.

The Stack, For Reference
Frontend: React + Vite, TypeScript 5.9, Tailwind CSS, pnpm workspaces
Backend: Express 5, @replit/database (KV), JWT auth, bcryptjs
AI: Anthropic Claude via API proxy
Push: web-push, VAPID, 60s scheduler loop
API Design: OpenAPI spec → Orval → React Query hooks + Zod schemas
Build: esbuild (CJS bundle for the server)
MyTazki is live at mytazki.com — free, no credit card,
works on any device as a PWA. If you're building for underrepresented communities
or faith-based audiences, I'm happy to answer questions in the comments.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>How I Built an AI-Native Islamic Growth Platform Optimized for SEO, GEO &amp; AI Search</title>
      <dc:creator>DevTECH</dc:creator>
      <pubDate>Tue, 12 May 2026 10:48:09 +0000</pubDate>
      <link>https://dev.to/inoxx_protocol_0658f35b52/how-i-built-an-ai-native-islamic-growth-platform-optimized-for-seo-geo-ai-search-1k3m</link>
      <guid>https://dev.to/inoxx_protocol_0658f35b52/how-i-built-an-ai-native-islamic-growth-platform-optimized-for-seo-geo-ai-search-1k3m</guid>
      <description>&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;Most Islamic apps today still look and behave like utility tools from 2018.&lt;/p&gt;

&lt;p&gt;They focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prayer times&lt;/li&gt;
&lt;li&gt;Quran reading&lt;/li&gt;
&lt;li&gt;Qibla direction&lt;/li&gt;
&lt;li&gt;static dua collections&lt;/li&gt;
&lt;li&gt;donation-driven experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But almost nobody is building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-native Islamic experiences&lt;/li&gt;
&lt;li&gt;emotional wellness systems&lt;/li&gt;
&lt;li&gt;guided Islamic growth journeys&lt;/li&gt;
&lt;li&gt;semantic SEO ecosystems&lt;/li&gt;
&lt;li&gt;AI-search optimized platforms&lt;/li&gt;
&lt;li&gt;retention-focused Muslim lifestyle products&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gap is exactly why I started building &lt;strong&gt;MyTazki&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Is MyTazki?
&lt;/h1&gt;

&lt;p&gt;MyTazki is an AI-first Muslim lifestyle platform focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quran reflections&lt;/li&gt;
&lt;li&gt;guided Islamic journeys&lt;/li&gt;
&lt;li&gt;Azkar and duas&lt;/li&gt;
&lt;li&gt;emotional wellness&lt;/li&gt;
&lt;li&gt;Islamic habits&lt;/li&gt;
&lt;li&gt;AI-powered spiritual growth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not to build another Islamic utility app.&lt;/p&gt;

&lt;p&gt;The goal was to build:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Calm + Duolingo for Muslim spiritual growth."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  The Biggest Shift: GEO Instead of Traditional SEO
&lt;/h1&gt;

&lt;p&gt;Most websites still optimize only for Google search rankings.&lt;/p&gt;

&lt;p&gt;I decided to optimize MyTazki for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google AI Overviews&lt;/li&gt;
&lt;li&gt;ChatGPT retrieval&lt;/li&gt;
&lt;li&gt;Perplexity citations&lt;/li&gt;
&lt;li&gt;conversational AI systems&lt;/li&gt;
&lt;li&gt;semantic search&lt;/li&gt;
&lt;li&gt;voice search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where GEO (Generative Engine Optimization) becomes important.&lt;/p&gt;

&lt;p&gt;Instead of writing pages only for humans or keywords, the site architecture is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI retrievability&lt;/li&gt;
&lt;li&gt;semantic clustering&lt;/li&gt;
&lt;li&gt;topical authority&lt;/li&gt;
&lt;li&gt;conversational intent&lt;/li&gt;
&lt;li&gt;structured knowledge graphs&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Semantic SEO Architecture
&lt;/h1&gt;

&lt;p&gt;Instead of random blog posts, the platform uses semantic SEO silos.&lt;/p&gt;

&lt;p&gt;Main clusters include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Emotional Wellness&lt;/li&gt;
&lt;li&gt;Salah &amp;amp; Prayer&lt;/li&gt;
&lt;li&gt;Quran Reflections&lt;/li&gt;
&lt;li&gt;Islamic Habits&lt;/li&gt;
&lt;li&gt;AI Islamic Companion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each cluster contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hub pages&lt;/li&gt;
&lt;li&gt;supporting articles&lt;/li&gt;
&lt;li&gt;journey funnels&lt;/li&gt;
&lt;li&gt;related content graphs&lt;/li&gt;
&lt;li&gt;FAQ schema&lt;/li&gt;
&lt;li&gt;speakable schema&lt;/li&gt;
&lt;li&gt;conversational search formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result:&lt;/p&gt;

&lt;p&gt;A deeply connected Islamic semantic knowledge graph.&lt;/p&gt;




&lt;h1&gt;
  
  
  GEO Optimization Strategy
&lt;/h1&gt;

&lt;p&gt;Every page contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI summary blocks&lt;/li&gt;
&lt;li&gt;conversational questions&lt;/li&gt;
&lt;li&gt;FAQ sections&lt;/li&gt;
&lt;li&gt;structured schema&lt;/li&gt;
&lt;li&gt;semantic relationships&lt;/li&gt;
&lt;li&gt;short-answer formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example queries targeted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Can Islam help anxiety?"&lt;/li&gt;
&lt;li&gt;"How do I reconnect with Allah?"&lt;/li&gt;
&lt;li&gt;"What dua helps overthinking?"&lt;/li&gt;
&lt;li&gt;"How can I build Islamic habits?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This dramatically improves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI citations&lt;/li&gt;
&lt;li&gt;retrieval quality&lt;/li&gt;
&lt;li&gt;semantic relevance&lt;/li&gt;
&lt;li&gt;long-tail visibility&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Internal Linking Became the Real SEO Moat
&lt;/h1&gt;

&lt;p&gt;One of the biggest realizations:&lt;/p&gt;

&lt;p&gt;Modern SEO is no longer about isolated pages.&lt;/p&gt;

&lt;p&gt;It is about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;semantic relationships&lt;/li&gt;
&lt;li&gt;crawl architecture&lt;/li&gt;
&lt;li&gt;entity understanding&lt;/li&gt;
&lt;li&gt;contextual linking&lt;/li&gt;
&lt;li&gt;topical depth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So every page inside MyTazki links contextually into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emotional wellness pages&lt;/li&gt;
&lt;li&gt;Quran reflections&lt;/li&gt;
&lt;li&gt;guided journeys&lt;/li&gt;
&lt;li&gt;routines&lt;/li&gt;
&lt;li&gt;AI experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a semantic web instead of a content library.&lt;/p&gt;




&lt;h1&gt;
  
  
  AI-Native User Experience
&lt;/h1&gt;

&lt;p&gt;Another major focus was emotional UX.&lt;/p&gt;

&lt;p&gt;Most Islamic apps overload users with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cluttered dashboards&lt;/li&gt;
&lt;li&gt;generic gold Islamic UI&lt;/li&gt;
&lt;li&gt;too many features&lt;/li&gt;
&lt;li&gt;weak onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted MyTazki to feel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;calm&lt;/li&gt;
&lt;li&gt;minimal&lt;/li&gt;
&lt;li&gt;emotionally safe&lt;/li&gt;
&lt;li&gt;modern&lt;/li&gt;
&lt;li&gt;reflective&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Closer to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calm&lt;/li&gt;
&lt;li&gt;Headspace&lt;/li&gt;
&lt;li&gt;Notion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;than traditional religious utility apps.&lt;/p&gt;




&lt;h1&gt;
  
  
  Building a Freemium Islamic Product
&lt;/h1&gt;

&lt;p&gt;One difficult challenge:&lt;/p&gt;

&lt;p&gt;How do you monetize respectfully?&lt;/p&gt;

&lt;p&gt;The solution was:&lt;/p&gt;

&lt;p&gt;Free = Islamic knowledge remains accessible&lt;br&gt;
Premium = personalization, AI guidance, routines, and deeper experiences&lt;/p&gt;

&lt;p&gt;Premium features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Islamic companion&lt;/li&gt;
&lt;li&gt;guided journeys&lt;/li&gt;
&lt;li&gt;habit tracking&lt;/li&gt;
&lt;li&gt;emotional wellness systems&lt;/li&gt;
&lt;li&gt;journaling&lt;/li&gt;
&lt;li&gt;AI reflections&lt;/li&gt;
&lt;li&gt;personalized routines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The subscription layer is designed around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retention&lt;/li&gt;
&lt;li&gt;emotional consistency&lt;/li&gt;
&lt;li&gt;guided growth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;not aggressive SaaS upsells.&lt;/p&gt;




&lt;h1&gt;
  
  
  Tech Stack
&lt;/h1&gt;

&lt;p&gt;Current stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Razorpay subscriptions&lt;/li&gt;
&lt;li&gt;Semantic JSON-LD schema&lt;/li&gt;
&lt;li&gt;GEO-focused rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built entirely with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replit&lt;/li&gt;
&lt;li&gt;AI-assisted workflows&lt;/li&gt;
&lt;li&gt;iterative semantic architecture&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Biggest Lessons Learned
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. AI Search Is Real
&lt;/h2&gt;

&lt;p&gt;Traffic is increasingly coming from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI summaries&lt;/li&gt;
&lt;li&gt;conversational search&lt;/li&gt;
&lt;li&gt;semantic retrieval&lt;/li&gt;
&lt;li&gt;recommendation systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building for AI retrieval early creates a major advantage.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Emotional Intent Beats Generic Keywords
&lt;/h2&gt;

&lt;p&gt;These keywords are brutal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Islamic app&lt;/li&gt;
&lt;li&gt;Quran app&lt;/li&gt;
&lt;li&gt;Muslim app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But emotional long-tail intent is massively under-served.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to reconnect with Allah&lt;/li&gt;
&lt;li&gt;best dua for anxiety&lt;/li&gt;
&lt;li&gt;Islamic routine for peace&lt;/li&gt;
&lt;li&gt;how to stop missing salah&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are much stronger acquisition channels.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Internal Linking Is Everything
&lt;/h2&gt;

&lt;p&gt;A semantic content graph outperforms disconnected blog spam.&lt;/p&gt;

&lt;p&gt;Especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI search&lt;/li&gt;
&lt;li&gt;topical authority&lt;/li&gt;
&lt;li&gt;GEO&lt;/li&gt;
&lt;li&gt;crawl depth&lt;/li&gt;
&lt;li&gt;engagement&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  What’s Next
&lt;/h1&gt;

&lt;p&gt;Current focus areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subscription system&lt;/li&gt;
&lt;li&gt;AI personalization&lt;/li&gt;
&lt;li&gt;emotional journey infrastructure&lt;/li&gt;
&lt;li&gt;retention systems&lt;/li&gt;
&lt;li&gt;backlinks&lt;/li&gt;
&lt;li&gt;social SEO loops&lt;/li&gt;
&lt;li&gt;AI citation optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term goal is to build:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the default AI-native Muslim growth platform.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Final Thought
&lt;/h1&gt;

&lt;p&gt;I think the next generation of successful products will not just be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SEO optimized&lt;/li&gt;
&lt;li&gt;visually polished&lt;/li&gt;
&lt;li&gt;feature rich&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They will be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emotionally intelligent&lt;/li&gt;
&lt;li&gt;AI retrievable&lt;/li&gt;
&lt;li&gt;semantically structured&lt;/li&gt;
&lt;li&gt;retention focused&lt;/li&gt;
&lt;li&gt;deeply personalized&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the direction I’m trying to push with MyTazki.COM&lt;/p&gt;

&lt;p&gt;Would love feedback from other builders working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI products&lt;/li&gt;
&lt;li&gt;semantic SEO&lt;/li&gt;
&lt;li&gt;GEO optimization&lt;/li&gt;
&lt;li&gt;wellness apps&lt;/li&gt;
&lt;li&gt;faith-tech&lt;/li&gt;
&lt;li&gt;retention systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>My co-founder got PCOS. So I quit my job and built a meal planning app for 100 million Indian women.</title>
      <dc:creator>DevTECH</dc:creator>
      <pubDate>Wed, 22 Apr 2026 08:27:32 +0000</pubDate>
      <link>https://dev.to/inoxx_protocol_0658f35b52/how-i-built-an-ai-meal-planner-for-1-billion-indians-from-zero-to-pwa-with-gpt-4-push-2nda</link>
      <guid>https://dev.to/inoxx_protocol_0658f35b52/how-i-built-an-ai-meal-planner-for-1-billion-indians-from-zero-to-pwa-with-gpt-4-push-2nda</guid>
      <description>&lt;p&gt;So this is a bit of a long one. Grab chai.&lt;/p&gt;

&lt;p&gt;About two years ago, Priya — my co-founder and the person who basically stress-tests everything I build — got diagnosed with PCOS. Not shocking on its own, 1 in 5 Indian women has it. What was shocking was what happened next.&lt;/p&gt;

&lt;p&gt;Her doctor handed her a printed sheet. A diet plan. It said things like "avoid refined carbs" and "eat low-GI foods." That's it. No context. No recipes. No mention of the fact that she grew up eating idli and sambar every morning, that her mum cooks with coconut oil, that she doesn't have 90 minutes to make something from a wellness blog written by someone in California.&lt;/p&gt;

&lt;p&gt;She googled "PCOS diet plan India." Got 40 tabs of conflicting advice. Some said no rice. Some said brown rice is fine. One said drink fenugreek water at 6am. She tried three different apps. None of them knew what Ragi Dosa was.&lt;/p&gt;

&lt;p&gt;She asked me — the one who supposedly knows about software — "why doesn't something like this exist?"&lt;/p&gt;

&lt;p&gt;I didn't have a good answer. So I started building.&lt;/p&gt;




&lt;h2&gt;
  
  
  The thing I got wrong first
&lt;/h2&gt;

&lt;p&gt;My first instinct was to build a calorie tracker. That was stupid. Nobody wants to log every meal. That's not a product, that's homework.&lt;/p&gt;

&lt;p&gt;What Priya actually needed was someone to just... tell her what to cook. Specifically. For her body. With food she already knows how to make.&lt;/p&gt;

&lt;p&gt;That reframe changed everything. This wasn't a tracking app. It was a &lt;em&gt;decision&lt;/em&gt; app. Every morning it answers one question: "Aaj kya banau?" — What should I cook today?&lt;/p&gt;




&lt;h2&gt;
  
  
  What I actually built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mealcoreai.com" rel="noopener noreferrer"&gt;MealCoreAI&lt;/a&gt; is a progressive web app that generates a full 7-day Indian meal plan — breakfast, lunch, snack, dinner — tailored to your health condition. Not "Indian food" in a vague sense. Ragi dosa. Bajra roti. Moong dal. Palak paneer. Real food that real Indian families cook.&lt;/p&gt;

&lt;p&gt;We cover 7 health tracks: PCOS, Diabetes, Thyroid, Pregnancy, Kids, Fitness, and General. Each one has completely different dietary rules baked in.&lt;/p&gt;

&lt;p&gt;For PCOS, that means low-GI, high-protein, no deep-fried stuff — because insulin resistance is the core driver of most PCOS symptoms and you can genuinely move the needle through food.&lt;/p&gt;

&lt;p&gt;For Thyroid, it means being careful about cruciferous vegetables — most people don't know that eating too much gobi (cauliflower) can interfere with thyroid medication. The app just... handles that. You don't need to know the science.&lt;/p&gt;

&lt;p&gt;For Pregnancy, we strip out anything that's risky — papaya, raw eggs, certain high-mercury fish — while making sure every day hits iron, folate and calcium targets. Because that stuff matters more than macros when you're 20 weeks in.&lt;/p&gt;




&lt;h2&gt;
  
  
  The technical part (skip if you just want the story)
&lt;/h2&gt;

&lt;p&gt;The hardest thing wasn't the AI. It was the dish database.&lt;/p&gt;

&lt;p&gt;I spent two weeks just building a database of 55 Indian dishes with full nutritional data and health flags. Every dish has columns like &lt;code&gt;pcos_safe&lt;/code&gt;, &lt;code&gt;diabetes_safe&lt;/code&gt;, &lt;code&gt;thyroid_safe&lt;/code&gt;, &lt;code&gt;pregnancy_safe&lt;/code&gt;. These aren't guesses — I worked through them with a nutritionist.&lt;/p&gt;

&lt;p&gt;The reason this matters: when you ask GPT-4 to "generate a PCOS meal plan," it will confidently give you dishes that have no nutritional backing, make up calorie counts, and occasionally recommend something that's actively bad for the condition. I've seen it recommend bhatura for a diabetic. Bhatura!&lt;/p&gt;

&lt;p&gt;My fix was to constrain the AI to only choose from our validated dish IDs. It doesn't generate meal names — it picks dish IDs from a numbered list. The AI becomes a smart selector, not a free-form generator. Hallucinations dropped to basically zero.&lt;/p&gt;

&lt;p&gt;The stack is React 19 + Vite on the front, Express 5 on the back, PostgreSQL with Drizzle ORM, and OpenAPI 3.1 as the single source of truth for the API. Orval auto-generates the React Query hooks from the spec, which means I never manually write API client code. When the spec changes, one command regenerates everything.&lt;/p&gt;

&lt;p&gt;The whole thing is open source: &lt;a href="https://github.com/InoxxAIsource/mealmate" rel="noopener noreferrer"&gt;github.com/InoxxAIsource/mealmate&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Push notifications — the thing that took three restarts
&lt;/h2&gt;

&lt;p&gt;I wanted the app to actually remind you to cook at meal time. Not "Hey, don't forget to log your meal!" — I hate those. I wanted it to say "Lunch time! Today you're making Moong Dal + Bajra Roti." Your actual meal. By name.&lt;/p&gt;

&lt;p&gt;Web Push on Android is fine. iOS nearly broke me.&lt;/p&gt;

&lt;p&gt;On iOS, push notifications only work in Safari 16.4 or higher, and only when the app is added to the Home Screen. Not when it's open in a browser tab. Not when it's running as a bookmark. Actually installed to the Home Screen.&lt;/p&gt;

&lt;p&gt;Getting users to do that is a UX problem. So I built a custom bottom sheet that detects whether you're on iOS, whether you've already installed it, and shows you step-by-step instructions with the actual Safari share button icon. It only appears once — if you dismiss it, it doesn't come back for 30 days. Because if there's one thing worse than a bad feature it's a naggy one.&lt;/p&gt;

&lt;p&gt;When the scheduler fires (it runs every 30 seconds and checks the time), it pulls the user's active meal plan, finds today's dish for that meal slot, and sends a notification with the actual dish name. That specificity is what makes people leave notifications on.&lt;/p&gt;




&lt;h2&gt;
  
  
  What surprised me
&lt;/h2&gt;

&lt;p&gt;The feature people use most isn't the AI generation. It's the &lt;strong&gt;Swap button&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nobody follows a meal plan perfectly. You open the fridge on a Tuesday morning and the one thing the plan calls for isn't there. So you tap Swap, and the AI instantly replaces just that one meal while leaving the rest of the week untouched.&lt;/p&gt;

&lt;p&gt;That single interaction — swap one meal, keep everything else — made the product feel alive instead of rigid. It went from "a plan you're supposed to follow" to "a plan that adapts to you." Which is what it should be.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it's at today
&lt;/h2&gt;

&lt;p&gt;The app is live at &lt;a href="https://mealcoreai.com" rel="noopener noreferrer"&gt;mealcoreai.com&lt;/a&gt;. Free tier gives you a 7-day plan, grocery list, nutrition tracking and AI chat. Pro is ₹499/month or ₹2,999/year.&lt;/p&gt;

&lt;p&gt;The sitemap has 282 pages. Lighthouse is 97/96/100/100. It's been indexed by Google for about 48 hours.&lt;/p&gt;

&lt;p&gt;We're pre-revenue but post-product. If you have PCOS, diabetes, are pregnant, or are raising kids in India and want to try it — genuinely free, no credit card, no email sequences from me.&lt;/p&gt;




&lt;h2&gt;
  
  
  If you're building for India (or any market that isn't SF)
&lt;/h2&gt;

&lt;p&gt;The generic advice is always "build for the user you know." But most of us building software are building for users who look like us — people with fast internet, English as a first language, and food habits from a Western diet.&lt;/p&gt;

&lt;p&gt;1.4 billion people don't fit that profile.&lt;/p&gt;

&lt;p&gt;The opportunity isn't to copy Noom and translate it to Hindi. It's to start from scratch with the actual constraints of real Indian life: shared family meals, regional cuisines that differ wildly, health conditions that are dramatically more prevalent than in the West, and real people who just want to know what to cook for dinner without a 45-minute deep dive into nutrition science.&lt;/p&gt;

&lt;p&gt;That's what I'm trying to build. Slowly. One swap button at a time.&lt;/p&gt;




&lt;p&gt;Code is at &lt;a href="https://github.com/InoxxAIsource/mealmate" rel="noopener noreferrer"&gt;github.com/InoxxAIsource/mealmate&lt;/a&gt; — React 19, Express 5, Drizzle ORM, OpenAPI codegen, VAPID push, the works. Proper README with setup instructions. MIT licensed.&lt;/p&gt;

&lt;p&gt;Ask me anything in the comments. Happy to go into the AI prompt architecture, the iOS push hell, or why I chose Drizzle over Prisma.&lt;/p&gt;

</description>
      <category>webdevaishowdevopensource</category>
    </item>
    <item>
      <title>How to Calculate Cricket Arbitrage: The Maths Behind Guaranteed Profits</title>
      <dc:creator>DevTECH</dc:creator>
      <pubDate>Fri, 17 Apr 2026 14:44:16 +0000</pubDate>
      <link>https://dev.to/inoxx_protocol_0658f35b52/how-to-calculate-cricket-arbitrage-the-maths-behind-guaranteed-profits-3m7m</link>
      <guid>https://dev.to/inoxx_protocol_0658f35b52/how-to-calculate-cricket-arbitrage-the-maths-behind-guaranteed-profits-3m7m</guid>
      <description>&lt;p&gt;Most people who discover cricket arbitrage betting make the same mistake — they understand the concept immediately but then reach for a spreadsheet to do the stake calculations. By the time they've typed in the odds and formulas, the window has closed.&lt;/p&gt;

&lt;p&gt;I've been building &lt;a href="https://cricketarb.com" rel="noopener noreferrer"&gt;CricketArb&lt;/a&gt; for the past few months, and one of the most common questions I get is: how do I actually calculate what to stake on each side?&lt;/p&gt;

&lt;p&gt;Let me break down the exact maths, then point you to the free tool that does it live as you type.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Formula
&lt;/h2&gt;

&lt;p&gt;For a two-outcome match:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Arb% = (1 / Odds_A) + (1 / Odds_B)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Arb% is below 1.00 (100%), you have an arbitrage opportunity. Profit margin = 1 - Arb%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real IPL 2026 example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bet365: CSK to win @ 2.10&lt;/li&gt;
&lt;li&gt;Betfair: MI to win @ 2.05
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Arb% = (1/2.10) + (1/2.05) = 0.4762 + 0.4878 = 0.9640
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's &lt;strong&gt;3.6% guaranteed profit&lt;/strong&gt; regardless of result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stake Allocation
&lt;/h2&gt;

&lt;p&gt;You don't split 50/50. You allocate proportionally so both outcomes return the same amount.&lt;/p&gt;

&lt;p&gt;With ₹10,000 total stake:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stake_A = 10000 × (1/2.10) / 0.9640 = ₹4,940
Stake_B = 10000 - 4940 = ₹5,060
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bet365: ₹4,940 × 2.10 = ₹10,374&lt;/li&gt;
&lt;li&gt;Betfair: ₹5,060 × 2.05 = ₹10,373&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both return ₹10,373 → guaranteed ₹373 profit on ₹10,000 stake.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Manual Calculation Fails in Practice
&lt;/h2&gt;

&lt;p&gt;During live IPL, odds move every few seconds. By the time you've opened a spreadsheet, one of three things has happened: the window closed, you made an error under pressure, or you staked the wrong amount on one side.&lt;/p&gt;

&lt;p&gt;This is why I built the &lt;a href="https://cricketarb.com/calculator" rel="noopener noreferrer"&gt;cricket arbitrage calculator&lt;/a&gt; — it recalculates on every keystroke, shows you the arb percentage live, and generates a Telegram-ready summary you can paste instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  3-Way Arbs (Test Cricket / Draw Markets)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Arb% = (1/Odds_A) + (1/Odds_Draw) + (1/Odds_B)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same rule: below 100% = sure bet. The calculator handles 3-way arbs with a single toggle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Polymarket Edge
&lt;/h2&gt;

&lt;p&gt;Pure bookmaker vs bookmaker arbs are increasingly rare. The real edge is &lt;strong&gt;cross-platform arbs between traditional bookmakers and prediction markets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Polymarket prices cricket outcomes in cents (52¢ = 52% implied probability). Their trader base is crypto-native, not cricket-native. When a wicket falls during an IPL powerplay, Bet365 reprices in under 5 seconds. Polymarket can take 30-60 seconds. That lag is where the best windows open.&lt;/p&gt;

&lt;p&gt;More detail in the full &lt;a href="https://cricketarb.com/blog/cricket-arbitrage-calculator-guide" rel="noopener noreferrer"&gt;cricket arbitrage calculator guide&lt;/a&gt; — includes worked IPL 2026 examples and a walkthrough of every calculator output metric.&lt;/p&gt;

&lt;p&gt;If "sure bet" is the terminology you know, that guide is also covered at &lt;a href="https://cricketarb.com/blog/sure-bet-calculator-cricket" rel="noopener noreferrer"&gt;sure bet calculator for cricket&lt;/a&gt; — same maths, additional PSL examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free calculator (live recalculation): &lt;a href="https://cricketarb.com/calculator" rel="noopener noreferrer"&gt;https://cricketarb.com/calculator&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live scanner terminal: &lt;a href="https://cricketarb.com/terminal" rel="noopener noreferrer"&gt;https://cricketarb.com/terminal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Telegram signals: t.me/cricedge&lt;/li&gt;
&lt;li&gt;GitHub: github.com/InoxxAIsource/cricedge-arb-scanner&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cricket</category>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
