Every one is free to use — and never a subscription.
Every app runs on your own machine and stays yours once you have it. One has a one-time Pro unlock. Nothing to cancel, ever.
Never look up from work and realise you missed Asr.
Prayer times in your Mac's menu bar — a quiet countdown in the corner of your eye, alerting you gently or with the adhan you grew up hearing.
Free$14.99 PromacOS 14+
Apps
VocalDrop lifts the vocal clean out of any track
studio-grade acapella, on your own hardware
AI background remover in your browser
instant cutouts, right in the tab
Developer tools
JetBrains Toolbox at full line speed
16 parallel streams, byte-exact
Mac and Windows keyboard layouts switched for you
the instant a KVM hands the keyboard over
Authenticate sudo with Touch ID
including inside tmux
One screen for IDM's folders and categories
reviewed as a set, one Apply
Notes on Android, Kotlin and shipping.
Building My Own Static Site Generator: A 9-Year Journey Home
After 9 years of framework hopping—from Jekyll to Hugo to Nuxt to Next.js—I finally built exactly what I needed. This is the story of how a Kotlin developer with just enough JavaScript built a static site generator with Claude's help.
Making SDKMAN Java Work with macOS: A One-Line Fix
How to make /usr/libexec/java_home find JDK installed using SDKMAN on macOS. Fix Xcode build failures and tool integration with a single command.
Injecting JavaScript code into Android Webviews Two Ways
Two ways to talk to an Android WebView from Kotlin — evaluateJavascript for one-way calls into the page, and a JavascriptInterface for the page to call back — wired into a working app.
Free to use — kept going by you.
The apps stay free and the tools stay open. If one has earned a place in your day, a coffee or a sponsorship funds the next release.
Client work, in Kotlin.
Kotlin Multiplatform apps for iOS and Android, Compose Multiplatform for the UI, and the SDK and release work underneath.
KMP apps — iOS & Android
One Kotlin codebase, two native apps — shared logic, native where it counts.
Compose Multiplatform
A single UI codebase shipped across iOS, Android and desktop.
SDK development
Public Kotlin APIs, integration docs and DX for the teams embedding you.
Release engineering
GitHub Actions, signing and staged rollouts — the checks that stop bad builds shipping.
Five steps, no surprises.
Listen
You send what you are building and roughly when. The reply comes from the person who would do the work.
you get a reply, not a sales desk
Scope
A call to pin the scope down, then a written plan with milestones — before anything is committed.
you get a written plan with milestones
Build
Work lands in your repository as it is written, on your CI, to your review and testing standards.
you get code in your repo from the first commit
Ship
Signing keys and store accounts in your name, staged rollouts, and the checks that stop bad builds.
you get a release pipeline you own
Keep going
Longer product work runs month to month, and you can end it at the close of any month.
you get a rolling monthly engagement
What we believe.
One job per screen
Each screen answers one question. The second question gets its own screen.
Quiet by default
The interface waits. Alerts are earned, and the gentle one is the default.
Measured, not guessed
Sizes, angles and colours come from a few constants, so every application measures the same.
Yours from the first commit
Code, keys and store accounts sit in your name from day one. There is no handover, because nothing was ever held back.
One mark, measured every time.
The AR glyph is solved from a few constants, so every application measures the same. It is our own design system, shown the way we hand one over.
- Abdelraouf Studios
horizontal · header, documents
- Abdelraouf Studios
stacked · footer, covers, end cards
coin · contact button, stickers
Squircle
Primary. Use where the tile edge shows: favicon, app icon.
Full bleed
For platforms that apply their own mask.
Knockout
Glyph punched out; the surface shows through.
Mono
Deep #060E37 on light, white on dark. Never the blues.
Studio blue is ours. Product colours belong to products.
The blues mark the studio: the header, buttons, the mark, this section. Every product keeps its own block colour, so a page always says whose work it is.
- ground#0A3599
- bright#1D73ED
- deep#060E37
- white#F4F5F7
- PrayerTimes Pro
- VocalDrop
- Magic BG Remover
- jtaccel
- Layout Auto Switcher
- Touch ID for sudo
- IDM Download Router
- Display
- inter 900 · 56–100
- Heading
- inter 900 · 24–40
- Abdelraouf Studios
- figtree 700 · wordmark
- Body copy reads plainly.
- inter 500 · 16–22
- label · 04:12
- plex mono · 13–16
- card · 2px stroke · 4/4 drop · r16
- chip · 2px · 3/3 · r12
- pill · 2px · r9999 · no blur, ever
Scope, ownership, licensing — answered before you email.
What kind of work do you take on?
Kotlin Multiplatform apps that ship on both iOS and Android, Compose Multiplatform for the shared UI, SDK and library development, and the CI, signing and release plumbing underneath. We do not take on web front-ends, brand and marketing design, or staff augmentation by the seat.
How does a project start?
Send a short description of what you are building and roughly when you need it. You get a reply from the person who would do the work, not a sales desk, then a call to pin the scope down, then a written plan with milestones before anything is committed.
Fixed scope or ongoing?
Both. A defined deliverable — an SDK, a KMP module, a release pipeline — is quoted as a fixed scope with milestones. Longer product work runs as a rolling monthly engagement you can end at the close of any month. Cost depends on scope, so it is quoted after the scoping call rather than off a day-rate card.
Who owns the code, and when?
You do, and from the first commit rather than at the end. Work lands in your repository as it is written, on your CI, with signing keys and store accounts in your name — so there is no handover event, no escrow, and nothing the studio keeps a key to. Copyright in everything written for the project transfers to you on payment for that milestone; if we walk away mid-project you still hold every line already paid for.
What licences will we inherit with it?
Only ones you can live with, and you see the list before you own it. Dependencies are permissive by default — MIT, Apache-2.0, BSD — and anything copyleft that would reach a shipped binary is raised for your decision before it goes in, not discovered at review. Every build emits an attribution file listing each dependency, version and licence, generated from the lockfile on CI so it cannot drift from what actually ships. Where the studio reuses one of its own internal libraries, it comes to you under MIT: no component you licence back, and no dependency on us staying in business.
Can you work inside our existing codebase and team?
Yes. Kotlin Multiplatform and Compose Multiplatform land alongside your existing native code — shared modules first, CMP screens where you want them — so the app ships throughout rather than waiting on a rewrite. We work to your review and testing standards and hand over code your own team can maintain.
Why should we believe any of this?
Because you can check it before you email. Every product on this page is a download away and the developer tools are MIT on GitHub, so how we structure a project, handle failure and treat someone else’s data is readable in public — which is not true of a case study PDF.
Have something to build? Let’s talk.
Tell us what you are building and roughly when you need it. No pricing pages and no discovery deck — a reply from the person who would do the work: a senior Android engineer with 7+ years shipping production apps.
That did not look complete — give the brief a sentence or two, at least 20 characters, and check the email address.
That email address looks disposable, and the confirmation link would not reach it. Please use a permanent address.
That is a few messages in quick succession. Give it a minute and try once more.
The form is under unusual load right now. Please try again shortly.
That submission did not come from this page. Please fill the form in again here.
That submission was malformed. Please fill the form in again here.
That message was too large to accept. Please shorten it and try again.
That submission could not be read. Please fill the form in again here.
The anti-spam check did not pass. Reload the page and try once more — or reach out on LinkedIn below.
Something broke on our side and the message was not saved. Please try again, or reach out on LinkedIn below.
The message could not be sent — the connection dropped. Everything you typed is still here; check you are online and press Send once more.
That confirmation link did not work — it may have expired. Please send the message again from the form.