Skip to main content

Saheb App Design System

Screenshot 2026-01-01 at 14.04.11.png

1. Purpose of This Documentation

This presentation explains the design and technical decisions behind our application features.


a. We will be covering:


1. Technology Stack

  • Backend framework

  • Web frontend framework

  • Mobile frontend framework

  • Database technology (PostgreSQL, MySQL, etc.)

  • UI libraries

  • Supporting libraries and tools (state management, datafetching, utilities)


2. Application Architecture & Project Structure

  • Technical decisions

  • Backend folder structure

  • Frontend folder structure

  • Design patterns and development strategies


3. Localization & Language Support

  • Multi-language database translation strategy

  • RTL (Right-to-Left) support on web and mobile

  • Hijri calendar localization


4. Core Domain Logic

  • Qibla calculation logic

  • Prayer time calculation methods

  • Hijri time caulculation methods


5. Media Management

  • Audio resource handling (Sermon / موعظة)

  • Video hosting and streaming strategy


6. Notifications & Communication

  • Timezone-aware push notification system

  • Email notification architecture

  • Notification reliability and crash handling

  • Scheduling notificaiton with cron


8. Application Standards

  • Request logging

  • User event and activity tracking

  • Error and crash reporting

  • API versioning


b. How Each Section Is Documented

For every section in this documentation, we consistently answer the following questions:

  • What solution did we choose?

  • Why did we choose this solution?

  • What are the pros and cons of this solution?

  • What alternative approaches were considered?


1. Technology Stack

a. Backend Framework


What solution did we choose?
We chose Nodejs + Expressjs + NestJS as the backend framework.


Why did we choose this solution?

  • Team is more experienced with
  • Widely used on our code base
  • Built with TypeScript by default


Pros

  • Clear module-based architecture

  • Strong TypeScript support

  • Easy integration with databases, authentication, and queues

  • Express Rich community

  • Supports modular development and scalability

  • Fits well for APIs serving web and mobile apps

  • One backend server for both mobile and web


Cons

  • Slightly more boilerplate

  • Integration Complexity with Some Legacy Libraries


Alternative Approaches

  • Express.js

  • Fastify

  • Laravel (PHP)

  • Spring Boot (Java)


b. Web Frontend Framework


What solution did we choose?
We chose Next.js using the App Directory.


Why did we choose this solution?

  • Built-in support for modern React features

  • File-based routing with the App Directory

  • Good integration with backend APIs

  • Built-in layouts, and loading states, server errors handlings

Pros

  • Clear and scalable project structure

  • Server-side rendering and static generation

  • Built-in routing, layouts, and loading states, server errors handlings

  • Strong support for SEO and web performance

  • Server Components


Cons

  • Some ecosystem libraries are still adapting

  • Build & Deployment Complexity

  • Rapidly Changing Features


Alternative Approaches

  • React ( Vite )

  • React (Tanstack start )

  • Nuxt.js

  • Angular

c. Mobile Frontend Framework


What solution did we choose?
We chose React Native with Expo.


Why did we choose this solution?

  • Allows building iOS Android apps  and web from a single codebase

  • Expo provides a managed workflow for faster development

  • Built-in support for push notifications, sensors, and device APIs

  • Large community and ecosystem

  • Easy to test during development and on real devices
  • Quick testing on simulators, emulators, and real devices

Pros

  • Cross-platform development saves time and resources

  • Expo handles native build processes, reducing setup complexity

  • Easy to integrate with backend APIs (REST / GraphQL)

  • Hot-reloading for fast development

  • Strong developer and community support

  • Deployment built-in

  • Easy to test during development and on real devices

  • Quick testing on simulators, emulators, and real devices


Cons

  • Some native modules require custom development (Ejecting from Expo)


Alternative Approaches

  • Pure React Native (without Expo)

  • Flutter

  • Native iOS (Swift) / Android (Kotlin) development

d. Database Technology


What solution did we choose?
We chose PostgreSQL as the database for our application.


Why did we choose this solution?

  • Team is more experienced with
  • Good ecosystem and tooling support
  • Reliable and stable relational database

  • Widely used in the industry with large community and resources

  • Works well with TypeORM for Nestjs integration


Pros

  • Good ecosystem and tooling support

  • Open-source and actively maintained

  • Supports advanced features like JSON, full-text search, and indexes

  • Strong support for transactions


Cons

  • Can be more complex to set up than simpler databases (like SQLite)

  • Overkill for very small projects

e. UI Libraries


What solution did we choose?
We chose shadcn/ui integrated with Tailwind CSS, and Figma designs for reference.


Why did we choose this solution?

    Provides a ready-to-use component library built on Tailwind CSS

    Open Code: The top layer of your component code is open for modification AI-Ready: Open code for LLMs to read, understand, and improve.

    Tailwind allows fast and consistent styling across the app

    Figma designs give a visual reference for UI consistency

    Components are customizable and responsive

    Fits well with React and Next.js


    Pros

      Fast development using prebuilt components

      Consistent design across web and mobile platforms

      Easy to extend and customize with Tailwind

      Direct mapping from Figma to code speeds up implementation

      Lightweight and modern styling approach


      Cons

        Some components may require custom adjustments for unique use cases

        Learning curve for Tailwind if new to utility-first CSS

        Shadcn library updates may require small adjustments in code


        Alternative Approaches

          Material-UI (MUI)

          Ant Design

          Chakra UI

          Custom components from scratch