2024 — Present

DeenCal

Islamic Prayer Times Calendar

Cloudflare Workers Hono Supabase ics Tailwind CSS Framer Motion HeroUI Figma

Overview

DeenCal is a web application that generates personalized Islamic prayer time calendars. Users subscribe to automatically updating calendar feeds that sync across all their devices, ensuring they never miss a prayer time regardless of their location. Since launching, we've reached 50,000+ Muslims worldwide.

Role

Full-stack Developer & Designer

Timeline

3 months initial, ongoing

Stack Evolution

SvelteKit → Cloudflare Workers

Key Metrics

50,000+

Active Users

Monthly active subscribers worldwide

40+

Countries

Users across the globe

99.9%

Uptime

Cloudflare Workers infrastructure

Background

Why I built this

DeenCal is the second iteration of KareemCal. The main motivation behind the second iteration was honestly because I was fed up with the file uploading mechanism.

For context, I built KareemCal to address a challenge I was personally facing as a Muslim student: a demanding workload that often pulled me away from my religious practices. I wasn't comfortable with that — so I decided to create a solution.

After browsing around for a while, I came across Prayercal. However, I noticed that Prayercal's prayer times were consistently off — by about 15 minutes — compared to when they actually should occur.

Timing comparison - competitor vs ours
Yellow: Competitor, Blue: PrayerCal
Timing comparison - competitor vs ours
Yellow: Competitor, Blue: PrayerCal

I would later find out this was due to the developer hard-coding Timezone:Europe/London.

Features

What it does

KareemCal now features a fully reworked design system — optimized for ease of use, attention-grabbing headlines, and a custom walkthrough tutorial for first-time users. It also includes greater compliance with RFC 5545, the standard for calendar data exchange.

Instead of requiring .ics file downloads, KareemCal now uses a dynamic webcal publishing system over HTTPS — powered by FastAPI for real-time calendar syncing.

Significant improvements were made to timezone accuracy — the system now adjusts prayer times based on the user's detected address timezone, providing a far more precise experience globally.

User Feature Requests

  • Task-based scheduling: Use an algorithm (or AI) that organizes tasks based on user-set priorities — mimicking tools like Motion, but tailored for Islamic routines.
  • Additional calculation methods: ISNA, Umm al-Qura, and other widely recognized Sunni calculation committees.

Design

Design Challenges

One of the biggest design challenges was evaluating my own previous work. It's often just as hard to refactor your own designs as it is to write something new. Once you've built something methodically, it takes a different mindset to re-examine it critically, identify friction points, and look for ways to elevate it.

Original home page
Original Home Page
Redesigned home page
Redesigned Home Page
Original app page
Original App Page
Redesigned app page
Redesigned App Page

For this iteration, I wanted it to feel more interactive and dynamic — like a living product. I added gradient transitions to guide the user's eyes across the screen, paired with new hover effects to make it feel more polished and production-ready.

Now generally — and this might surprise you — I avoid using AI in my projects. I find that it often robs the experience of what makes building fun: the struggle. But that said, it has its place.

For example, I was stuck trying to rethink the /app page layout. So, I turned to v0.dev, and it actually sparked some clever ideas. It suggested a tabbed layout that maintained a sleek, single-page look, and I was like: yep, that's the cherry on top.

Engineering

Technical Challenges

RFC 5545 Compliance

I can't overstate how tricky it was to get RFC 5545 compliance to actually behave. I used the iCalendar validator and passed all checks — but it turns out that passing doesn't mean it'll work everywhere.

One major pain point: getting Outlook to recognize and accept a generated .ics file. I tried everything — setting headers, encoding in UTF-8, hosting the file statically to rule out backend issues. Still no dice.

Eventually, I found this obscure Outlook support thread after digging through the trenches of the internet. I even reached out to the folks at PrayerCal but never heard back. So one compromise on the road to release: KareemCal currently supports Google Calendar and Apple Calendar only.

If anyone at Microsoft Outlook team is reading this — please either adopt the same .ics parsing logic as Google, or at least make proper docs on how your .ics processing actually works.

Storage vs Generation Tradeoff

The second big challenge was figuring out how to create and serve .ics files efficiently. My original idea was to hash each user's location and store the generated file in a database. But since the Google Geocoding API includes the user's exact latitude,longitude — the chance of someone being at the exact same spot for a re-request is basically zero.

So instead, I switched to a hash based on their email + salt. That way, the same email always maps to the same calendar file, which implicitly rate-limits access.

But here comes the tradeoff: should these files even be stored? Each calendar is about 80KB. Scale that to 1,000 users and now you're looking at 80MB sitting in storage... doing nothing.

Storage pricing from Fly.io
Storage Based Pricing from Fly.io
Request pricing from Fly.io
Request Based Pricing from Fly.io

Cost Analysis

  • Storage: 1 GB (~12,500 calendars) costs ~$0.15 in DB charges
  • Dynamic generation: ~$0.02 per GB transferred = ~93,750 calendars before hitting $0.15
  • Winner: Dynamic generation is cheaper and more scalable

My approach prioritizes rate-limiting and user fairness. Could someone bypass the system by using multiple emails? Sure. But for now, this balance between cost, complexity, and fairness feels right.

v1.2.0 Update

Moving Away from Vercel

In January 2026, DeenCal reached 50,000 Muslims worldwide — coast to coast, helping prioritize prayer. My goal for 2026 is to double this to 100k users, insha'Allah.

With v1.2.0, I shipped UX improvements including reworked user flow, dark mode, and a complete technical refactor of the underlying stack.

Previously, DeenCal was a SvelteKit frontend (hosted on Netlify) with a FastAPI backend (hosted on Fly.io). I considered switching to Next.js, but with Vercel's close ties to Israel and their CEO's public support of Netanyahu, I made the decision to move fully to Cloudflare instead.

There isn't a perfect choice when it comes to cloud providers, but I see Cloudflare as an option with the least harm done. As Muslims building technology for our community, we have a responsibility to be intentional about where our infrastructure dollars go.

New Stack (v1.2.0)

  • API: Cloudflare Workers + Hono
  • Database: Supabase
  • Core: ics package for calendar generation
  • Frontend: Tailwind CSS, GSAP, shadcn/ui

Technical Breakdown

Frontend

React Tailwind CSS Framer Motion HeroUI

Backend

Cloudflare Workers Hono ics package

Infrastructure

Supabase Cloudflare R2 GitHub Actions

Reflection

Conclusion

Building DeenCal was one of the most fulfilling projects I've worked on — from the earliest design iterations to the final implementation. Every stage of development, including late-night debugging sessions and spontaneous UI redesigns, felt genuinely exciting.

What made this project even more special was the constant feedback and conversations I had with friends, developers, and members of the Muslim community. These interactions pushed me to refine features, rethink usability, and explore technical improvements I wouldn't have considered alone.

On launch day, DeenCal quickly gained traction, jumping to over 500+ users — a number that both surprised and encouraged me. It's a clear reminder that when you build something rooted in a personal need and shared values, it resonates deeply.

This is just the beginning. I'm looking forward to evolving DeenCal further with continued input from the community, and, insha'Allah, making it an even more helpful and empowering tool.