[go: up one dir, main page]

DEV Community

Mobeen Ahmed profile picture

Mobeen Ahmed

I build small, practical web tools and write about how they are made. PHP, CSS, and shipping simple ideas without overcomplicating them.

Joined Joined on 
Rebuilding a Node.js downloader in plain PHP: what shared hosting forced me to rewrite

Rebuilding a Node.js downloader in plain PHP: what shared hosting forced me to rewrite

Comments
3 min read
Writing honest 'coming soon' placeholders instead of shipping fake features

Writing honest 'coming soon' placeholders instead of shipping fake features

Comments
4 min read
A /api/health Endpoint: The Cheapest Uptime Monitoring There Is

A /api/health Endpoint: The Cheapest Uptime Monitoring There Is

Comments
3 min read
Why Extracted Folders Come Back as 750 on Shared Hosting and Break Everything

Why Extracted Folders Come Back as 750 on Shared Hosting and Break Everything

Comments
3 min read
Cache-Busting Static Assets with ?v=: So Visitors Actually Get the Fix

Cache-Busting Static Assets with ?v=: So Visitors Actually Get the Fix

Comments
4 min read
.htaccess Recipes I Trust: Forcing HTTPS and Hiding Config Files on Shared Hosting

.htaccess Recipes I Trust: Forcing HTTPS and Hiding Config Files on Shared Hosting

Comments
3 min read
Structuring a PHP project for shared hosting: no Composer, no build step

Structuring a PHP project for shared hosting: no Composer, no build step

Comments
3 min read
Facebook Reel Extraction Quirks I Ran Into

Facebook Reel Extraction Quirks I Ran Into

Comments
3 min read
TikTok watermarked vs clean: what the API options really mean

TikTok watermarked vs clean: what the API options really mean

Comments
3 min read
Why Some Instagram Reels Resolve and Stories Don't: Public vs Expiring Content

Why Some Instagram Reels Resolve and Stories Don't: Public vs Expiring Content

Comments
3 min read
Expiring Signed URLs: Why Some Download Links Die After Minutes

Expiring Signed URLs: Why Some Download Links Die After Minutes

Comments
3 min read
End-to-end download testing with curl: my checklist before calling a feature live

End-to-end download testing with curl: my checklist before calling a feature live

Comments
3 min read
Free vs paid RapidAPI tiers: the maths I did before subscribing

Free vs paid RapidAPI tiers: the maths I did before subscribing

Comments
3 min read
No Sign-Up, No Accounts: The Privacy Posture of a Simple Downloader

No Sign-Up, No Accounts: The Privacy Posture of a Simple Downloader

Comments
3 min read
Why I never store downloaded files on my own server

Why I never store downloaded files on my own server

1
Comments 1
3 min read
Logging provider failures without storing anything about the user

Logging provider failures without storing anything about the user

Comments 1
3 min read
When the Provider Is Down, Say So: Honest Error Messages Instead of Spinners

When the Provider Is Down, Say So: Honest Error Messages Instead of Spinners

Comments
3 min read
'Direct' vs 'proxied' download links: what the user actually experiences

'Direct' vs 'proxied' download links: what the user actually experiences

Comments
3 min read
A Language Selector Dropdown With No Framework and No Layout Shift

A Language Selector Dropdown With No Framework and No Layout Shift

1
Comments
3 min read
Share links with app state in the URL hash: copy, paste, resume

Share links with app state in the URL hash: copy, paste, resume

2
Comments
3 min read
Canvas-generated receipt images in the browser: no server, no library

Canvas-generated receipt images in the browser: no server, no library

Comments
3 min read
Minifying a shared JS engine and proving it still works

Minifying a shared JS engine and proving it still works

Comments
3 min read
Deferring render-blocking JS without breaking a vanilla-JS app

Deferring render-blocking JS without breaking a vanilla-JS app

Comments
4 min read
Favicon 404s: the tiny missing file that made Google show a generic globe

Favicon 404s: the tiny missing file that made Google show a generic globe

Comments
3 min read
I Retagged My Site With the Wrong GA4 ID and Lost a Week of Data

I Retagged My Site With the Wrong GA4 ID and Lost a Week of Data

Comments 1
3 min read
ads.txt on a plain PHP site: the 5-minute job people skip

ads.txt on a plain PHP site: the 5-minute job people skip

Comments
3 min read
Robots meta vs X-Robots-Tag: why I only use the meta tag

Robots meta vs X-Robots-Tag: why I only use the meta tag

1
Comments
3 min read
Open Graph Tags for a Downloader: Making Pasted Links Look Right

Open Graph Tags for a Downloader: Making Pasted Links Look Right

1
Comments
3 min read
WebApplication Schema for a Free Web Tool: the JSON-LD I Ship on ramrom.io

WebApplication Schema for a Free Web Tool: the JSON-LD I Ship on ramrom.io

Comments
3 min read
FAQPage JSON-LD on Tool Pages: What It Is and Why I Add It to Every New Page

FAQPage JSON-LD on Tool Pages: What It Is and Why I Add It to Every New Page

Comments
3 min read
Mobile-First CSS for a Single-Purpose Tool Page

Mobile-First CSS for a Single-Purpose Tool Page

Comments
3 min read
Why some CDNs serve empty responses to datacenter IPs — and the direct-link fallback that saved my downloader

Why some CDNs serve empty responses to datacenter IPs — and the direct-link fallback that saved my downloader

Comments
3 min read
Following redirects safely in a PHP download proxy: why I cap them at five hops

Following redirects safely in a PHP download proxy: why I cap them at five hops

Comments
4 min read
Content-Disposition: the header that makes the browser download instead of play

Content-Disposition: the header that makes the browser download instead of play

Comments
3 min read
How I Check a Download Is a Real MP4, Not an HTML Error Page Wearing a .mp4 Name

How I Check a Download Is a Real MP4, Not an HTML Error Page Wearing a .mp4 Name

Comments
3 min read
Where the Download Button Goes: Small UX Decisions on a Tool Homepage

Where the Download Button Goes: Small UX Decisions on a Tool Homepage

Comments
3 min read
Sitemap strategy for an 18-page tool site: what to include and what to leave out

Sitemap strategy for an 18-page tool site: what to include and what to leave out

Comments
3 min read
Submitting URLs to IndexNow from PHP: getting Bing and Yandex to notice new pages in hours

Submitting URLs to IndexNow from PHP: getting Bing and Yandex to notice new pages in hours

Comments
3 min read
i18n for 9 languages with a tiny JS dictionary and zero frameworks

i18n for 9 languages with a tiny JS dictionary and zero frameworks

Comments
3 min read
A network-first service worker for a tool site: installable without breaking the downloader

A network-first service worker for a tool site: installable without breaking the downloader

Comments
2 min read
Caching provider API responses in flat files to survive outages on shared hosting

Caching provider API responses in flat files to survive outages on shared hosting

Comments 1
3 min read
There Is No MP3 on YouTube: Why I Label the Audio Button M4A

There Is No MP3 on YouTube: Why I Label the Audio Button M4A

Comments
2 min read
YouTube adaptive vs muxed streams: why video-with-sound tops out at 360p

YouTube adaptive vs muxed streams: why video-with-sound tops out at 360p

Comments
3 min read
HLS vs progressive MP4: what a video downloader actually hands you

HLS vs progressive MP4: what a video downloader actually hands you

Comments
3 min read
Why I proxy video downloads through my own server instead of hotlinking

Why I proxy video downloads through my own server instead of hotlinking

Comments
2 min read
The guard rails in my PHP download proxy: stopping server-side request forgery on ramrom.io

The guard rails in my PHP download proxy: stopping server-side request forgery on ramrom.io

1
Comments
3 min read
Retrying flaky APIs in plain PHP: the 3-attempt loop behind ramrom.io's downloader

Retrying flaky APIs in plain PHP: the 3-attempt loop behind ramrom.io's downloader

1
Comments 1
3 min read
Per-IP rate limiting in plain PHP with no Redis: a file-based counter that keeps my downloader alive

Per-IP rate limiting in plain PHP with no Redis: a file-based counter that keeps my downloader alive

1
Comments
3 min read
My pay tables kept getting cut off on phones. The fix was showing less, not shrinking more.

My pay tables kept getting cut off on phones. The fix was showing less, not shrinking more.

Comments
2 min read
TikTok photo posts have no video file, so I stopped looking for one

TikTok photo posts have no video file, so I stopped looking for one

Comments
1 min read
I built a free video downloader that runs on plain PHP hosting

I built a free video downloader that runs on plain PHP hosting

Comments
2 min read
loading...