<?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>Forem: Luan Hang</title>
    <description>The latest articles on Forem by Luan Hang (@hang_luan_502fec1ad65a7ab).</description>
    <link>https://forem.com/hang_luan_502fec1ad65a7ab</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%2F3788191%2Ffe307c88-d818-4a51-b6b6-88975b87b83b.png</url>
      <title>Forem: Luan Hang</title>
      <link>https://forem.com/hang_luan_502fec1ad65a7ab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hang_luan_502fec1ad65a7ab"/>
    <language>en</language>
    <item>
      <title>How I built a Local-first, Zero-Server Note-taking App with Next.js and Google Drive API</title>
      <dc:creator>Luan Hang</dc:creator>
      <pubDate>Wed, 22 Apr 2026 08:01:53 +0000</pubDate>
      <link>https://forem.com/hang_luan_502fec1ad65a7ab/how-i-built-a-local-first-zero-server-note-taking-app-with-nextjs-and-google-drive-api-2o0h</link>
      <guid>https://forem.com/hang_luan_502fec1ad65a7ab/how-i-built-a-local-first-zero-server-note-taking-app-with-nextjs-and-google-drive-api-2o0h</guid>
      <description>&lt;p&gt;Most note-taking apps today have a "privacy tax." You either give your data to their servers or pay a hefty subscription to keep it private. I wanted something different: A professional workspace where I own the data, and the performance is instant.&lt;/p&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;OwnSync Note&lt;/strong&gt;. Here is the technical breakdown of how I made it happen.&lt;/p&gt;

&lt;p&gt;The Architecture: Local-First is the Future ⚡&lt;br&gt;
To achieve sub-second load times and offline support, I went with a Local-first architecture.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistence: I used IndexedDB to store notes directly in the browser. This ensures that even with thousands of notes, the UI remains snappy.&lt;/li&gt;
&lt;li&gt;Sync Engine: Instead of building a custom backend (and becoming another "data landlord"), I leveraged the Google Drive API. The app syncs .json files directly from the browser to the user's personal drive.&lt;/li&gt;
&lt;li&gt;Conflict Resolution: One of the biggest challenges was handling sync conflicts. I implemented a version-checking logic that prompts users when a remote change is detected, ensuring no data loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Tech Stack&lt;/strong&gt; 🛠️&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Framework: Next.js (App Router) for the core structure.&lt;/li&gt;
&lt;li&gt;Styling: Tailwind CSS for that clean, 3-column professional UI.&lt;/li&gt;
&lt;li&gt;Editor: A custom WYSIWYG Markdown editor with native JSON auto-formatting (a lifesaver for devs!).&lt;/li&gt;
&lt;li&gt;Deployment: Vercel (with a heavy focus on security and rotated API keys).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Features for Developers&lt;/strong&gt;&lt;br&gt;
Beyond privacy, I added things that I personally needed as a developer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JSON Auto-formatting: Just paste a minified JSON, and it beautifies instantly.&lt;/li&gt;
&lt;li&gt;3-Column Layout: Efficient navigation inspired by classic IDEs.&lt;/li&gt;
&lt;li&gt;PWA Support: It feels like a native desktop app but stays lightweight.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why go "Zero-Server"?&lt;/strong&gt; 🛡️&lt;br&gt;
By removing the middleman (the database), I removed the risk. If my app goes down, your notes are still in your Google Drive. If you want to switch apps, your notes are already standard Markdown files. No lock-in, ever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;br&gt;
Building OwnSync Note taught me that we don't always need complex backends to create powerful tools. Sometimes, empowering the user to own their infrastructure is the best feature you can build.&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts on the architecture or any features you'd like to see!&lt;/p&gt;

&lt;p&gt;👉 Check it out: &lt;a href="https://ownsyncnote.com" rel="noopener noreferrer"&gt;https://ownsyncnote.com&lt;/a&gt;&lt;br&gt;
👉 Follow the journey on X: @OwnSyncNote&lt;/p&gt;

&lt;h1&gt;
  
  
  productivity #webdev #nextjs #javascript #buildinpublic
&lt;/h1&gt;

</description>
      <category>productivity</category>
      <category>nextjs</category>
      <category>saas</category>
      <category>privacy</category>
    </item>
    <item>
      <title>TurboUtil: A Free, Offline-First Collection of Dev Tools That Run Entirely in Your Browser</title>
      <dc:creator>Luan Hang</dc:creator>
      <pubDate>Tue, 24 Feb 2026 03:25:01 +0000</pubDate>
      <link>https://forem.com/hang_luan_502fec1ad65a7ab/turboutil-a-free-offline-first-collection-of-dev-tools-that-run-entirely-in-your-browser-4ia8</link>
      <guid>https://forem.com/hang_luan_502fec1ad65a7ab/turboutil-a-free-offline-first-collection-of-dev-tools-that-run-entirely-in-your-browser-4ia8</guid>
      <description>&lt;p&gt;Hey dev community! 👋&lt;br&gt;
If you're tired of online tools that:&lt;/p&gt;

&lt;p&gt;Require uploading your sensitive JSON/JWT/data to some random server&lt;br&gt;
Track you with ads or analytics&lt;br&gt;
Break when you're offline (airplane mode, spotty Wi-Fi, remote work)&lt;/p&gt;

&lt;p&gt;...then I built something for you.&lt;br&gt;
I created TurboUtil — a completely free, browser-based suite of developer utilities. Everything runs client-side in your browser — no data leaves your device, no servers involved, no sign-up, no limits.&lt;br&gt;
Why I Built This&lt;br&gt;
As a developer, I use JSON formatters, JWT decoders, regex testers, and ID generators daily. But most popular tools (jwt.io, jsonformatter.org, etc.) send your payload to their servers. Privacy concerns + occasional offline needs pushed me to create an alternative that's fast, secure, and always available.&lt;br&gt;
TurboUtil is 100% offline-capable (after the initial page load) and privacy-first by design.&lt;br&gt;
Core Features&lt;/p&gt;

&lt;p&gt;Zero server roundtrips → Instant results, no latency&lt;br&gt;
Privacy guaranteed → Your JSON, tokens, regex patterns — never uploaded&lt;br&gt;
Free forever, no ads, no accounts&lt;br&gt;
Mobile-friendly and works offline&lt;br&gt;
30+ tools across categories: JSON/Data, Encoding, Time/Date, Code Generation, DevOps, etc.&lt;/p&gt;

&lt;p&gt;Popular Tools Right Now&lt;br&gt;
Here are some highlights (all live and ready to use):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;JSON Formatter &amp;amp; Validator&lt;/em&gt;&lt;br&gt;
Beautify, minify, validate JSON with syntax highlighting and error details.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;JWT Decoder &amp;amp; Generator&lt;/em&gt;&lt;br&gt;
Decode/inspect JWT tokens (header, payload, signature) or create new ones — fully offline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;JSON to TypeScript Converter&lt;/em&gt;&lt;br&gt;
Paste any JSON → instantly get TypeScript interfaces (handles nested objects, arrays, optional fields). Perfect for API typing without third-party uploads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Nano ID &amp;amp; UUID Generator&lt;/em&gt;&lt;br&gt;
Generate secure, URL-friendly Nano IDs (custom length) or standard UUIDs — great for database keys.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Base64 Encode/Decode, Regex Tester, Timestamp Converter, Cron Parser, Docker Compose Generator, Hash Generator (MD5/SHA), and more...&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Full list on the homepage: &lt;a href="https://www.turboutil.app/" rel="noopener noreferrer"&gt;https://www.turboutil.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Works (Technically)&lt;/strong&gt;&lt;br&gt;
All tools are powered by pure JavaScript (no backend). For example:&lt;/p&gt;

&lt;p&gt;JSON parsing/validation → native JSON.parse() + custom error handling&lt;br&gt;
JWT decoding → atob() for base64 + manual signature check&lt;br&gt;
TypeScript inference → recursive type generation logic (no external libs needed for core)&lt;/p&gt;

&lt;p&gt;Everything is bundled and optimized for fast load. Once cached, most tools work fully offline.&lt;br&gt;
Try It Out&lt;br&gt;
Head over to: &lt;a href="https://www.turboutil.app/" rel="noopener noreferrer"&gt;https://www.turboutil.app/&lt;/a&gt;&lt;br&gt;
Pick any tool, paste your data, and see it work instantly — no tabs to external sites, no worries about data leaks.&lt;br&gt;
What's Next?&lt;br&gt;
I'm actively adding tools based on feedback:&lt;/p&gt;

&lt;p&gt;More converters (YAML ↔ JSON, SQL Formatter)&lt;br&gt;
PWA support for better offline experience&lt;br&gt;
Favorite tools saving (localStorage)&lt;/p&gt;

&lt;p&gt;If you have ideas or want a specific tool (e.g., GraphQL to TS, env validator), drop a comment below or tweet me!&lt;br&gt;
What do you think? Have you switched to offline/privacy-focused tools yet? Share your thoughts — would love to hear from the community. ❤️&lt;br&gt;
Thanks for reading, and happy coding!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>typescript</category>
      <category>devtool</category>
    </item>
  </channel>
</rss>
