Introducing AfsaneDB (Beta) – Now Available on Play Store!

Dive into the world of classic literature with AfsaneDB. Explore timeless masterpieces in an elegant and user-friendly app, designed for book lovers like you.

Saturday, 6 June 2026

Rekhta Reader & Downloader (Web App) – Thousands of Books on Mobile and Desktop

I come bearing good news today. By now you have already guessed it from the title, and I strongly suspect some of you have been waiting impatiently for the day a proper Rekhta tool with an actual user interface would finally arrive.

This post is also available in Urdu here.

What can I say? The things we like for ourselves, we like for our friends as well. And I like sharing.

So, without further ceremony, here it is:

Rekhta Reader & Downloader

A complete tool that allows you to read and download books from Rekhta.org on both desktop and mobile devices.

Let us take a quick tour of the tool.

As soon as you open the application, you will be greeted with an interface similar to this:

Requirements

Before using this tool, you must install a CORS bypass extension in your browser.

Download the extension here. I have included the complete usage instructions again near the end of this article, so if anything feels unclear, you will find a detailed guide there as well.

You can also see the complete workflow in the diagram below. ( Full-size image )

Extension page for reference:


When the extension is active, its logo appears in color. If it turns black, the extension is disabled.


Back to the tool itself.

Paste the URL of a book into the first field and click GO. The book pages will immediately open inside the reader for browsing and reading.

Search Books Directly — No Need to Visit Rekhta Separately

You can search Rekhta's book collection directly from within the application.

As you can see, the search results appear right inside the tool. Simply click the book you want to open and close the dialog window afterwards.

Click on any page image and start reading. This lets you browse a book before committing to downloading the whole thing — which may save some of us from downloading a dozen books simply because they looked interesting.

Clicking the PDF button downloads the entire book.

I will repeat the usage instructions again near the end of this article, though the screenshots above should already make things fairly self-explanatory.

Before that, however, it might be worth explaining how this tool came into existence in the first place.

The Story Behind This Tool (and a Few Dry Technical Details)

A while back, inspired by the work that Falsafi Bhai and Muhammad Umar Bhai had done on Urdu Mehfil, I put together a Node.js (JavaScript) version of the tool. It worked, and I used it regularly, but it came with three rather annoying problems:
  1. It still had to be run from the command line. There was a graphical interface at one point, but it never really worked properly.
  2. It only worked on a computer. So whenever a book was needed, the routine was always the same: open the laptop first, then download the book.
  3. There was no reading facility. One had to download books blindly. And before downloading a dozen books out of sheer curiosity, it is usually nice to know whether a book is actually worth reading in the first place.

The original plan was to package the entire JavaScript library as an NPM package. Partly because it would be useful, and partly because it seemed like a good opportunity to gain some experience in that area as well.

Then, as often happens with side projects, life intervened and the idea quietly slipped out of mind.

I remember mentioning it to Umar Bhai during a private conversation on Mahfil. A few months later the idea resurfaced, so naturally I opened Mahfil again and started digging through the old discussion threads to refresh my memory and reconstruct the project's history.

Eventually I landed on Muhammad Umar Bhai's GitHub profile and discovered that he had already published a JavaScript version of the tool.

Suffice it to say, I sat there feeling slightly defeated.

(For the record, the Windows version of this tool still exists and continues to work perfectly well. The only catch is that it has no graphical user interface. Think of it as a traditional command-line application that you run through Command Prompt. Not particularly difficult, but an interface certainly makes life easier.)

Then fate decided to intervene.

Looking back at that old codebase sparked a new idea: why not port the entire thing to the frontend and make it work directly as a web application? If successful, everything could happen inside the browser without requiring users to install or run anything complicated.

There was, however, one obstacle.

Browser security policies generally do not allow one website to freely interact with another website's resources. In technical terms, the browser gets quite protective and starts throwing what developers lovingly call CORS errors.

To work around that limitation, I considered two possible solutions and built support for both into the web application.

  1. Proxy Backend

    The first approach was to use a proxy backend. In simple terms, a backend service fetches the data on your behalf and returns the response to the application. Since the browser sees the request as originating from your own backend, it usually has no reason to object. In theory, this should solve the problem quite neatly. For the sake of accuracy, I should mention that I never fully tested this route in production. My expectation is that it should work, but because the real challenge involves loading images rather than ordinary API responses, there is always the possibility of running into the same CORS restrictions further down the chain. Which brings us to the second and far simpler workaround...
  2. CORS Bypass Extension

    This is by far the easiest solution. Browser extensions exist specifically for bypassing CORS restrictions, and several of them are freely available. Install one, enable it when needed, and the application can access the resources it requires. The extension linked in this article is the one I have been using myself.

As inelegant as browser workarounds sometimes feel, they have one undeniable advantage: they save everyone from setting up servers, configuring proxies, maintaining infrastructure, and generally turning a simple reading tool into a full-time engineering project.

In the end, the goal was not to build a monument to software architecture. The goal was much simpler:

Open a book. Read a book. Download a book if you want.

Preferably from a phone while lying comfortably on a sofa.

How to Use the Tool

To use the tool, simply follow the steps below in order.
  1. Install a CORS bypass extension. Download it here .

    If you intend to use the tool on Android, make sure you are using a browser that supports extensions. One such browser is Kiwi Browser. Kiwi Browser for Android You can download the APK from the Assets section of the release page, or obtain it from any other trusted source you prefer.
  2. Open the Rekhta Reader web application. Rekhta Reader (https://tools.shakeeb.in/rekhta-reader/)
  3. Enable the extension and start using the web application.

If you run into any issues, feel free to leave a comment below. Suggestions and feedback are equally welcome.

These days I find myself reading most books directly inside the tool, and rarely need to download them anymore. On mobile, however, I still download books occasionally simply because the reading experience is sometimes more comfortable that way.

What Comes Next?

This is not my first Rekhta-related project.

Some time ago I released another tool for Rekhta content in the form of a script and an Android application.

Related blog post:

dRekhta – Rekhta Content Scraper for Android (Release)

That project was designed for text content rather than books.

Now that the books side of the equation has been sorted out as well, the plan is to merge the text-focused tool into this same online platform.

The idea is simple: instead of maintaining separate tools for separate tasks, everything should live under one roof.

Once that happens, you will be able to browse and download Rekhta's poetry, short stories, prose content, and books from a single portal.

One search box, one interface, and hopefully a lot less jumping between websites.

Whether I can stop myself from adding even more features after that remains an entirely different question.


Shakeeb Ahmad
May 23, 12:35 AM


slug: rekhta-reader-downloader-web-app-read-download-urdu-books-mobile-desktop
og title: Rekhta Reader & Downloader (Web App) – Read and Download Thousands of Urdu Books on Mobile and Desktop
og description: Rekhta Reader & Downloader is a simple web application that lets you read Urdu books online and download them for offline use. Works on both mobile phones and desktop computers, with built-in book search and a clean reading experience.
keywords: rekhta reader, rekhta downloader, rekhta book downloader, rekhta books, urdu books online, read urdu books, download urdu books, urdu ebook reader, rekhta web app, rekhta reader online, urdu literature, urdu ebooks, mobile urdu books, desktop urdu books, rekhta reader downloader

Friday, 20 February 2026

Quran: Hifz Helper (App Release)

Assalamualaikum!

The Quran Hifz Helper app, which has been in development for over 6 years, is now complete. Alhamdulillah, we are releasing it this Ramadan. May Allah make it beneficial for everyone! Insha’Allah.

- Shakeeb Ahmad

Quran Hifz Helper Promo
Quran Hifz Helper Icon

Quran Hifz Helper

The ultimate Quran app — read, memorize, explore translations, and view scanned mushafs. A full digital experience, just like a real mushaf.

Official User Guide

Key Features

Full Quran

Page-by-page reading, browse by Juz/Surah, smooth navigation.

Scanned Mushaf

High-quality scans of authentic Quranic mushafs for digital viewing.

Audio Recitation

Beautiful recitation by famous Qaris with background playback.

Hifz Tracker

Track progress, streaks, and spaced repetition review.

Translation & Tafsir

Multiple English/Urdu translations, word-by-word meanings, and tafsir support.

Dark Mode

Eye-friendly light and dark themes.

Install on Any Device

Android

Install directly from Play Store or add PWA to home screen.

iPhone / iPad

Add to home screen via Safari for a full app-like experience.

Desktop

Install via Chrome or Edge for offline use.

Spread the Benefit

If you find this app useful, share it with others. Contributing to Quran service is ongoing charity.

Wednesday, 31 December 2025

Questions We Carry: An Interview with Samir Patil (Part 1)

Questions We Carry — Episode 01: Samir Patil (Part 1)

Monday, 13 January 2025

Setting Up OCR for Windows and Linux: A Comprehensive Guide

Automating repetitive tasks like extracting text from images can save valuable time (unless you don't value it, in that case it will save some worthless time). This process, known as Optical Character Recognition (OCR), is a powerful tool for converting text in images into editable formats. Here, I’ll walk you through setting up custom OCR solutions for both Windows (that we all have) and Linux (mostly used in offices) systems, complete with keyboard shortcuts for seamless integration.

I primarily use OCR for Urdu in my personal work, but professionally it is also required for English. Using Google Lens is a fine option, except if you dislike repeating those clicks and key presses just to copy text from an image. And to be honest - I kind of feel bad even for giant corps like Google when I unnecessarily utilize their 'precious' resources.

Why not use a browser extension you ask? Well, because it's limited to browser - and we do need text from other apps as well. You can argue that one can take a screenshot of that app and then go to browser and run OCR, but if you have opened a browser and afford to take a screenshot just for that, why not run Google Lens instead of an extension. You get the point.


Background

OCR technology is invaluable for tasks such as digitizing printed documents, extracting text from screenshots, or processing scanned images. By automating OCR, you can:

  • Instantly access extracted text.
  • Improve productivity.
  • Simplify your workflow.

This guide provides a step-by-step walkthrough for setting up OCR on Windows and Linux, ensuring a smooth and user-friendly experience.


Introduction

Why Automate OCR?

Manual text extraction is time-consuming and error-prone. Automating the process ensures:

  • Faster access to text data.
  • Minimal effort for repetitive tasks.
  • A consistent and reliable workflow.

How It Works

We’ll create scripts for Windows and Linux that:

  1. Capture an image or utilize an existing one.
  2. Perform OCR using Tesseract (an open-source OCR engine).
  3. Copy the extracted text directly to the clipboard.

Setup

Prerequisites

Before getting started, ensure you have the following:

  1. Tesseract OCR

    • Download and install from Tesseract’s official page.
    • Install necessary language packs (e.g., -l eng for English, -l ara+eng for Arabic and English).
  2. Clipboard Utilities

    • Windows: Use nircmd for clipboard operations.
    • Linux: Install xclip for clipboard management.
  3. Screenshot Tools

    • Windows: Use built-in snipping tools or third-party software.
    • Linux: Install flameshot for advanced screenshot functionality.

Procedure

For Windows

1. Create the OCR Script

Create a batch file named sstoocr.bat and save it in a convenient location:

@echo off
:: Save clipboard to image
start nircmd/nircmd.exe clipboard saveimage screenshot.png

:: Run Tesseract OCR on the image
tesseract screenshot.png output -l ara+eng

:: Copy extracted text to clipboard
type output.txt | clip

:: Optionally, clean up
:: del screenshot.png
:: del output.txt

2. Assign a Shortcut

  1. Place the script on your desktop.
  2. Right-click the script and select Create Shortcut.
  3. Right-click the shortcut, go to Properties, and under the Shortcut tab, assign Ctrl + Alt + O as the shortcut key.

3. Use the Script

  1. Copy an image to the clipboard or take a screenshot.
  2. Press Ctrl + Alt + O.
  3. The extracted text will automatically be copied to your clipboard.

For Linux

1. Create the OCR Script

Create a shell script named flameshot_ocr.sh:

#!/bin/bash
flameshot gui --raw | tesseract -l eng stdin stdout | xclip -selection clipboard

Make the script executable:

chmod +x flameshot_ocr.sh

2. Assign a Shortcut

  1. Open your desktop environment’s keyboard settings.
  2. Add a custom shortcut:
    • Command: /path/to/flameshot_ocr.sh
    • Shortcut: Ctrl + Shift + O

3. Use the Script

  1. Press Ctrl + Shift + O to open the Flameshot GUI.
  2. Select the area to capture.
  3. The text will be extracted and copied to your clipboard.

Conclusion

By following this guide, you can set up a streamlined OCR solution for both Windows and Linux. With a simple keyboard shortcut, you’ll have quick access to extracted text directly on your clipboard, saving time and effort.

Feel free to customize these scripts to better suit your needs. Happy automating, and may your workflows become ever more efficient!

Tuesday, 6 February 2024

Sleepless night

I get these constant reminders about the life and how fast it's passing and how much less time I've in my hand. How people achieved great things by the half my age and here I'm still wondering whether I'd ever be able to achieve something written on my virtual and mental todo lists. 
I am tired of not doing anything. Doing a lot but ultimately achieving nothing in the end. It seems I've never focused on one thing completely. I've spent countless hours on the things that we still not out for the world to see. They're all there in my harddrives or countless other places that I put my notes on - the notes app, todo manager, email draft, at least 6 different places in my telegram account, then WhatsApp self notes, Google docs, one drive backup files. Even hand written notes and mind maps.

I see people wrote books, read hundreds of pages a day, did preaching, tought and prayed, played and indulged in poetry. All with some sign of productivity.

For me, this productivity is zero. Or so does it seem. My sleepless mind is just wandering around at this moment of the night I know, but still I am awake at least as much to know how irresponsible, unproductive and knowingly lazy I am. 

I took deliberate steps to write everyday, made new year resolutions and prayed. Not sure why it's not working. No wait - I know why. It's all a buzz of distraction for me. People get on a track and keep repeating things manually. And me , first thing I do is to try and automate stuff that I've to do. 

I often recall Zack's comment on somebody who irritating-ly commented to a project where people had started to shout for Nastaleeq clothing for the UI, he said "koi achhal Kam shuru hota ni aur log Nastaleeq ki rat laga dete hain."
And that "Blog doesn't have a single post but font should be Nastaleeq".

Gyaan_vaapi mosque verdict and other ongoing problems triggered today's sleepless night. I had been thinking of doing some actual dawa work since the beginning of the ruling party but hah to me and double hah to these precious 10 years that I did nothing. Nada. 

I still have those notes from the Dawah camp of 2010. I vividly remember M. Kaleem Siddiqui arrival in Ismailpura mosque and the tashkeel where people passionately pledged for Dawah to their friends, colleagues and neighbours. I didn't have friends then, but I had a clear idea of what I'd do the day I'll have some. 

Now I do have friends and colleagues but they're just the observers. I've been the passive daaii, that I'll give to myself. But what I thought I should have been isn't a finished business. It is not. The interview I thought I would conduct, they're still in pending list. The phone calls I thought I'd make someday to remember my old days , they're not longer available as their numbers are lost to the time. Maybe tracing back on Facebook groups or LinkedIn will lead me to them someday and I'll get my chance.

I'm thinking I should just add all my todos and make them a public record. Maybe I won't be there long enough to cover this list. Not that I haven't already added them, the resolutions are the prime examples. But still if I have an extensive list at one place then it's probably help me focus on a few things every now and then, instead of wandering about in the pool of my own thoughts procrastinating endlessly. 

I need to arrange the notes on mobile, clean it up and then add them all to one todo list. The master one. Clearing clutter from everywhere and then try to close on the things that are about ready for release. 

Hah! I just remember that I've done this planning countless times and now the only difference is I'm documenting it right now. 

There's one more fear - losing everything of I keep it at one place. I had writer-monkey for this exact reason.
...
Shakeeb Ahmad
4:54am-5:18am, Feb 6, 2024

Wednesday, 26 April 2023

Building an App Builder - Strategies, Limitations and Available Tools

As a budding app developer, creating an app builder for mobile devices is an exciting idea which I'm giving a lot of thinking since early 2019. However, there are several strategies, and limitations that need to be considered before embarking on this journey. In this blog post, I will explore these aspects in detail.

This would be a brainstorming session for me, where I'd just put all that I've found while researching this subject.

Techniques

Scratchware

Scratchware was an interesting project but is now deprecated. Its technique was unique, where the app was built on the device itself, without any internet connection. However, other app builders mostly build the app on the server. Therefore, it is not necessary that the build part should be on the server.

Scratchware was based on MIT App Inventor as per their website before the deprecation. Showing ads before each build, and giving options to arrange items (buttons, cards, inputs, labels etc.) in rows and columns were really awesome features. For logic, it used Scratch Programming blocks.

APK Editor

Another app builder that is worth mentioning is APK Editor, which uses ARSCLib. Another similar one is APK Explorer Editor, which offers a full version via Fdroid.Other repos for Apk Editor might be using apktool.jar. Apktool is also being used in many Android apps, like revanced. How are they able to run.jar tools is a mystery for me yet, as executing jar requires JRE while Android runs on Dalvik Virtual Machine.

A workaround (or not?) is to use jar library via custom Cordova plugin. Plugin docs suggest it can be done easily. See this suggestion from a stackoverflow answer:

Add lib-file element to your plugin.xml:

<platform name="android">

  <lib-file src="AztecReader.jar" />

</platform>

Anyway, ApkEditor recompiles the app on the device itself, without any internet connection. This approach proves that building an app builder on a mobile device is possible without the need for a server.

Cordova-like Environment

Creating a Cordova-like environment on a mobile device seems difficult. Even though initializing an empty Cordova app within the user's device is possible using Node Mobile or AndroidJs, compiling the APK will be tricky as it would need gradle, java jdk, android build tools, apksigner, etc. The end-users may not have these tools installed on their devices, making it difficult for them to compile the app.

Termux

Java runtime, etc., would be possible using Termux in android, but that would require end-users to have Termux installed, which may be a challenge.

Using a Sample App as a Base

Another approach could be to use a sample app as a base and replace its content at runtime using a user-defined config file. This approach is similar to the Cordova-like environment but is more simplified and straightforward.

Meta-data

One of the most popular strategies for creating an app builder is to use meta-data. In this strategy, the "app" you define is meta-data in a higher-level definition that is interpreted in a host wrapper app. This approach makes it easier to create apps as the app builder is more of a code generator.

Desktop - HTML to APK

A tool I found, and tested but never used in production or even to build anything remotely of any use for myself is Website to APK which is a desktop-based tool. The interface looks like it's built using the C# Windows Form Application. The options are really great, and it's user-friendly. 

Softonic's dev bio hyperlink suggests Pravesh Agrawal as the developer. Web, Github, Twitter.

It seems to be using all the standard tools in the background (probably running a bash script for build instructions). Options to select a URL or a local folder are awesome, along with an icon, splash screen, and setting up Admob ids in presumably pre-configured ad spaces. 

This perfectly depicts the "meta-data" type or a "base app" already set, which is modified based on the user's input. 

Available Tools

There are several tools available for creating an app builder on mobile devices. Some of these tools include: 

AppSheet: AppSheet uses a meta-data strategy to create an app builder. It interprets the higher-level definition in a host wrapper app, making it easier to create apps.

A sample response to the question "Building an App Builder - how do they do it?" on stackoverflow as a reference:

I work at AppSheet. There are two basic approaches an app builder can follow: (a) act as a code generator, or (b) implement an intepreter. In the former case, it spits out code that gets compiled into an executable package that can be installed and run on a device. In the latter case, the "app" you define is meta-data in a higher-level definition that is interpreted in a host wrapper app. Each has its strengths and weaknesses. AppSheet uses the latter approach. — Praveen Seshadri

Thunkable: Thunkable uses a simple drag-drop interface and loads of pre-defined templates and customizations. As far as I remember, It also uses Sratch for programming logic similar to Scratchware.

Andromo: Andromo is an online app builder that lets you create Android apps without any coding. It has a user-friendly interface that makes it easy to build apps.

BuildFire: BuildFire is another online app builder that offers a drag-and-drop interface for creating Android apps.

Conclusion

I'm not really sure which strategy would work the best, but a couple of them looks promising to me. For Android on Android, editing the APK and recompiling might be the easiest one. Although I've to dig deeper to understand how APK editor and the likes do it. It's not just unzip and re-zip of the package, which often results in app corruption. 

A desktop app might be simple, but dependencies should be bundled within the executable in that case, otherwise, it'd again feel like something built for advanced users.

References

Scratchware Pro continued on GitHub

How do I build a Cordova 8.x cordova.jar to include in existing Android app?

Integrating Hybrid App (Cordova) with Native App (Java android app) — Part 1 by pankajbhandari08

Decompile and Modify APKs on the go with APKTool for Android [XDA Spotlight] introduces apktool by Andro Black

Android Studio: Add jar as library? Directly or using mavenCentral as per one of the comments

Including .jar file into cordova plugin with suggestion to add lib-file in plugin

Friday, 19 November 2021

Hirday Men Ik Jot Jali Hai - Ghazal by Shakeeb Ahmad

 Read in Urdu (Perso-Arabic) script here.



English

Apna man dukhiyaara kaisa, apana haal to aisa hai

Hirday mein ik jot jali hai jisne tan-man phoonka hai 

Prem nagar mein ik din mein aa nikala tha bhoola bhatka 

Khud ko bhool chuka hoon tab se, jag bhi saara bhoola hai 

Kitnee kaThin hai prem pareeksha, prem hua to kis se hua 

Apne aap ko sabse chhupa ke jisne chain ko loota hai 

Is sansaar mein sab hai tumhaara laikin preet ke taapu par 

Tum ke viyog mein jo dukh bhoge us ka maza to mera hai 

Sufi mulla sant pujaari vird vazeefe sab kuchh hech 

Preetam ke jalve ke aage yaaro sab kuchh pheeka hai 

Main bhee maala pher raha tha us ik naam kee barson se 

Ashkon kee maala pe japa tab naam vo dil mein utra hai 

Man to bahut hai naat likhoonga pyaar se us ko gaaunga 

Lekin tumne mujh kambakht ko is qaabil kab samjha hai 

Poochh raha hoon basti-basti aankhon mein ummeed lie 

Ek Shakeeb Ahmad hota tha tumne us ko dekha hai


Hindi

अपना मन दुखियारा कैसा, अपना हाल तो ऐसा है

हृदय में इक जोत जली है जिसने तन-मन फूँका है

प्रेम नगर में इक दिन में आ निकला था भूला भटका

ख़ुद को भूल चुका हूँ तब से, जग भी सारा भूला है

कितनी कठिन है प्रेम परीक्षा, प्रेम हुआ तो किस से हुआ

अपने आपको सबसे छुपा के जिसने चैन को लूटा है

इस संसार में सब है तुम्हारा लैकिन प्रीत के टापू पर

तुम के वियोग में जो दुख भोगे उस का मज़ा तो मेरा है

सूफ़ी मुल्ला संत पुजारी विर्द वज़ीफ़े सब कुछ हेच

प्रीतम के जल्वे के आगे यारो सब कुछ फीका है

मैं भी माला फेर रहा था उस इक नाम की बरसों से

अश्कों की माला पे जपा तब नाम वो दिल में उतरा है

मन तो बहुत है नात लिखूँगा प्यार से उस को गाऊँगा

लेकिन तुमने मुझ कम्बख़्त को इस क़ाबिल कब समझा है

पूछ रहा हूँ बस्ती-बस्ती आँखों में उम्मीद लिए

एक शकीब अहमद होता था तुमने उस को देखा है


Meanings

Hirday (हृदय): दिल  | heart
Prem Pariksha (प्रेम परीक्षा): मुहब्बत का इम्तेहान | test of love
Sansaar (संसार): दुनिया | world
Preet (प्रीत): मुहब्बत, प्यार | love
Taapu (टापू): जज़ीरा  | island
Viyog (वियोग): जुदाई, फ़िराक, हिज्र | separation from beloved
Dukh Bhogna (दुख भोगना): ग़म काटना, तकलीफ उठाना | to labor, to suffer
Preetam (प्रीतम): मेहबूब | beloved