🎉 Initial Commit
This commit is contained in:
commit
166eea22aa
26
.gitignore
vendored
Normal file
26
.gitignore
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Nuxt dev/build outputs
|
||||||
|
.output
|
||||||
|
.data
|
||||||
|
.nuxt
|
||||||
|
.nitro
|
||||||
|
.cache
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Node dependencies
|
||||||
|
node_modules
|
||||||
|
*.lockb
|
||||||
|
*.lock
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
.DS_Store
|
||||||
|
.fleet
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Local env files
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
8
.prettierrc.json
Normal file
8
.prettierrc.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/prettierrc",
|
||||||
|
"semi": false,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"singleQuote": false,
|
||||||
|
"printWidth": 120,
|
||||||
|
"trailingComma": "all"
|
||||||
|
}
|
11
app.vue
Normal file
11
app.vue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<template>
|
||||||
|
<v-app>
|
||||||
|
<nuxt-layout>
|
||||||
|
<nuxt-page />
|
||||||
|
</nuxt-layout>
|
||||||
|
</v-app>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import "@unocss/reset/tailwind.css"
|
||||||
|
</script>
|
BIN
assets/logo.png
Executable file
BIN
assets/logo.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
45
components/product/Carousel.vue
Normal file
45
components/product/Carousel.vue
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<template>
|
||||||
|
<v-carousel class="carousel-section" show-arrows="hover" cycle hide-delimiters>
|
||||||
|
<v-carousel-item v-for="(item, i) in props.products" :key="i" :src="item?.thumbnail" cover>
|
||||||
|
<v-sheet color="rgba(0, 0, 0, .4)" height="calc(100% + 24px)">
|
||||||
|
<v-row class="fill-height" align="center" justify="center">
|
||||||
|
<v-col class="text-center">
|
||||||
|
<h1 class="text-4xl font-bold text-white" :class="item?.archived ? 'line-through' : null">
|
||||||
|
{{ item?.title }}
|
||||||
|
</h1>
|
||||||
|
<p class="text-lg text-white">{{ item?.description }}</p>
|
||||||
|
|
||||||
|
<div class="flex justify-center mt-3">
|
||||||
|
<v-btn variant="text" color="white" prepend-icon="mdi-school" text="Learn more" />
|
||||||
|
<v-btn
|
||||||
|
v-if="item?.url"
|
||||||
|
variant="text"
|
||||||
|
color="white"
|
||||||
|
prepend-icon="mdi-launch"
|
||||||
|
text="Open"
|
||||||
|
:href="item?.url"
|
||||||
|
target="_blank"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<v-chip
|
||||||
|
v-if="item?.archived"
|
||||||
|
label
|
||||||
|
prepend-icon="mdi-archive"
|
||||||
|
variant="text"
|
||||||
|
color="warning"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
Archived
|
||||||
|
</v-chip>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-sheet>
|
||||||
|
</v-carousel-item>
|
||||||
|
</v-carousel>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const props = defineProps<{ products: any[] }>()
|
||||||
|
</script>
|
6
content/products/roadsign.mdx
Normal file
6
content/products/roadsign.mdx
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
thumbnail: /thumbnails/products/roadsign.webp
|
||||||
|
title: RoadSign
|
||||||
|
description: The reserve proxy that powered our network. Powerful and easy to use.
|
||||||
|
archived: true
|
||||||
|
---
|
6
content/products/solar-network.mdx
Normal file
6
content/products/solar-network.mdx
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
thumbnail: /thumbnails/products/solar-network.webp
|
||||||
|
title: Solar Network
|
||||||
|
description: Solar Network is Solsynth LLC's core product in the internet.
|
||||||
|
url: https://lian.solsynth.dev
|
||||||
|
---
|
25
layouts/default.vue
Normal file
25
layouts/default.vue
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<template>
|
||||||
|
<v-app-bar flat color="primary">
|
||||||
|
<v-container class="mx-auto d-flex align-center justify-center px-8">
|
||||||
|
<nuxt-link to="/" exact>
|
||||||
|
<v-avatar class="me-4" color="transparent" size="32" :image="Logo" />
|
||||||
|
</nuxt-link>
|
||||||
|
|
||||||
|
<v-btn variant="text" text="Products" to="/products" exact />
|
||||||
|
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
|
<v-btn href="https://id.solsynth.dev" target="_blank" icon>
|
||||||
|
<v-avatar size="small" color="transparent" icon="mdi-account-circle" />
|
||||||
|
</v-btn>
|
||||||
|
</v-container>
|
||||||
|
</v-app-bar>
|
||||||
|
|
||||||
|
<v-main>
|
||||||
|
<slot />
|
||||||
|
</v-main>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import Logo from "../assets/logo.png"
|
||||||
|
</script>
|
43
nuxt.config.ts
Normal file
43
nuxt.config.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import vuetify, { transformAssetUrls } from "vite-plugin-vuetify"
|
||||||
|
|
||||||
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
|
export default defineNuxtConfig({
|
||||||
|
devtools: { enabled: true },
|
||||||
|
app: {
|
||||||
|
head: {
|
||||||
|
title: "Solsynth LLC",
|
||||||
|
titleTemplate: "%s | Solsynth",
|
||||||
|
link: [{ rel: "icon", type: "image/png", href: "/favicon.png" }],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
api: {
|
||||||
|
baseURL: "/api/content",
|
||||||
|
},
|
||||||
|
highlight: {
|
||||||
|
theme: "github-dark",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
transpile: ["vuetify"],
|
||||||
|
},
|
||||||
|
modules: [
|
||||||
|
"@unocss/nuxt",
|
||||||
|
"@nuxt/content",
|
||||||
|
"@nuxt/image",
|
||||||
|
(_options, nuxt) => {
|
||||||
|
nuxt.hooks.hook("vite:extendConfig", (config) => {
|
||||||
|
// @ts-expect-error
|
||||||
|
config.plugins.push(vuetify({ autoImport: true }))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//...
|
||||||
|
],
|
||||||
|
vite: {
|
||||||
|
vue: {
|
||||||
|
template: {
|
||||||
|
transformAssetUrls,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
26
package.json
Normal file
26
package.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "nuxt-app",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"build": "nuxt build",
|
||||||
|
"dev": "nuxt dev",
|
||||||
|
"generate": "nuxt generate",
|
||||||
|
"preview": "nuxt preview",
|
||||||
|
"postinstall": "nuxt prepare"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@fontsource/roboto": "^5.0.13",
|
||||||
|
"@mdi/font": "^7.4.47",
|
||||||
|
"@nuxt/content": "^2.13.0",
|
||||||
|
"@nuxt/image": "^1.7.0",
|
||||||
|
"nuxt": "^3.12.2",
|
||||||
|
"vue": "latest"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@unocss/nuxt": "^0.61.0",
|
||||||
|
"@unocss/reset": "^0.61.0",
|
||||||
|
"vite-plugin-vuetify": "^2.0.3",
|
||||||
|
"vuetify": "^3.6.10"
|
||||||
|
}
|
||||||
|
}
|
78
pages/index.vue
Normal file
78
pages/index.vue
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<template>
|
||||||
|
<product-carousel class="carousel-section" :products="products as any[]" />
|
||||||
|
|
||||||
|
<v-container>
|
||||||
|
<v-row class="content-section">
|
||||||
|
<v-col cols="12" md="6">
|
||||||
|
<v-img src="/assets/logo.png" alt="Logo" max-width="300"></v-img>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" md="6" class="d-flex align-center">
|
||||||
|
<div>
|
||||||
|
<h1 class="text-4xl font-bold">Welcome to Solsynth</h1>
|
||||||
|
<p class="text-lg mt-4">
|
||||||
|
We specialize in creating software that delights users. Our passion is to develop intuitive, efficient, and
|
||||||
|
beautiful software that everyone loves to use.
|
||||||
|
</p>
|
||||||
|
<v-btn prepend-icon="mdi-magnify" color="primary" class="mt-4 mx-[-8px]">Discover More</v-btn>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
<v-row class="content-section">
|
||||||
|
<v-col cols="12" class="text-center">
|
||||||
|
<h2 class="text-3xl font-bold">Our Expertise</h2>
|
||||||
|
<p class="text-lg mt-2">We excel in a wide range of software development services.</p>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" md="4" class="d-flex">
|
||||||
|
<v-card class="pa-4">
|
||||||
|
<v-icon large class="mb-4">mdi-laptop</v-icon>
|
||||||
|
<h3 class="headline">Custom Software Development</h3>
|
||||||
|
<p>
|
||||||
|
We design and develop custom software solutions tailored to your business needs, ensuring high performance
|
||||||
|
and scalability.
|
||||||
|
</p>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" md="4" class="d-flex">
|
||||||
|
<v-card class="pa-4">
|
||||||
|
<v-icon large class="mb-4">mdi-cellphone</v-icon>
|
||||||
|
<h3 class="headline">Mobile App Development</h3>
|
||||||
|
<p>Our team creates user-friendly and feature-rich mobile applications for both iOS and Android platforms.</p>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" md="4" class="d-flex">
|
||||||
|
<v-card class="pa-4">
|
||||||
|
<v-icon large class="mb-4">mdi-web</v-icon>
|
||||||
|
<h3 class="headline">Web Application Development</h3>
|
||||||
|
<p>
|
||||||
|
We build responsive and interactive web applications that provide a seamless user experience across all
|
||||||
|
devices.
|
||||||
|
</p>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
<v-row class="content-section">
|
||||||
|
<v-col cols="12" class="text-center">
|
||||||
|
<h2 class="text-3xl font-bold">Get in Touch</h2>
|
||||||
|
<p class="text-lg mt-2">Ready to start your next project with us? We would love to hear from you.</p>
|
||||||
|
<v-btn class="mt-3" color="primary">Contact Us</v-btn>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const { data: products } = await useAsyncData("products", () => queryContent("/products").limit(5).find())
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.carousel-section {
|
||||||
|
height: 96rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-section {
|
||||||
|
margin-top: 8rem;
|
||||||
|
margin-bottom: 8rem;
|
||||||
|
}
|
||||||
|
</style>
|
25
pages/products/[...slug].vue
Normal file
25
pages/products/[...slug].vue
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<template>
|
||||||
|
<v-container>
|
||||||
|
<content-doc>
|
||||||
|
<template #empty>
|
||||||
|
<v-empty-state
|
||||||
|
icon="mdi-image-broken-variant"
|
||||||
|
text="This product has no spefifc describe for it, yet."
|
||||||
|
title="No Content"
|
||||||
|
class="no-content-placeholder"
|
||||||
|
>
|
||||||
|
<template #actions>
|
||||||
|
<v-btn prepend-icon="mdi-list-box" variant="plain" text="Back to index" to="/products" exact />
|
||||||
|
</template>
|
||||||
|
</v-empty-state>
|
||||||
|
</template>
|
||||||
|
</content-doc>
|
||||||
|
</v-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.no-content-placeholder {
|
||||||
|
min-height: 0;
|
||||||
|
max-height: 64rem;
|
||||||
|
}
|
||||||
|
</style>
|
3
pages/products/index.vue
Normal file
3
pages/products/index.vue
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<template>
|
||||||
|
<v-container></v-container>
|
||||||
|
</template>
|
38
plugins/vuetify.ts
Normal file
38
plugins/vuetify.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import '@fontsource/roboto/latin.css';
|
||||||
|
import '@mdi/font/css/materialdesignicons.css'
|
||||||
|
|
||||||
|
import 'vuetify/styles'
|
||||||
|
import { createVuetify } from 'vuetify'
|
||||||
|
import { md3 } from "vuetify/blueprints"
|
||||||
|
import * as components from "vuetify/components"
|
||||||
|
import * as labsComponents from "vuetify/labs/components"
|
||||||
|
import * as directives from "vuetify/directives"
|
||||||
|
|
||||||
|
export default defineNuxtPlugin((app) => {
|
||||||
|
const vuetify = createVuetify({
|
||||||
|
ssr: true,
|
||||||
|
blueprint: md3,
|
||||||
|
directives,
|
||||||
|
components: {
|
||||||
|
...components,
|
||||||
|
...labsComponents,
|
||||||
|
},
|
||||||
|
theme: {
|
||||||
|
defaultTheme: "original",
|
||||||
|
themes: {
|
||||||
|
original: {
|
||||||
|
colors: {
|
||||||
|
primary: "#4a5099",
|
||||||
|
secondary: "#2196f3",
|
||||||
|
accent: "#009688",
|
||||||
|
error: "#f44336",
|
||||||
|
warning: "#ff9800",
|
||||||
|
info: "#03a9f4",
|
||||||
|
success: "#4caf50",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
app.vueApp.use(vuetify)
|
||||||
|
})
|
BIN
public/favicon.png
Executable file
BIN
public/favicon.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
BIN
public/thumbnails/products/roadsign.webp
Normal file
BIN
public/thumbnails/products/roadsign.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
BIN
public/thumbnails/products/solar-network.webp
Normal file
BIN
public/thumbnails/products/solar-network.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 MiB |
3
server/tsconfig.json
Normal file
3
server/tsconfig.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "../.nuxt/tsconfig.server.json"
|
||||||
|
}
|
4
tsconfig.json
Normal file
4
tsconfig.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
// https://nuxt.com/docs/guide/concepts/typescript
|
||||||
|
"extends": "./.nuxt/tsconfig.json"
|
||||||
|
}
|
3
uno.config.ts
Normal file
3
uno.config.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { defineConfig } from "unocss"
|
||||||
|
|
||||||
|
export default defineConfig({})
|
Loading…
Reference in New Issue
Block a user