<?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: doureios39</title>
    <description>The latest articles on DEV Community by doureios39 (@doureios39).</description>
    <link>https://dev.to/doureios39</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3807960%2F0fc99517-e6c3-45f1-a241-26133989b5f6.jpg</url>
      <title>DEV Community: doureios39</title>
      <link>https://dev.to/doureios39</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/doureios39"/>
    <language>en</language>
    <item>
      <title>How to turn your phone into a survival tool that works without internet</title>
      <dc:creator>doureios39</dc:creator>
      <pubDate>Tue, 14 Apr 2026 10:08:51 +0000</pubDate>
      <link>https://dev.to/doureios39/how-to-turn-your-phone-into-a-survival-tool-that-works-without-internet-21c1</link>
      <guid>https://dev.to/doureios39/how-to-turn-your-phone-into-a-survival-tool-that-works-without-internet-21c1</guid>
      <description>&lt;p&gt;Last year, internet blackouts hit Iran, Myanmar, Sudan, and parts of South America. Undersea cable cuts left entire regions offline. Natural disasters knocked out power grids for days.&lt;br&gt;
Every time this happens, the same thing plays out. People reach for their phones and realize that without a connection, a $1000 device is just a flashlight.&lt;br&gt;
But it doesn't have to be that way. Your phone has GPS, a compass, a screen, storage, and processing power. All of that works without internet. The problem is that the apps we rely on don't.&lt;br&gt;
Here's how to set up your device so it actually works when the internet doesn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get your maps offline before you need them&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Maps lets you download regions for offline use, but most people never set this up. And even if you do, the downloaded area expires after a year and doesn't include business info like hospitals or pharmacies.&lt;br&gt;
A better approach is having a dedicated offline map with critical locations already marked. Hospitals, police stations, gas stations, pharmacies, shelters, water sources. Information that matters in an emergency, not restaurant reviews.&lt;/p&gt;

&lt;p&gt;This is one of the things I built into Gridless. During setup, it downloads the full location database for your country: over 113,000 locations for UK alone, including every hospital, police station, and pharmacy from OpenStreetMap and healthsites.io data. All saved to your device, all accessible without a single bar of signal.&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.amazonaws.com%2Fuploads%2Farticles%2F9v99hkduhmbs6jwu2x7h.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%2F9v99hkduhmbs6jwu2x7h.png" alt="Offline Maps" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But even if you don't use Gridless, go download your local area in Google Maps right now. Settings, Offline Maps, select your region. Takes 2 minutes. Do it today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save emergency information before you need to Google it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"How to stop severe bleeding." "What to do during an earthquake." "How to purify water."&lt;br&gt;
These are searches you never want to make when you can't reach Google. But almost nobody saves this information ahead of time.&lt;br&gt;
The basics everyone should have saved on their phone:&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.amazonaws.com%2Fuploads%2Farticles%2Fd7yeilw8fiiljogfvhlb.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%2Fd7yeilw8fiiljogfvhlb.png" alt="Guides" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to control severe bleeding (apply direct pressure, don't remove the cloth, elevate if possible)&lt;br&gt;
Earthquake protocol (drop, cover, hold on, stay away from windows)&lt;br&gt;
Water purification methods (boiling for 1 minute, or 8 drops of household bleach per gallon)&lt;br&gt;
CPR steps and ratios (30 compressions, 2 breaths)&lt;br&gt;
Your country's emergency numbers (not just 911, which only works in the US)&lt;/p&gt;

&lt;p&gt;Gridless includes 9 interactive emergency guides based on US Army FM 3-05.70, Red Cross, and WHO protocols. They walk you through each situation step by step, with branching decisions based on what's happening. They include text-to-speech so you can listen hands-free while treating someone.&lt;/p&gt;

&lt;p&gt;At minimum, take screenshots of basic first aid guides and save them to your camera roll. It's not elegant, but it works offline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Know how to communicate without internet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your phone's radio still works without internet. You can still make calls if cell towers are up. But what if you're in a foreign country and don't speak the language?&lt;/p&gt;

&lt;p&gt;A few things worth having on your device:&lt;/p&gt;

&lt;p&gt;Emergency numbers for the country you're in (police, ambulance, fire are different numbers in most countries)&lt;br&gt;
Basic phrases in the local language ("I need help," "Where is the hospital," "I'm injured")&lt;br&gt;
Knowledge of international distress signals (SOS in morse code: three short, three long, three short)&lt;br&gt;
Emergency radio frequencies if you have a radio receiver&lt;/p&gt;

&lt;p&gt;Gridless has a phrase book covering 11 languages with phonetic pronunciation, one-tap emergency calling for 38 countries, a morse code encoder with SOS flashlight, and a radio frequency guide. But even a screenshot of the local emergency number saved to your phone is better than nothing.&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.amazonaws.com%2Fuploads%2Farticles%2Fft08e4mrla40pbmnuj39.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%2Fft08e4mrla40pbmnuj39.png" alt="Emergency tools" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI doesn't need the cloud&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This surprises most people. You can run a full AI assistant on your laptop without any internet connection. &lt;br&gt;
It's not as powerful as ChatGPT, but it can answer medical questions, help you draft messages, translate text, explain survival techniques, and generally serve as a knowledge base when you can't reach the internet.&lt;br&gt;
Gridless has this built into the desktop app (Windows and Mac). You install it once, download a model (1.6 GB for the fast version), and you have an AI that works forever without internet. Nothing is ever sent to the cloud. It's yours.&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.amazonaws.com%2Fuploads%2Farticles%2F5ixoo3ox622ky9p4bb30.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%2F5ixoo3ox622ky9p4bb30.png" alt="Offline AI" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tools you forget you need&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your phone has a magnetometer (compass), a flashlight, a screen that can display morse code, and a speaker that can emit a loud alarm tone. These are basic survival tools hiding in a device most people only use for Instagram.&lt;br&gt;
Having them organized in one place, accessible offline, with clear purpose, is the difference between fumbling through settings during a crisis and having a tool ready to go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The bottom line&lt;/strong&gt;&lt;br&gt;
The internet is a single point of failure in our daily lives. Most of us have zero backup plan for when it goes down.&lt;br&gt;
You just need 10 minutes of preparation while you still have a connection.&lt;br&gt;
I built Gridless because I wanted all of this in one place. One app, one setup, works forever without internet. Offline maps with hospitals and emergency services for 38 countries. Emergency guides. AI assistant. Survival tools. All on your device.&lt;br&gt;
It's $19 during launch (regular $39). &lt;br&gt;
Gridless: &lt;a href="https://gridless.gumroad.com/l/gridless" rel="noopener noreferrer"&gt;https://gridless.gumroad.com/l/gridless&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>showdev</category>
      <category>mobile</category>
    </item>
    <item>
      <title>The security gap between "it works locally" and "it's live"</title>
      <dc:creator>doureios39</dc:creator>
      <pubDate>Thu, 05 Mar 2026 12:52:48 +0000</pubDate>
      <link>https://dev.to/doureios39/the-security-gap-between-it-works-locally-and-its-live-4b9f</link>
      <guid>https://dev.to/doureios39/the-security-gap-between-it-works-locally-and-its-live-4b9f</guid>
      <description>&lt;p&gt;Most developers treat deployment as the finish line. Code works, tests pass, push to production, done. But there's a gap between "it works locally" and "it's live on the internet" where security quietly falls apart.&lt;/p&gt;

&lt;p&gt;I built a pre-deployment scanner and over 100 developers have used it in the past few weeks. The same mistakes show up everywhere. Not sophisticated vulnerabilities - just things that got forgotten in the rush to ship.&lt;/p&gt;

&lt;p&gt;Here are the six most common ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. .env files served publicly**
&lt;/h2&gt;

&lt;p&gt;This is the big one. Your .env file has database passwords, API keys, and secrets. Locally, it sits safely in your project root. In production, if your web server isn't configured to block it, anyone can visit &lt;code&gt;yoursite.com/.env&lt;/code&gt; and read everything.&lt;/p&gt;

&lt;p&gt;It happens more than you think. A recent study of hackathon repos found that 17% had leaked credentials. And those are just the ones committed to git - the deployed versions are often worse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Make sure your server or hosting platform blocks requests to dotfiles. In Nginx, add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;/\.&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most frameworks handle this by default, but custom setups and VPS deploys often miss it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Database files at non-standard paths
&lt;/h2&gt;

&lt;p&gt;Static security scanners check for &lt;code&gt;/backup.sql&lt;/code&gt; or &lt;code&gt;/db.sqlite3&lt;/code&gt;. But real apps don't name their files that way. They use names like &lt;code&gt;myapp.db&lt;/code&gt;, &lt;code&gt;production_data.sqlite3&lt;/code&gt;, or the app name itself as the filename.&lt;/p&gt;

&lt;p&gt;I recently caught a deployed app serving its entire database file at a URL that no static scanner would ever guess - because the filename was based on the project name, not a common default. The scan detected it in about 1.3 seconds using directory listing detection and dynamic filename checks.&lt;/p&gt;

&lt;p&gt;This is the kind of thing that only gets caught if you actually probe the live deployment instead of checking a list of known paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Never store database files inside your web root. Keep them outside the directory your web server serves, or configure your server to block access to common database extensions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;.(db|sqlite3|sqlite|sql|mdb)&lt;/span&gt;$ &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Open database ports
&lt;/h2&gt;

&lt;p&gt;Locally, your Postgres runs on port 5432 and nobody can reach it. On a VPS, that same port might be open to the internet. Same with Redis (6379), MongoDB (27017), and MySQL (3306).&lt;/p&gt;

&lt;p&gt;An open database port with weak or default credentials is an invitation. Bots scan for these constantly - within minutes of spinning up a new server, you'll see connection attempts on common database ports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Configure your firewall to only allow database connections from your application server, not from the public internet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from your_app_ip to any port 5432
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or bind the database to localhost only in its configuration file.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Missing security headers
&lt;/h2&gt;

&lt;p&gt;Your app works fine without them. Nobody notices they're missing. But security headers like HSTS, Content-Security-Policy, and X-Frame-Options protect your users from real attacks - clickjacking, protocol downgrade attacks, XSS.&lt;/p&gt;

&lt;p&gt;Most frameworks don't add these by default. You have to configure them yourself, and in the rush to ship, they're the first thing that gets skipped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; At minimum, add these headers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'self'
Referrer-Policy: strict-origin-when-cross-origin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where you add them depends on your stack - Nginx config, middleware, or your framework's response headers.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. .git directory exposed
&lt;/h2&gt;

&lt;p&gt;If you deploy by cloning or pulling your git repo on the server, the &lt;code&gt;.git&lt;/code&gt; directory might be accessible from the web. That means anyone can reconstruct your entire source code, see your commit history, and find secrets that were committed and later removed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Either deploy without the .git directory (build artifacts only), or block access to it in your web server config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;/\.git&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Debug endpoints and admin panels left open
&lt;/h2&gt;

&lt;p&gt;Django's debug mode shows full stack traces with variable values. Express error handlers dump internal details. Admin panels at &lt;code&gt;/admin&lt;/code&gt; sit behind nothing but a login form - or sometimes not even that.&lt;/p&gt;

&lt;p&gt;I've seen deployed apps with &lt;code&gt;/api/admin/users&lt;/code&gt; endpoints returning full user records with no authentication. Not because the developer forgot to add auth - because the AI-generated code never included it in the first place.&lt;/p&gt;

&lt;p&gt;Locally, these are useful. In production, they're attack surfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Always set &lt;code&gt;DEBUG=False&lt;/code&gt; (Django), &lt;code&gt;NODE_ENV=production&lt;/code&gt; (Express), or equivalent for your framework before deploying. Put admin panels behind VPN or IP restrictions, not just authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;p&gt;None of these are hard to fix. Each one takes five minutes. The problem is nobody checks. There's no step between "deploy" and "move on to the next feature" where someone looks at the live deployment from the outside and asks: is anything exposed that shouldn't be?&lt;/p&gt;

&lt;p&gt;Code scanners check your source. Dependency scanners check your packages. But the live deployment - the thing your users actually interact with - gets deployed and forgotten.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;This is why I built &lt;a href="https://preflyt.dev" rel="noopener noreferrer"&gt;Preflyt&lt;/a&gt;. Paste a URL or run it from your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx preflyt-check https://your-site.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;30 seconds, no signup. Checks for exposed files, open ports, missing headers, and common misconfigurations. If you use AI coding agents, drop a &lt;a href="https://preflyt.dev/skill.md" rel="noopener noreferrer"&gt;skill file&lt;/a&gt; in your project and scans run automatically after every deploy.&lt;/p&gt;

&lt;p&gt;Free for 3 scans at &lt;a href="https://preflyt.dev" rel="noopener noreferrer"&gt;preflyt.dev&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What deployment mistakes have you run into? Drop them in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
