Projects

Projects

Products, tools and platforms I designed, built, or shipped end to end — from an Arabic-first SaaS to free tools that run in the browser and an app on the Play Store.

AI SaaS product2026

CV Screener

Upload a folder of CVs — every one is read, classified, and scored by AI, with each point traced to a quote from the CV.

The problem
HR teams receive hundreds of CVs per opening, many of them Arabic PDFs that most tools cannot read. Screening them by hand is slow and inconsistent, and an AI score with no explanation is not something a recruiter can trust or defend.
What I built
A full-stack, Arabic-default bilingual product. HR uploads files, folders, or ZIPs; a background worker extracts the text — repairing Arabic visual order — and n8n profiles each CV, places it in the account's own categories, and scores it on several dimensions with quoted evidence. The server verifies every quote against the CV before it can raise a score, and computes every number people sort by. On top sit filters on every profile field, Arabic and English full-text search, HR status, stars and notes, role screenings with weighted criteria and must-haves, AI summaries of any scope, CSV export, and an admin console.
My role
Full build — product, frontend, backend, and AI workflows

AI automation product2026

Universal Web Scraper

One link in, the whole site out — every page discovered, the data classified, and an Excel file with a tab for each kind of data.

The problem
Collecting data from websites usually means copying it by hand into Excel, or writing a new scraper for every site — and breaking it the moment a site blocks bots or renders its content with JavaScript.
What I built
You paste one link. The engine discovers every page of the site through its sitemap, classifies what it finds — companies, people, products, articles, jobs, places — and fills an Excel file with a tab per category, mirrored to Google Sheets. It runs in the background on n8n, so it keeps going after the laptop is closed, and the rows collected so far can be downloaded at any moment; large sites are split into parts. Each page fetch escalates only as far as it needs — direct request, proxy pool, scraping API, full renderer — and extraction reads JSON-LD and tables first, falling back to chunked, parallel AI extraction. A small web interface shows live progress, a time estimate, a preview of the rows, and pause, resume, cancel, and restart controls.
My role
Full build — interface and automation
Nour Motion Studio — desktop Nour Motion Studio — phone

Motion-graphics studio2026

Nour Motion Studio

Pick a size and a style, add ready-made scenes, and export a motion video — free, in the browser, with no account and no server.

The problem
Making a short motion video for LinkedIn, Reels, or YouTube usually means a paid subscription, a professional editor that takes weeks to learn, or an online service that keeps your project and your files.
What I built
An Arabic, right-to-left studio that runs entirely in the browser — no API key, no server, no subscription. A short wizard asks for the size and the style, then for a ready video idea or hand-picked scenes. Every template previews large and playing before it is added, and can be added as a new scene, merged into the current one, or swapped in for it. All of a scene's text sits in one place, a double tap writes straight onto the video, and a quick toolbar over any element enlarges, shrinks, recolours, animates, copies, or deletes it. Around that: a searchable library of animated backgrounds, including the living node mesh from this site; transitions previewed between your own scenes; camera moves with parallax depth; sound effects generated in the browser, plus your own voice-over; any moment saved as a PNG or JPG poster; and video themes, with day and night modes for the studio itself. The video is encoded on the visitor's own device with WebCodecs, falling back to real-time WebM recording where encoding is not supported. Projects autosave in the browser, and every frame carries a soft diagonal watermark that only the owner's password removes.
My role
Full build — design, editor, and rendering engine
Braille Certificate Maker — desktop Braille Certificate Maker — phone

Accessibility tool2026

Braille Certificate Maker

Fill in a training certificate and get a print-ready PDF — with a full Arabic Braille version a blind trainee can read by touch, and a file for Braille embossers.

The problem
A training certificate is usually printed for sighted readers only, so a blind trainee receives a document they cannot read for themselves. And Braille printed on an ordinary printer comes out as flat ink that cannot be felt.
What I built
A free, single-page tool in Arabic. The form covers what Saudi certificates carry — the four-part name, ID or residency number, nationality, programme, training hours, period, grade, and licence number — and issues completion, pass, and attendance certificates, with wording that switches between masculine and feminine. Hijri dates on the Umm al-Qura calendar are computed alongside the Gregorian, and the logo, signatures, stamp, and a verification QR code can be added, with a live preview of every page. The PDF opens with the certificate for sighted readers, followed by Braille pages holding the full text in Unified Arabic Braille — issuer, title, name, ID, programme, hours, period, grade, date, and signatures. The dots are standard-size and drawn as separate shapes so they can be printed in raised UV ink, with a light printed transcription between the lines that can be switched off. A second button downloads the text as a BRF file that Braille embossers read directly, and an in-page guide explains three ways to make the dots raised: an embosser, swell paper, or a raised-ink print shop. Nothing is stored or sent anywhere; automated checks hold the page to that promise, and tests match the Braille output against the unified table.
My role
Full build — design, Braille translation, and PDF output
Khatm · ختم — desktop Khatm · ختم — phone

E-invoicing platform · open source2026

Khatm · ختم

An open-source e-invoicing program for businesses in Saudi Arabia — with a public demo that issues and signs invoices entirely in the browser.

The problem
E-invoicing in the Kingdom's integration phase asks for more than a printed PDF: every invoice is a signed electronic file with a QR code, numbered in an unbroken chain and never edited once issued — corrections go through credit and debit notes. The hashing and signing must match the official reference exactly.
What I built
A TypeScript monorepo in three parts. An invoicing library builds UBL invoices, hashes them over canonical XML, signs them with ECDSA, generates the QR code and the device's certificate request, and handles onboarding and submission through the official API. A PostgreSQL schema adds guards at the database level: triggers stop an issued invoice from being edited or deleted, stop the counter from going back or skipping, and protect the audit log. The issuing core locks the device row for the whole transaction, so invoices issued in parallel keep an unbroken count and hash chain. Device keys and secrets are encrypted with AES-GCM under a master key kept outside the database, and amounts are calculated in exact decimals. The public demo runs the same library in the browser without changing a line: the seller's invoices grouped by customer, tax invoices for businesses and simplified invoices for individuals, credit and debit notes from an invoice's page, printing to PDF, sending over WhatsApp, and the signed XML file for the accountant. It signs with a public test certificate, sends nothing anywhere, and keeps everything in the visitor's browser; end-to-end tests issue every document type in a real browser and pass each through the official validator.
My role
Full build — invoicing library, database, and demo
The Complete Umrah Guide — desktop The Complete Umrah Guide — phone

Offline guide · PWA2026

The Complete Umrah Guide

An interactive Umrah checklist in the order the rites are performed, in ten languages — built to be used one-handed and offline, inside the Haram.

The problem
Umrah guidance is everywhere, yet hard to use in the moment: long PDFs you cannot read while walking, videos you cannot open in a crowd, and articles that bury the order of the rites in paragraphs. Inside the Haram the signal is often weak, and a large share of pilgrims cannot read.
What I built
A single HTML file with no dependencies and no build step. The rites are laid out as steps grouped into phases, from preparation and ihram at the miqat to shaving or shortening the hair, with each supplication placed at the moment it is said. Tap counters track the circuits of tawaf and sa'i, with undo, and completing the last circuit ticks its step. The guide also covers the prohibitions of ihram and the miqat locations, including what to do when arriving by air. A speaker button reads every supplication aloud in Arabic and every step in the selected language through the browser's own speech engine, for pilgrims who cannot read. Switching language rewrites the direction, fonts, and numerals across five writing systems, from Urdu Nastaliq to Chinese, without losing your place. It installs to the home screen and keeps working offline, keeps progress for a week, and can download a standalone copy in any language that runs from the phone with no connection at all; three text sizes and a print layout cover the rest. The content follows the Hanbali school as practised in the Two Holy Mosques, was reconciled against the official booklet given to pilgrims, and every correction is logged in the repository.
My role
Full build — content, design, and offline app

Internal platform2025–2026

DFS Dashboard

A unified CRM and quotation platform that replaced scattered manual processes across every department.

The problem
Customer management and quotation handling lived in separate manual steps with no shared context, so nothing was traceable end to end.
What I built
I owned the two core frontend modules — CRM and Quotation — and connected them into one workflow: creating and updating quotations, tracking statuses, managing customers and leads, and an internal module for projects and tasks with assignment and progress tracking. I worked closely with the backend team on API definitions and payload reviews so UI behaviour matched the business workflow.
My role
Frontend lead

Mobile app · Google Play2025

GoldenTag

A jewelry store management app shipped to the Google Play Store.

The problem
Jewelry retailers track inventory, staff, and sales on paper, in a market where the exchange rate moves daily.
What I built
I coordinated delivery end to end: requirements with the client, scope and acceptance criteria, user stories on Trello, and oversight across frontend, backend, and UI/UX through to publication. Features include inventory, employee management, barcode scanning, USD/SYP exchange rates, sales logging, and TXT export.
My role
Project coordinator

AI web app2026

Business Card Extractor

Photograph a business card, and it lands in your phone's contacts in one tap.

The problem
You collect a stack of business cards at an event and never open it again. It is a small problem that quietly costs sales teams real pipeline.
What I built
A web app that turns a photo of any business card into structured data — name, company, email, phone, website — in seconds, stores it in Google Sheets, and generates a vCard so the contact saves straight to the phone. No custom backend at all: an n8n workflow receives the image, GPT-4o Vision reads it, the data is validated and stored, and it flows back to the app. The one-tap save came from a user suggestion after the first release.
My role
Full build — frontend and automation

AI tooling2026

MCP Search Server

A Model Context Protocol server that lets an AI model query real data instead of only generating text.

The problem
Language models are fluent but disconnected. MCP is the bridge — but most of the discussion about it stays theoretical.
What I built
I built an MCP server with custom tools including a search tool, wired it to real data, and connected it to Claude — so a plain-language question like "what are the details of user 2" returns the correct record directly. The same pattern powers the MCP server that ships with this portfolio.
My role
Full build
Nour Aldeen Tofi