WIO

localstorage

DATABASE

Evidence in r/webdev — Web Development

Trend support

Rising+0.2 pp
Current seven-day window
Current 2026-10-09 → 2026-10-15
Comparison seven-day window
Comparison 2026-10-02 → 2026-10-08
Distinct-document support
Seen in 6 current vs 1 comparison posts/comments
Mentions
6 current vs 1 mentions

Windows are complete UTC days compared with the preceding seven. How trends are measured.

Also Mentioned 12 times in the most-discussed range 2026-09-16 → 2026-10-16 — frequency, not a trend.

Attention over time

7-day rolling share of analyzed posts/comments mentioning this entity · 90 daily points ending 2026-10-15

Final complete day: 2026-10-15. Attention was 0.2% — this entity appeared in 6 of 2,852 analyzed posts/comments in the seven days ending that day (6 mentions).

0%1.0%Jul 18Aug 31Oct 15

Hover, touch, or focus the chart (Tab) and use the arrow keys — each point is one seven-day window.

View all 90 data points (semantic table)
Week endingSeven-day rangeStatusPrevalenceSeen inMentionsAnalyzed
2026-07-182026-07-12 → 2026-07-18Comparable0.1%3 of 3,08833,088
2026-07-192026-07-13 → 2026-07-19Comparable0.1%4 of 3,37243,372
2026-07-202026-07-14 → 2026-07-20Comparable0.1%4 of 3,20243,202
2026-07-212026-07-15 → 2026-07-21Comparable0.1%4 of 3,00243,002
2026-07-222026-07-16 → 2026-07-22Comparable0.2%4 of 2,70542,705
2026-07-232026-07-17 → 2026-07-23Comparable0.2%4 of 2,49142,491
2026-07-242026-07-18 → 2026-07-24Comparable0.2%4 of 2,48142,481
2026-07-252026-07-19 → 2026-07-25Comparable0.0%1 of 2,81012,810
2026-07-262026-07-20 → 2026-07-26Comparable0.1%2 of 2,67622,676
2026-07-272026-07-21 → 2026-07-27Comparable0.3%7 of 2,62282,622
2026-07-282026-07-22 → 2026-07-28Comparable0.3%7 of 2,73482,734
2026-07-292026-07-23 → 2026-07-29Comparable0.2%7 of 2,94682,946
2026-07-302026-07-24 → 2026-07-30Comparable0.2%7 of 3,16683,166
2026-07-312026-07-25 → 2026-07-31Comparable0.3%8 of 3,16893,168
2026-08-012026-07-26 → 2026-08-01Comparable0.3%8 of 3,08093,080
2026-08-022026-07-27 → 2026-08-02Comparable0.2%6 of 3,04873,048
2026-08-032026-07-28 → 2026-08-03Comparable0.0%1 of 3,17413,174
2026-08-042026-07-29 → 2026-08-04Comparable0.0%1 of 2,97712,977
2026-08-052026-07-30 → 2026-08-05Comparable0.0%1 of 2,43712,437
2026-08-062026-07-31 → 2026-08-06Comparable0.1%1 of 2,08312,083
2026-08-072026-08-01 → 2026-08-07Comparable0.1%1 of 2,11712,117
2026-08-082026-08-02 → 2026-08-08Comparable0.1%2 of 2,18422,184
2026-08-092026-08-03 → 2026-08-09Comparable0.1%2 of 2,16222,162
2026-08-102026-08-04 → 2026-08-10Comparable0.1%2 of 2,25222,252
2026-08-112026-08-05 → 2026-08-11Comparable0.1%2 of 2,38522,385
2026-08-122026-08-06 → 2026-08-12Comparable0.1%2 of 2,65822,658
2026-08-132026-08-07 → 2026-08-13Comparable0.1%2 of 2,89322,893
2026-08-142026-08-08 → 2026-08-14Comparable0.0%1 of 3,05213,052
2026-08-152026-08-09 → 2026-08-15Comparable0.0%1 of 2,92512,925
2026-08-162026-08-10 → 2026-08-16Comparable0.1%2 of 2,86832,868
2026-08-172026-08-11 → 2026-08-17Comparable0.1%3 of 2,98342,983
2026-08-182026-08-12 → 2026-08-18Comparable0.2%6 of 3,08993,089
2026-08-192026-08-13 → 2026-08-19Comparable0.2%6 of 3,16993,169
2026-08-202026-08-14 → 2026-08-20Comparable0.2%7 of 3,240103,240
2026-08-212026-08-15 → 2026-08-21Comparable0.2%7 of 3,275103,275
2026-08-222026-08-16 → 2026-08-22Comparable0.2%8 of 3,270113,270
2026-08-232026-08-17 → 2026-08-23Comparable0.2%7 of 3,26293,262
2026-08-242026-08-18 → 2026-08-24Comparable0.2%6 of 3,13183,131
2026-08-252026-08-19 → 2026-08-25Comparable0.1%3 of 2,93232,932
2026-08-262026-08-20 → 2026-08-26Comparable0.1%3 of 2,89632,896
2026-08-272026-08-21 → 2026-08-27Comparable0.1%2 of 2,74622,746
2026-08-282026-08-22 → 2026-08-28Comparable0.1%2 of 2,59422,594
2026-08-292026-08-23 → 2026-08-29Comparable0.0%0 of 2,09702,097
2026-08-302026-08-24 → 2026-08-30Comparable0.0%0 of 1,83901,839
2026-08-312026-08-25 → 2026-08-31Comparable0.0%0 of 1,41701,417
2026-09-012026-08-26 → 2026-09-01Comparable0.0%0 of 1,18301,183
2026-09-022026-08-27 → 2026-09-02Comparable0.0%0 of 7340734
2026-09-032026-08-28 → 2026-09-03Comparable0.0%0 of 3420342
2026-09-042026-08-29 → 2026-09-04Low coverage——05
2026-09-052026-08-30 → 2026-09-05Low coverage——00
2026-09-062026-08-31 → 2026-09-06Low coverage——00
2026-09-072026-09-01 → 2026-09-07Low coverage——00
2026-09-082026-09-02 → 2026-09-08Low coverage——00
2026-09-092026-09-03 → 2026-09-09Low coverage——00
2026-09-102026-09-04 → 2026-09-10Low coverage——00
2026-09-112026-09-05 → 2026-09-11Low coverage——00
2026-09-122026-09-06 → 2026-09-12Low coverage——00
2026-09-132026-09-07 → 2026-09-13Low coverage——00
2026-09-142026-09-08 → 2026-09-14Low coverage——00
2026-09-152026-09-09 → 2026-09-15Low coverage——00
2026-09-162026-09-10 → 2026-09-16Comparable0.0%0 of 3900390
2026-09-172026-09-11 → 2026-09-17Comparable0.0%0 of 6780678
2026-09-182026-09-12 → 2026-09-18Comparable0.0%0 of 1,19401,194
2026-09-192026-09-13 → 2026-09-19Comparable0.0%0 of 1,98301,983
2026-09-202026-09-14 → 2026-09-20Comparable0.0%0 of 2,27902,279
2026-09-212026-09-15 → 2026-09-21Comparable0.0%1 of 2,88512,885
2026-09-222026-09-16 → 2026-09-22Comparable0.0%1 of 3,33513,335
2026-09-232026-09-17 → 2026-09-23Comparable0.0%1 of 3,36713,367
2026-09-242026-09-18 → 2026-09-24Comparable0.0%1 of 3,42313,423
2026-09-252026-09-19 → 2026-09-25Comparable0.1%2 of 3,19923,199
2026-09-262026-09-20 → 2026-09-26Comparable0.1%2 of 2,81622,816
2026-09-272026-09-21 → 2026-09-27Comparable0.1%2 of 2,71822,718
2026-09-282026-09-22 → 2026-09-28Comparable0.0%1 of 2,71012,710
2026-09-292026-09-23 → 2026-09-29Comparable0.0%1 of 2,56912,569
2026-09-302026-09-24 → 2026-09-30Comparable0.0%1 of 2,36712,367
2026-10-012026-09-25 → 2026-10-01Comparable0.0%1 of 2,49212,492
2026-10-022026-09-26 → 2026-10-02Comparable0.0%0 of 2,63502,635
2026-10-032026-09-27 → 2026-10-03Comparable0.0%1 of 2,65212,652
2026-10-042026-09-28 → 2026-10-04Comparable0.0%1 of 2,85912,859
2026-10-052026-09-29 → 2026-10-05Comparable0.0%1 of 2,61912,619
2026-10-062026-09-30 → 2026-10-06Comparable0.0%1 of 2,71712,717
2026-10-072026-10-01 → 2026-10-07Comparable0.0%1 of 2,95012,950
2026-10-082026-10-02 → 2026-10-08Comparable0.0%1 of 2,78912,789
2026-10-092026-10-03 → 2026-10-09Comparable0.0%1 of 3,01513,015
2026-10-102026-10-04 → 2026-10-10Comparable0.1%3 of 3,14533,145
2026-10-112026-10-05 → 2026-10-11Comparable0.2%6 of 3,00863,008
2026-10-122026-10-06 → 2026-10-12Comparable0.2%6 of 2,96762,967
2026-10-132026-10-07 → 2026-10-13Comparable0.2%6 of 2,93862,938
2026-10-142026-10-08 → 2026-10-14Comparable0.2%6 of 2,85062,850
2026-10-152026-10-09 → 2026-10-15Comparable0.2%6 of 2,85262,852

Each point is a seven-day rolling window of complete UTC days; a point is comparable only when at least 100 analyzed posts or comments fall inside it. A day with no analyzed records counts as zero; missing coverage is marked and never shown as zero. The series ends at the latest complete analyzed day — it never extends into the current incomplete day. How attention is measured.

Recent mentions

  1. Post

    How I count unique visitors without cookies or storing IPs, and where it breaks - I've been building a small web analytics tool, and the part people ask about most is how it counts "unique visitors" without cookies, localStorage, or stored IPs. Here is the approach and its honest limitations. The ID For every request, the server computes: sha256(daily\_salt | site\_id | ip | user\_agent), truncated to 16 hex chars \- daily\_salt is 16 random bytes, generated once per UTC day and stored in the DB. Old salts are deleted after 24 hours, so once that happens, nobody (including me) can recompute yesterday's IDs from an IP. \- site\_id is included in the hash so the same user gets different IDs across different sites (preventing cross-site tracking). \- The IP is used solely for the hash and a country lookup, then immediately dropped. It never hits the disk. Sessions are defined simply as "same ID, active within the last 30 minutes" (one upsert per event). Where it breaks (by design or trade-off) \- The same person visiting on two different days = two visitors. That's intentional, but it means "monthly uniques" is effectively a sum of daily uniques. \- Same office/NAT + same browser version = counted as one visitor. Rare outside large enterprise networks, but real. \- A phone switching from Wi-Fi to cellular mid-visit = new ID, new session. \- iCloud Private Relay / VPNs rotate IPs, which slightly inflates counts. Based on my data, the margin of error is small enough to answer "is my traffic growing?", which is all most small sites need. It's not suitable for per-user product analytics; for that, you need explicit user identification. The Client Side \- SPAs: I patch history.pushState and listen for popstate events, tracking route changes as pageviews without requiring framework plugins. \- Transport: Uses navigator.sendBeacon, falling back to fetch with keepalive so events survive tab closure. \- Engagement/scroll depth is flushed on visibilitychange, not unload (since unload is unreliable on mobile). Happy to dive deeper into any part! Curious if anyone has a better trick for the NAT collision case that doesn't rely on client-side storage.

  2. Comment

    I've built the same shape of tool (Astro, client-side, localStorage), so a few things from the other side of the same decisions rather than a design critique. The print-media route for the PDF is the one I'd push back on. It works beautifully on desktop Chrome and then falls apart in exactly the places invoice users live: iOS Safari's share-to-PDF ignores a chunk of @page rules, Android's print dialog is a coin flip, and the user has to understand that "Print" means "Save as PDF" in the first place. A 20-line-item invoice that crosses a page boundary is the other test, repeated table headers and "don't split this row" are flaky across engines. Rendering the PDF yourself (pdf-lib or jsPDF, both run fully in the browser so you keep the zero-backend claim) gives you a real file, a real download button, and the same output on every device. More code, far fewer "it printed blank" emails. Two smaller ones: logo upload into localStorage hits the quota fast if you store the raw base64, downscale to something like 600px on the canvas before saving. And for the i18n routes, number and date formatting should follow the invoice currency, not the UI locale (a German user billing in USD still expects 1,234.56), Intl.NumberFormat takes a currency option that handles that. Astro was the right call for this, by the way. The islands model is exactly "static SEO shell plus one interactive component".

  3. Post

    [Showoff Saturday] Built a 100% client-side, zero-backend invoice generator using AstroJS & Tailwind CSS v4 - Hey r/webdev, For this week's Showoff Saturday, I wanted to share a utility micro-tool I recently completed: **Quick Free Invoice** ( # The Technical Objective: Build a zero-maintenance, zero-database utility tool hosted at $0 operational cost on Cloudflare Pages that delivers instant browser performance without server latency. # Stack & Architecture: * **Framework:** AstroJS (zero-JS by default, islands architecture for interactive engines). * **Styling:** Tailwind CSS v4 using CSS-first configuration and Geist/Vercel-inspired dark/light design tokens. * **State & Storage:** Vanilla Web APIs + `localStorage` for offline persistence across sessions. * **PDF Generation:** Client-side vector rendering with custom `@media print` style normalization. * **i18n:** Dynamic multi-language routing (`/es/`, `/pt/`, `/de/`, `/fr/`) with crawlable HTML links. I’d love any feedback on the DOM performance, responsive layout breakpoints, or print media styling!

  4. Comment

    LOL fair catch on how I worded it. There is a backend, and a database. There are no user accounts. All progress, stats, streaks, and achievements live in localStorage, and the OG images are pre-rendered from the share URL alone with no user record. So the server exists, it just doesn't know you.

  5. Post

    [Showoff Saturday] A daily logic puzzle with a client-side solver that powers the hints - Hence ( is a daily logic puzzle I built: a modern twist on the classic logic grid puzzle (zebra puzzles, Einstein's riddle). You get a grid and picture clues (instead of boring sentences), and you work out what goes where by pure deduction. The same puzzle for everyone, difficulty ramps from gentle Monday to tough Sunday. Every puzzle is generated ahead of time and run through a solver that verifies it has exactly one solution by pure deduction, then trims the clues down to the minimum each difficulty needs. The part I'm proudest of technically: the hint system runs a constraint solver in the browser against your current board state, so instead of revealing an answer it points at a clue that still rules something out from wherever you are. No framework, no signup: everything (progress, stats, streaks, achievements) lives in localStorage, so players get what feels like a full account experience with zero server. Sharing is personalized too, still with no account: the OG image for link previews is pre-rendered on the server from the share URL alone, so when you share an achievement or challenge a friend they see your unlocked character and stats in the preview, even though there is no user account on the server. The Instagram Stories share card is rendered entirely in the browser, and it came out really nice: your character, your stats, your achievement, all composited client-side into a vertical card ready to share. Happy to answer questions about the generator/solver or the picture-clue rendering

Excerpts above are public Reddit posts and comments. WIO never synthesizes Reddit URLs from stored ids, and entities are extracted automatically and may be wrong. See the extraction notes and the limitations and privacy section of the methodology.