Available for freelance & contract

Abdulkader
Safi

Lead Software Engineer. I design and ship web & mobile apps, AI products, and developer tools that people actually use.

Lebanon → Kuwait/Remote worldwide/Coding since 13

Dotnet PHP & Laravel PostgreSQL / MySQL Rest APIs JS/TS CSS & TailwindCSS React & Nextjs Laravel Blade Git & Github Docker Blender Zed, VS Code & NVIM Claude OpenCode Ollama Dotnet PHP & Laravel PostgreSQL / MySQL Rest APIs JS/TS CSS & TailwindCSS React & Nextjs Laravel Blade Git & Github Docker Blender Zed, VS Code & NVIM Claude OpenCode Ollama
Selected work

Things I've shipped

All projects →
01

Safi Site Audit

An Obsidian plugin that runs website audits from inside your vault and saves each one as a Markdown note, with a built-in dashboard for scores, category breakdowns and per-page issues.

Typescript CSS Svelte
02

Safi Studio Scanner

A terminal website audit tool and npm SDK that crawls a site and scores 93 checks across 15 categories: SEO, accessibility, performance, security, structured data, and more. Built with TypeScript on Node, cheerio for parsing, and Playwright as an optional engine.

Typescript Javascript Playwright
03

Vault CRM

A CRM for freelancers built inside Obsidian, where every client, deal, and project is a plain markdown note you own.

Tailwindcss Typescript Bun Svelte obsidian
04

Obsidian Plugin Svelte Starter Kit

A free, open-source starter template for building Obsidian plugins with Svelte 5, Tailwind v4, and shadcn-svelte. Components read Obsidian's own theme variables, so they match your active theme and recolor instantly on light/dark or theme switches, with no hardcoded styles and no rebuild.

Tailwindcss Typescript ShadCN Svelte
05

Nutshell: A desktop app for running and viewing squirrelscan website audits

A cross-platform desktop app (macOS, Windows, Linux) that runs squirrelscan website audits and shows the results in a clean dashboard. Run an audit and watch live progress, browse scores and issues with fixes, delete or refresh audits, and export styled Word reports. Built with Electron, TypeScript, and Tailwind CSS v4, and shipped as per-platform installers from a tagged GitHub release.

Tailwindcss Typescript
About
Abdulkader Safi
Abdulkader Safi Lead Software Engineer · 6+ years

I taught myself to code as a kid and never looked back. Today I lead engineering at DSRPT, a Google Premier Partner.

I care about clean code, fast performance, and solving hard problems well, whether it's a VSCode extension, an AI tool, or a large web app.

More about me →
2024–now

DSRPT

Lead Software Engineer
2023–2024

QUAD Digital Media

Full Stack Developer
2020–2023

Verozone Solution EG

Full Stack Developer
2018–2019

Ooredoo

Customer Care Supervisor
Writing

Notes from the work

All articles →
01

You probably don't need a database per tenant

Database-per-tenant is the default people reach for in multitenancy, and it's usually the wrong one. Here's the full spectrum from separate instances down to a discriminator column, what each one costs you per tenant forever, and why Postgres plus row-level security is enough for most apps.

Laravel Jul 01, 2026 9 min read
FAQ

Good questions

Quick answers about what I do and how to work with me.

I build scalable web apps, mobile apps, AI-powered tools, and developer tooling such as VSCode extensions. Most projects use Laravel, React, or Rust.

Mainly Laravel and PHP, React and TypeScript, and Rust. I also work with Livewire, Tailwind CSS, and modern AI APIs.

Use the contact page to share your idea and timeline. You will get a reply within one business day to scope the work and pricing.

Yes. I take on freelance builds, fixed-scope projects, and longer contract roles, remote or hybrid.

I am from Lebanon and live in Kuwait. I work with clients across the Gulf and worldwide on a remote schedule.

Over six years of professional software engineering, including leading engineering teams at DSRPT, a Google Premier Partner.

Let's build
something.

Have a project in mind, or just want to compare notes? I reply within a business day.

Start a conversation →