localstorage
DATABASEEvidence in r/webdev — Web Development
Trend support
- 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).
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 ending | Seven-day range | Status | Prevalence | Seen in | Mentions | Analyzed |
|---|---|---|---|---|---|---|
| 2026-07-18 | 2026-07-12 → 2026-07-18 | Comparable | 0.1% | 3 of 3,088 | 3 | 3,088 |
| 2026-07-19 | 2026-07-13 → 2026-07-19 | Comparable | 0.1% | 4 of 3,372 | 4 | 3,372 |
| 2026-07-20 | 2026-07-14 → 2026-07-20 | Comparable | 0.1% | 4 of 3,202 | 4 | 3,202 |
| 2026-07-21 | 2026-07-15 → 2026-07-21 | Comparable | 0.1% | 4 of 3,002 | 4 | 3,002 |
| 2026-07-22 | 2026-07-16 → 2026-07-22 | Comparable | 0.2% | 4 of 2,705 | 4 | 2,705 |
| 2026-07-23 | 2026-07-17 → 2026-07-23 | Comparable | 0.2% | 4 of 2,491 | 4 | 2,491 |
| 2026-07-24 | 2026-07-18 → 2026-07-24 | Comparable | 0.2% | 4 of 2,481 | 4 | 2,481 |
| 2026-07-25 | 2026-07-19 → 2026-07-25 | Comparable | 0.0% | 1 of 2,810 | 1 | 2,810 |
| 2026-07-26 | 2026-07-20 → 2026-07-26 | Comparable | 0.1% | 2 of 2,676 | 2 | 2,676 |
| 2026-07-27 | 2026-07-21 → 2026-07-27 | Comparable | 0.3% | 7 of 2,622 | 8 | 2,622 |
| 2026-07-28 | 2026-07-22 → 2026-07-28 | Comparable | 0.3% | 7 of 2,734 | 8 | 2,734 |
| 2026-07-29 | 2026-07-23 → 2026-07-29 | Comparable | 0.2% | 7 of 2,946 | 8 | 2,946 |
| 2026-07-30 | 2026-07-24 → 2026-07-30 | Comparable | 0.2% | 7 of 3,166 | 8 | 3,166 |
| 2026-07-31 | 2026-07-25 → 2026-07-31 | Comparable | 0.3% | 8 of 3,168 | 9 | 3,168 |
| 2026-08-01 | 2026-07-26 → 2026-08-01 | Comparable | 0.3% | 8 of 3,080 | 9 | 3,080 |
| 2026-08-02 | 2026-07-27 → 2026-08-02 | Comparable | 0.2% | 6 of 3,048 | 7 | 3,048 |
| 2026-08-03 | 2026-07-28 → 2026-08-03 | Comparable | 0.0% | 1 of 3,174 | 1 | 3,174 |
| 2026-08-04 | 2026-07-29 → 2026-08-04 | Comparable | 0.0% | 1 of 2,977 | 1 | 2,977 |
| 2026-08-05 | 2026-07-30 → 2026-08-05 | Comparable | 0.0% | 1 of 2,437 | 1 | 2,437 |
| 2026-08-06 | 2026-07-31 → 2026-08-06 | Comparable | 0.1% | 1 of 2,083 | 1 | 2,083 |
| 2026-08-07 | 2026-08-01 → 2026-08-07 | Comparable | 0.1% | 1 of 2,117 | 1 | 2,117 |
| 2026-08-08 | 2026-08-02 → 2026-08-08 | Comparable | 0.1% | 2 of 2,184 | 2 | 2,184 |
| 2026-08-09 | 2026-08-03 → 2026-08-09 | Comparable | 0.1% | 2 of 2,162 | 2 | 2,162 |
| 2026-08-10 | 2026-08-04 → 2026-08-10 | Comparable | 0.1% | 2 of 2,252 | 2 | 2,252 |
| 2026-08-11 | 2026-08-05 → 2026-08-11 | Comparable | 0.1% | 2 of 2,385 | 2 | 2,385 |
| 2026-08-12 | 2026-08-06 → 2026-08-12 | Comparable | 0.1% | 2 of 2,658 | 2 | 2,658 |
| 2026-08-13 | 2026-08-07 → 2026-08-13 | Comparable | 0.1% | 2 of 2,893 | 2 | 2,893 |
| 2026-08-14 | 2026-08-08 → 2026-08-14 | Comparable | 0.0% | 1 of 3,052 | 1 | 3,052 |
| 2026-08-15 | 2026-08-09 → 2026-08-15 | Comparable | 0.0% | 1 of 2,925 | 1 | 2,925 |
| 2026-08-16 | 2026-08-10 → 2026-08-16 | Comparable | 0.1% | 2 of 2,868 | 3 | 2,868 |
| 2026-08-17 | 2026-08-11 → 2026-08-17 | Comparable | 0.1% | 3 of 2,983 | 4 | 2,983 |
| 2026-08-18 | 2026-08-12 → 2026-08-18 | Comparable | 0.2% | 6 of 3,089 | 9 | 3,089 |
| 2026-08-19 | 2026-08-13 → 2026-08-19 | Comparable | 0.2% | 6 of 3,169 | 9 | 3,169 |
| 2026-08-20 | 2026-08-14 → 2026-08-20 | Comparable | 0.2% | 7 of 3,240 | 10 | 3,240 |
| 2026-08-21 | 2026-08-15 → 2026-08-21 | Comparable | 0.2% | 7 of 3,275 | 10 | 3,275 |
| 2026-08-22 | 2026-08-16 → 2026-08-22 | Comparable | 0.2% | 8 of 3,270 | 11 | 3,270 |
| 2026-08-23 | 2026-08-17 → 2026-08-23 | Comparable | 0.2% | 7 of 3,262 | 9 | 3,262 |
| 2026-08-24 | 2026-08-18 → 2026-08-24 | Comparable | 0.2% | 6 of 3,131 | 8 | 3,131 |
| 2026-08-25 | 2026-08-19 → 2026-08-25 | Comparable | 0.1% | 3 of 2,932 | 3 | 2,932 |
| 2026-08-26 | 2026-08-20 → 2026-08-26 | Comparable | 0.1% | 3 of 2,896 | 3 | 2,896 |
| 2026-08-27 | 2026-08-21 → 2026-08-27 | Comparable | 0.1% | 2 of 2,746 | 2 | 2,746 |
| 2026-08-28 | 2026-08-22 → 2026-08-28 | Comparable | 0.1% | 2 of 2,594 | 2 | 2,594 |
| 2026-08-29 | 2026-08-23 → 2026-08-29 | Comparable | 0.0% | 0 of 2,097 | 0 | 2,097 |
| 2026-08-30 | 2026-08-24 → 2026-08-30 | Comparable | 0.0% | 0 of 1,839 | 0 | 1,839 |
| 2026-08-31 | 2026-08-25 → 2026-08-31 | Comparable | 0.0% | 0 of 1,417 | 0 | 1,417 |
| 2026-09-01 | 2026-08-26 → 2026-09-01 | Comparable | 0.0% | 0 of 1,183 | 0 | 1,183 |
| 2026-09-02 | 2026-08-27 → 2026-09-02 | Comparable | 0.0% | 0 of 734 | 0 | 734 |
| 2026-09-03 | 2026-08-28 → 2026-09-03 | Comparable | 0.0% | 0 of 342 | 0 | 342 |
| 2026-09-04 | 2026-08-29 → 2026-09-04 | Low coverage | — | — | 0 | 5 |
| 2026-09-05 | 2026-08-30 → 2026-09-05 | Low coverage | — | — | 0 | 0 |
| 2026-09-06 | 2026-08-31 → 2026-09-06 | Low coverage | — | — | 0 | 0 |
| 2026-09-07 | 2026-09-01 → 2026-09-07 | Low coverage | — | — | 0 | 0 |
| 2026-09-08 | 2026-09-02 → 2026-09-08 | Low coverage | — | — | 0 | 0 |
| 2026-09-09 | 2026-09-03 → 2026-09-09 | Low coverage | — | — | 0 | 0 |
| 2026-09-10 | 2026-09-04 → 2026-09-10 | Low coverage | — | — | 0 | 0 |
| 2026-09-11 | 2026-09-05 → 2026-09-11 | Low coverage | — | — | 0 | 0 |
| 2026-09-12 | 2026-09-06 → 2026-09-12 | Low coverage | — | — | 0 | 0 |
| 2026-09-13 | 2026-09-07 → 2026-09-13 | Low coverage | — | — | 0 | 0 |
| 2026-09-14 | 2026-09-08 → 2026-09-14 | Low coverage | — | — | 0 | 0 |
| 2026-09-15 | 2026-09-09 → 2026-09-15 | Low coverage | — | — | 0 | 0 |
| 2026-09-16 | 2026-09-10 → 2026-09-16 | Comparable | 0.0% | 0 of 390 | 0 | 390 |
| 2026-09-17 | 2026-09-11 → 2026-09-17 | Comparable | 0.0% | 0 of 678 | 0 | 678 |
| 2026-09-18 | 2026-09-12 → 2026-09-18 | Comparable | 0.0% | 0 of 1,194 | 0 | 1,194 |
| 2026-09-19 | 2026-09-13 → 2026-09-19 | Comparable | 0.0% | 0 of 1,983 | 0 | 1,983 |
| 2026-09-20 | 2026-09-14 → 2026-09-20 | Comparable | 0.0% | 0 of 2,279 | 0 | 2,279 |
| 2026-09-21 | 2026-09-15 → 2026-09-21 | Comparable | 0.0% | 1 of 2,885 | 1 | 2,885 |
| 2026-09-22 | 2026-09-16 → 2026-09-22 | Comparable | 0.0% | 1 of 3,335 | 1 | 3,335 |
| 2026-09-23 | 2026-09-17 → 2026-09-23 | Comparable | 0.0% | 1 of 3,367 | 1 | 3,367 |
| 2026-09-24 | 2026-09-18 → 2026-09-24 | Comparable | 0.0% | 1 of 3,423 | 1 | 3,423 |
| 2026-09-25 | 2026-09-19 → 2026-09-25 | Comparable | 0.1% | 2 of 3,199 | 2 | 3,199 |
| 2026-09-26 | 2026-09-20 → 2026-09-26 | Comparable | 0.1% | 2 of 2,816 | 2 | 2,816 |
| 2026-09-27 | 2026-09-21 → 2026-09-27 | Comparable | 0.1% | 2 of 2,718 | 2 | 2,718 |
| 2026-09-28 | 2026-09-22 → 2026-09-28 | Comparable | 0.0% | 1 of 2,710 | 1 | 2,710 |
| 2026-09-29 | 2026-09-23 → 2026-09-29 | Comparable | 0.0% | 1 of 2,569 | 1 | 2,569 |
| 2026-09-30 | 2026-09-24 → 2026-09-30 | Comparable | 0.0% | 1 of 2,367 | 1 | 2,367 |
| 2026-10-01 | 2026-09-25 → 2026-10-01 | Comparable | 0.0% | 1 of 2,492 | 1 | 2,492 |
| 2026-10-02 | 2026-09-26 → 2026-10-02 | Comparable | 0.0% | 0 of 2,635 | 0 | 2,635 |
| 2026-10-03 | 2026-09-27 → 2026-10-03 | Comparable | 0.0% | 1 of 2,652 | 1 | 2,652 |
| 2026-10-04 | 2026-09-28 → 2026-10-04 | Comparable | 0.0% | 1 of 2,859 | 1 | 2,859 |
| 2026-10-05 | 2026-09-29 → 2026-10-05 | Comparable | 0.0% | 1 of 2,619 | 1 | 2,619 |
| 2026-10-06 | 2026-09-30 → 2026-10-06 | Comparable | 0.0% | 1 of 2,717 | 1 | 2,717 |
| 2026-10-07 | 2026-10-01 → 2026-10-07 | Comparable | 0.0% | 1 of 2,950 | 1 | 2,950 |
| 2026-10-08 | 2026-10-02 → 2026-10-08 | Comparable | 0.0% | 1 of 2,789 | 1 | 2,789 |
| 2026-10-09 | 2026-10-03 → 2026-10-09 | Comparable | 0.0% | 1 of 3,015 | 1 | 3,015 |
| 2026-10-10 | 2026-10-04 → 2026-10-10 | Comparable | 0.1% | 3 of 3,145 | 3 | 3,145 |
| 2026-10-11 | 2026-10-05 → 2026-10-11 | Comparable | 0.2% | 6 of 3,008 | 6 | 3,008 |
| 2026-10-12 | 2026-10-06 → 2026-10-12 | Comparable | 0.2% | 6 of 2,967 | 6 | 2,967 |
| 2026-10-13 | 2026-10-07 → 2026-10-13 | Comparable | 0.2% | 6 of 2,938 | 6 | 2,938 |
| 2026-10-14 | 2026-10-08 → 2026-10-14 | Comparable | 0.2% | 6 of 2,850 | 6 | 2,850 |
| 2026-10-15 | 2026-10-09 → 2026-10-15 | Comparable | 0.2% | 6 of 2,852 | 6 | 2,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
- 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.
- 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".
- 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!
- 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.
- 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.