Intial commit from techit@Techits-Mac-Pro

This commit is contained in:
Techit Thawiang
2025-09-21 19:59:04 +07:00
commit bee7386709
27 changed files with 9890 additions and 0 deletions
Executable
+4
View File
@@ -0,0 +1,4 @@
NUXT_PUBLIC_SITE_URL=example.com
NUXT_PUBLIC_BASE_URL=https://example.com
NUXT_PUBLIC_AUTHOR=John Doe
NUXT_PUBLIC_SITE_NAME=John's Blog
Executable
+24
View File
@@ -0,0 +1,24 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example
Executable
+75
View File
@@ -0,0 +1,75 @@
# Nuxt Minimal Starter
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
Executable
+10
View File
@@ -0,0 +1,10 @@
export default defineAppConfig({
ui: {
colors: {
primary: 'amber',
secondary: 'green',
neutral: 'zinc'
},
fonts: false
}
})
Executable
+7
View File
@@ -0,0 +1,7 @@
<template>
<UApp>
<NuxtLayout>
<NuxtPage/>
</NuxtLayout>
</UApp>
</template>
+130
View File
@@ -0,0 +1,130 @@
@import "tailwindcss";
@import "@nuxt/ui";
@theme {
--ui-container-lg: var(--container-5xl);
--ui-container-md: var(--container-3xl);
--ui-container-sm: var(--container-2xl);
--ui-container: var(--container-lg);
--ui-container-padding: calc(var(--spacing)*4);
--ui-header-title-height: calc(var(--spacing)*16);
--ui-header-navbar-height: calc(var(--spacing)*10);
--ui-bg-container: oklch(0.9557 0.1104 102.71);
--ui-bg-container-bd: oklch(0.85 0.1104 102.71);
--ui-on-bg-container: oklch(0.4644 0.0554 82.5);
--ui-primary: oklch(0.6358 0.1185 82.5);
--ui-primary-light: oklch(0.5 0.1185 82.5);
--ui-on-primary: oklch(1 0 0);
--ui-radius: 0.125rem;
--font-sans: OpenSans, Sarabun, sans-serif;
--font-sans--font-feature-settings: "liga", "calt", "ss01", "cv05", "cv06", "cv11";
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--font-serif: "Noto Serif", "Noto Serif Thai", Georgia, Garamond, "Times New Roman", Times, serif;
}
@supports (font-variation-settings: normal) {
:root {
--font-sans: OpenSansVariable, Sarabun, sans-serif;
font-optical-sizing: auto;
}
}
body {
font-size: 14px;
line-height: 20px;
-webkit-font-smoothing: unset!important;
-moz-osx-font-smoothing: unset!important;
}
.container {
margin: 0 auto;
padding: 0 var(--ui-container-padding);
@apply max-w-(--ui-container) sm:max-w-(--ui-container-sm) md:max-w-(--ui-container-md) lg:max-w-(--ui-container-lg);
}
.row {
@apply flex items-center;
}
.nav {
@apply pl-0 list-none;
}
.navbar-nav {
@apply md:float-left md:m-0;
}
.navbar-nav > li {
float: left;
display: flex;
}
.navbar-nav > li > a {
padding: 10.5px 14px;
}
.navbar-nav > li > a.router-link-active, .navbar-nav > li > a.router-link-active:hover {
@apply bg-linear-[to_bottom,rgba(0,0,0,0.3)_10%,rgba(0,0,0,0)_100%];
}
.navbar-nav > li > a:hover {
@apply bg-linear-[to_bottom,rgba(255,255,255,0)_0%,rgba(255,255,255,0.3)_10%,rgba(255,255,255,0)_100%];
}
.site-title {
display: flex;
flex-direction: row;
align-items: center;
height: var(--ui-header-title-height);
@apply border-t border-t-(--ui-on-bg-container) bg-linear-[to_bottom,var(--ui-bg-container-bd)_0%,var(--ui-bg-container)_35%] text-(--ui-on-bg-container);
}
.site-navbar {
min-height: var(--ui-header-navbar-height);
display: flex;
flex-direction: row;
align-items: center;
height: auto;
@apply bg-linear-[to_bottom,var(--ui-primary)_0%,var(--ui-primary-light)_90%] text-white;
}
.hero-section {
@apply py-16 drop-shadow-md bg-green-50 bg-cover bg-center;
}
.hero-section > .container > .brace {
@apply my-4;
}
.hero-section > .container > .title {
@apply text-4xl font-bold my-4;
line-height: 1.4em;
}
.hero-section > .container > .subtitle {
@apply text-xl my-4;
line-height: 1.4em;
}
.page-section {
@apply my-16;
}
.page-section > .container .title {
@apply text-2xl font-medium my-[0.75rem];
}
.page-section > .container p {
@apply my-[0.75rem];
}
.page-section.page-section-alt {
@apply my-0;
}
.page-section.page-section-alt > .container {
@apply my-0 flex justify-between items-center;
}
.page-section.page-section-alt > .container > .section {
@apply mb-4;
}
.page-section.page-section-alt > .container > .section-img {
@apply w-[45%];
img {
@apply my-16;
}
}
.footer {
@apply bg-(--ui-bg-muted) py-16;
}
.site-footer {
@apply block;
}
.footer-notice {
@apply block;
}
+28
View File
@@ -0,0 +1,28 @@
<script setup>
const { t, locale, setLocale } = useI18n()
const currentLocale = ref(locale.value)
const toggleLocale = () => {
const newLocale = currentLocale.value === 'en' ? 'th' : 'en'
setLocale(newLocale).then(() => {
window.location.reload()
})
}
</script>
<template>
<ClientOnly>
<UTooltip :text="t('ui.language.tooltip')">
<UButton
@click="toggleLocale"
variant="outline"
color="neutral"
size="sm"
:label="t('ui.language.switch')"
/>
</UTooltip>
<template #fallback>
<USkeleton class="size-8" />
</template>
</ClientOnly>
</template>
+21
View File
@@ -0,0 +1,21 @@
<template>
<footer class="footer site-footer">
<div class="site-footer">
<div class="container">
<section class="row">
<section class="footer-notice">
<img width="48" height="48" src="/favicon.ico" alt="*nix" class="text-2xl"></img>
<h2 class="text-2xl font-bold my-[0.5em]">*nix in Thailand (กซในประเทศไทย)</h2>
<p class="my-[0.5em]">{{t('footer.copyright.notice', {'year': year, 'yearB': year + 543})}}</p>
<LanguageSwitcher/>
</section>
</section>
</div>
</div>
</footer>
</template>
<script setup lang="ts">
const {t} = useI18n();
const year = 2025
</script>
+78
View File
@@ -0,0 +1,78 @@
<template>
<header>
<div class="site-title">
<div class="container flex justify-between">
<div class="row w-fit items-center">
<div class="row flex">
<img width="48" height="48" src="/favicon.ico" alt="*nix" class="text-2xl mr-4"></img>
<img width="124" height="20" src="/wordmark.svg" alt="in Thailand" class="text-2xl my-[13px]"></img>
</div>
</div>
<div class="hidden sm:flex w-fit items-center justify-end">
<div class="row">
<UFieldGroup>
<UButton size="sm" :label="t('sites.join-discord')" to="https://discord.gg/p5wuX5GwB7" icon="i-lucide-users" />
<UDropdownMenu
size="sm"
:items="siteTitleItems"
:content="{
align: 'end',
side: 'bottom',
sideOffset: 8
}"
:ui="{
content: 'w-36'
}"
>
<UButton size="sm" :label="t('sites.all')" icon="i-lucide-map" color="neutral" variant="outline" />
</UDropdownMenu>
</UFieldGroup>
</div>
</div>
</div>
</div>
<nav class="site-navbar">
<div class="container">
<div class="hidden sm:flex">
<ul class="nav navbar-nav">
<li class="nav-link">
<NuxtLinkLocale href="/">{{ t('nav.home') }}</NuxtLinkLocale>
</li>
<li class="nav-link">
<NuxtLinkLocale href="/about">{{ t('nav.about') }}</NuxtLinkLocale>
</li>
<li class="nav-link">
<NuxtLinkLocale href="/contact">{{ t('nav.contact') }}</NuxtLinkLocale>
</li>
</ul>
</div>
</div>
</nav>
</header>
</template>
<script lang="ts" setup>
const { t } = useI18n();
const siteTitleItems = ref<DropdownMenuItem[]>([
{
label: t('sites.wiki'),
icon: 'i-lucide-book-open-text',
to: 'https://wiki.unix.in.th'
},
{
label: t('sites.identity'),
icon: 'i-lucide-user',
to: 'https://identity.unix.in.th'
},
{
label: t('sites.forum'),
icon: 'i-lucide-messages-square',
to: 'https://forum.unix.in.th'
},
{
label: t('sites.status'),
icon: 'i-lucide-activity',
to: 'https://status.unix.in.th'
},
])
</script>
+7
View File
@@ -0,0 +1,7 @@
<template>
<div>
<WebHeader/>
<slot/>
<WebFooter/>
</div>
</template>
+29
View File
@@ -0,0 +1,29 @@
<template>
<main>
<article class="article">
<section class="hero-section">
<div class="container">
<h1 :id="t('about.hero.title').replace(/ /g, '_')" class="title">{{ t('about.hero.title') }}</h1>
<!-- <p :id="t('about.hero.sub').replace(/ /g, '_')" class="subtitle">{{ t('about.hero.sub') }}</p> -->
</div>
</section>
<section class="container">
</section>
</article>
</main>
</template>
<script setup>
const {t} = useI18n();
const config = useRuntimeConfig();
const baseUrl = config.public.baseUrl
useHead({
title: '*nix in Thailand',
titleTemplate: '%s',
meta: [
{ property: 'og:type', content: 'website' }
]
})
</script>
+28
View File
@@ -0,0 +1,28 @@
<template>
<main>
<article class="article">
<section class="hero-section">
<div class="container">
<img></img>
<h2 class="text-3xl ">contact page</h2>
</div>
</section>
<section class="container">
</section>
</article>
</main>
</template>
<script setup>
const config = useRuntimeConfig();
const baseUrl = config.public.baseUrl
useHead({
title: '*nix in Thailand',
titleTemplate: '%s',
meta: [
{ property: 'og:type', content: 'website' }
]
})
</script>
+69
View File
@@ -0,0 +1,69 @@
<template>
<main>
<article class="article">
<section class="hero-section">
<div class="container">
<img class="brace" width="100" src="/brace-smile.svg"></img>
<h1 :id="t('home.hero.title').replace(/ /g, '_')" class="title">{{ t('home.hero.title') }}</h1>
<p :id="t('home.hero.sub').replace(/ /g, '_')" class="subtitle">{{ t('home.hero.sub') }}</p>
</div>
</section>
<!-- <section class="page-section page-section-alt">
<div class="container">
<section class="section">
<h2 class="title">{{ t('home.wiki.title') }}</h2>
<p>{{ t('home.wiki.paragraph') }}</p>
<UButton to="https://wiki.unix.in.th" :label="t('home.wiki.go')"/>
</section>
<section class="section-img">
<img class="aspect-[4/3]" src="/wiki-mac.png"></img>
</section>
</div>
</section>
<section class="page-section page-section-alt">
<div class="container">
<section class="section">
<h2 class="title">{{ t('home.forum.title') }}</h2>
<p>{{ t('home.forum.paragraph') }}</p>
<UButton to="https://forum.unix.in.th" :label="t('home.forum.go')"/>
</section>
<section class="section-img">
<img class="aspect-[4/3]" src="/wiki-mac.png"></img>
</section>
</div>
</section> -->
<section class="page-section" :aria-labelledby="t('home.wiki.title').replace(/ /g, '_')" :aria-describedby="t('home.wiki.paragraph').replace(/ /g, '_')">
<div class="container">
<section class="section">
<h2 :id="t('home.wiki.title').replace(/ /g, '_')" class="title">{{ t('home.wiki.title') }}</h2>
<p :id="t('home.wiki.paragraph').replace(/ /g, '_')">{{ t('home.wiki.paragraph') }}</p>
<UButton to="https://wiki.unix.in.th" :label="t('home.wiki.go')"/>
</section>
</div>
</section>
<section class="page-section" :aria-labelledby="t('home.forum.title').replace(/ /g, '_')" :aria-describedby="t('home.forum.paragraph').replace(/ /g, '_')">
<div class="container">
<section class="section">
<h2 :id="t('home.forum.title').replace(/ /g, '_')" class="title">{{ t('home.forum.title') }}</h2>
<p :id="t('home.forum.paragraph').replace(/ /g, '_')">{{ t('home.forum.paragraph') }}</p>
<UButton to="https://forum.unix.in.th" :label="t('home.forum.go')"/>
</section>
</div>
</section>
</article>
</main>
</template>
<script setup>
const {t} = useI18n();
const config = useRuntimeConfig();
const baseUrl = config.public.baseUrl
useHead({
title: '*nix in Thailand',
titleTemplate: '%s',
meta: [
{ property: 'og:type', content: 'website' }
]
})
</script>
+12
View File
@@ -0,0 +1,12 @@
import en from './locales/en.json'
import th from './locales/th.json'
export default defineI18nConfig(() => ({
legacy: false,
locale: 'en',
fallbackLocale: 'en',
messages: {
en,
th
},
}))
+47
View File
@@ -0,0 +1,47 @@
{
"sites": {
"wiki": "Wiki",
"identity": "Identity services",
"status": "Status",
"forum": "Forum",
"all": "unix.in.th sites",
"join-discord": "Join Discord"
},
"nav": {
"home": "Home",
"about": "About",
"contact": "Contact"
},
"ui": {
"language": {
"switch": "Switch language",
"tooltip": "Switch between English and Thai as the user interface language"
}
},
"home": {
"hero": {
"title": "Hi! Welcome to *nix in Thailand, free computer knowledge for everyone.",
"sub": "A place for everything Unix and Unix-like system including its software. And provide a free documentation and universal access to other free software."
},
"wiki": {
"title": "Wiki",
"paragraph": "Central of computer software and hardware knowledge, free to all, shaped by all.",
"go": "Go to wiki"
},
"forum": {
"title": "Forum",
"paragraph": "A place to ask, discuss, and chit-chat about UNIX and Unix-like software and hardware.",
"go": "Go to forum"
}
},
"footer": {
"copyright": {
"notice": "Copyleft 🄯 *nix in Thailand, {year} ({yearB}). All rights reversed."
}
},
"about": {
"hero": {
"title": "About us"
}
}
}
+47
View File
@@ -0,0 +1,47 @@
{
"sites": {
"wiki": "วิกิ",
"identity": "ระบบบัญชี",
"status": "สถานะ",
"forum": "ลานประชาคม",
"all": "ไซต์ของ unix.in.th",
"join-discord": "เข้าร่วมดิสคอร์ด"
},
"nav": {
"home": "หน้าหลัก",
"about": "เกี่ยวกับ",
"contact": "ติดต่อ"
},
"ui": {
"language": {
"switch": "สลับภาษา",
"tooltip": "เปลี่ยนภาษาของส่วนต่อประสานผู้ใช้ระหว่างภาษาอังกฤษหรือภาษาไทย"
}
},
"home": {
"hero": {
"title": "สวัสดี! ยินดีต้อนรับสู่ *nix in Thailand สาระคอมพิวเตอร์ที่ทุกคนสามารถเข้าถึงได้",
"sub": "พื้นที่สำหรับการซักถาม คุยเล่น และเอกสารสาระคอมพิวเตอร์ต่าง ๆ โดยที่เน้นระบบ UNIX และ Unix-like ไม่ว่าจะเป็น GNU, Linux, macOS, Android, ฯลฯ"
},
"wiki": {
"title": "สารคอมพิวเตอร์เสรี (วิกิ)",
"paragraph": "ศูนย์รวมความรู้ซอฟต์แวร์และฮาร์ดแวร์คอมพิวเตอร์ ที่ทุกคนสามารถสามารถแก้ไขได้",
"go": "ไปที่วิกิ"
},
"forum": {
"title": "ลานประชาคม\n",
"paragraph": "พื้นที่สอบถาม อภิปราย และคุยเล่น เกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ UNIX และ Unix-like",
"go": "ไปที่ลานประชาคม"
}
},
"footer": {
"copyright": {
"notice": "นิรสิทธิ์ 🄯 *nix in Thailand, {year} ({yearB}), ไม่สงวนสิทธิ์ทุกประการ"
}
},
"about": {
"hero": {
"title": "เกี่ยวกับเรา"
}
}
}
Executable
+95
View File
@@ -0,0 +1,95 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
import tailwindcss from "@tailwindcss/vite";
export default defineNuxtConfig({
compatibilityDate: '2025-07-15',
devtools: { enabled: false },
ssr: true,
modules: ['@nuxt/ui', '@nuxtjs/i18n'],
css: ['~/assets/css/main.css'],
vite: {
plugins: [
tailwindcss(),
]
},
runtimeConfig: {
public: {
baseUrl: process.env.NUXT_PUBLIC_BASE_URL,
siteAuthor: process.env.NUXT_PUBLIC_SITE_AUTHOR,
siteName: process.env.NUXT_PUBLIC_SITE_NAME,
twitterUsername: process.env.NUXT_PUBLIC_TWITTER_USERNAME
}
},
app: {
// pageTransition: { name: 'page', mode: 'out-in' },
head: {
titleTemplate: `%s / ${process.env.NUXT_PUBLIC_SITE_NAME || '*nix in Thailand'}`,
meta: [
{ name: 'description', content: 'A place for everything Unix and Unix-like system including its software. And provide a free documentation and universal access to other free software.' },
{ name: 'referrer', content: 'strict-origin-when-cross-origin' },
{ name: 'canonical', content: process.env.NUXT_PUBLIC_BASE_URL },
{ name: 'robots', content: 'index,follow' },
// UNUSED { name: 'author', content: process.env.NUXT_PUBLIC_AUTHOR },
{ name: 'application-name', content: process.env.NUXT_PUBLIC_SITE_NAME },
{ name: 'theme-color', content: '#ae8324' },
// Open Graph
{ property: 'og:title', content: `${process.env.NUXT_PUBLIC_SITE_NAME}` },
{ property: 'og:description', content: 'A place for everything Unix and Unix-like system including its software. And provide a free documentation and universal access to other free software.' },
{ property: 'og:url', content: process.env.NUXT_PUBLIC_BASE_URL },
{ property: 'og:site_name', content: process.env.NUXT_PUBLIC_BASE_URL },
{ property: 'og:type', content: 'website' },
{ property: 'og:locale', content: 'en_US' },
// Twitter
// { name: 'twitter:creator', content: '@techitwinner' },
// { name: 'twitter:site', content: '@techitwinner' },
{ name: 'twitter:card', content: 'summary' },
{ name: 'twitter:url', content: process.env.NUXT_PUBLIC_BASE_URL },
{ name: 'twitter:image', content: '' },
// Apple Web App
{ name: 'mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black' },
// { name: 'apple-mobile-web-app-title', content: process.env.NUXT_PUBLIC_AUTHOR }
],
htmlAttrs: {
lang: 'en',
},
charset: 'utf-8',
viewport: 'width=device-width, initial-scale=1',
link: [
{ rel: 'icon', type: 'image/vnd.microsoft.icon', href: '/favicon.ico' },
// { rel: 'stylesheet', href: '/style.css' },
// TYPEFACES
{ rel: 'preconnect', href: 'https://fonts.thawiang.com/' },
{ rel: 'stylesheet', href: 'https://fonts.thawiang.com/open-sans/open-sans-less.css' },
{ rel: 'stylesheet', href: 'https://fonts.thawiang.com/sarabun/sarabun.css' }
]
},
},
i18n: {
baseUrl: process.env.NUXT_PUBLIC_BASE_URL,
strategy: 'prefix_and_default',
defaultLocale: 'th',
locales: [
{
code: 'th',
language: 'th-TH',
name: 'ภาษาไทย',
file: 'th.json',
isCatchallLocale: true,
},
{
code: 'en',
language: 'en-US',
name: 'English',
file: 'en.json',
}
],
detectBrowserLanguage: {
useCookie: true,
cookieKey: 'i18n_language',
fallbackLocale: 'th',
},
vueI18n: 'i18n.config.ts',
}
})
Executable
+25
View File
@@ -0,0 +1,25 @@
{
"name": "nuxt-app",
"type": "module",
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"@nuxt/ui": "4.0.0-alpha.1",
"@tailwindcss/vite": "^4.1.13",
"nuxt": "^4.1.1",
"tailwindcss": "^4.1.13",
"vue": "^3.5.21",
"vue-router": "^4.5.1"
},
"devDependencies": {
"@iconify-json/lucide": "^1.2.67",
"@nuxtjs/i18n": "^10.1.0",
"@types/node": "^24.3.3"
}
}
Generated Executable
+8994
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -0,0 +1,5 @@
onlyBuiltDependencies:
- '@parcel/watcher'
- '@tailwindcss/oxide'
- esbuild
- vue-demi
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="171.19638"
height="215.51926"
viewBox="0 0 171.19638 215.51926"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1"
transform="translate(-133.66724,-115.4906)">
<path
style="font-weight:300;font-size:192px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Light';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
d="m 212.99239,315.95999 q -5.568,0 -8.448,-3.264 -2.88,-3.264 -2.88,-8.256 v -51.648 q 0,-8.448 -5.184,-12.48 -4.992,-4.224 -13.44,-4.224 v -12.672 q 8.448,0 13.44,-4.032 5.184,-4.224 5.184,-12.672 v -51.648 q 0,-4.992 2.88,-8.256 2.88,-3.264 8.448,-3.264 h 17.28 v 8.64 h -19.008 v 53.376 q 0,9.216 -5.184,15.552 -4.992,6.144 -13.248,7.104 v 3.072 q 8.256,0.96 13.248,7.296 5.184,6.144 5.184,15.36 v 53.376 h 19.008 v 8.64 z"
id="text1"
aria-label="{" />
<path
d="m -203.40436,254.07473 q -5.97505,0 -8.88184,-3.06827 -2.90678,-3.22976 -2.90678,-7.91292 v -2.42232 q 0,-4.68315 2.90678,-7.75142 2.90679,-3.22976 8.88184,-3.22976 5.97506,0 8.88184,3.22976 2.90679,3.06827 2.90679,7.75142 v 2.42232 q 0,4.68316 -2.90679,7.91292 -2.90678,3.06827 -8.88184,3.06827 z m 0,-63.46479 q -5.97505,0 -8.88184,-3.06827 -2.90678,-3.22976 -2.90678,-7.91291 v -2.42232 q 0,-4.68316 2.90678,-7.75143 2.90679,-3.22976 8.88184,-3.22976 5.97506,0 8.88184,3.22976 2.90679,3.06827 2.90679,7.75143 v 2.42232 q 0,4.68315 -2.90679,7.91291 -2.90678,3.06827 -8.88184,3.06827 z"
id="text2"
style="font-weight:500;font-size:161.488px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Medium';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:4.20543;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
transform="rotate(-90)"
aria-label=":" />
<path
d="m 282.97613,-212.89616 q 0,7.008 -1.344,13.44 -1.248,6.432 -3.552,12 -2.304,5.568 -5.472,10.08 -3.072,4.512 -6.72,7.584 h -9.888 q 3.936,-3.552 7.104,-8.16 3.168,-4.512 5.376,-9.6 2.208,-5.088 3.36,-10.56 1.248,-5.472 1.248,-10.944 v -7.68 q 0,-5.472 -1.248,-10.944 -1.152,-5.472 -3.36,-10.56 -2.208,-5.088 -5.376,-9.6 -3.168,-4.512 -7.104,-8.16 h 9.888 q 3.648,3.072 6.72,7.584 3.168,4.512 5.472,10.08 2.304,5.568 3.552,12 1.344,6.432 1.344,13.44 z"
id="text4"
style="font-weight:500;font-size:96px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Medium';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
transform="rotate(90)"
aria-label=")" />
<path
style="font-weight:200;font-size:240px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Ultra-Light';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
d="m 304.86357,115.4902 v 215.52 h -32.16 v -6.96 h 24.48 v -201.6 h -24.48 v -6.96 z"
id="text5"
aria-label="]" />
<path
style="font-weight:200;font-size:240px;line-height:0.83;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans Ultra-Light';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:5;stroke-linecap:square;stroke-miterlimit:10;stroke-dashoffset:2.25"
d="m -133.66729,115.4902 v 215.52 h -32.16 v -6.96 h 24.48 v -201.6 h -24.48 v -6.96 z"
id="text5-0"
transform="scale(-1,1)"
aria-label="]" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

+2
View File
@@ -0,0 +1,2 @@
User-Agent: *
Disallow:
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

+84
View File
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="123.99991"
height="20"
viewBox="0 0 32.808308 5.2916666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="main.svg"
inkscape:export-filename="workmark124x20.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="6.1433221"
inkscape:cx="52.089081"
inkscape:cy="16.115059"
inkscape:window-width="1920"
inkscape:window-height="1115"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1">
<linearGradient
id="linearGradient1"
inkscape:collect="always">
<stop
style="stop-color:#757575;stop-opacity:1;"
offset="0"
id="stop9" />
<stop
style="stop-color:#1a1a1a;stop-opacity:1;"
offset="1"
id="stop10" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1"
id="linearGradient10"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.78489115,0,0,0.81024636,17.578967,74.161838)"
x1="256"
y1="180.78256"
x2="256"
y2="382.74677" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1"
id="linearGradient13"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.84155607,0,0,0.81024636,-8.3279133,74.161838)"
x1="256"
y1="180.78256"
x2="256"
y2="382.74677" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="font-weight:bold;font-size:6.43426px;line-height:0.83;font-family:'TeX Gyre Adventor';-inkscape-font-specification:'TeX Gyre Adventor';letter-spacing:0px;word-spacing:0px;text-orientation:upright;stroke-width:0.0448609;stroke-miterlimit:10;paint-order:markers fill stroke"
d="M 6.7813396e-6,5.2080302 H 0.85576335 v -3.56458 H 6.7813396e-6 Z M 0.00644104,1.1287095 H 0.86219761 V 0.27295289 H 0.00644104 Z M 1.5442277,5.2080302 H 2.3999843 V 3.5286884 c 0,-0.4761352 0.032171,-0.6820316 0.1415537,-0.8557566 0.1351194,-0.2123305 0.3603185,-0.3281472 0.6305575,-0.3281472 0.4246611,0 0.6820315,0.1672907 0.6820315,1.1195612 V 5.2080302 H 4.7098836 V 3.297055 c 0,-0.6369917 -0.064343,-0.9458362 -0.2573704,-1.2225093 -0.2316334,-0.3345816 -0.617689,-0.5147408 -1.113127,-0.5147408 -0.4053584,0 -0.6884658,0.1222509 -1.0037445,0.4246611 V 1.6434502 h -0.791414 z m 5.3597454,-3.91203 h 0.8814936 v 3.91203 h 0.8814936 v -3.91203 H 9.5484539 V 0.45311216 H 6.9039731 Z m 3.0047995,3.91203 h 0.8557564 v -1.808027 c 0,-0.7849797 0.263805,-1.0552186 0.752809,-1.0552186 0.501872,0 0.6949,0.2959759 0.6949,1.0423501 v 1.8208955 h 0.855756 V 3.1941069 c 0,-1.1710353 -0.540478,-1.6407363 -1.396234,-1.6407363 -0.366753,0 -0.64986,0.1029482 -0.907231,0.3345815 V 0.45311216 H 9.9087726 Z M 13.614909,3.4386088 c 0,1.0745214 0.752808,1.8530668 1.795158,1.8530668 0.501873,0 0.842888,-0.1608565 1.183904,-0.5469121 v 0.4632667 h 0.78498 v -3.56458 h -0.78498 V 2.1195855 C 16.297995,1.7270956 15.944111,1.5598049 15.42937,1.5598049 c -1.055218,0 -1.814461,0.7914139 -1.814461,1.8788039 z m 0.862191,0.019303 c 0,-0.6498602 0.431095,-1.1131269 1.04235,-1.1131269 0.611254,0 1.048784,0.4568324 1.048784,1.1066927 0,0.5919519 -0.386055,1.0552186 -1.035916,1.0552186 -0.624123,0 -1.055218,-0.4246612 -1.055218,-1.0487844 z m 3.538843,1.7501187 h 0.855756 v -3.56458 h -0.855756 z m 0.0064,-4.0793207 h 0.855757 V 0.27295289 h -0.855757 z m 1.537786,4.0793207 h 0.855756 V 0.45311216 h -0.855756 z m 1.389799,-1.7694214 c 0,1.0745214 0.752809,1.8530668 1.795159,1.8530668 0.501872,0 0.842888,-0.1608565 1.183904,-0.5469121 v 0.4632667 h 0.784979 v -3.56458 H 23.929025 V 2.1195855 C 23.633049,1.7270956 23.279164,1.5598049 22.764424,1.5598049 c -1.055219,0 -1.814462,0.7914139 -1.814462,1.8788039 z m 0.862191,0.019303 c 0,-0.6498602 0.431096,-1.1131269 1.04235,-1.1131269 0.611255,0 1.048785,0.4568324 1.048785,1.1066927 0,0.5919519 -0.386056,1.0552186 -1.035916,1.0552186 -0.624123,0 -1.055219,-0.4246612 -1.055219,-1.0487844 z m 3.538842,1.7501187 h 0.855757 V 3.5286884 c 0,-0.4761352 0.03217,-0.6820316 0.141553,-0.8557566 0.13512,-0.2123305 0.360319,-0.3281472 0.630558,-0.3281472 0.424661,0 0.682031,0.1672907 0.682031,1.1195612 v 1.7436844 h 0.855757 V 3.297055 c 0,-0.6369917 -0.06434,-0.9458362 -0.25737,-1.2225093 -0.231634,-0.3345816 -0.617689,-0.5147408 -1.113127,-0.5147408 -0.405359,0 -0.688466,0.1222509 -1.003745,0.4246611 V 1.6434502 H 25.350995 Z M 29.05713,3.419306 c 0,1.0552186 0.778546,1.8723696 1.788725,1.8723696 0.482569,0 0.836454,-0.1608565 1.177469,-0.5469121 v 0.4632667 h 0.78498 V 0.45311216 H 31.952547 V 1.958729 C 31.701611,1.6820558 31.289819,1.514765 30.83942,1.514765 c -0.99731,0 -1.78229,0.8364538 -1.78229,1.904541 z m 0.862191,-0.038606 c 0,-0.6048204 0.456833,-1.0809556 1.04235,-1.0809556 0.598387,0 1.055219,0.4825694 1.055219,1.1066927 0,0.6176889 -0.456832,1.1002584 -1.035916,1.1002584 -0.598386,0 -1.061653,-0.495438 -1.061653,-1.1259955 z"
id="text1"
aria-label="in Thailand" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

Executable
+23
View File
@@ -0,0 +1,23 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"compilerOptions": {
"types": [
"node"
]
},
"files": [],
"references": [
{
"path": "./.nuxt/tsconfig.app.json"
},
{
"path": "./.nuxt/tsconfig.server.json"
},
{
"path": "./.nuxt/tsconfig.shared.json"
},
{
"path": "./.nuxt/tsconfig.node.json"
}
]
}