<?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: Oskra | オスクラ</title>
    <description>The latest articles on DEV Community by Oskra | オスクラ (@_b1c71b38247f99fd7e95f).</description>
    <link>https://dev.to/_b1c71b38247f99fd7e95f</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%2F3556298%2Ff2cf7382-53d5-47e4-925c-ba60e567e932.png</url>
      <title>DEV Community: Oskra | オスクラ</title>
      <link>https://dev.to/_b1c71b38247f99fd7e95f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_b1c71b38247f99fd7e95f"/>
    <language>en</language>
    <item>
      <title>From site photos to submission-ready PDFs: I built a local-first app with Expo and React Native</title>
      <dc:creator>Oskra | オスクラ</dc:creator>
      <pubDate>Mon, 20 Apr 2026 14:40:34 +0000</pubDate>
      <link>https://dev.to/_b1c71b38247f99fd7e95f/from-site-photos-to-submission-ready-pdfs-i-built-a-local-first-app-with-expo-and-react-native-3ae4</link>
      <guid>https://dev.to/_b1c71b38247f99fd7e95f/from-site-photos-to-submission-ready-pdfs-i-built-a-local-first-app-with-expo-and-react-native-3ae4</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%2Fcio5q557i1zs1inynqc7.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%2Fcio5q557i1zs1inynqc7.png" alt=" " width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recently released &lt;strong&gt;Repolog&lt;/strong&gt; on both the &lt;strong&gt;App Store&lt;/strong&gt; and &lt;strong&gt;Google Play&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is a &lt;strong&gt;local-first photo report app for field workers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;take site photos, add comments, and export a clean A4/Letter PDF report from your phone&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I built it for people working in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;construction&lt;/li&gt;
&lt;li&gt;maintenance&lt;/li&gt;
&lt;li&gt;inspections&lt;/li&gt;
&lt;li&gt;cleaning&lt;/li&gt;
&lt;li&gt;property and site visits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many real-world workflows, photos end up scattered across the camera roll, chat apps, and notes.&lt;/p&gt;

&lt;p&gt;That makes reporting slow, inconsistent, and hard to review later.&lt;/p&gt;

&lt;p&gt;So I wanted to build something that keeps the workflow simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;snap photos on site&lt;/li&gt;
&lt;li&gt;add comments and basic details&lt;/li&gt;
&lt;li&gt;keep photos and notes in one report&lt;/li&gt;
&lt;li&gt;export a submission-ready PDF&lt;/li&gt;
&lt;li&gt;work without creating an account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few things I cared about while building it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;local-first&lt;/strong&gt;: I wanted the app to stay useful without forcing users into a cloud workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;evidence-first PDF layout&lt;/strong&gt;: photos stay uncropped so the original context is preserved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;phone-first reporting&lt;/strong&gt;: the whole flow should work on-site, not only later on a PC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;clean export&lt;/strong&gt;: the goal is not just “make a PDF,” but “make a PDF people can actually submit”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tech stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expo&lt;/li&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;RevenueCat&lt;/li&gt;
&lt;li&gt;AdMob&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also supports &lt;strong&gt;19 languages&lt;/strong&gt;, because field reporting is a very global use case.&lt;/p&gt;

&lt;p&gt;If you build tools for contractors, inspectors, maintenance teams, or other field workflows, I would love your feedback:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is the most frustrating part of photo reporting today?&lt;/li&gt;
&lt;li&gt;Would your team prefer one large photo per page or two photos per page?&lt;/li&gt;
&lt;li&gt;What metadata matters most in a site report?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;App Store:&lt;br&gt;
&lt;a href="https://apps.apple.com/us/app/repolog-photo-site-reports/id6760099822" rel="noopener noreferrer"&gt;https://apps.apple.com/us/app/repolog-photo-site-reports/id6760099822&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google Play:&lt;br&gt;
&lt;a href="https://play.google.com/store/apps/details?id=com.dooooraku.repolog" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.dooooraku.repolog&lt;/a&gt;&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%2Fsqgn648m1cao9ny32l9n.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%2Fsqgn648m1cao9ny32l9n.png" alt=" " width="800" height="1422"&gt;&lt;/a&gt;&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%2Fhxzuu2h4w9zxphg90s1l.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%2Fhxzuu2h4w9zxphg90s1l.png" alt=" " width="800" height="1422"&gt;&lt;/a&gt;&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%2Fe6c9pmuwhrajnnh4zier.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%2Fe6c9pmuwhrajnnh4zier.png" alt=" " width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>ios</category>
      <category>android</category>
      <category>mobile</category>
    </item>
    <item>
      <title>[Showdev] Time-Zone Hover — Stop time-zone confusion: hover any time to see yours (copy 12/24/ISO)</title>
      <dc:creator>Oskra | オスクラ</dc:creator>
      <pubDate>Thu, 09 Oct 2025 13:52:13 +0000</pubDate>
      <link>https://dev.to/_b1c71b38247f99fd7e95f/showdev-time-zone-hover-stop-time-zone-confusion-hover-any-time-to-see-yours-copy-1224iso-5dgb</link>
      <guid>https://dev.to/_b1c71b38247f99fd7e95f/showdev-time-zone-hover-stop-time-zone-confusion-hover-any-time-to-see-yours-copy-1224iso-5dgb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Hover any time string on any website → instantly see &lt;em&gt;your&lt;/em&gt; local time + zone. One click to copy in &lt;strong&gt;12-hour / 24-hour / ISO 8601&lt;/strong&gt;. Pro adds defaults &amp;amp; per-site control.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I kept asking “Whose 3 PM is this?” across remote teams. Time‑Zone Hover is a tiny utility to remove that friction without extra clicks or tab switching.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo &amp;amp; install
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Web Store&lt;/strong&gt;: &lt;a href="https://chromewebstore.google.com/detail/time-zone-hover/hbaocjmflampngapmeeegnpphpmkmmff?authuser=0&amp;amp;hl" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/time-zone-hover/hbaocjmflampngapmeeegnpphpmkmmff?authuser=0&amp;amp;hl&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hover any time string (e.g., “3:30 PM”, “18:00”, “5 hours ago”) on &lt;strong&gt;any site&lt;/strong&gt; to see &lt;em&gt;your&lt;/em&gt; local time&lt;/li&gt;
&lt;li&gt;Shows your &lt;strong&gt;time zone ID&lt;/strong&gt; (e.g., &lt;code&gt;Asia/Tokyo&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One‑click copy&lt;/strong&gt; in 12‑hour / 24‑hour / ISO 8601&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean options UI&lt;/strong&gt;; &lt;strong&gt;Pro&lt;/strong&gt; adds default format, per‑site enable/disable, and import/export&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works (high level)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chrome &lt;strong&gt;MV3&lt;/strong&gt;: background service worker + content script&lt;/li&gt;
&lt;li&gt;Parses common absolute and relative time patterns&lt;/li&gt;
&lt;li&gt;Saves preferences via &lt;code&gt;chrome.storage&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Privacy &amp;amp; permissions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Permissions:&lt;/strong&gt; &lt;code&gt;storage&lt;/code&gt; (to save your settings)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No tracking:&lt;/strong&gt; no analytics beacons, no external calls for tooltips&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the extension from the Chrome Web Store
&lt;/li&gt;
&lt;li&gt;Open any site with time strings (news, issue trackers, social, etc.)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover&lt;/strong&gt; the time → see your local time + zone
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Copy&lt;/strong&gt; to copy in the shown format (12/24/ISO)
&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Options&lt;/strong&gt; to choose theme and (Pro) set your &lt;strong&gt;default copy format&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;(Pro) Use &lt;strong&gt;per‑site control&lt;/strong&gt; to enable/disable or exclude domains&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pro features (lifetime)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Default copy format (12/24/ISO 8601)&lt;/li&gt;
&lt;li&gt;Per‑site enable/disable and exclusions&lt;/li&gt;
&lt;li&gt;Import/export settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Glossary (for clarity)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;12‑hour / 24‑hour:&lt;/strong&gt; time formats (&lt;code&gt;3:30 PM&lt;/code&gt; vs &lt;code&gt;15:30&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ISO 8601:&lt;/strong&gt; international date‑time standard, e.g., &lt;code&gt;2025-10-09T15:30:00+09:00&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time zone ID:&lt;/strong&gt; canonical zone like &lt;code&gt;Asia/Tokyo&lt;/code&gt; that handles DST correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Custom parsing rules per site&lt;/li&gt;
&lt;li&gt;Keyboard shortcut to copy in default format&lt;/li&gt;
&lt;li&gt;More locales and relative‑time patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this reduces your time‑zone confusion even a bit, I’d love a comment or a ⭐ on the store. Thanks for reading!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>workplace</category>
    </item>
  </channel>
</rss>
