<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dhruba Singha Roy</title>
    <description>The latest articles on DEV Community by Dhruba Singha Roy (@dhrubasingharoy).</description>
    <link>https://dev.to/dhrubasingharoy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F948002%2Ff3c1e0f8-f126-420c-abc0-b13ceef3007e.jpeg</url>
      <title>DEV Community: Dhruba Singha Roy</title>
      <link>https://dev.to/dhrubasingharoy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhrubasingharoy"/>
    <language>en</language>
    <item>
      <title>This is my journey starting from getting into the university to becoming an Engineer and a Founder. I really enjoyed my journey days and night all into the tech and the community.</title>
      <dc:creator>Dhruba Singha Roy</dc:creator>
      <pubDate>Sat, 29 Aug 2026 16:45:25 +0000</pubDate>
      <link>https://dev.to/dhrubasingharoy/this-is-my-journey-starting-from-getting-into-the-university-to-becoming-an-engineer-i-really-55f8</link>
      <guid>https://dev.to/dhrubasingharoy/this-is-my-journey-starting-from-getting-into-the-university-to-becoming-an-engineer-i-really-55f8</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://dev.to/dhrubasingharoy/journey-of-dhruba-singha-roy-3711" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe71aln3xau8kg0cmn73s.png" height="418" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://dev.to/dhrubasingharoy/journey-of-dhruba-singha-roy-3711" rel="noopener noreferrer" class="c-link"&gt;
            Journey of Dhruba Singha Roy - DEV Community
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Profile Who Is Dhruba Singha Roy? Dhruba Singha Roy is a QA and automation engineer at Cognizant and...
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png" width="300" height="299"&gt;
          dev.to
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Journey of Dhruba Singha Roy</title>
      <dc:creator>Dhruba Singha Roy</dc:creator>
      <pubDate>Sat, 29 Aug 2026 16:41:20 +0000</pubDate>
      <link>https://dev.to/dhrubasingharoy/journey-of-dhruba-singha-roy-3711</link>
      <guid>https://dev.to/dhrubasingharoy/journey-of-dhruba-singha-roy-3711</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyygepob2lx792jfyhjy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyygepob2lx792jfyhjy.jpg" alt=" " width="800" height="701"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Profile&lt;/strong&gt;&lt;br&gt;
Who Is Dhruba Singha Roy?&lt;br&gt;
Dhruba Singha Roy is a QA and automation engineer at Cognizant and the founder of Randomly.online, a free ecosystem of 400+ browser-based tools that process files locally. He builds test automation with Playwright, Selenium, Java and CI/CD pipelines, and previously founded the Animetype social app and led a Google Developer Student Club of over 1,000 members.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Foundation &amp;amp; Animetype&lt;/strong&gt;&lt;br&gt;
Phase 1 (2022-2023)&lt;br&gt;
My journey began deep in college life at the Haldia Institute of Technology. Driven by a desire to build living, interactive systems, I poured my early focus into mobile development. I single-handedly built and launched Animetype, a dedicated social media platform, and successfully published it on the Google Play Store. Seeing it scale and acquire thousands of users was my first real-world exposure to system architecture and product development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community Leadership&lt;/strong&gt;&lt;br&gt;
Phase 2 (2023-2024)&lt;br&gt;
With a solid technical foundation, I stepped up as the Google Developer Student Clubs (GDSC) Lead. My focus shifted from purely writing code to scaling human networks. I successfully grew our community to over 1000 members and personally mentored more than 100 students, elevating our chapter to Tier-1 status. This phase taught me that true architecture isn't just about databases; it's about leading teams and communicating a unified vision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Web Ecosystem&lt;/strong&gt;&lt;br&gt;
Phase 3 (2025)&lt;br&gt;
Driven by a desire to build accessible utility at scale, I pivoted heavily into advanced web development and founded Randomly.online. I engineered it from the ground up into a massive, worldwide ecosystem featuring over 400+ distinct tools and a dedicated Chrome extension. This heavy investment in web technologies honed my skills in UI/UX, frontend architecture, and deploying high-traffic systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise QA &amp;amp; Automation&lt;/strong&gt;&lt;br&gt;
Phase 4 (2026-Present)&lt;br&gt;
Today, I am navigating my profession as a QA / Automation Engineer at Cognizant. My enterprise journey began with a 4-month internship in Tambaram, Chennai (2024), where I gained intensive hands-on experience with Java, OOPs, DSA, Selenium, TestNG, API Testing, SQL, Git, Jenkins, GitHub Actions, CI/CD, and overall test strategy. This rigorous foundation led to a full-time role by August 2025. After initially mastering manual testing, I rapidly scaled into full automation architecture. I now design and maintain robust test frameworks utilizing Playwright, Selenium, Docker, and advanced CI/CD pipelines—ensuring that massive enterprise systems don't just work, but scale flawlessly.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Deleting every country border cut my world map in half</title>
      <dc:creator>Dhruba Singha Roy</dc:creator>
      <pubDate>Sat, 22 Aug 2026 09:56:11 +0000</pubDate>
      <link>https://dev.to/dhrubasingharoy/deleting-every-country-border-cut-my-world-map-in-half-1pg4</link>
      <guid>https://dev.to/dhrubasingharoy/deleting-every-country-border-cut-my-world-map-in-half-1pg4</guid>
      <description>&lt;h2&gt;
  
  
  What this is about
&lt;/h2&gt;

&lt;p&gt;I run &lt;a href="https://randomly.online" rel="noopener noreferrer"&gt;randomly.online&lt;/a&gt;, a set of free browser tools that all share one rule: your data never leaves your machine. No uploads. No accounts. Nothing round-trips to a server. One of those tools is a world clock, where you pin the cities your schedule depends on and watch them all tick at once.&lt;/p&gt;

&lt;p&gt;That page needed a map. Building it forced a decision I had not expected to make, about whose version of the world's borders I was going to publish.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/images%2F01-cover-coastlines-no-borders.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/images%2F01-cover-coastlines-no-borders.webp" alt="A dark world map showing continents as filled coastline shapes with no internal country borders. City pins mark Toronto, New York, London, Paris, Moscow, Delhi, Tokyo, Sydney and others, each with a small label." width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The shipped map. Look closely: there is not a single line between countries.&lt;/p&gt;

&lt;p&gt;The short version: Natural Earth's &lt;code&gt;countries&lt;/code&gt; layer encodes disputed boundaries as &lt;em&gt;de facto&lt;/em&gt; control, so drawing it publishes a position on Kashmir, Crimea, Western Sahara, Taiwan and several others without anyone choosing to. I switched the build to Natural Earth's &lt;code&gt;land&lt;/code&gt; layer, which is the same coastlines with internal boundaries dissolved away. The disputed lines are gone. They are not in the shipped file to be drawn. That change also cut the geometry from 77.6K to 35.3K raw, and 30K to 14K gzipped, because internal border arcs were 36% of the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the map actually does
&lt;/h2&gt;

&lt;p&gt;Worth setting the scene, because the constraints drove everything after.&lt;/p&gt;

&lt;p&gt;It renders to a &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; from three JSON files served off my own domain. You can zoom to 14x. There are 1,400 cities from GeoNames, a day/night terminator that moves in real time, and an optional layer shading UTC offset regions. Click a pin and you get a card with that city's local time, its offset, and whether it is currently day or night there.&lt;/p&gt;

&lt;p&gt;No tile server, ever. That is the whole reason the geometry is self-hosted rather than pulled from Mapbox or Google Maps, and it is why file size mattered enough to measure. A default page load is 52K gzipped for the entire map.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why are country borders a problem?
&lt;/h2&gt;

&lt;p&gt;Natural Earth is public-domain vector map data. It is the obvious start. Its &lt;code&gt;countries&lt;/code&gt; layer depicts de facto control — project who actually administers a, territory rather than who claims. it The says so openly and disclaims any authority on the question.&lt;/p&gt;

&lt;p&gt;Draw those outlines and you have drawn the Kashmir Line of Control rather than India's claimed border. You have also drawn Crimea, Western Sahara, the Israel/Palestine line, Kosovo, Northern Cyprus, and Taiwan as a separate outline.&lt;/p&gt;

&lt;p&gt;I chose none of that. It arrived with the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fikr63z8xh9pysmjdhl6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fikr63z8xh9pysmjdhl6l.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
I am based in India, where the depiction of national boundaries on published maps is regulated and getting it wrong is not hypothetical. That is my sharp edge. But the general problem is bigger than my jurisdiction. I had shipped a political position inside a clock widget, on seven or eight live disputes at once, because I picked the obvious layer from the obvious dataset and did not look closely at what it drew.&lt;/p&gt;

&lt;p&gt;The fix was one line. &lt;code&gt;buildLand()&lt;/code&gt; now reads &lt;code&gt;topology.objects.land&lt;/code&gt; instead of &lt;code&gt;topology.objects.countries&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I could have kept the country geometry and simply not stroked the internal lines. I deliberately did not. Hiding a line leaves it in the file, one CSS change away from coming back on some future afternoon when I have forgotten why it was hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much smaller did it get?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Land geometry, raw&lt;/td&gt;
&lt;td&gt;77.6K&lt;/td&gt;
&lt;td&gt;35.3K&lt;/td&gt;
&lt;td&gt;−54%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Land geometry, gzipped&lt;/td&gt;
&lt;td&gt;30K&lt;/td&gt;
&lt;td&gt;14K&lt;/td&gt;
&lt;td&gt;−53%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Internal borders were 36% of the geometry: 327 arcs and 2,976 points that existed only to draw lines between neighbours. A coastline borders the sea. Borders are shared between two countries, and the dataset stores them as their own arcs.&lt;/p&gt;

&lt;p&gt;So the version that sidesteps the legal problem is also the version that loads faster. That was luck, not foresight. The rest of the size win is encoding: rings are quantised to 0.01 degrees and delta-encoded as integers, which saves more than any simplification pass I tried.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the antimeridian bug?
&lt;/h2&gt;

&lt;p&gt;Once the borders were gone I noticed something I had been looking at for days without registering it — a land-coloured stripe running the full width of the map, north of Siberia. I had filed it mentally as a rendering artifact. It was a country.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu4e4bw0a1r75cb7ioyhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu4e4bw0a1r75cb7ioyhy.png" alt=" " width="390" height="844"&gt;&lt;/a&gt;&lt;br&gt;
Four polygons in Natural Earth cross the 180th meridian: the Chukotka lobe of Russia, Wrangel Island, eastern Fiji, and Antarctica's seam. When a polygon crosses that line, its longitude jumps by 360 degrees between two adjacent points — from +179 to −179. On an equirectangular projection, the renderer connects those two points with a straight line, and that line runs across every longitude on Earth. The renderer obeyed.&lt;/p&gt;

&lt;p&gt;Wrangel Island is ten points. Ten points painted a bar across the entire Arctic.&lt;/p&gt;

&lt;p&gt;The fix runs at build time. &lt;code&gt;splitAtAntimeridian()&lt;/code&gt; unwraps each ring so its longitudes run continuously past 180, then uses Sutherland-Hodgman clipping to cut a copy into every 360-degree window the ring touches. Russia went from 12 rings to 14. Fiji went 2 to 3. Total cost across the whole file: 36 bytes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdaotzmmhyplwf47b3lr2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdaotzmmhyplwf47b3lr2.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
One ordering detail cost me an hour. &lt;strong&gt;The split has to happen before simplification.&lt;/strong&gt; A line-simplification pass measures perpendicular distance between points to decide what to discard, and an unsplit ring contains a 360-degree jump that the simplifier reads as an enormous, obviously important feature worth preserving at all costs. Split first. Then simplify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why were clicks near cities disappearing?
&lt;/h2&gt;

&lt;p&gt;The map has about 40 invisible 22-pixel hit targets sitting over city pins. Clicking one usually did nothing at all, and the console stayed silent. Two bugs were stacked.&lt;/p&gt;

&lt;p&gt;The first was mine. My pan-versus-click threshold was &lt;code&gt;Math.hypot(dx, dy) &amp;gt; 4&lt;/code&gt;, meaning any pointer movement over four pixels counted as a drag rather than a click. No real hand holds four pixels between press and release. Ordinary clicks were being classified as tiny pans and discarded with no feedback. The threshold is now 10 pixels for a mouse and 16 for touch.&lt;/p&gt;

&lt;p&gt;The second one is worth knowing if you write pointer handlers yourself. My &lt;code&gt;endPointer&lt;/code&gt; skipped any release whose target was a pin button, on the reasonable-sounding theory that the button would receive its own click event. It does not.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The browser dispatches &lt;code&gt;click&lt;/code&gt; to the &lt;strong&gt;common ancestor&lt;/strong&gt; of the &lt;code&gt;pointerdown&lt;/code&gt; and &lt;code&gt;pointerup&lt;/code&gt;&lt;br&gt;
targets.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Press on open canvas, release on a pin, and the &lt;code&gt;click&lt;/code&gt; fires on the stage — never on the button. My handler ignored it because the release looked like it belonged to the button. The button never heard. Since the pins blanket every populated region, that was most clicks anywhere near a city.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I deliberately left alone
&lt;/h2&gt;

&lt;p&gt;Two political residues are still in the shipped product, and both are choices rather than things I missed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/images%2F02-utc-bands-layer-on.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/images%2F02-utc-bands-layer-on.webp" alt="The same world map with the UTC bands layer switched on, showing vertical coloured stripes across the map marking standard-time offset regions." width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The optional UTC bands layer. These stripes do follow political borders, because time zones are political.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The bands layer follows political boundaries, because Natural Earth's time zone polygons do. It is off by default. It lazy-loads too, so the 21K it costs is only paid by people who switch it on. A time zone boundary reads as a claim about clocks rather than about sovereignty, and I decided that was a different kind of line.&lt;/p&gt;

&lt;p&gt;City detail cards also still name the country a city sits in, straight from GeoNames. Sevastopol comes through as UA. Eight cities come through as TW. Naming the country a city is in is ordinary, the source is cited on the page, and stripping country names to dodge the question would have made the tool worse at its actual job.&lt;/p&gt;

&lt;p&gt;I refused one shortcut. Time zone shading genuinely requires political boundaries, because time zones are political artifacts. The tempting alternative is 15-degree meridian stripes, which are clean, symmetric and wrong. China spans five of them and runs a single offset across all five. A world clock drawing those stripes would be lying about the largest single population it covers.&lt;/p&gt;

&lt;p&gt;The regression test now asserts that the &lt;code&gt;countries&lt;/code&gt; key is &lt;strong&gt;absent&lt;/strong&gt; from the built payload and that a &lt;code&gt;bordersNote&lt;/code&gt; field is present. If some future version of me reinstates per-country geometry, the build fails loudly instead of quietly redrawing Kashmir.&lt;/p&gt;

&lt;p&gt;The map runs on the &lt;a href="https://randomly.online/date-time-tools/world-clock" rel="noopener noreferrer"&gt;world clock at randomly.online&lt;/a&gt;. Map data: &lt;a href="https://www.naturalearthdata.com/" rel="noopener noreferrer"&gt;Natural Earth&lt;/a&gt; (public domain). City coordinates: &lt;a href="https://www.geonames.org/" rel="noopener noreferrer"&gt;GeoNames&lt;/a&gt; (CC BY 4.0). 1,400 cities, rendered in your browser, no tile server contacted.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F81mp5vml2o50ay21sw39.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F81mp5vml2o50ay21sw39.webp" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>worldmap</category>
      <category>utcbands</category>
      <category>javascript</category>
      <category>privacyfirst</category>
    </item>
    <item>
      <title>Stop Searching for 100 Tools — Use One Platform Instead</title>
      <dc:creator>Dhruba Singha Roy</dc:creator>
      <pubDate>Sat, 25 Apr 2026 07:32:24 +0000</pubDate>
      <link>https://dev.to/dhrubasingharoy/stop-searching-for-100-tools-use-one-platform-instead-3698</link>
      <guid>https://dev.to/dhrubasingharoy/stop-searching-for-100-tools-use-one-platform-instead-3698</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg1wnpa70g1cf84fq13z.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg1wnpa70g1cf84fq13z.PNG" alt=" " width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The problem nobody talks about&lt;/p&gt;

&lt;p&gt;Every time you need something simple, you search:&lt;/p&gt;

&lt;p&gt;“compress image”&lt;br&gt;
“merge PDF”&lt;br&gt;
“convert JSON”&lt;/p&gt;

&lt;p&gt;And every time:&lt;/p&gt;

&lt;p&gt;new website&lt;br&gt;
ads everywhere&lt;br&gt;
upload limits&lt;br&gt;
slow processing&lt;/p&gt;

&lt;p&gt;You waste more time finding tools than actually using them.&lt;/p&gt;

&lt;p&gt;The real issue&lt;/p&gt;

&lt;p&gt;Most online tools are:&lt;/p&gt;

&lt;p&gt;scattered across different websites&lt;br&gt;
limited or paywalled&lt;br&gt;
dependent on server uploads&lt;/p&gt;

&lt;p&gt;Some platforms even require uploads to external servers, which raises privacy concerns&lt;/p&gt;

&lt;p&gt;That’s inefficient.&lt;/p&gt;

&lt;p&gt;What a better solution looks like&lt;/p&gt;

&lt;p&gt;Instead of jumping between tools, you need:&lt;/p&gt;

&lt;p&gt;everything in one place&lt;br&gt;
instant processing&lt;br&gt;
no unnecessary complexity&lt;/p&gt;

&lt;p&gt;That’s exactly what I built:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://randomly.online" rel="noopener noreferrer"&gt;https://randomly.online&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What this platform actually offers&lt;/p&gt;

&lt;p&gt;It’s not one tool. It’s a complete toolkit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image Tools&lt;br&gt;
compress images&lt;br&gt;
convert formats (JPG, PNG, WebP)&lt;br&gt;
resize, crop, enhance&lt;br&gt;
PDF Tools&lt;br&gt;
merge, split, compress&lt;br&gt;
remove watermark&lt;br&gt;
convert formats&lt;br&gt;
Developer Tools&lt;br&gt;
JSON formatter &amp;amp; validator&lt;br&gt;
Base64 encoder/decoder&lt;br&gt;
regex tester&lt;br&gt;
Utility Tools&lt;br&gt;
date calculators&lt;br&gt;
random generators&lt;br&gt;
converters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All organized in one place&lt;/p&gt;

&lt;p&gt;Why this is different from typical tool websites&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Everything in one place&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No need to switch between multiple websites.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fast and simple&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No complex UI or setup.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Covers multiple categories&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not just images or PDFs — everything.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Practical tools only&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Focused on real use cases.&lt;/p&gt;

&lt;p&gt;Real use cases&lt;/p&gt;

&lt;p&gt;Instead of opening 5 tabs:&lt;/p&gt;

&lt;p&gt;compress images → done&lt;br&gt;
convert image format → done&lt;br&gt;
merge PDF → done&lt;/p&gt;

&lt;p&gt;All from one platform.&lt;/p&gt;

&lt;p&gt;When this is actually useful&lt;/p&gt;

&lt;p&gt;Use it if you:&lt;/p&gt;

&lt;p&gt;work with images or PDFs regularly&lt;br&gt;
build websites&lt;br&gt;
need quick developer utilities&lt;br&gt;
want simple tools without friction&lt;br&gt;
Final thought&lt;/p&gt;

&lt;p&gt;You don’t need more tools.&lt;/p&gt;

&lt;p&gt;You need fewer, better ones in one place.&lt;/p&gt;

&lt;p&gt;👉 Explore everything here:&lt;br&gt;
&lt;a href="https://randomly.online/" rel="noopener noreferrer"&gt;https://randomly.online/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tools</category>
      <category>pdftools</category>
      <category>imagetools</category>
      <category>alltoolsinoneplace</category>
    </item>
  </channel>
</rss>
