Nasazeni cookie listyz pres GTM, sentry jen v produkci, doplneni textovych stranek

This commit is contained in:
Michal Kváček
2024-08-27 18:30:13 +02:00
parent e8dc51a80d
commit 7011aa3223
7 changed files with 189 additions and 59 deletions
+16
View File
@@ -11,8 +11,24 @@
<link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png">
<link rel="icon" type="image/ico" href="favicon.ico"> <link rel="icon" type="image/ico" href="favicon.ico">
<!-- Google Tag Manager -->
<script v-if="process.env.NODE_ENV === 'production'">
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WC8BTPJ4');
</script>
<!-- End Google Tag Manager -->
</head> </head>
<body> <body>
<!-- Google Tag Manager (noscript) -->
<noscript v-if="process.env.NODE_ENV === 'production'">
<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WC8BTPJ4" height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- quasar:entry-point --> <!-- quasar:entry-point -->
</body> </body>
</html> </html>
+6
View File
@@ -4,6 +4,8 @@ import {computed} from "vue";
import ErrorNotFound from "pages/errors/ErrorNotFound.vue"; import ErrorNotFound from "pages/errors/ErrorNotFound.vue";
import {storeToRefs} from "pinia"; import {storeToRefs} from "pinia";
import {useAppStore} from "stores/App"; import {useAppStore} from "stores/App";
import {useMeta} from "quasar";
import {metaData} from "src/composables/meta";
const route = useRoute(); const route = useRoute();
@@ -13,6 +15,10 @@ const layoutComponent = computed(() => {
}); });
const appStatus = storeToRefs(useAppStore()).appStatus; const appStatus = storeToRefs(useAppStore()).appStatus;
useMeta(() => metaData({
title: useAppStore().pageTitle,
}));
</script> </script>
<template> <template>
+2 -11
View File
@@ -2,6 +2,8 @@ import {boot} from "quasar/wrappers";
import * as Sentry from "@sentry/browser"; import * as Sentry from "@sentry/browser";
export default boot(({app, router}) => { export default boot(({app, router}) => {
if (process.env.NODE_ENV !== 'production') return;
Sentry.init({ Sentry.init({
app, app,
dsn: "https://b2580fb40f4f0037d24f32e89d3e5df2@o472821.ingest.us.sentry.io/4506051015802880", dsn: "https://b2580fb40f4f0037d24f32e89d3e5df2@o472821.ingest.us.sentry.io/4506051015802880",
@@ -9,19 +11,8 @@ export default boot(({app, router}) => {
Sentry.browserTracingIntegration({router}), Sentry.browserTracingIntegration({router}),
Sentry.replayIntegration(), Sentry.replayIntegration(),
], ],
// Set tracesSampleRate to 1.0 to capture 100%
// of transactions for tracing.
// We recommend adjusting this value in production
tracesSampleRate: 1.0, tracesSampleRate: 1.0,
// Set `tracePropagationTargets` to control for which URLs trace propagation should be enabled
// tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/],
// Capture Replay for 10% of all sessions,
// plus for 100% of sessions with an error
replaysSessionSampleRate: 0.1, replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1.0, replaysOnErrorSampleRate: 1.0,
}); });
}); });
@@ -8,6 +8,7 @@ import ComboboxInput from "components/inputs/ComboboxInput.vue";
import SlugInput from "components/inputs/SlugInput.vue"; import SlugInput from "components/inputs/SlugInput.vue";
import {storeToRefs} from "pinia"; import {storeToRefs} from "pinia";
import {useLoggedUserStore} from "stores/LoggedUser"; import {useLoggedUserStore} from "stores/LoggedUser";
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
const props = defineProps({ const props = defineProps({
flight: { flight: {
@@ -70,15 +71,25 @@ const descriptionTab = ref("description");
<q-tab name="description">Popis</q-tab> <q-tab name="description">Popis</q-tab>
<q-tab name="debriefing">Debriefing (soukromé poznámky)</q-tab> <q-tab name="debriefing">Debriefing (soukromé poznámky)</q-tab>
</q-tabs> </q-tabs>
<q-tab-panels v-model="descriptionTab"> <q-tab-panels v-model="descriptionTab">
<q-tab-panel name="description"> <q-tab-panel name="description">
<RichTextEditor v-model="formData.description" v-bind="commonProps" height="30vh"/> <RichTextEditor v-model="formData.description" v-bind="commonProps" height="30vh"/>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="debriefing"> <q-tab-panel name="debriefing">
<BasicInfoBanner>
Debriefing by měl obsahovat minimálně následující body:
<ul>
<li><strong>Shrnutí letu:</strong> Trasa, čas a splnění cílů.</li>
<li><strong>Výkon:</strong> Navigace, reakce na podmínky, zvládnutí letu.</li>
<li><strong>Stav letadla:</strong> Funkčnost přístrojů, případné problémy.</li>
<li><strong>Bezpečnostní postupy:</strong> Dodržení bezpečnostních pravidel, řešení neočekávaných situací.</li>
<li><strong>Zpětná vazba:</strong> Pocity z letu, spokojenost pasažéra, návrhy na zlepšení.</li>
<li><strong>Dokumentace:</strong> Zápis do deníku, technická kontrola, záznamy o počasí.</li>
</ul>
</BasicInfoBanner>
<RichTextEditor v-model="formData.debriefingNotes" v-bind="commonProps" height="20vh"/> <RichTextEditor v-model="formData.debriefingNotes" v-bind="commonProps" height="20vh"/>
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>
+1 -4
View File
@@ -10,9 +10,6 @@ useAppStore().setBreadcrumbs([
...homepageBreadcrumbs(), ...homepageBreadcrumbs(),
{label: "O projektu"} {label: "O projektu"}
]); ]);
useMeta(() => metaData({
title: "O projektu",
}));
</script> </script>
<template> <template>
@@ -23,7 +20,7 @@ useMeta(() => metaData({
<p> <p>
Polétání.cz je fotogalerie určená pilotům malých letadel. Nesnaží se být leteckým zápisníkem, nabízí ale Polétání.cz je fotogalerie určená pilotům malých letadel. Nesnaží se být leteckým zápisníkem, nabízí ale
možnosti uložení fotografií pořízených během letu. Posláním aplikace je vytvořit vizuálně příjemnou prezentaci možnosti uložení fotografií pořízených během letu. Posláním aplikace je vytvořit vizuálně příjemnou prezentaci
tvých zážitků ze vzduchu a umožnit sdílet detaily o letu se svým kamarádem (kopilotem). zážitků ze vzduchu a umožnit sdílet detaily o letu se svým kamarádem (kopilotem).
</p> </p>
<h3>Externí data</h3> <h3>Externí data</h3>
+31 -7
View File
@@ -2,27 +2,51 @@
import {useAppStore} from "stores/App"; import {useAppStore} from "stores/App";
import ContentCard from "components/ContentCard.vue"; import ContentCard from "components/ContentCard.vue";
import {homepageBreadcrumbs} from "src/composables/breadcrumbs"; import {homepageBreadcrumbs} from "src/composables/breadcrumbs";
import {useMeta} from "quasar";
import {metaData} from "src/composables/meta";
useAppStore().setPageTitle("Co Polétání.cz umí?"); useAppStore().setPageTitle("Co Polétání.cz umí?");
useAppStore().setBreadcrumbs([ useAppStore().setBreadcrumbs([
...homepageBreadcrumbs(), ...homepageBreadcrumbs(),
{label: "Funkce"} {label: "Funkce"}
]); ]);
</script> </script>
<template> <template>
<ContentCard title="Co Polétání.cz umí?"> <ContentCard title="Co Polétání.cz umí?">
<template #content> <template #content>
<q-card-section> <q-card-section>
Sdílet zážitky s kamarády <h3>Ukládat informace o letech</h3>
Upravovat fotky <p>
Zobrazovat je v kontextu polohy Ať už létáš sám nebo s někým, je fajn si někam zaznamenat jaké to bylo. Po letu je možné nahrát trasu, uložit fotky, popsat zážitek a zapsat si poznámky k debriefingu letu.
Planovat let </p>
Debriefing letu: https://www.easa.europa.eu/community/topics/post-flight-debrief
<h3>Sdílet zážitky s kamarády</h3>
<p>
Nahranou trasu a fotografie, společně se slovním popisem a dalšími informace můžeš jednoduše poslat kamarádovi
jako vzpomínku na fajn čas ve vzduchu. A pokud s někým létáš časteji, uvidí svoje lety pěkně na jedné hromadě!
</p>
<h3>Upravovat fotky</h3>
<p>
Nahrané fotografie z výletů můžeš jednoduše upravovat přímo v rozhraní polétání.cz. Sice aplikace neumí to co Photoshop nebo lepší editor v mobilu, ale na umí srovnat horizont, oříznout fotku a trošku upravit barvy.
</p>
<h3>Plánování letu</h3>
<p>
Polétání.cz nabízí jednoduchý plánovač. Na pár kliků je možné naplánovat výlet, poslat návrh trasy
kopilotovi a jednodušeji se domluvit na trase výletu. V mapě jsou zobrazeny i prolétávané prostory, letiště
(i frekvencemi i dráhami). To usnadňuje celkovou předletovou přípravu. Tato data se pravidelně stahují ze
služby OpenAIP (nejedná se o oficiální zdroj informací a je potřeba informace ověřit v oficiálních zdrojích).
</p>
<h3>Objevuj nová místa</h3>
<p>
Díky veřejně dostupné mapě zajímavých míst můžeš najít nové cíle svých výletů! Případně pokud letíš na druhý kraj republiky, můžeš najít další fajn trasy na další polétání!
</p>
</q-card-section> </q-card-section>
</template> </template>
</ContentCard> </ContentCard>
</template> </template>
+118 -33
View File
@@ -11,48 +11,133 @@ useAppStore().setBreadcrumbs([
</script> </script>
<template> <template>
<ContentCard title="Informace o správě osobních údajů"> <ContentCard title="Zásady ochrany osobních údajů">
<template #content> <template #content>
<q-card-section> <q-card-section>
<section> <p>
<h4>1. ochrana osobních údajů:</h4> Tyto Zásady ochrany osobních údajů stanovují, jakým způsobem jsou zpracovávány a chráněny osobní údaje uživatelů aplikace <a href="https://poletani.cz">Poletani.cz</a>. Vaše soukromí je pro nás důležité a zavazujeme se k jeho ochraně v souladu s platnými právními předpisy, zejména s Obecným nařízením o ochraně osobních údajů (GDPR).
<p>Aplikace Poletani.cz respektuje vaše soukromí a ochranu osobních údajů. Veškeré osobní údaje, které nám poskytnete, budou zpracovány v souladu s naší Zásadou Ochrany Osobních Údajů a v souladu s nařízením GDPR.</p> </p>
</section>
<section> <h4>1. Správce osobních údajů</h4>
<h4>2. shromažďované údaje:</h4> <p>
<p>Aplikace může shromažďovat a zpracovávat různé kategorie osobních údajů, včetně, ale neomezujíc se na, jméno, e-mailovou adresu, geografická data a informace o zařízení, které používáte.</p> Správcem osobních údajů je Michal Kvacek, který je dostupný na emailové adrese <a href="mailto:michal@kvacek.cz">michal@kvacek.cz</a>.
</section> </p>
<section> <h4>2. Shromažďované osobní údaje</h4>
<h4>3. účely zpracování:</h4> <p>
<p>Osobní údaje budou zpracovány pro specifické účely, které budou uvedeny při shromažďování těchto údajů. To může zahrnovat poskytování služeb, personalizaci obsahu, analytiku a marketingové účely.</p> Aplikace shromažďuje následující osobní údaje:
</section> </p>
<ul>
<li>Jméno</li>
<li>Emailová adresa</li>
</ul>
<section> <h4>3. Účel zpracování osobních údajů</h4>
<h4>4. práva uživatelů podle GDPR:</h4> <p>
<p>Podle nařízení GDPR máte právo na přístup k vašim osobním údajům, opravu, výmaz, omezení zpracování, přenositelnost údajů a vznést námitku proti zpracování.</p> Shromážděné osobní údaje jsou využívány pro následující účely:
</section> </p>
<ul>
<li>Registrace do aplikace Poletani.cz</li>
<li>Zasílání novinek a informací o aplikaci na registrovaný email (na základě souhlasu)</li>
</ul>
<section> <h4>4. Právní základ pro zpracování</h4>
<h4>5. bezpečnost osobních údajů:</h4> <p>
<p>Aplikace přijímá veškerá opatření k zajištění bezpečnosti osobních údajů uživatelů. To zahrnuje šifrování dat, pravidelné bezpečnostní auditování a opatření k zabránění neoprávněného přístupu k údajům.</p> Zpracování osobních údajů je prováděno na základě následujících právních základů:
</section> </p>
<ul>
<li><strong>Plnění smlouvy:</strong> Osobní údaje jsou zpracovávány za účelem registrace a používání aplikace.</li>
<li><strong>Souhlas:</strong> Pro zasílání novinek a informací na emailovou adresu je nezbytný souhlas uživatele, který může být kdykoliv odvolán.</li>
</ul>
<section> <h4>5. Doba uchovávání osobních údajů</h4>
<h4>6. sdílení osobních údajů:</h4> <p>
<p>Osobní údaje nebudou sdíleny s třetími stranami bez vašeho souhlasu, s výjimkou případů stanovených zákonnou povinností.</p> Osobní údaje jsou uchovávány po dobu, dokud má uživatel aktivní účet v aplikaci. Uživatel má právo kdykoliv svůj účet smazat, čímž dojde k vymazání všech jeho osobních údajů.
</section> </p>
<section> <h4>6. Sdílení osobních údajů</h4>
<h4>7. cookies:</h4> <p>
<p>Pro lepší funkčnost a personalizaci obsahu může aplikace využívat soubory cookies.</p> Osobní údaje nejsou sdíleny s žádnými třetími stranami.
</section> </p>
<section> <h4>7. Práva uživatelů</h4>
<h4>8. změny v podmínkách:</h4> <p>
<p>Podmínky používání a Zásady Ochrany Osobních Údajů mohou být aktualizovány. Aktualizované verze budou zveřejněny na našem webu.</p> Uživatelé mají následující práva týkající se jejich osobních údajů:
</section> </p>
<ul>
<li>Právo na přístup k osobním údajům</li>
<li>Právo na opravu osobních údajů</li>
<li>Právo na výmaz osobních údajů (právo být zapomenut)</li>
<li>Právo na omezení zpracování</li>
<li>Právo na přenositelnost údajů</li>
<li>Právo vznést námitku proti zpracování</li>
<li>Právo podat stížnost u dozorového úřadu</li>
</ul>
<h4>8. Použití cookies</h4>
<p>
Aplikace používá cookies pro následující účely:
</p>
<ul>
<li>Měření přístupů pomocí Google Analytics</li>
<li>Integrace služeb Google Maps a Google Fonts</li>
<li>Použití Google Tag Manager pro správu značek</li>
<li>Řešení souhlasu s cookies prostřednictvím služby consentmanager.com</li>
</ul>
<p>
Uživatelé mohou správu souborů cookies provádět prostřednictvím nastavení svého prohlížeče nebo pomocí nástroje poskytovaného aplikací.
</p>
<h4>9. Změny v Zásadách ochrany osobních údajů</h4>
<p>
Tyto Zásady ochrany osobních údajů mohou být čas od času aktualizovány. O všech podstatných změnách budou uživatelé informováni prostřednictvím emailu nebo prostřednictvím aplikace.
</p>
<h4>10. Kontakt</h4>
<p>
Pokud máte jakékoliv dotazy týkající se zpracování vašich osobních údajů, můžete nás kontaktovat na adrese <a href="mailto:michal@kvacek.cz">michal@kvacek.cz</a>.
</p>
<!-- -->
<!-- <section>-->
<!-- <h4>1. ochrana osobních údajů:</h4>-->
<!-- <p>Aplikace Poletani.cz respektuje vaše soukromí a ochranu osobních údajů. Veškeré osobní údaje, které nám poskytnete, budou zpracovány v souladu s naší Zásadou Ochrany Osobních Údajů a v souladu s nařízením GDPR.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>2. shromažďované údaje:</h4>-->
<!-- <p>Aplikace může shromažďovat a zpracovávat různé kategorie osobních údajů, včetně, ale neomezujíc se na, jméno, e-mailovou adresu, geografická data a informace o zařízení, které používáte.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>3. účely zpracování:</h4>-->
<!-- <p>Osobní údaje budou zpracovány pro specifické účely, které budou uvedeny při shromažďování těchto údajů. To může zahrnovat poskytování služeb, personalizaci obsahu, analytiku a marketingové účely.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>4. práva uživatelů podle GDPR:</h4>-->
<!-- <p>Podle nařízení GDPR máte právo na přístup k vašim osobním údajům, opravu, výmaz, omezení zpracování, přenositelnost údajů a vznést námitku proti zpracování.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>5. bezpečnost osobních údajů:</h4>-->
<!-- <p>Aplikace přijímá veškerá opatření k zajištění bezpečnosti osobních údajů uživatelů. To zahrnuje šifrování dat, pravidelné bezpečnostní auditování a opatření k zabránění neoprávněného přístupu k údajům.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>6. sdílení osobních údajů:</h4>-->
<!-- <p>Osobní údaje nebudou sdíleny s třetími stranami bez vašeho souhlasu, s výjimkou případů stanovených zákonnou povinností.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>7. cookies:</h4>-->
<!-- <p>Pro lepší funkčnost a personalizaci obsahu může aplikace využívat soubory cookies.</p>-->
<!-- </section>-->
<!-- <section>-->
<!-- <h4>8. změny v podmínkách:</h4>-->
<!-- <p>Podmínky používání a Zásady Ochrany Osobních Údajů mohou být aktualizovány. Aktualizované verze budou zveřejněny na našem webu.</p>-->
<!-- </section>-->
</q-card-section> </q-card-section>
</template> </template>
</ContentCard> </ContentCard>