The short version
Lviv Second Hand has no accounts and no third-party ad networks. Local stores can pay to be featured on the map, and every paid placement is clearly labelled as advertising — it is sold and shown by us, never by an ad network, and it never uses your data to target you. Everything you do — the stores you add, the edits you make, the places you mark as visited — is stored only in your own browser on your own device; we never see it, and it never leaves your phone unless you choose to share it. The only things we measure are anonymous, aggregate traffic (page views and visits) and which app features get used (e.g. which stores are opened) — never who uses them, and never anything that identifies you.
1. Who we are
Lviv Second Hand is a free-to-use, proprietary Progressive Web App (PWA) for finding and tracking second-hand clothing stores in Lviv, Ukraine. It runs almost entirely inside your web browser; the only server-side component is the anonymous analytics described in section 5. All rights reserved (see section 10).
2. What data we collect
We do not collect any personal data. There is no sign-up and no login. We use a privacy-friendly, cookieless analytics service (Cloudflare Web Analytics) that measures only aggregate traffic — page views and visits — and does not identify you, build a profile of you, or track you across other websites. We do not use tracking cookies.
We also record anonymous, aggregate in-app usage — such as which stores are opened, which filters are used, tab and language switches, and share/export actions — to understand what's useful and improve the app. These events contain no personal data: no name, no account, no device identifier, no location, and no free text — only which feature was used. They are sent to a small service we run on Cloudflare and cannot be tied back to you.
So that we can tell how many people use the app rather than only how many taps happen, that same service counts daily unique visitors. It does this without a cookie and without any identifier stored on your device: your IP address and browser type are combined with today's date and a secret key, run through a one-way hash, and only the resulting value is saved. Your IP address is never stored. Because the date is part of the hash, the value changes every day — so it cannot be used to recognise you tomorrow, follow you over time, or build any kind of profile. All we can ever learn from it is a count.
If you opt in to restock notifications (the 🔔 button on a store), your browser creates an anonymous push subscription. We store that subscription and the list of stores you chose to follow on our Cloudflare service, solely to send you a notification when one of those stores restocks. It has no name or account attached. Turn it off anytime by tapping 🔔 again to unfollow, or by revoking notification permission for this site in your browser — which stops the alerts, and stale subscriptions are deleted automatically.
The app saves the following on your device only, using your browser's local storage:
- Stores you mark as visited, and the delivery dates you record for the inventory tracker
- Stores you add to the map, edits you make to existing stores, and stores you hide
- Your language preference (English or Ukrainian) and whether you've seen the welcome screen
This information stays in your browser. It is not transmitted to us or anyone else, and we have no way to read it.
3. How your data is used
Your saved data is used only to make the app work for you — to remember your visits, your added stores, and your settings the next time you open the app. That's it.
4. Sharing features
The app lets you share the stores you've added or edited. These features are entirely optional and only ever run when you choose them:
- Backup file — saves everything this app has stored on your device into a file you keep. Nothing is uploaded to us; the file goes wherever you put it, and restoring it later puts that data back on your device.
- Contribute to the official map — sends the stores you added and the corrections you made to us for review. A maintainer approves or rejects each submission, and only an approved one is published as a public entry in our GitHub repository, where it is governed by GitHub's privacy statement. Submissions carry no name or account — only the store data you entered — so only submit information you're comfortable making public.
- Submitting your own store, or claiming one you own — these ask for a name and a way to contact you, because we verify a person is really behind the request before it reaches the map or before a store is given a PIN. That contact detail is stored on our Cloudflare service, used only to carry out that check, never published with the submission, and never used for marketing.
- Telegram bot (@Secondhandlvivbot) — entirely optional, and separate from the app itself. Commands like /today and /cheap answer instantly with nothing stored. If you subscribe to flash-deal or restock alerts for a store (via a "Get alerts on Telegram" link, or /start sub_<store>), we store your Telegram chat ID against that store so we know who to notify — stop anytime with /stop, which deletes it. Using the bot is also governed by Telegram's own privacy policy.
- Map corrections reviewed via Telegram — a correction someone submits for review has no identity attached until they open the review link the app hands them. That identity is then used only to decide whether the edit publishes immediately or needs a moderator's OK (based on a running point total), and to show that total on the public /leaderboard command.
- Restock confirmations — tapping "fresh stock today" on a store sends just that store and today's date. To stop the same person being counted twice we store a one-way hash of (store, date, your IP address) — your IP itself is never written down, and the hash cannot be turned back into it or linked to anything else you do. Once two people independently report the same restock, that date becomes public information on the shared map; nothing about who reported it is published or kept.
- Field-agent program — a small, separately invited group of paid contributors (not a feature available to app visitors generally) share visit details — store, GPS location, and a photo — through the bot as part of that paid work. That data is used only to verify visits and calculate pay.
5. Third-party services
To display the app and its map, your browser connects to a couple of third parties. Like any website visit, these connections reveal your device's IP address and basic technical details to those providers. We do not control their data practices:
- GitHub Pages — hosts the website. See GitHub's privacy statement.
- OpenStreetMap — provides the map tiles shown on the Map tab (loaded only when you open the map). See the OpenStreetMap Foundation privacy policy.
- Cloudflare Web Analytics — measures anonymous, aggregate traffic (page views and visits) so we can see roughly how many people use the app. It is cookieless, does not track individual visitors, and does not follow you across other sites. See Cloudflare's privacy policy.
- Usage metrics service (our own, on Cloudflare) — the anonymous in-app events described in section 2 are sent to a small service we operate on Cloudflare (a Worker and database). It records only which app features are used, never who used them, and stores no personal data.
The mapping library (Leaflet) is bundled with the app rather than loaded from a third-party CDN. Aside from the services listed above, opening the app contacts no other server. We use no ad networks, no behavioural or targeted advertising, and no cross-site tracking. Paid store placements are sold directly by us. Which stores are promoted is decided solely by what each store paid for — never by anything about you. A promoted store appears at the top of whatever list you are viewing, so if you have chosen the “Near me” filter that ordering follows your position; that position is used on your device only and is never sent to us (see section 3).
For offline use, the app stores a copy of its own files and any map tiles you've already viewed in your browser's cache on your device. This cached data never leaves your device and can be cleared like any other site data (see section 6).
6. Your control over your data
Because your data lives in your browser, you are always in full control of it:
- Remove individual added stores, or unmark visits, directly in the app.
- Clear everything at any time by clearing this site's data in your browser settings, or by uninstalling the app from your home screen.
Once cleared, the data is gone — we keep no copy.
7. Children's privacy
The app is a general-audience utility and does not knowingly collect any information from anyone, including children.
8. Changes to this policy
If this policy changes, the "Last updated" date at the top will change with it. Significant changes will be reflected in the app and in the project's public repository.
9. Contact
Questions about privacy? Please open an issue on our GitHub repository:
github.com/anonymouspartner/lviv-secondhand/issues
10. Copyright & terms of use
Lviv Second Hand is proprietary software, © 2026, all rights reserved — it is not open-source. You may use the officially hosted app in your browser for personal, non-commercial purposes. You may not copy, mirror, redistribute, clone, or create derivative works of the code; extract, scrape, or reuse the curated store dataset; or use the "Lviv Second Hand" name or branding — without prior written permission. Viewing the source in your browser grants no right to reuse it. Full terms are in the project's LICENSE. Bundled third-party components (Leaflet, qrcode-generator) and OpenStreetMap map data remain under their own licenses.
Коротко
Lviv Second Hand не має облікових записів і сторонніх рекламних мереж. Місцеві магазини можуть платити за розміщення на карті, і кожне платне розміщення чітко позначене як реклама — його продаємо й показуємо ми, а не рекламна мережа, і воно ніколи не використовує ваші дані для таргетування. Усе, що ви робите — магазини, які додаєте, зміни, які вносите, місця, які позначаєте як відвідані — зберігається лише у вашому браузері на вашому пристрої; ми цього не бачимо, і воно не залишає ваш телефон, доки ви самі не вирішите поділитися. Єдине, що ми вимірюємо, — це анонімний, узагальнений трафік (перегляди та відвідування) і те, які функції додатка використовуються (наприклад, які магазини відкривають) — ніколи не хто саме, і ніколи нічого, що вас ідентифікує.
1. Хто ми
Lviv Second Hand — це безкоштовний у користуванні, пропрієтарний прогресивний веб-додаток (PWA) для пошуку та відстеження магазинів секонд-хенду у Львові. Він працює майже повністю у вашому браузері; єдиний серверний компонент — анонімна аналітика, описана в розділі 5. Усі права застережено (див. розділ 10).
2. Які дані ми збираємо
Ми не збираємо жодних персональних даних. Немає реєстрації чи входу. Ми використовуємо приватний аналітичний сервіс без файлів cookie (Cloudflare Web Analytics), який вимірює лише узагальнений трафік — перегляди сторінок і відвідування — і не ідентифікує вас, не будує ваш профіль і не стежить за вами на інших сайтах. Ми не використовуємо файли cookie для стеження.
Щоб розуміти, скільки людей користується додатком, а не лише скільки було натискань, той самий сервіс рахує унікальних відвідувачів за день. Це працює без файлів cookie й без жодного ідентифікатора на вашому пристрої: ваша IP-адреса та тип браузера поєднуються з сьогоднішньою датою й секретним ключем, пропускаються через одностороннє хешування, і зберігається лише отримане значення. Вашу IP-адресу ми не зберігаємо. Оскільки дата є частиною хешу, значення змінюється щодня — тож за ним не можна впізнати вас завтра, стежити за вами в часі чи побудувати профіль. Єдине, що з нього можна дізнатися, — це кількість.
Ми також фіксуємо анонімне, узагальнене використання додатка — наприклад, які магазини відкривають, які фільтри застосовують, перемикання вкладок і мови, дії обміну/експорту — щоб розуміти, що корисно, і покращувати додаток. Ці події не містять жодних персональних даних: ні імені, ні облікового запису, ні ідентифікатора пристрою, ні місцезнаходження, ні довільного тексту — лише те, яку функцію було використано. Вони надсилаються до невеликого сервісу, який ми запускаємо на Cloudflare, і не можуть бути пов'язані з вами.
Якщо ви ввімкнете сповіщення про завезення (кнопка 🔔 у магазині), ваш браузер створює анонімну push-підписку. Ми зберігаємо цю підписку та список магазинів, які ви обрали відстежувати, на нашому сервісі Cloudflare — виключно щоб надіслати вам сповіщення, коли в одному з цих магазинів буде завезення. До неї не прив'язано ні імені, ні облікового запису. Вимкнути можна будь-коли, натиснувши 🔔 ще раз, або відкликавши дозвіл на сповіщення для цього сайту в браузері — сповіщення припиняться, а застарілі підписки видаляються автоматично.
Додаток зберігає наведене нижче лише на вашому пристрої, у локальному сховищі браузера:
- Магазини, які ви позначили як відвідані, та дати поставок, які ви вказали для трекера товарів
- Магазини, які ви додали на карту, зміни до наявних магазинів і магазини, які ви приховали
- Вашу мову (англійська чи українська) та чи бачили ви вітальний екран
Ця інформація залишається у вашому браузері. Вона не передається ні нам, ні комусь іншому, і ми не маємо доступу до неї.
3. Як використовуються ваші дані
Ваші збережені дані використовуються лише для роботи додатка — щоб запам'ятати ваші відвідування, додані магазини та налаштування наступного разу, коли ви відкриєте додаток. Це все.
4. Функції обміну
Додаток дозволяє поділитися магазинами, які ви додали чи змінили. Ці функції повністю необов'язкові й виконуються лише тоді, коли ви їх обираєте:
- Файл резервної копії — зберігає все, що застосунок зберіг на вашому пристрої, у файл, який залишається у вас. Нічого не завантажується до нас; файл потрапляє туди, куди ви його покладете, а відновлення повертає ці дані на ваш пристрій.
- Внесок до офіційної карти — надсилає нам на перевірку магазини, які ви додали, та виправлення, які ви внесли. Супровідник схвалює або відхиляє кожну заявку, і лише схвалена публікується як публічний запис у нашому репозиторії GitHub, де діє заява про конфіденційність GitHub. Заявки не містять імені чи облікового запису — лише дані магазину, які ви ввели, — тож надсилайте лише те, що готові зробити публічним.
- Подання власного магазину або підтвердження, що він ваш — тут потрібні ім’я та спосіб зв’язку, бо ми перевіряємо, що за запитом стоїть реальна людина, перш ніж він потрапить на карту або магазин отримає PIN. Цей контакт зберігається на нашому сервісі Cloudflare, використовується лише для цієї перевірки, ніколи не публікується разом із заявкою й ніколи не використовується для маркетингу.
- Telegram-бот (@Secondhandlvivbot) — повністю необов'язковий і окремий від самого додатку. Команди на кшталт /today і /cheap відповідають миттєво, нічого не зберігаючи. Якщо ви підписуєтесь на сповіщення про акції чи завезення для магазину (через посилання «Сповіщення в Telegram» або /start sub_<магазин>), ми зберігаємо ваш Telegram chat ID прив'язаним до цього магазину, щоб знати, кого сповіщати — відпишіться будь-коли командою /stop, яка видаляє цей запис. Використання бота також регулюється власною політикою конфіденційності Telegram.
- Виправлення карти, що перевіряються через Telegram — виправлення, надіслане на перевірку, не має прив'язаної особи, доки хтось не відкриє посилання на перевірку, яке дає додаток. Ця особа потім використовується лише для того, щоб вирішити, чи публікується виправлення одразу, чи потребує підтвердження модератора (на основі накопичених балів), а також щоб показати цю суму в публічній команді /leaderboard.
- Підтвердження завезення — натискання «сьогодні свіжий товар» надсилає лише цей магазин і сьогоднішню дату. Щоб та сама людина не рахувалася двічі, ми зберігаємо односторонній хеш від (магазин, дата, ваша IP-адреса) — сама IP-адреса ніколи не записується, а хеш неможливо перетворити назад на неї чи пов’язати з чимось іншим, що ви робите. Щойно двоє людей незалежно повідомлять про те саме завезення, ця дата стає публічною інформацією на спільній карті; нічого про те, хто повідомив, не публікується й не зберігається.
- Програма польових агентів — невелика, окремо запрошена група платних учасників (це не функція, доступна відвідувачам додатку загалом) ділиться деталями відвідування — магазин, GPS-локація та фото — через бота як частина цієї платної роботи. Ці дані використовуються лише для перевірки відвідувань і розрахунку оплати.
5. Сторонні сервіси
Щоб показати додаток і карту, ваш браузер з'єднується з кількома сторонніми сервісами. Як і за будь-якого відвідування сайту, ці з'єднання розкривають IP-адресу вашого пристрою та базові технічні дані цим постачальникам. Ми не контролюємо їхні практики щодо даних:
- GitHub Pages — хостинг сайту. Див. заяву про конфіденційність GitHub.
- OpenStreetMap — надає плитки карти на вкладці «Карта» (завантажуються лише коли ви відкриваєте карту). Див. політику конфіденційності OpenStreetMap Foundation.
- Cloudflare Web Analytics — вимірює анонімний, узагальнений трафік (перегляди та відвідування), щоб ми приблизно бачили, скільки людей користуються додатком. Працює без файлів cookie, не відстежує окремих відвідувачів і не стежить за вами на інших сайтах. Див. політику конфіденційності Cloudflare.
- Сервіс метрик використання (наш власний, на Cloudflare) — анонімні події в додатку, описані в розділі 2, надсилаються до невеликого сервісу, який ми запускаємо на Cloudflare (Worker і база даних). Він фіксує лише те, які функції використовуються, ніколи не хто саме, і не зберігає персональних даних.
Бібліотека карт (Leaflet) вбудована в додаток, а не завантажується зі стороннього CDN. Окрім перелічених вище сервісів, відкриття додатка не звертається до жодного іншого сервера. Ми не використовуємо рекламних мереж, поведінкової чи таргетованої реклами та міжсайтового стеження. Платні розміщення магазинів продаємо безпосередньо ми. Те, які магазини просуваються, залежить виключно від того, за що заплатив магазин, — ніколи від будь-чого про вас. Просунутий магазин показується вгорі того списку, який ви переглядаєте, тож якщо ви обрали фільтр «Поруч», це впорядкування враховує ваше місцезнаходження; воно використовується лише на вашому пристрої й ніколи не надсилається нам (див. розділ 3).
Для роботи офлайн додаток зберігає копію власних файлів і вже переглянутих плиток карти в кеші браузера на вашому пристрої. Ці дані ніколи не залишають ваш пристрій і їх можна очистити, як будь-які інші дані сайту (див. розділ 6).
6. Ваш контроль над даними
Оскільки ваші дані зберігаються у вашому браузері, ви завжди повністю ними керуєте:
- Видаляйте окремі додані магазини або знімайте позначки відвідування прямо в додатку.
- Очистіть усе будь-коли, видаливши дані цього сайту в налаштуваннях браузера або видаливши додаток з головного екрана.
Після очищення дані зникають — ми не зберігаємо жодної копії.
7. Конфіденційність дітей
Додаток є утилітою для широкої аудиторії й свідомо не збирає жодної інформації ні від кого, зокрема від дітей.
8. Зміни до цієї політики
Якщо ця політика зміниться, дата «Останнє оновлення» вгорі також зміниться. Суттєві зміни буде відображено в додатку та в публічному репозиторії проєкту.
9. Контакти
Питання щодо конфіденційності? Будь ласка, створіть звернення в нашому репозиторії GitHub:
github.com/anonymouspartner/lviv-secondhand/issues
10. Авторські права та умови використання
Lviv Second Hand — це пропрієтарне програмне забезпечення, © 2026, усі права застережено — воно не є відкритим кодом. Ви можете користуватися офіційно розміщеним додатком у своєму браузері в особистих, некомерційних цілях. Ви не маєте права копіювати, дзеркалити, поширювати, клонувати чи створювати похідні роботи з коду; видобувати, збирати (scraping) чи повторно використовувати підготовлений набір даних магазинів; або використовувати назву чи брендинг «Lviv Second Hand» — без попереднього письмового дозволу. Перегляд коду у браузері не надає права на його повторне використання. Повні умови — у LICENSE проєкту. Вбудовані сторонні компоненти (Leaflet, qrcode-generator) та дані карт OpenStreetMap залишаються під власними ліцензіями.