Skip to content

Commit 5d3eb8e

Browse files
WIP
1 parent 2898b7b commit 5d3eb8e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+24869
-32662
lines changed

.eslintrc.js

-20
This file was deleted.

.vscode/extensions.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
// See https://go.microsoft.com/fwlink/?LinkId=827846
3+
// for the documentation about the extensions.json format
4+
"recommendations": [
5+
"esbenp.prettier-vscode",
6+
"EditorConfig.EditorConfig",
7+
"Orta.vscode-jest",
8+
"Vue.volar",
9+
"Vue.vscode-typescript-vue-plugin"
10+
]
11+
}

.vscode/settings.json

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"[javascript]": {
3+
"editor.defaultFormatter": "esbenp.prettier-vscode"
4+
},
5+
"[json]": {
6+
"editor.defaultFormatter": "esbenp.prettier-vscode"
7+
},
8+
"[typescript]": {
9+
"editor.defaultFormatter": "esbenp.prettier-vscode"
10+
},
11+
"[vue]": {
12+
"editor.defaultFormatter": "esbenp.prettier-vscode"
13+
},
14+
"editor.formatOnSave": true,
15+
"eslint.format.enable": true,
16+
"typescript.format.enable": false,
17+
"editor.quickSuggestions": {
18+
"strings": true
19+
}
20+
}

app.vue

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<template>
2+
<NuxtLayout>
3+
<NuxtPage />
4+
</NuxtLayout>
5+
</template>

components/README.md

-7
This file was deleted.

components/global/docs-image.vue

+1-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ export default {
2121
},
2222
data() {
2323
return {
24-
image: this.src.startsWith('~')
25-
? require(this.src)
26-
: require(`~/assets/${this.src}`),
24+
image: this.src.startsWith('/') ? this.src : `/${this.src}`,
2725
}
2826
},
2927
}

components/newsletter.vue

+15-8
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
target="_blank"
77
>
88
<div class="flex flex-col">
9-
<label for="contact_email">{{ $t('email') }}</label
9+
<label for="contact_email">{{ t('email') }}</label
1010
><input
1111
id="contact_email"
1212
name="contact[email]"
13-
:placeholder="$t('email:placeholder')"
13+
:placeholder="t('email:placeholder')"
1414
class="bg-white-200 text-black shadow-sm p-2"
1515
type="email"
1616
/>
1717
</div>
1818
<div class="flex flex-col">
19-
<label for="contact_first_name">{{ $t('first-name') }}</label
19+
<label for="contact_first_name">{{ t('first-name') }}</label
2020
><input
2121
id="contact_first_name"
2222
class="bg-white-200 text-black shadow-sm p-2"
@@ -36,14 +36,14 @@
3636
<button
3737
class="inline-flex items-center gap-4 px-4 py-4 bg-green-600 text-white font-semibold rounded-lg shadow-sm hover:bg-green-500 hover:shadow-lg"
3838
>
39-
{{ $t('submit') }}
39+
{{ t('submit') }}
4040
</button>
4141
</div>
4242
<i18n tag="div" path="privacy-hint" class="text-xs">
4343
<template #link>
44-
<a href="https://pentacent.com/privacy" class="underline">{{
45-
$t('privacy-hint:link')
46-
}}</a>
44+
<a href="https://pentacent.com/privacy" class="underline">
45+
{{ t('privacy-hint:link') }}
46+
</a>
4747
</template>
4848
</i18n>
4949
</form>
@@ -54,6 +54,13 @@ export default {
5454
data() {
5555
return { hCaptchaReady: false, captchaLoaded: false }
5656
},
57+
setup() {
58+
const { t } = useI18n({
59+
useScope: 'local',
60+
})
61+
62+
return { t }
63+
},
5764
head() {
5865
return {
5966
script: [
@@ -93,7 +100,7 @@ export default {
93100
}
94101
</style>
95102

96-
<i18n>
103+
<i18n lang="json">
97104
{
98105
"en": {
99106
"email": "Email",

components/page-footer.vue

+11-10
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
<p>Made in 🇩🇪 ❤️ 🇪🇺.</p>
77
<p class="text-sm">
88
<a class="underline" href="/credits">Credits</a>
9-
<a class="underline ml-2" href="https://pentacent.com/legal"
10-
>Legal notice</a
11-
>
12-
<nuxt-link class="underline ml-2" to="/privacy"
13-
>Privacy policy</nuxt-link
14-
>
15-
<nuxt-link class="underline ml-2" to="/terms"
16-
>Terms &amp; Conditions</nuxt-link
17-
>
9+
<a class="underline ml-2" href="https://pentacent.com/legal">
10+
Legal notice
11+
</a>
12+
<nuxt-link class="underline ml-2" to="/privacy">
13+
Privacy policy
14+
</nuxt-link>
15+
<nuxt-link class="underline ml-2" to="/terms">
16+
Terms &amp; Conditions
17+
</nuxt-link>
1818
</p>
1919
</div>
2020
<div
@@ -26,8 +26,9 @@
2626
:key="locale.code"
2727
:to="path"
2828
:class="[{ 'font-bold': $i18n.locale === locale.code }]"
29-
>{{ locale.name }}</nuxt-link
3029
>
30+
{{ locale.name }}
31+
</nuxt-link>
3132
</div>
3233
</footer>
3334
</template>

components/participate-cta.vue

+47-50
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,53 @@
11
<template>
2-
<lazy-hydrate never>
3-
<div class="my-16">
4-
<h2
5-
class="text-3xl font-semibold flex flex-col md:flex-row items-center gap-5"
2+
<div class="my-16">
3+
<h2
4+
class="text-3xl font-semibold flex flex-col md:flex-row items-center gap-5"
5+
>
6+
<svg
7+
xmlns="http://www.w3.org/2000/svg"
8+
fill="none"
9+
viewBox="0 0 24 24"
10+
stroke="currentColor"
11+
class="h-12 text-green-500"
612
>
7-
<svg
8-
xmlns="http://www.w3.org/2000/svg"
9-
fill="none"
10-
viewBox="0 0 24 24"
11-
stroke="currentColor"
12-
class="h-12 text-green-500"
13-
>
14-
<path
15-
stroke-linecap="round"
16-
stroke-linejoin="round"
17-
stroke-width="2"
18-
d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"
19-
/></svg
20-
>{{ $t('h2') }}
21-
</h2>
22-
<ul class="text-lg">
23-
<li class="mt-5">
24-
<a class="underline" rel="me" href="https://fosstodon.org/@keila">{{
25-
$t('mastodon')
26-
}}</a>
27-
</li>
28-
<li class="mt-5">
29-
<a class="underline" href="https://twitter.com/keila_io">{{
30-
$t('twitter')
31-
}}</a>
32-
</li>
33-
<li class="mt-5">
34-
<a class="underline" href="https://app.keila.io/forms/frm_GX8qGEZd">{{
35-
$t('newsletter')
36-
}}</a>
37-
</li>
38-
<li class="mt-5">
39-
<a class="underline" href="https://github.com/pentacent/keila">{{
40-
$t('github')
41-
}}</a>
42-
</li>
43-
</ul>
44-
</div>
45-
</lazy-hydrate>
13+
<path
14+
stroke-linecap="round"
15+
stroke-linejoin="round"
16+
stroke-width="2"
17+
d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"
18+
/>
19+
</svg>
20+
{{ t('h2') }}
21+
</h2>
22+
<ul class="text-lg">
23+
<li class="mt-5">
24+
<a class="underline" rel="me" href="https://fosstodon.org/@keila">
25+
{{ t('mastodon') }}
26+
</a>
27+
</li>
28+
<li class="mt-5">
29+
<a class="underline" href="https://twitter.com/keila_io">
30+
{{ t('twitter') }}
31+
</a>
32+
</li>
33+
<li class="mt-5">
34+
<a class="underline" href="https://app.keila.io/forms/frm_GX8qGEZd">
35+
{{ t('newsletter') }}
36+
</a>
37+
</li>
38+
<li class="mt-5">
39+
<a class="underline" href="https://github.com/pentacent/keila">
40+
{{ t('github') }}
41+
</a>
42+
</li>
43+
</ul>
44+
</div>
4645
</template>
4746

48-
<script>
49-
import LazyHydrate from 'vue-lazy-hydration'
50-
51-
export default {
52-
components: { LazyHydrate },
53-
}
47+
<script lang="ts" setup>
48+
const { t } = useI18n({
49+
useScope: 'local',
50+
})
5451
</script>
5552

5653
<style scoped>
@@ -67,7 +64,7 @@ export default {
6764
}
6865
</style>
6966

70-
<i18n>
67+
<i18n lang="json">
7168
{
7269
"en": {
7370
"h2": "Participate & Follow us",

content/legal/privacy.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,4 @@ Hetzner Online AG, based in Germany, is a leading German data center operator. W
9797
## [Tawk.to Inc./Tawk.to Ltd](https://www.tawk.to/)
9898
Tawk.to, based in the USA, operates the chat widget on the Keila website.
9999
Data for users from the European Economic Area are processed by their affiliate,
100-
Tawk.to Ltd, based in the United Kingdom.
100+
Tawk.to Ltd, based in the United Kingdom.

layouts/README.md

-7
This file was deleted.

layouts/default.vue

+26-18
Original file line numberDiff line numberDiff line change
@@ -14,60 +14,68 @@
1414
class="flex flex-wrap gap-2 align-center justify-end font-semibold text-black"
1515
>
1616
<li class="hidden md:block">
17-
<nuxt-link :to="localePath('/')" class="px-3 py-5">{{
18-
$t('menu:home')
19-
}}</nuxt-link>
17+
<nuxt-link :to="localePath('/')" class="px-3 py-5">
18+
{{ t('menu:home') }}
19+
</nuxt-link>
2020
</li>
2121
<li class="hidden md:block">
22-
<nuxt-link to="/docs" class="px-3 py-5">{{
23-
$t('menu:docs')
24-
}}</nuxt-link>
22+
<nuxt-link to="/docs" class="px-3 py-5">
23+
{{ t('menu:docs') }}
24+
</nuxt-link>
2525
</li>
2626
<li class="hidden md:block">
27-
<nuxt-link :to="localePath('/try')" class="px-3 py-5">{{
28-
$t('menu:pricing')
29-
}}</nuxt-link>
27+
<nuxt-link :to="localePath('/try')" class="px-3 py-5">
28+
{{ t('menu:pricing') }}
29+
</nuxt-link>
3030
</li>
3131
<li class="hidden md:block">
3232
<a
3333
href="https://github.com/pentacent/keila"
3434
target="_blank"
3535
class="px-3 py-5"
36-
>{{ $t('menu:github') }}</a
3736
>
37+
{{ t('menu:github') }}
38+
</a>
3839
</li>
3940
<div class="hidden md:block flex-grow"></div>
4041
<li class="block">
41-
<a href="https://app.keila.io" class="px-3 py-5">{{
42-
$t('menu:login')
43-
}}</a>
42+
<a href="https://app.keila.io" class="px-3 py-5">
43+
{{ t('menu:login') }}
44+
</a>
4445
</li>
4546
<li class="block">
4647
<a
4748
href="https://app.keila.io/auth/register"
4849
class="p-3 bg-green-600 font-semibold text-white rounded-md hover:bg-green-500"
4950
>
50-
{{ $t('menu:try') }}
51+
{{ t('menu:try') }}
5152
</a>
5253
</li>
5354
</ul>
5455
</nav>
5556
</div>
5657
</header>
5758
<main>
58-
<Nuxt />
59+
<slot />
5960
</main>
6061
<page-footer class="max-w-4xl" />
6162
</div>
6263
</template>
6364

64-
<script>
65+
<script lang="ts">
6566
import logo from '../components/logo.vue'
66-
import ogImage from '@/static/og_image.png'
67+
import ogImage from '@/public/og_image.png'
6768
const baseUrl = process.env.BASE_URL || ''
6869
6970
export default {
7071
components: { logo },
72+
setup() {
73+
const { t } = useI18n({
74+
useScope: 'local',
75+
})
76+
77+
return { t }
78+
},
7179
head() {
7280
const i18nHead = this.$nuxtI18nHead
7381
? this.$nuxtI18nHead({ addSeoAttributes: true })
@@ -139,7 +147,7 @@ body {
139147
}
140148
</style>
141149

142-
<i18n>
150+
<i18n lang="json">
143151
{
144152
"en": {
145153
"meta:description": "A reliable and easy-to-use email newsletter tool. Keila is an Open Source alternative to Mailchimp that you can host yourself.",

0 commit comments

Comments
 (0)