Compare commits
No commits in common. "master" and "archive/svelte" have entirely different histories.
master
...
archive/sv
33
.gitignore
vendored
@ -1,24 +1,11 @@
|
||||
# build output
|
||||
dist/
|
||||
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
# jetbrains setting folder
|
||||
.idea/
|
||||
node_modules
|
||||
/build
|
||||
/dist
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
||||
|
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
12
.idea/Capital.iml
generated
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
63
.idea/codeStyles/Project.xml
generated
Normal file
@ -0,0 +1,63 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<HTMLCodeStyleSettings>
|
||||
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||
</HTMLCodeStyleSettings>
|
||||
<JSCodeStyleSettings version="0">
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
</JSCodeStyleSettings>
|
||||
<TypeScriptCodeStyleSettings version="0">
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
</TypeScriptCodeStyleSettings>
|
||||
<VueCodeStyleSettings>
|
||||
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
||||
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
||||
</VueCodeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="TypeScript">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="Vue">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
6
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/Capital.iml" filepath="$PROJECT_DIR$/.idea/Capital.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
4
.prettierignore
Normal file
@ -0,0 +1,4 @@
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
10
.prettierrc
@ -1,6 +1,8 @@
|
||||
{
|
||||
"tabWidth": 2,
|
||||
"singleQuote": true,
|
||||
"semi": false,
|
||||
"trailingComma": "es5"
|
||||
"useTabs": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 120,
|
||||
"plugins": ["prettier-plugin-svelte"],
|
||||
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
||||
}
|
||||
|
4
.vscode/extensions.json
vendored
@ -1,4 +0,0 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
11
.vscode/launch.json
vendored
@ -1,11 +0,0 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
3
README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Capital
|
||||
|
||||
Solsynth LLC Official Website and some Users Portal.
|
@ -1,40 +0,0 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from 'astro/config'
|
||||
|
||||
import tailwind from '@astrojs/tailwind'
|
||||
|
||||
import icon from 'astro-icon'
|
||||
|
||||
import mdx from '@astrojs/mdx'
|
||||
|
||||
import sitemap from '@astrojs/sitemap'
|
||||
|
||||
import vercel from '@astrojs/vercel';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: 'https://solsynth.dev',
|
||||
|
||||
integrations: [
|
||||
tailwind(),
|
||||
icon(),
|
||||
mdx(),
|
||||
sitemap({
|
||||
xslURL: '/sitemap.xsl',
|
||||
i18n: { defaultLocale: 'en', locales: { en: 'en-US', 'zh-cn': 'zh-CN' } },
|
||||
}),
|
||||
],
|
||||
|
||||
prefetch: true,
|
||||
|
||||
i18n: {
|
||||
locales: ['en', 'zh-cn'],
|
||||
defaultLocale: 'en',
|
||||
routing: {
|
||||
fallbackType: 'rewrite',
|
||||
prefixDefaultLocale: false,
|
||||
},
|
||||
},
|
||||
|
||||
adapter: vercel(),
|
||||
})
|
36
eslint.config.js
Normal file
@ -0,0 +1,36 @@
|
||||
import js from '@eslint/js';
|
||||
import ts from 'typescript-eslint';
|
||||
import svelte from 'eslint-plugin-svelte';
|
||||
import prettier from 'eslint-config-prettier';
|
||||
import globals from 'globals';
|
||||
|
||||
/** @type {import('eslint').Linter.FlatConfig[]} */
|
||||
export default [
|
||||
js.configs.recommended,
|
||||
...ts.configs.recommended,
|
||||
...svelte.configs['flat/recommended'],
|
||||
prettier,
|
||||
...svelte.configs['flat/prettier'],
|
||||
{
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.browser,
|
||||
...globals.node
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ['**/*.svelte'],
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
parser: ts.parser
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
'css-unused-selector': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
ignores: ['build/', '.svelte-kit/', 'dist/']
|
||||
},
|
||||
];
|
3
netifly.toml
Normal file
@ -0,0 +1,3 @@
|
||||
[build]
|
||||
command = "npm run build"
|
||||
publish = "build"
|
73
package.json
@ -1,30 +1,59 @@
|
||||
{
|
||||
"name": "capital",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
"dev": "vite dev",
|
||||
"build": "vite build && npm run package",
|
||||
"preview": "vite preview",
|
||||
"package": "svelte-kit sync && svelte-package && publint",
|
||||
"prepublishOnly": "npm run package",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"lint": "prettier --check . && eslint .",
|
||||
"format": "prettier --write ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^4.0.2",
|
||||
"@astrojs/sitemap": "^3.2.1",
|
||||
"@astrojs/tailwind": "^5.1.3",
|
||||
"@astrojs/vercel": "^8.0.1",
|
||||
"@iconify-json/material-symbols": "^1.2.10",
|
||||
"@iconify-json/simple-icons": "^1.2.16",
|
||||
"astro": "^5.0.5",
|
||||
"astro-icon": "^1.1.4",
|
||||
"astro-seo": "^0.8.4",
|
||||
"marked": "^15.0.4",
|
||||
"sanitize-html": "^2.13.1",
|
||||
"tailwindcss": "^3.4.16"
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"svelte": "./dist/index.js"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"!dist/**/*.test.*",
|
||||
"!dist/**/*.spec.*"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"svelte": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/sanitize-html": "^2.13.0",
|
||||
"daisyui": "^4.12.22"
|
||||
}
|
||||
"@sveltejs/adapter-auto": "^3.0.0",
|
||||
"@sveltejs/adapter-netlify": "^4.2.0",
|
||||
"@sveltejs/enhanced-img": "^0.2.1",
|
||||
"@sveltejs/kit": "^2.0.0",
|
||||
"@sveltejs/package": "^2.0.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.0.0",
|
||||
"@tailwindcss/typography": "^0.5.13",
|
||||
"@types/eslint": "^8.56.7",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"daisyui": "^4.12.2",
|
||||
"eslint": "^9.0.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-svelte": "^2.36.0",
|
||||
"globals": "^15.0.0",
|
||||
"postcss": "^8.4.38",
|
||||
"prettier": "^3.1.1",
|
||||
"prettier-plugin-svelte": "^3.1.2",
|
||||
"publint": "^0.1.9",
|
||||
"svelte": "^4.2.7",
|
||||
"svelte-check": "^3.6.0",
|
||||
"tailwindcss": "^3.4.4",
|
||||
"tslib": "^2.4.1",
|
||||
"typescript": "^5.0.0",
|
||||
"typescript-eslint": "^8.0.0-alpha.20",
|
||||
"vite": "^5.0.11"
|
||||
},
|
||||
"svelte": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"type": "module"
|
||||
}
|
||||
|
6
postcss.config.js
Normal file
@ -0,0 +1,6 @@
|
||||
export default {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
Before Width: | Height: | Size: 86 KiB |
@ -1,4 +0,0 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://solsynth.dev/sitemap-index.xml
|
3
src/app.css
Normal file
@ -0,0 +1,3 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
13
src/app.d.ts
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
// See https://kit.svelte.dev/docs/types#app
|
||||
// for information about these interfaces
|
||||
declare global {
|
||||
namespace App {
|
||||
// interface Error {}
|
||||
// interface Locals {}
|
||||
// interface PageData {}
|
||||
// interface PageState {}
|
||||
// interface Platform {}
|
||||
}
|
||||
}
|
||||
|
||||
export {};
|
12
src/app.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
<div>%sveltekit.body%</div>
|
||||
</body>
|
||||
</html>
|
@ -1,46 +0,0 @@
|
||||
<svg id="livetype" xmlns="http://www.w3.org/2000/svg" width="119.66407" height="40" viewBox="0 0 119.66407 40">
|
||||
<title>Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917</title>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M110.13477,0H9.53468c-.3667,0-.729,0-1.09473.002-.30615.002-.60986.00781-.91895.0127A13.21476,13.21476,0,0,0,5.5171.19141a6.66509,6.66509,0,0,0-1.90088.627A6.43779,6.43779,0,0,0,1.99757,1.99707,6.25844,6.25844,0,0,0,.81935,3.61816a6.60119,6.60119,0,0,0-.625,1.90332,12.993,12.993,0,0,0-.1792,2.002C.00587,7.83008.00489,8.1377,0,8.44434V31.5586c.00489.3105.00587.6113.01515.9219a12.99232,12.99232,0,0,0,.1792,2.0019,6.58756,6.58756,0,0,0,.625,1.9043A6.20778,6.20778,0,0,0,1.99757,38.001a6.27445,6.27445,0,0,0,1.61865,1.1787,6.70082,6.70082,0,0,0,1.90088.6308,13.45514,13.45514,0,0,0,2.0039.1768c.30909.0068.6128.0107.91895.0107C8.80567,40,9.168,40,9.53468,40H110.13477c.3594,0,.7246,0,1.084-.002.3047,0,.6172-.0039.9219-.0107a13.279,13.279,0,0,0,2-.1768,6.80432,6.80432,0,0,0,1.9082-.6308,6.27742,6.27742,0,0,0,1.6172-1.1787,6.39482,6.39482,0,0,0,1.1816-1.6143,6.60413,6.60413,0,0,0,.6191-1.9043,13.50643,13.50643,0,0,0,.1856-2.0019c.0039-.3106.0039-.6114.0039-.9219.0078-.3633.0078-.7246.0078-1.0938V9.53613c0-.36621,0-.72949-.0078-1.09179,0-.30664,0-.61426-.0039-.9209a13.5071,13.5071,0,0,0-.1856-2.002,6.6177,6.6177,0,0,0-.6191-1.90332,6.46619,6.46619,0,0,0-2.7988-2.7998,6.76754,6.76754,0,0,0-1.9082-.627,13.04394,13.04394,0,0,0-2-.17676c-.3047-.00488-.6172-.01074-.9219-.01269-.3594-.002-.7246-.002-1.084-.002Z" style="fill: #a6a6a6"/>
|
||||
<path d="M8.44483,39.125c-.30468,0-.602-.0039-.90429-.0107a12.68714,12.68714,0,0,1-1.86914-.1631,5.88381,5.88381,0,0,1-1.65674-.5479,5.40573,5.40573,0,0,1-1.397-1.0166,5.32082,5.32082,0,0,1-1.02051-1.3965,5.72186,5.72186,0,0,1-.543-1.6572,12.41351,12.41351,0,0,1-.1665-1.875c-.00634-.2109-.01464-.9131-.01464-.9131V8.44434S.88185,7.75293.8877,7.5498a12.37039,12.37039,0,0,1,.16553-1.87207,5.7555,5.7555,0,0,1,.54346-1.6621A5.37349,5.37349,0,0,1,2.61183,2.61768,5.56543,5.56543,0,0,1,4.01417,1.59521a5.82309,5.82309,0,0,1,1.65332-.54394A12.58589,12.58589,0,0,1,7.543.88721L8.44532.875H111.21387l.9131.0127a12.38493,12.38493,0,0,1,1.8584.16259,5.93833,5.93833,0,0,1,1.6709.54785,5.59374,5.59374,0,0,1,2.415,2.41993,5.76267,5.76267,0,0,1,.5352,1.64892,12.995,12.995,0,0,1,.1738,1.88721c.0029.2832.0029.5874.0029.89014.0079.375.0079.73193.0079,1.09179V30.4648c0,.3633,0,.7178-.0079,1.0752,0,.3252,0,.6231-.0039.9297a12.73126,12.73126,0,0,1-.1709,1.8535,5.739,5.739,0,0,1-.54,1.67,5.48029,5.48029,0,0,1-1.0156,1.3857,5.4129,5.4129,0,0,1-1.3994,1.0225,5.86168,5.86168,0,0,1-1.668.5498,12.54218,12.54218,0,0,1-1.8692.1631c-.2929.0068-.5996.0107-.8974.0107l-1.084.002Z"/>
|
||||
</g>
|
||||
<g id="_Group_" data-name="<Group>">
|
||||
<g id="_Group_2" data-name="<Group>">
|
||||
<g id="_Group_3" data-name="<Group>">
|
||||
<path id="_Path_" data-name="<Path>" d="M24.76888,20.30068a4.94881,4.94881,0,0,1,2.35656-4.15206,5.06566,5.06566,0,0,0-3.99116-2.15768c-1.67924-.17626-3.30719,1.00483-4.1629,1.00483-.87227,0-2.18977-.98733-3.6085-.95814a5.31529,5.31529,0,0,0-4.47292,2.72787c-1.934,3.34842-.49141,8.26947,1.3612,10.97608.9269,1.32535,2.01018,2.8058,3.42763,2.7533,1.38706-.05753,1.9051-.88448,3.5794-.88448,1.65876,0,2.14479.88448,3.591.8511,1.48838-.02416,2.42613-1.33124,3.32051-2.66914a10.962,10.962,0,0,0,1.51842-3.09251A4.78205,4.78205,0,0,1,24.76888,20.30068Z" style="fill: #fff"/>
|
||||
<path id="_Path_2" data-name="<Path>" d="M22.03725,12.21089a4.87248,4.87248,0,0,0,1.11452-3.49062,4.95746,4.95746,0,0,0-3.20758,1.65961,4.63634,4.63634,0,0,0-1.14371,3.36139A4.09905,4.09905,0,0,0,22.03725,12.21089Z" style="fill: #fff"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M42.30227,27.13965h-4.7334l-1.13672,3.35645H34.42727l4.4834-12.418h2.083l4.4834,12.418H43.438ZM38.0591,25.59082h3.752l-1.84961-5.44727h-.05176Z" style="fill: #fff"/>
|
||||
<path d="M55.15969,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H48.4302v1.50586h.03418a3.21162,3.21162,0,0,1,2.88281-1.60059C53.645,21.34766,55.15969,23.16406,55.15969,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C52.30227,29.01563,53.24953,27.81934,53.24953,25.96973Z" style="fill: #fff"/>
|
||||
<path d="M65.12453,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H58.395v1.50586h.03418A3.21162,3.21162,0,0,1,61.312,21.34766C63.60988,21.34766,65.12453,23.16406,65.12453,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C62.26711,29.01563,63.21438,27.81934,63.21438,25.96973Z" style="fill: #fff"/>
|
||||
<path d="M71.71047,27.03613c.1377,1.23145,1.334,2.04,2.96875,2.04,1.56641,0,2.69336-.80859,2.69336-1.91895,0-.96387-.67969-1.541-2.28906-1.93652l-1.60937-.3877c-2.28027-.55078-3.33887-1.61719-3.33887-3.34766,0-2.14258,1.86719-3.61426,4.51855-3.61426,2.624,0,4.42285,1.47168,4.4834,3.61426h-1.876c-.1123-1.23926-1.13672-1.9873-2.63379-1.9873s-2.52148.75684-2.52148,1.8584c0,.87793.6543,1.39453,2.25488,1.79l1.36816.33594c2.54785.60254,3.60645,1.626,3.60645,3.44238,0,2.32324-1.85059,3.77832-4.79395,3.77832-2.75391,0-4.61328-1.4209-4.7334-3.667Z" style="fill: #fff"/>
|
||||
<path d="M83.34621,19.2998v2.14258h1.72168v1.47168H83.34621v4.99121c0,.77539.34473,1.13672,1.10156,1.13672a5.80752,5.80752,0,0,0,.61133-.043v1.46289a5.10351,5.10351,0,0,1-1.03223.08594c-1.833,0-2.54785-.68848-2.54785-2.44434V22.91406H80.16262V21.44238H81.479V19.2998Z" style="fill: #fff"/>
|
||||
<path d="M86.065,25.96973c0-2.84863,1.67773-4.63867,4.29395-4.63867,2.625,0,4.29492,1.79,4.29492,4.63867,0,2.85645-1.66113,4.63867-4.29492,4.63867C87.72609,30.6084,86.065,28.82617,86.065,25.96973Zm6.69531,0c0-1.9541-.89551-3.10742-2.40137-3.10742s-2.40039,1.16211-2.40039,3.10742c0,1.96191.89453,3.10645,2.40039,3.10645S92.76027,27.93164,92.76027,25.96973Z" style="fill: #fff"/>
|
||||
<path d="M96.18606,21.44238h1.77246v1.541h.043a2.1594,2.1594,0,0,1,2.17773-1.63574,2.86616,2.86616,0,0,1,.63672.06934v1.73828a2.59794,2.59794,0,0,0-.835-.1123,1.87264,1.87264,0,0,0-1.93652,2.083v5.37012h-1.8584Z" style="fill: #fff"/>
|
||||
<path d="M109.3843,27.83691c-.25,1.64355-1.85059,2.77148-3.89844,2.77148-2.63379,0-4.26855-1.76465-4.26855-4.5957,0-2.83984,1.64355-4.68164,4.19043-4.68164,2.50488,0,4.08008,1.7207,4.08008,4.46582v.63672h-6.39453v.1123a2.358,2.358,0,0,0,2.43555,2.56445,2.04834,2.04834,0,0,0,2.09082-1.27344Zm-6.28223-2.70215h4.52637a2.1773,2.1773,0,0,0-2.2207-2.29785A2.292,2.292,0,0,0,103.10207,25.13477Z" style="fill: #fff"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="_Group_4" data-name="<Group>">
|
||||
<g>
|
||||
<path d="M37.82619,8.731a2.63964,2.63964,0,0,1,2.80762,2.96484c0,1.90625-1.03027,3.002-2.80762,3.002H35.67092V8.731Zm-1.22852,5.123h1.125a1.87588,1.87588,0,0,0,1.96777-2.146,1.881,1.881,0,0,0-1.96777-2.13379h-1.125Z" style="fill: #fff"/>
|
||||
<path d="M41.68068,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C44.57522,13.99463,45.01369,13.42432,45.01369,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M51.57326,14.69775h-.92187l-.93066-3.31641h-.07031l-.92676,3.31641h-.91309l-1.24121-4.50293h.90137l.80664,3.436h.06641l.92578-3.436h.85254l.92578,3.436h.07031l.80273-3.436h.88867Z" style="fill: #fff"/>
|
||||
<path d="M53.85354,10.19482H54.709v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915h-.88867V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M59.09377,8.437h.88867v6.26074h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M61.21779,12.44434a2.13346,2.13346,0,1,1,4.24756,0,2.1338,2.1338,0,1,1-4.24756,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C64.11232,13.99463,64.5508,13.42432,64.5508,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M66.4009,13.42432c0-.81055.60352-1.27783,1.6748-1.34424l1.21973-.07031v-.38867c0-.47559-.31445-.74414-.92187-.74414-.49609,0-.83984.18213-.93848.50049h-.86035c.09082-.77344.81836-1.26953,1.83984-1.26953,1.12891,0,1.76563.562,1.76563,1.51318v3.07666h-.85547v-.63281h-.07031a1.515,1.515,0,0,1-1.35254.707A1.36026,1.36026,0,0,1,66.4009,13.42432Zm2.89453-.38477v-.37646l-1.09961.07031c-.62012.0415-.90137.25244-.90137.64941,0,.40527.35156.64111.835.64111A1.0615,1.0615,0,0,0,69.29543,13.03955Z" style="fill: #fff"/>
|
||||
<path d="M71.34816,12.44434c0-1.42285.73145-2.32422,1.86914-2.32422a1.484,1.484,0,0,1,1.38086.79h.06641V8.437h.88867v6.26074h-.85156v-.71143h-.07031a1.56284,1.56284,0,0,1-1.41406.78564C72.0718,14.772,71.34816,13.87061,71.34816,12.44434Zm.918,0c0,.95508.4502,1.52979,1.20313,1.52979.749,0,1.21191-.583,1.21191-1.52588,0-.93848-.46777-1.52979-1.21191-1.52979C72.72121,10.91846,72.26613,11.49707,72.26613,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M79.23,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C82.12453,13.99463,82.563,13.42432,82.563,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M84.66945,10.19482h.85547v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915H87.605V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M93.51516,9.07373v1.1416h.97559v.74854h-.97559V13.2793c0,.47168.19434.67822.63672.67822a2.96657,2.96657,0,0,0,.33887-.02051v.74023a2.9155,2.9155,0,0,1-.4834.04541c-.98828,0-1.38184-.34766-1.38184-1.21582v-2.543h-.71484v-.74854h.71484V9.07373Z" style="fill: #fff"/>
|
||||
<path d="M95.70461,8.437h.88086v2.48145h.07031a1.3856,1.3856,0,0,1,1.373-.80664,1.48339,1.48339,0,0,1,1.55078,1.67871v2.90723H98.69v-2.688c0-.71924-.335-1.0835-.96289-1.0835a1.05194,1.05194,0,0,0-1.13379,1.1416v2.62988h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M104.76125,13.48193a1.828,1.828,0,0,1-1.95117,1.30273A2.04531,2.04531,0,0,1,100.73,12.46045a2.07685,2.07685,0,0,1,2.07617-2.35254c1.25293,0,2.00879.856,2.00879,2.27V12.688h-3.17969v.0498a1.1902,1.1902,0,0,0,1.19922,1.29,1.07934,1.07934,0,0,0,1.07129-.5459Zm-3.126-1.45117h2.27441a1.08647,1.08647,0,0,0-1.1084-1.1665A1.15162,1.15162,0,0,0,101.63527,12.03076Z" style="fill: #fff"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 4.5 MiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 696 KiB |
Before Width: | Height: | Size: 2.0 MiB |
14
src/assets/solar.svg
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
src/assets/solian.png
Normal file
After Width: | Height: | Size: 537 KiB |
@ -1,29 +0,0 @@
|
||||
---
|
||||
import { getAttachmentUrl } from '../scripts/attachment'
|
||||
|
||||
interface Props {
|
||||
data: any
|
||||
}
|
||||
|
||||
const { data: attachment } = Astro.props
|
||||
---
|
||||
|
||||
{
|
||||
attachment.mimetype.startsWith('image') ? (
|
||||
<a href={getAttachmentUrl(attachment.rid)} target="_blank">
|
||||
<img
|
||||
src={getAttachmentUrl(attachment.rid)}
|
||||
alt={attachment.alt}
|
||||
class="rounded-lg"
|
||||
/>
|
||||
</a>
|
||||
) : attachment.mimetype.startsWith('video') ? (
|
||||
<video src={getAttachmentUrl(attachment.rid)} controls class="rounded-lg" />
|
||||
) : attachment.mimetype.startsWith('audio') ? (
|
||||
<audio src={getAttachmentUrl(attachment.rid)} controls class="rounded-lg" />
|
||||
) : (
|
||||
<a href={getAttachmentUrl(attachment.rid)} target="_blank">
|
||||
Unable to preview, but you can open it in your broswer.
|
||||
</a>
|
||||
)
|
||||
}
|
11
src/components/navigation/Footer.svelte
Normal file
@ -0,0 +1,11 @@
|
||||
<footer class="footer footer-center p-5 border-t border-footer">
|
||||
<aside>
|
||||
<p>Copyright © {new Date().getFullYear()} Solsynth LLC</p>
|
||||
</aside>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
.border-footer {
|
||||
border-color: var(--fallback-bc, oklch(var(--bc) / 0.1));
|
||||
}
|
||||
</style>
|
28
src/components/navigation/NavBar.svelte
Normal file
@ -0,0 +1,28 @@
|
||||
<div
|
||||
class="navbar bg-base-100 text-base-content bg-opacity-90 backdrop-blur transition-shadow duration-100 [transform:translate3d(0,0,0)] shadow-sm"
|
||||
>
|
||||
<div class="px-5 w-full flex justify-between">
|
||||
<a href="/" class="btn btn-ghost text-xl">Solsynth</a>
|
||||
|
||||
<label id="theme-switch" class="swap swap-rotate me-5">
|
||||
<input type="checkbox" class="theme-controller" value="light" />
|
||||
|
||||
<svg
|
||||
class="swap-off fill-current w-6 h-6"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
><path
|
||||
d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z"
|
||||
></path></svg
|
||||
>
|
||||
<svg
|
||||
class="swap-on fill-current w-6 h-6"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
><path
|
||||
d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z"
|
||||
></path></svg
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -1,121 +0,0 @@
|
||||
---
|
||||
import { Image } from 'astro:assets'
|
||||
|
||||
import { version } from '../../package.json'
|
||||
|
||||
import CompanyLogo from '../assets/images/company-logo.png'
|
||||
import { getRelativeLocaleUrl } from 'astro:i18n'
|
||||
|
||||
interface Props {
|
||||
title?: string
|
||||
trailingTitle?: string
|
||||
}
|
||||
|
||||
let { title, trailingTitle } = Astro.props
|
||||
if (!trailingTitle) trailingTitle = 'Solsynth LLC'
|
||||
console.log(title ? `${title} | ${trailingTitle}` : trailingTitle)
|
||||
|
||||
const locale = Astro.currentLocale ?? 'en'
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<html lang={Astro.currentLocale ?? 'en'}>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<link rel="icon" type="image/png" href="/favicon.png" />
|
||||
<link rel="sitemap" href="/sitemap-index.xml" />
|
||||
<title>{title ? `${title} | ${trailingTitle}` : trailingTitle}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="navbar backdrop-blur fixed top-0 left-0 right-0 z-10">
|
||||
<div class="px-5 flex-1">
|
||||
<div class="flex-none">
|
||||
<a class="btn btn-ghost text-xl flex items-center gap-2" href="/">
|
||||
<Image
|
||||
src={CompanyLogo}
|
||||
alt="company logo"
|
||||
class="h-8 w-8 p-1 bg-white rounded-lg shadow-sm"
|
||||
/>
|
||||
<span>Solsynth</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 flex justify-end">
|
||||
<ul class="menu menu-horizontal px-1">
|
||||
<li><a href="/posts">Explore</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="mt-[68px]">
|
||||
<slot />
|
||||
</main>
|
||||
|
||||
<footer class="bg-neutral text-neutral-content p-10 mt-32">
|
||||
<div class="container mx-auto footer">
|
||||
<aside>
|
||||
<Image
|
||||
src={CompanyLogo}
|
||||
alt="company logo"
|
||||
class="h-12 w-12 p-1 bg-white rounded-lg shadow-sm"
|
||||
/>
|
||||
<div class="flex flex-col">
|
||||
<span class="font-bold text-lg">Solsynth LLC</span>
|
||||
Building wonderful software since 2019.
|
||||
|
||||
<span class="font-mono text-xs mt-3">Powered by RoadSign v2</span>
|
||||
<span class="font-mono text-xs">Capital v{version}</span>
|
||||
|
||||
<a href="https://status.solsynth.dev" class="mt-4">
|
||||
<img
|
||||
src="https://uptime.betterstack.com/status-badges/v1/monitor/1ki5r.svg"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
</aside>
|
||||
<nav>
|
||||
<h6 class="footer-title">Services</h6>
|
||||
<a class="link link-hover" href="https://sn.solsynth.dev"> Solian </a>
|
||||
<a class="link link-hover" href="https://files.solsynth.dev">
|
||||
Solarfiles
|
||||
</a>
|
||||
<a class="link link-hover" href="https://git.solsynth.dev">
|
||||
Solargit
|
||||
</a>
|
||||
</nav>
|
||||
<nav>
|
||||
<h6 class="footer-title">Legal</h6>
|
||||
<a
|
||||
class="link link-hover"
|
||||
href={getRelativeLocaleUrl(locale, '/terms/user-agreements')}
|
||||
>
|
||||
User Agreements
|
||||
</a>
|
||||
<a
|
||||
class="link link-hover"
|
||||
href={getRelativeLocaleUrl(locale, '/terms/privacy-policy')}
|
||||
>
|
||||
Privacy Policy
|
||||
</a>
|
||||
<a
|
||||
class="link link-hover"
|
||||
href={getRelativeLocaleUrl(locale, '/terms')}
|
||||
>
|
||||
All Terms & Conditions
|
||||
</a>
|
||||
</nav>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
1
src/lib/index.ts
Normal file
@ -0,0 +1 @@
|
||||
// Reexport your entry components here
|
@ -1,110 +0,0 @@
|
||||
---
|
||||
import { Image } from 'astro:assets'
|
||||
import { Icon } from 'astro-icon/components'
|
||||
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
|
||||
import CompanyAsideImage from '@/assets/images/company-aside.webp'
|
||||
import AppStoreGetImage from '@/assets/images/app-store/get-it-on-black.svg'
|
||||
import ProductSnPreviewImage from '@/assets/images/products/solar-network.webp'
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<div class="section container mx-auto grid-cols-1 lg:grid-cols-3" id="intro">
|
||||
<div
|
||||
class="sub-section flex flex-col items-end justify-center lg:col-span-1"
|
||||
>
|
||||
<h1 class="text-4xl font-bold text-right">Solsynth LLC</h1>
|
||||
<p class="text-lg text-right">
|
||||
A vibrant creating wonderful software and hope the future will be
|
||||
brighter.
|
||||
</p>
|
||||
<a class="link flex items-center gap-1 mt-2" href="#work-featured">
|
||||
<span>See some of our works</span>
|
||||
<Icon name="material-symbols:arrow-downward" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="sub-section flex items-center lg:col-span-2">
|
||||
<Image
|
||||
src={CompanyAsideImage}
|
||||
alt="galaxy"
|
||||
class="rounded-lg shadow-xl"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section-flex py-12 shadow-lg bg-base-300" id="work-featured">
|
||||
<div class="section container mx-auto grid-cols-1 lg:grid-cols-3">
|
||||
<div
|
||||
class="sub-section flex flex-col items-start lg:items-end justify-center lg:col-span-1"
|
||||
>
|
||||
<div class="badge badge-primary flex gap-1 items-center mb-2">
|
||||
<Icon name="material-symbols:star" />
|
||||
<span>Featured Project</span>
|
||||
</div>
|
||||
|
||||
<h2 class="text-3xl font-bold lg:text-right">Solar Network</h2>
|
||||
<p class="text-lg lg:text-right">
|
||||
The next generation social network. But not only for social media.
|
||||
</p>
|
||||
<blockquote
|
||||
class="text-md lg:text-right bg-neutral text-neutral-content px-7 py-5 rounded-xl font-mono mt-2"
|
||||
>
|
||||
Social Network, Redefined.
|
||||
</blockquote>
|
||||
|
||||
<div class="flex gap-3 mt-4 items-center text-right">
|
||||
<span
|
||||
class="opacity-75 text-xs max-lg:order-last"
|
||||
style="line-height: 1"
|
||||
>
|
||||
Also supports Android, Windows, and any modern web browser
|
||||
</span>
|
||||
<a
|
||||
href="https://apps.apple.com/us/app/solian/id6499032345?itscg=30200&itsct=apps_box_link&mttnsubad=6499032345"
|
||||
>
|
||||
<Image src={AppStoreGetImage} alt="get it on app store" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<a
|
||||
class="link flex items-center gap-1 mt-3"
|
||||
href="/products/solar-network"
|
||||
>
|
||||
<span>Learn more about Solar Network</span>
|
||||
<Icon name="material-symbols:arrow-right-alt" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="sub-section flex items-center lg:col-span-2">
|
||||
<Image
|
||||
src={ProductSnPreviewImage}
|
||||
alt="solar network cross-platform preview"
|
||||
class="rounded-lg shadow-xl"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
.section {
|
||||
min-height: 90vh;
|
||||
width: 100%;
|
||||
gap: 0 2rem;
|
||||
padding: 0 1rem;
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.section-flex {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sub-section {
|
||||
padding: 1rem;
|
||||
}
|
||||
</style>
|
@ -1,167 +0,0 @@
|
||||
---
|
||||
export const prerender = false
|
||||
|
||||
import sanitizeHtml from 'sanitize-html'
|
||||
import { Icon } from 'astro-icon/components'
|
||||
import { SEO } from 'astro-seo'
|
||||
import { marked } from 'marked'
|
||||
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
import AttachmentRenderer from '@/components/AttachmentRenderer.astro'
|
||||
import { getAttachmentUrl, fetchAttachmentMeta } from '@/scripts/attachment'
|
||||
|
||||
const { slug } = Astro.params
|
||||
|
||||
const baseUrl = import.meta.env.PUBLIC_SOLAR_NETWORK_URL
|
||||
const resp = await fetch(`${baseUrl}/cgi/co/posts/${slug?.replace('/', ':')}`)
|
||||
|
||||
if (resp.status !== 200) {
|
||||
return new Response(null, { status: 404 })
|
||||
}
|
||||
|
||||
const data = await resp.json()
|
||||
|
||||
const rawContent = await marked(data.body.content as string, {
|
||||
breaks: data.type == 'story',
|
||||
})
|
||||
const content = sanitizeHtml(rawContent)
|
||||
|
||||
const attachments = await fetchAttachmentMeta(data.body.attachments)
|
||||
|
||||
const title = data.body?.title ? data.body.title : `Post #${data.id}`
|
||||
const description =
|
||||
data.body?.description ?? data.body?.content?.substring(0, 200) + '...'
|
||||
|
||||
const url =
|
||||
data.alias && data.alias_prefix
|
||||
? `https://solsynth.dev/posts/${data.alias_prefix}/${data.alias}`
|
||||
: `https://solsynth.dev/posts/${data.id}`
|
||||
---
|
||||
|
||||
<head>
|
||||
<SEO
|
||||
title={`${title} | Solar Network`}
|
||||
description={description}
|
||||
canonical={url}
|
||||
charset='UTF-8'
|
||||
openGraph={{
|
||||
optional: {
|
||||
siteName: 'Solar Network',
|
||||
description,
|
||||
video: getAttachmentUrl(
|
||||
attachments.find((a) => a.mimetype.startsWith('video'))?.rid
|
||||
),
|
||||
audio: getAttachmentUrl(
|
||||
attachments.find((a) => a.mimetype.startsWith('audio'))?.rid
|
||||
),
|
||||
},
|
||||
basic: {
|
||||
title,
|
||||
type: 'article',
|
||||
image: data.body?.thumbnail
|
||||
? getAttachmentUrl(data.body.thumbnail)
|
||||
: getAttachmentUrl(
|
||||
attachments.find((a) => a.mimetype.startsWith('image'))?.rid
|
||||
),
|
||||
url,
|
||||
},
|
||||
article: {
|
||||
publishedTime: new Date(data.created_at).toISOString(),
|
||||
modifiedTime: new Date(data.updated_at).toISOString(),
|
||||
authors: ['@' + data.publisher.name],
|
||||
},
|
||||
}}
|
||||
twitter={{
|
||||
card: 'summary_large_image',
|
||||
title,
|
||||
description,
|
||||
creator: '@' + data.publisher.name,
|
||||
image: data.body?.thumbnail
|
||||
? getAttachmentUrl(data.body.thumbnail)
|
||||
: getAttachmentUrl(
|
||||
attachments.find((a) => a.mimetype.startsWith('image'))?.rid
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</head>
|
||||
|
||||
<Layout title={title} trailingTitle="Solar Network">
|
||||
<div role="alert" class="alert shadow-lg px-12 m-0 rounded-none mb-5">
|
||||
<Icon
|
||||
name="material-symbols:ungroup"
|
||||
class="stroke-info fill-info h-6 w-6 shrink-0"
|
||||
/>
|
||||
<div>
|
||||
<h3 class="font-bold">Open in the Solian</h3>
|
||||
<div class="text-xs">
|
||||
The most modern, user-friendly, and official Solar Network app.
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<a class="btn btn-sm" href="/products/solar-network#downloads">Get</a>
|
||||
<a class="btn btn-sm" href={`https://sn.solsynth.dev/posts/${data.id}`}
|
||||
>Open</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container lg:max-w-[75ch] px-8 mx-auto">
|
||||
<div class="flex gap-4 items-center mb-5">
|
||||
<div class="avatar">
|
||||
<div class="w-12 rounded-full">
|
||||
<img src={getAttachmentUrl(data.publisher.avatar)} alt="avatar" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="userinfo flex flex-col">
|
||||
<span class="flex gap-2 items-baseline">
|
||||
<span class="text-md font-bold">{data.publisher.nick}</span>
|
||||
<span class="text-xs font-mono">@{data.publisher.name}</span>
|
||||
</span>
|
||||
<span class="text-sm line-clamp-2 overflow-ellipsis"
|
||||
>{data.publisher.description}</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{
|
||||
data.repost_id && (
|
||||
<div role="alert" class="alert mb-5 py-2 mx-[-4px]">
|
||||
<Icon
|
||||
name="material-symbols:format-quote"
|
||||
class="stroke-info fill-info h-6 w-6 shrink-0"
|
||||
/>
|
||||
<span>
|
||||
This post is reposting post{' '}
|
||||
<span class="font-mono">#{data.repost_id}</span>
|
||||
</span>
|
||||
<div>
|
||||
<a class="btn btn-sm" href={`/posts/${data.repost_id}`}>
|
||||
See reposted post
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
<article>
|
||||
<div class="prose max-w-none max-md:prose-lg min-w-0" set:html={content} />
|
||||
|
||||
{
|
||||
attachments && (
|
||||
<div
|
||||
class="attachment-list mt-5 gap-4 grid grid-cols-1"
|
||||
class:list={
|
||||
attachments.length >= 2 ? 'md:grid-cols-2' : 'md:grid-cols-1'
|
||||
}
|
||||
>
|
||||
{attachments.map((attachment) => (
|
||||
<div class="attachment">
|
||||
<AttachmentRenderer data={attachment} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</article>
|
||||
</div>
|
||||
</Layout>
|
@ -1,149 +0,0 @@
|
||||
---
|
||||
export const prerender = false
|
||||
|
||||
import sanitizeHtml from 'sanitize-html'
|
||||
import { Icon } from 'astro-icon/components'
|
||||
import { marked } from 'marked'
|
||||
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
import AttachmentRenderer from '@/components/AttachmentRenderer.astro'
|
||||
import { getAttachmentUrl, fetchAttachmentMeta } from '@/scripts/attachment'
|
||||
|
||||
const page = parseInt(Astro.url.searchParams.get('page') ?? '1') || 1
|
||||
|
||||
async function getPosts() {
|
||||
const baseUrl = import.meta.env.PUBLIC_SOLAR_NETWORK_URL
|
||||
const res = await fetch(
|
||||
`${baseUrl}/cgi/co/posts?take=10&offset=${Math.max(page - 1, 0) * 10}`
|
||||
)
|
||||
const data = await res.json()
|
||||
const posts = await Promise.all(
|
||||
data['data'].map(async (ele: any) => {
|
||||
if (ele.body?.content) {
|
||||
ele.body.content = await parseContent(
|
||||
ele.body.content,
|
||||
ele.type == 'story'
|
||||
)
|
||||
}
|
||||
if (ele.body?.attachments) {
|
||||
ele.body.attachments = await fetchAttachmentMeta(ele.body.attachments)
|
||||
}
|
||||
return ele
|
||||
})
|
||||
)
|
||||
|
||||
return posts
|
||||
}
|
||||
|
||||
const posts = await getPosts()
|
||||
|
||||
async function parseContent(data: string, useBreaks: boolean = false) {
|
||||
const rawContent = await marked(data, {
|
||||
breaks: useBreaks,
|
||||
})
|
||||
return sanitizeHtml(rawContent)
|
||||
}
|
||||
---
|
||||
|
||||
<Layout title="Posts" trailingTitle='Solar Network'>
|
||||
<div role="alert" class="alert shadow-lg px-12 m-0 rounded-none mb-5">
|
||||
<Icon
|
||||
name="material-symbols:ungroup"
|
||||
class="stroke-info fill-info h-6 w-6 shrink-0"
|
||||
/>
|
||||
<div>
|
||||
<h3 class="font-bold">Open in the Solian</h3>
|
||||
<div class="text-xs">
|
||||
The most modern, user-friendly, and official Solar Network app.
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<a class="btn btn-sm" href="/products/solar-network#downloads">Get</a>
|
||||
<a class="btn btn-sm" href="https://sn.solsynth.dev/posts">Open</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[15vh] px-12 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-2xl font-bold">Posts</h1>
|
||||
<p>Explore the posts all over the Solar Network.</p>
|
||||
|
||||
<div class="flex flex-col gap-4 mt-4 mx-[-16px]">
|
||||
{
|
||||
posts.map((ele: any) => (
|
||||
<a href={`/posts/${ele.id}`}>
|
||||
<div class="card bg-base-100 w-full border-neutral border">
|
||||
<div class="card-body">
|
||||
<div class="flex gap-4 items-center mb-5">
|
||||
<div class="avatar">
|
||||
<div class="w-12 rounded-full">
|
||||
<img
|
||||
src={getAttachmentUrl(ele.publisher.avatar)}
|
||||
alt="avatar"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userinfo flex flex-col">
|
||||
<span class="flex gap-2 items-baseline">
|
||||
<span class="text-md font-bold">
|
||||
{ele.publisher.nick}
|
||||
</span>
|
||||
<span class="text-xs font-mono">
|
||||
@{ele.publisher.name}
|
||||
</span>
|
||||
</span>
|
||||
<span class="text-sm overflow-ellipsis">
|
||||
{new Date(ele.created_at).toLocaleString()}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{ele.body.title && (
|
||||
<h2 class="card-title">
|
||||
{ele.body?.title ?? `Post #${ele.id}`}
|
||||
</h2>
|
||||
)}
|
||||
<article>
|
||||
<div
|
||||
class="prose max-w-none max-md:prose-lg max-w-0"
|
||||
set:html={ele.body?.content ?? ''}
|
||||
/>
|
||||
|
||||
{ele.body?.attachments && (
|
||||
<div
|
||||
class="attachment-list mt-5 gap-4 grid grid-cols-1"
|
||||
class:list={
|
||||
ele.body.attachments.length >= 2
|
||||
? 'md:grid-cols-2'
|
||||
: 'md:grid-cols-1'
|
||||
}
|
||||
>
|
||||
{ele.body.attachments.map((attachment: any) => (
|
||||
<div class="attachment">
|
||||
<AttachmentRenderer data={attachment} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
))
|
||||
}
|
||||
|
||||
<div class="flex justify-center items-center mt-12">
|
||||
<div class="join">
|
||||
<a
|
||||
class="join-item btn"
|
||||
class:list={page == 1 ? 'btn-disabled' : ''}
|
||||
href={`/posts?page=${page - 1}`}>«</a
|
||||
>
|
||||
<button class="join-item btn">Page {page}</button>
|
||||
<a class="join-item btn" href={`/posts?page=${page + 1}`}>»</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
@ -1,176 +0,0 @@
|
||||
---
|
||||
import { Image } from 'astro:assets'
|
||||
import { Icon } from 'astro-icon/components'
|
||||
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
|
||||
import ProductSnPreviewImage from '../../assets/images/products/solar-network-alpha.webp'
|
||||
---
|
||||
|
||||
<Layout title="Solar Network">
|
||||
<div class="container mx-auto mt-[35vh]" id="intro">
|
||||
<div class="text-center">
|
||||
<h1 class="text-4xl font-bold">Solar Network</h1>
|
||||
<p>The next generation Social Network platform.</p>
|
||||
|
||||
<div class="flex justify-center gap-2 mt-5">
|
||||
<a class="btn btn-primary" href="#downloads">
|
||||
Download <Icon name="material-symbols:download" size={20} />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Image
|
||||
src={ProductSnPreviewImage}
|
||||
alt="solar network cross-platform preview"
|
||||
class="mt-5"
|
||||
/>
|
||||
|
||||
<div id="downloads" class="mt-24 text-center">
|
||||
<div class="flex flex-col justify-center">
|
||||
<h2 class="text-2xl font-bold">Downloads</h2>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-wrap mx-8 items-center justify-center gap-4 my-5">
|
||||
<a
|
||||
href="https://apps.apple.com/us/app/solian/id6499032345?itscg=30200&itsct=apps_box_link&mttnsubad=6499032345"
|
||||
class="btn btn-secondary max-md:btn-wide"
|
||||
>
|
||||
<Icon name="simple-icons:appstore" />
|
||||
iOS / macOS (App Store)
|
||||
</a>
|
||||
<a
|
||||
href="https://testflight.apple.com/join/YJ0lmN6O"
|
||||
class="btn btn-secondary btn-outline max-md:btn-wide"
|
||||
>
|
||||
<Icon name="simple-icons:apple" />
|
||||
iOS / macOS (TestFlight)
|
||||
</a>
|
||||
<a
|
||||
href="https://files.solsynth.dev/production01/solian/app-arm64-v8a-release.apk"
|
||||
class="btn btn-secondary max-md:btn-wide"
|
||||
>
|
||||
<Icon name="simple-icons:android" />
|
||||
Android (apk file)
|
||||
</a>
|
||||
<a
|
||||
href="https://files.solsynth.dev/production01/solian/windows-x86_64-release.zip"
|
||||
class="btn btn-secondary max-md:btn-wide"
|
||||
>
|
||||
<Icon name="simple-icons:windows" />
|
||||
Windows (executable)
|
||||
</a>
|
||||
<a
|
||||
href="https://sn.solsynth.dev"
|
||||
class="btn btn-secondary btn-outline max-md:btn-wide"
|
||||
>
|
||||
<Icon name="material-symbols:globe" />
|
||||
Web (browser)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="mx-8">
|
||||
<p class="opacity-80 mb-2">
|
||||
You will download Solian, which is the official app made for Solar
|
||||
Network.
|
||||
</p>
|
||||
<p class="opacity-75 text-sm">
|
||||
Explore more platform distribution files on the{' '}
|
||||
<a class="link" href="https://files.solsynth.dev/production01/solian"
|
||||
>Solarfiles</a
|
||||
>
|
||||
</p>
|
||||
<p class="opacity-75 text-sm">
|
||||
Check out the Solian source code on{' '}
|
||||
<a class="link" href="https://git.solsynth.dev/HyperNet/Surface"
|
||||
>Solargit</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="faq" class="mt-24">
|
||||
<div class="flex text-center justify-center">
|
||||
<h2 class="text-2xl font-bold">Frequently Asked Questions</h2>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="max-w-[85ch] mx-auto bg-neutral text-neutral-content shadow-lg rounded-lg p-2 mt-5"
|
||||
>
|
||||
<div class="join join-vertical w-full">
|
||||
<div class="collapse collapse-arrow join-item">
|
||||
<input type="radio" name="my-accordion-4" checked="checked" />
|
||||
<div class="collapse-title text-xl font-medium">
|
||||
What's the relationship between Solar Network and Solian?
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
<p>
|
||||
Solian is the official app made for Solar Network. And the Solar
|
||||
Network is the official HyperNet instance hosted by Solsynth
|
||||
LLC.
|
||||
</p>
|
||||
<p>
|
||||
For simple, Solian is the app, and the Solar Network is the
|
||||
platform.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse collapse-arrow join-item">
|
||||
<input type="radio" name="my-accordion-4" checked="checked" />
|
||||
<div class="collapse-title text-xl font-medium">
|
||||
What's the relationship between Solar Network and HyperNet?
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
<p>
|
||||
HyperNet is the entire project including frontend app (also
|
||||
knowns as Solian for public) and the backend server. And the
|
||||
Solar Network is the official HyperNet instance which hosted and
|
||||
managed by Solsynth LLC who developed the HyperNet Project.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse collapse-arrow join-item">
|
||||
<input type="radio" name="my-accordion-4" />
|
||||
<div class="collapse-title text-xl font-medium">
|
||||
Which rules do I need to follow while using Solar Network?
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
<p>
|
||||
Check out our{' '}
|
||||
<a href="/terms/user-agreements" class="link">
|
||||
User Agreements
|
||||
</a>
|
||||
for a detailed explanation of what you can do and cannot do on Solar
|
||||
Network. If you violate any of these rules, we have the right to
|
||||
suspend or terminate your account.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse collapse-arrow join-item">
|
||||
<input type="radio" name="my-accordion-4" />
|
||||
<div class="collapse-title text-xl font-medium">
|
||||
If I have any question about Solar Network, where can I get help?
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
<p>
|
||||
Feel free to email us at{' '}
|
||||
<a href="mailto:lily@solsynth.dev" class="link">
|
||||
<address>lily@solsynth.dev</address>
|
||||
</a>
|
||||
Our customer service team will try our best to help you solve your
|
||||
issue.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
</style>
|
@ -1,52 +0,0 @@
|
||||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title="Terms & Conditions">
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[25vh] px-12 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-2xl font-bold">Terms & Conditions</h1>
|
||||
|
||||
<p>
|
||||
This place is the collections of all the terms and conditions that you
|
||||
will have to agree to in order to use our products.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We're trying to make it as simple as possible. And it's good for both of
|
||||
us. You do not need care about this in normal. Just makes our lawyers
|
||||
happy. <i>Do we really have a lawyer?</i>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The information here may changed from time to time. Please refresh to
|
||||
check this page for the latest version.
|
||||
</p>
|
||||
|
||||
<div class="flex flex-col gap-4 mt-4 mx-[-16px]">
|
||||
<a href="/terms/user-agreements">
|
||||
<div class="card bg-base-100 w-full border-neutral border">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title">User Agreements</h2>
|
||||
<p>
|
||||
The User Agreements for users who using the Solar Network and
|
||||
other products from us.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<a href="/terms/privacy-policy">
|
||||
<div class="card bg-base-100 w-full border-neutral border">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title">Privacy Policy</h2>
|
||||
<p>
|
||||
The Privacy Policy shows we how to process and handle the data
|
||||
provided by you.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
@ -1,61 +0,0 @@
|
||||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title="User Agreements">
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[25vh] px-12 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-4xl font-bold">Privacy Policy</h1>
|
||||
|
||||
<article class="prose prose-lg max-w-none mt-5">
|
||||
<h2 id="introduction">Introduction</h2>
|
||||
<p>
|
||||
We take your privacy seriously. This privacy policy outlines the types
|
||||
of personal information we collect, how we use it, and the measures we
|
||||
take to protect your data.
|
||||
</p>
|
||||
<h2 id="information-collection">Information Collection</h2>
|
||||
<p>
|
||||
We collect personal information only when necessary to provide our
|
||||
services. This may include your name, email address, and other relevant
|
||||
details.
|
||||
</p>
|
||||
<h2 id="use-of-information">Use of Information</h2>
|
||||
<p>We use your personal information to:</p>
|
||||
<ul>
|
||||
<li>Provide and improve our services</li>
|
||||
<li>Communicate with you about updates or important information</li>
|
||||
<li>Ensure compliance with legal obligations</li>
|
||||
</ul>
|
||||
<h2 id="data-sharing">Data Sharing</h2>
|
||||
<p>
|
||||
We do not sell, trade, or share your personal information with third
|
||||
parties except as required by law.
|
||||
</p>
|
||||
<h2 id="data-security">Data Security</h2>
|
||||
<p>
|
||||
We implement robust security measures to protect your personal
|
||||
information from unauthorized access, alteration, disclosure, or
|
||||
destruction.
|
||||
</p>
|
||||
<h2 id="your-rights">Your Rights</h2>
|
||||
<p>You have the right to:</p>
|
||||
<ul>
|
||||
<li>Access the personal information we hold about you</li>
|
||||
<li>Request corrections to your personal information</li>
|
||||
<li>Request the deletion of your personal information</li>
|
||||
</ul>
|
||||
<h2 id="contact-us">Contact Us</h2>
|
||||
<p>
|
||||
If you have any questions or concerns about this privacy policy or our
|
||||
data practices, please contact us at lily@solsynth.dev.
|
||||
</p>
|
||||
<h2 id="changes-to-this-policy">Changes to This Policy</h2>
|
||||
<p>
|
||||
We may update this privacy policy from time to time. Any changes will be
|
||||
posted on this page, and we will notify you of any significant changes.
|
||||
</p>
|
||||
</article>
|
||||
</div>
|
||||
</Layout>
|
@ -1,157 +0,0 @@
|
||||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title="User Agreements">
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[25vh] px-12 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-4xl font-bold">User Agreements</h1>
|
||||
|
||||
<article class="prose prose-lg max-w-none mt-5">
|
||||
<p>
|
||||
This Agreement applies to all Solsynth LLC products, including but not
|
||||
limited to Solar Network, Solian, DietaryGuard, AceField.
|
||||
</p>
|
||||
<h2 id="provision-and-discontinuance-of-service">
|
||||
Provision and Discontinuance of Service
|
||||
</h2>
|
||||
<p>
|
||||
Solsynth LLC will provide equal service to all living things in the
|
||||
world, including grasshoppers. We also reserve the right to stop service
|
||||
to any user. We do not require prior notice for discontinuing services
|
||||
to some users.
|
||||
</p>
|
||||
<h2 id="user-generated-content">User Generated Content</h2>
|
||||
<p>
|
||||
Any content posted on Solar Network (including but not limited to posts,
|
||||
articles, attachments) grants Solsynth LLC the right to display it by
|
||||
default. Unless otherwise stated by the user, all rights are reserved by
|
||||
the original poster, and reprints should be authorized by the original
|
||||
poster.
|
||||
</p>
|
||||
<h3 id="reproduction-recognition">Reproduction Recognition</h3>
|
||||
<p>
|
||||
Unless specifically stated by the poster, all content is subject to the
|
||||
definition of reprint in this section.
|
||||
</p>
|
||||
<p>
|
||||
Republishing means uploading the content of the original post to another
|
||||
platform or to the Solar Network, either unchanged or with minor
|
||||
modifications, provided that simultaneous reposting of the post,
|
||||
embedded components, and links to the presentation do not constitute
|
||||
republishing. Republishing also requires attribution when authorized by
|
||||
the original poster.
|
||||
</p>
|
||||
<h3 id="freedom-of-speech">Freedom of Speech</h3>
|
||||
<p>
|
||||
We do not remove user-generated content except in cases of misuse of
|
||||
resources. We will not ask any user to remove any content.
|
||||
</p>
|
||||
<p>
|
||||
However, Solsynth LLC reserves the right to restrict and stop the
|
||||
display of content to the public that violates community guidelines
|
||||
(e.g., obscenity, violence, gore, anti-social, terrorist organizations,
|
||||
etc.).
|
||||
</p>
|
||||
<p>
|
||||
Although you have 100% freedom of speech on Solar Network. However,
|
||||
please be aware that freedom of speech does not mean that you will not
|
||||
be held accountable for what you say.
|
||||
</p>
|
||||
<h4 id="restriction-and-discontinuation">
|
||||
Restriction and Discontinuation
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Restriction of Display: Discontinuation of related tweets, while
|
||||
retaining the right to access them directly through resource
|
||||
identifiers and sharing links.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Cease display: stop all access to the resource by anyone other than
|
||||
the author.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="resource-misuse-prevention-policy">
|
||||
Resource Misuse Prevention Policy
|
||||
</h2>
|
||||
<p>
|
||||
Although there are no capacity limitations for using Solar Network's
|
||||
data hosting services, resources determined to be abusive will be
|
||||
disenfranchised from some features. Solsynth LLC reserves the right to
|
||||
reclaim space on previously uploaded resources for deletion.
|
||||
</p>
|
||||
<h3 id="determination-of-misuse">Determination of Misuse</h3>
|
||||
<ul>
|
||||
<li>
|
||||
Uploading without using: e.g. uploading excessive attachments in Solar
|
||||
Network's Interactive Attachment Pool and not linking them to
|
||||
posts.
|
||||
</li>
|
||||
<li>
|
||||
Meaningless Posts: meaningless shuffling or wasting of Solar
|
||||
Network's storage resources
|
||||
</li>
|
||||
<li>
|
||||
Misuse: using Solar Network's public resources as if they were
|
||||
your own dedicated pool (see the Wiki's Dedicated Pools page for
|
||||
details).
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
The Solsynth Trust & Safety Team is ultimately responsible for
|
||||
determining misuse.
|
||||
</p>
|
||||
<h2 id="secondary-releases">Secondary Releases</h2>
|
||||
<p>
|
||||
A secondary release is when our assets are downloaded and re-hosted on
|
||||
another site.
|
||||
</p>
|
||||
<h3 id="product-secondary-release">Product Secondary Release</h3>
|
||||
<p>
|
||||
Unless otherwise stated, Solsynth LLC products are not available for
|
||||
secondary distribution, please do not download our product builds and
|
||||
upload them twice to another site. Please do not download our product
|
||||
builds and upload them to other sites. <strong
|
||||
>Secondary distribution for commercial use is not permitted.
|
||||
</strong>.
|
||||
</p>
|
||||
<p>
|
||||
What you should do is post a link to our product on another site. Or use
|
||||
the embedded component. And indicate Solsynth LLC All Rights Reserved.
|
||||
</p>
|
||||
<p>
|
||||
If you want to build a mirror site of our products, please contact us to
|
||||
waive this rule.
|
||||
</p>
|
||||
<h3 id="secondary-distribution-of-source-code">
|
||||
Secondary distribution of source code
|
||||
</h3>
|
||||
<p>
|
||||
We do not allow any form of redistribution of source code (except for
|
||||
Forks). This includes, but is not limited to, mirroring code
|
||||
repositories on GitHub or the Solsynth Code Repository to other Git
|
||||
providers such as GitLab, Gitee, and so on.
|
||||
<strong>Selling source code twice is not allowed. </strong>
|
||||
</p>
|
||||
<p>
|
||||
For more information on source code usage regulations, please follow the
|
||||
open source license used by the project.
|
||||
</p>
|
||||
<p>
|
||||
If you would like to set up a mirror of our source code, please contact
|
||||
us to waive this policy.
|
||||
</p>
|
||||
<hr />
|
||||
<p>
|
||||
Solsynth LLC reserves the right of final interpretation of this
|
||||
agreement.
|
||||
</p>
|
||||
</article>
|
||||
</div>
|
||||
</Layout>
|
@ -1,39 +0,0 @@
|
||||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title="Terms & Conditions">
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[25vh] px-2 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-2xl font-bold">条款和条件</h1>
|
||||
|
||||
<p>这里罗列了您使用我们的产品将需要同意的所有条款和条件。</p>
|
||||
|
||||
<p>
|
||||
我们正努力让事情尽可能简单。这对我们双方都有好处。通常情况下你不需要关心这件事。只是为了让我们的律师高兴。
|
||||
<i>我们真的有律师吗?</i>
|
||||
</p>
|
||||
|
||||
<p>此处的信息可能会不时更改。请刷新 查看此页面以获取最新版本。</p>
|
||||
|
||||
<div class="flex flex-col gap-4 mt-4 mx-[-16px]">
|
||||
<a href="/terms/user-agreements">
|
||||
<div class="card bg-base-100 w-full border-neutral border">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title">用户协议</h2>
|
||||
<p>使用 Solar Network 和 我们其他产品的用户须遵守的用户协议。</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<a href="/terms/privacy-policy">
|
||||
<div class="card bg-base-100 w-full border-neutral border">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title">隐私政策</h2>
|
||||
<p>隐私政策向我们展示了如何处理和处理您提供的数据。</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
@ -1,51 +0,0 @@
|
||||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title="User Agreements">
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[25vh] px-12 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-4xl font-bold">隐私政策</h1>
|
||||
|
||||
<article class="prose prose-lg max-w-none mt-5">
|
||||
<h2 id="introduction">简介</h2>
|
||||
<p>
|
||||
我们非常重视您的隐私。本隐私政策概述了我们收集的个人信息类型、使用方式以及我们采取的保护措施。
|
||||
</p>
|
||||
<h2 id="information-collection">信息收集</h2>
|
||||
<p>
|
||||
我们仅在提供服务时收集必要的个人信息。这可能包括您的姓名、电子邮件地址以及其他相关信息。
|
||||
</p>
|
||||
<h2 id="use-of-information">信息使用</h2>
|
||||
<p>我们使用您的个人信息来:</p>
|
||||
<ul>
|
||||
<li>提供和改进我们的服务</li>
|
||||
<li>与您沟通更新或重要信息</li>
|
||||
<li>确保遵守法律义务</li>
|
||||
</ul>
|
||||
<h2 id="data-sharing">数据共享</h2>
|
||||
<p>我们不会出售、交易或与第三方分享您的个人信息,法律要求除外。</p>
|
||||
<h2 id="data-security">数据安全</h2>
|
||||
<p>
|
||||
我们实施了强有力的安全措施,以保护您的个人信息免受未经授权的访问、更改、披露或销毁。
|
||||
</p>
|
||||
<h2 id="your-rights">您的权利</h2>
|
||||
<p>您有权:</p>
|
||||
<ul>
|
||||
<li>访问我们持有的关于您的个人信息</li>
|
||||
<li>请求更正您的个人信息</li>
|
||||
<li>请求删除您的个人信息</li>
|
||||
</ul>
|
||||
<h2 id="contact-us">联系我们</h2>
|
||||
<p>
|
||||
如果您对本隐私政策或我们的数据处理方式有任何疑问或顾虑,请通过
|
||||
lily@solsynth.dev 与我们联系。
|
||||
</p>
|
||||
<h2 id="changes-to-this-policy">政策变更</h2>
|
||||
<p>
|
||||
我们可能会不时更新本隐私政策。任何更改将发布在此页面上,且我们会通知您任何重大更改。
|
||||
</p>
|
||||
</article>
|
||||
</div>
|
||||
</Layout>
|
@ -1,101 +0,0 @@
|
||||
---
|
||||
import Layout from '@/layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title="User Agreements">
|
||||
<div
|
||||
class="container max-w-[85ch] mx-auto mt-[25vh] px-12 flex flex-col gap-4"
|
||||
>
|
||||
<h1 class="text-4xl font-bold">用户协议</h1>
|
||||
|
||||
<article class="prose prose-lg max-w-none mt-5">
|
||||
<p>
|
||||
本协议适用于所有 Solsynth LLC 的产品,包括但不限于 Solar
|
||||
Network、Solian、DietaryGuard、AceField。
|
||||
</p>
|
||||
<h2 id="provision-and-discontinuance-of-service">服务的提供和停止</h2>
|
||||
<p>
|
||||
Solsynth LLC 将向世界上所有的生物提供同等的服务,包括草履虫。
|
||||
同时也保留向任意用户停止提供服务的权利。关于停止部分用户的服务,我们不需要提前通知。
|
||||
</p>
|
||||
<h2 id="user-generated-content">用户生成内容</h2>
|
||||
<p>
|
||||
任意发布在 Solar Network
|
||||
上的内容(包括但不限于帖子、文章、附件)都默认授权 Solsynth LLC
|
||||
予以展示的权利。
|
||||
除非用户特别声明,所有内容均为原帖主保留所有权利,转载请先向原帖主授权。
|
||||
</p>
|
||||
<h3 id="reproduction-recognition">转载的认定</h3>
|
||||
<p>无帖主特别声明,所有内容均适用本条转载的定义。</p>
|
||||
<p>
|
||||
转载指将原帖的内容原封不动或略作改动上传到别的平台或 Solar
|
||||
Network。但同时转帖、嵌入式组件与展示展开的链接不构成转载。
|
||||
转载即时在原帖主授权的情况下也需表明出处。
|
||||
</p>
|
||||
<h3 id="freedom-of-speech">言论的自由</h3>
|
||||
<p>
|
||||
除滥用资源的情况,我们不会将用户生成内容进行删除。也不会做出要求任何用户删除任何内容的要求。
|
||||
</p>
|
||||
<p>
|
||||
但 Solsynth LLC
|
||||
始终保留对于违反社区准则的内容(如淫秽、暴力、血腥、反社会、恐怖组织等)限制与停止向公众展示的权利。
|
||||
</p>
|
||||
<p>
|
||||
尽管在 Solar Network 上你拥有 100%
|
||||
的言论自由。但还请清楚,言论自由不代表不用对自己的言论负责。
|
||||
</p>
|
||||
<h4 id="restriction-and-discontinuation">限制展示与停止展示</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
限制展示:停止相关的推送,但是任保留直接通过资源标识符和分享连接访问的权利
|
||||
</p>
|
||||
</li>
|
||||
<li><p>停止展示:全面停止除作者之外任何人访问该资源的权利</p></li>
|
||||
</ul>
|
||||
<h2 id="resource-misuse-prevention-policy">防止资源滥用条例</h2>
|
||||
<p>
|
||||
尽管使用 Solar Network
|
||||
的数据托管服务并无任何的容量限制,但经过判定的滥用资源将会被取消使用部分功能的权利。
|
||||
并且之前上传的资源 Solsynth LLC 有权对其进行删除空间回收。
|
||||
</p>
|
||||
<h3 id="determination-of-misuse">滥用的认定</h3>
|
||||
<ul>
|
||||
<li>
|
||||
传而不用:例如在 Solar Network 的 Interactive
|
||||
附件池中过度上传附件并不将附件与帖子连接
|
||||
</li>
|
||||
<li>无意义帖:无意义洗版或浪费 Solar Network 的存储资源</li>
|
||||
<li>
|
||||
走错片场:将 Solar Network
|
||||
公有资源当作自己的专用资源池使用(详见维基《专用资源池》页面)
|
||||
</li>
|
||||
</ul>
|
||||
<p>滥用的认定最终解释权归属于 Solsynth Trust & Safety Team</p>
|
||||
<h2 id="secondary-releases">二次发布</h2>
|
||||
<p>二次发布指将我们的资产下载并重新托管到别站。</p>
|
||||
<h3 id="product-secondary-release">制品二次发布</h3>
|
||||
<p>
|
||||
除特殊声明,Solsynth LLC
|
||||
的产品均不允许二次发布,请勿将我们的产品构建下载并二次上传于其他站点。
|
||||
<strong>二次作为商用发布更是不允许的。</strong>
|
||||
</p>
|
||||
<p>
|
||||
你应该做的是将我们的产品链接贴上他站。或使用嵌入式组件。并且表明
|
||||
Solsynth LLC 版权所有。
|
||||
</p>
|
||||
<p>若您想搭建我们制品的镜像站,请与我们取得联系以豁免此条例。</p>
|
||||
<h3 id="secondary-distribution-of-source-code">源码二次发布</h3>
|
||||
<p>我们不允许任何形式的源码二次发布(Fork 除外)。</p>
|
||||
<p>
|
||||
包括但不限于,将 GitHub 或 Solsynth Code Repository 上的代码仓库镜像于
|
||||
GitLab、Gitee 等其他 Git 提供者。
|
||||
<strong>二次售卖源码更是不允许的。</strong>
|
||||
</p>
|
||||
<p>关于更多的源码使用条例,请遵循项目使用的开源许可证。</p>
|
||||
<p>若您想搭建我们源码的镜像站,请与我们取得联系以豁免此条例。</p>
|
||||
<hr />
|
||||
<p>Solsynth LLC 保留对此协议的最终解释权</p>
|
||||
</article>
|
||||
</div>
|
||||
</Layout>
|
14
src/routes/+layout.svelte
Normal file
@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import '../app.css';
|
||||
|
||||
import NavBar from '../components/navigation/NavBar.svelte';
|
||||
import Footer from '../components/navigation/Footer.svelte';
|
||||
</script>
|
||||
|
||||
<NavBar />
|
||||
|
||||
<main>
|
||||
<slot />
|
||||
</main>
|
||||
|
||||
<Footer />
|
61
src/routes/+page.svelte
Normal file
@ -0,0 +1,61 @@
|
||||
<div class="container px-12 mx-auto">
|
||||
<div class="landing-slide">
|
||||
<div class="landing-slide-first">
|
||||
<div
|
||||
class="aspect-square w-[128px] bg-neutral rounded-xl mb-6 ml-[-4px] flex justify-center items-center"
|
||||
>
|
||||
<enhanced:img src="../assets/solar.svg" alt="Studio Avatar" class="w-[90px] h-[96px] block" />
|
||||
</div>
|
||||
|
||||
<h2 class="text-2xl">Hi, there!</h2>
|
||||
<h1 class="text-6xl font-bold">We're Solsynth</h1>
|
||||
|
||||
<section class="mt-8 text-lg">
|
||||
<p>
|
||||
We're the world youngest Software <strike>Company</strike> Studio who
|
||||
make the software that everyone love.
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="landing-slide-second">
|
||||
<div class="card w-full md:w-5/6 bg-base-100 shadow-xl">
|
||||
<div class="card-body pb-0">
|
||||
<h2 class="card-title">Products!</h2>
|
||||
<p>Take a look of all our lovely products!</p>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<div class="card-body pt-0 grid grid-cols-4">
|
||||
<a href="/products/solar-network">
|
||||
<enhanced:img
|
||||
src="../assets/solian.png"
|
||||
alt="Solar Network"
|
||||
class="min-w-[64px] min-h-[64px] w-[64px] h-[64px] aspect-square block"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.landing-slide {
|
||||
gap: 1rem;
|
||||
height: 40rem;
|
||||
display: grid;
|
||||
align-items: center;
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
@media (min-width: 720px) {
|
||||
.landing-slide {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.landing-slide-second {
|
||||
display: flex;
|
||||
justify-content: end;
|
||||
}
|
||||
}
|
||||
</style>
|
255
src/routes/products/solar-network/+page.svelte
Normal file
@ -0,0 +1,255 @@
|
||||
<div class="grid grid-cols-1 lg:grid-cols-4 gap-3 px-12 py-5">
|
||||
<div class="feature-card horizontal-layout">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">Open-source</h2>
|
||||
<p>Entire project has been open-sourced under <b>AGPLv3</b> license.</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="feature-card horizontal-layout">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">Large Attachments</h2>
|
||||
<p>Up to <b>1024MB</b> per attachment upload limit.</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="lg:col-span-2 feature-card horizontal-layout">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M8.625 9.75a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm0 0H8.25m4.125 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm0 0H12m4.125 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm0 0h-.375m-13.5 3.01c0 1.6 1.123 2.994 2.707 3.227 1.087.16 2.185.283 3.293.369V21l4.184-4.183a1.14 1.14 0 0 1 .778-.332 48.294 48.294 0 0 0 5.83-.498c1.585-.233 2.708-1.626 2.708-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0 0 12 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018Z"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">Freedom of Speech</h2>
|
||||
<p>
|
||||
According to our principles, your freedom of speech cannot be taken
|
||||
away by anyone.
|
||||
<b>
|
||||
We will never delete any post from any user, even if we are coerced
|
||||
by others.
|
||||
</b>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div
|
||||
class="lg:row-span-2 feature-card horizontal-layout lg:vertical-layout"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">100% Recyclable</h2>
|
||||
<p>
|
||||
All of our code are completely recyclable. All of them written by
|
||||
child labor and without salary. We even already achieved the goal of
|
||||
<b>Carbon Neutral</b>. Because we didn't produce any of them at all.
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div
|
||||
class="lg:col-span-2 max-lg:order-last keypoint-card horizontal-layout items-center"
|
||||
>
|
||||
<enhanced:img
|
||||
src="../../../assets/solian.png"
|
||||
alt="Solar Network"
|
||||
class="w-[64px] h-[64px] lg:ml-12"
|
||||
/>
|
||||
|
||||
<section class="lg:mr-12">
|
||||
<h2 class="card-title text-3xl">Solar Network</h2>
|
||||
<p>Link the entire Solar System together, forever.</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="feature-card horizontal-layout">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M15.182 15.182a4.5 4.5 0 0 1-6.364 0M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0ZM9.75 9.75c0 .414-.168.75-.375.75S9 10.164 9 9.75 9.168 9 9.375 9s.375.336.375.75Zm-.375 0h.008v.015h-.008V9.75Zm5.625 0c0 .414-.168.75-.375.75s-.375-.336-.375-.75.168-.75.375-.75.375.336.375.75Zm-.375 0h.008v.015h-.008V9.75Z"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">Reaction</h2>
|
||||
<p>
|
||||
No more like and dislike, now you can express your emotion with our
|
||||
brand new reaction system!
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="lg:col-span-2 feature-card horizontal-layout">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">Blazing Fast</h2>
|
||||
<p>
|
||||
Our server proudly powered by Golang and App made with flutter. All of
|
||||
these stuff make your scrolling, clicking and typing smooth like
|
||||
butter. Without any lagging.
|
||||
<i>By the way, we cannot eliminate the network delay.</i>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="feature-card horizontal-layout">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="icon"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<section>
|
||||
<h2 class="card-title">Safe and uninspectable</h2>
|
||||
<p>
|
||||
All your data has been <b>encrypted</b> during the network transmission.
|
||||
No more goverment and internet provider inspect.
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="px-12 pb-5 flex gap-3 justify-center items-center">
|
||||
<a
|
||||
class="btn btn-primary"
|
||||
href="https://git.solsynth.dev/Hydrogen/Solian/releases"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
Download now
|
||||
</a>
|
||||
<a class="btn btn-secondary" href="https://lian.solsynth.dev">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
Open in browser
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.feature-card {
|
||||
@apply p-5 rounded-2xl bg-base-200;
|
||||
}
|
||||
|
||||
.keypoint-card {
|
||||
@apply p-5 bg-neutral text-neutral-content rounded-2xl shadow-lg;
|
||||
}
|
||||
|
||||
.horizontal-layout {
|
||||
@apply flex gap-4;
|
||||
}
|
||||
|
||||
.vertical-layout {
|
||||
@apply flex-col gap-4;
|
||||
}
|
||||
|
||||
.vertical-layout section {
|
||||
@apply px-2.5 mt-3;
|
||||
}
|
||||
|
||||
.icon {
|
||||
@apply w-[48px] h-[48px] m-[8px] flex-shrink-0;
|
||||
}
|
||||
</style>
|
@ -1,26 +0,0 @@
|
||||
export function getAttachmentUrl(identifier?: string): string {
|
||||
if (!identifier) return ''
|
||||
if (identifier.startsWith('http')) {
|
||||
return identifier
|
||||
}
|
||||
const baseUrl = import.meta.env.PUBLIC_SOLAR_NETWORK_URL
|
||||
return `${baseUrl}/cgi/uc/attachments/${identifier}`
|
||||
}
|
||||
|
||||
export async function fetchAttachmentMeta(
|
||||
identifiers: string[]
|
||||
): Promise<any[]> {
|
||||
if (!identifiers) return []
|
||||
|
||||
const baseUrl = import.meta.env.PUBLIC_SOLAR_NETWORK_URL
|
||||
const resp = await fetch(
|
||||
`${baseUrl}/cgi/uc/attachments?take=${
|
||||
identifiers.length
|
||||
}&id=${identifiers.join(',')}`
|
||||
)
|
||||
if (resp.status !== 200) {
|
||||
throw new Error(`Failed to fetch attachment meta: ${await resp.text()}`)
|
||||
}
|
||||
const out = await resp.json()
|
||||
return out['data']
|
||||
}
|
BIN
static/favicon.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
17
svelte.config.js
Normal file
@ -0,0 +1,17 @@
|
||||
import adapter from '@sveltejs/adapter-netlify';
|
||||
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
|
||||
// for more information about preprocessors
|
||||
preprocess: vitePreprocess(),
|
||||
|
||||
kit: {
|
||||
adapter: adapter({
|
||||
edge: true
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
37
tailwind.config.js
Normal file
@ -0,0 +1,37 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||
daisyui: {
|
||||
themes: [
|
||||
{
|
||||
light: {
|
||||
"primary": "#3F51B5",
|
||||
"secondary": "#0091EA",
|
||||
"accent": "#00BFA5",
|
||||
"neutral": "#2c323b",
|
||||
"base-100": "#f3f4f6",
|
||||
"info": "#0091EA",
|
||||
"success": "#00C853",
|
||||
"warning": "#FF6D00",
|
||||
"error": "#D50000",
|
||||
},
|
||||
dark: {
|
||||
"primary": "#3F51B5",
|
||||
"secondary": "#0091EA",
|
||||
"accent": "#00BFA5",
|
||||
"neutral": "#2c323b",
|
||||
"base-100": "#1e2329",
|
||||
"info": "#0091EA",
|
||||
"success": "#00C853",
|
||||
"warning": "#FF6D00",
|
||||
"error": "#D50000",
|
||||
}
|
||||
}
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
require('@tailwindcss/typography'),
|
||||
require('daisyui'),
|
||||
],
|
||||
};
|
||||
|
@ -1,38 +0,0 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [require('@tailwindcss/typography'), require('daisyui')],
|
||||
daisyui: {
|
||||
themes: [
|
||||
{
|
||||
light: {
|
||||
primary: '#3f51b5',
|
||||
secondary: '#4ba6ee',
|
||||
accent: '#03a9f4',
|
||||
neutral: '#4b5563',
|
||||
'base-100': '#ffffff',
|
||||
info: '#4994ec',
|
||||
success: '#67ad5b',
|
||||
warning: '#f5c344',
|
||||
error: '#e15241',
|
||||
},
|
||||
},
|
||||
{
|
||||
dark: {
|
||||
primary: '#3f51b5',
|
||||
secondary: '#4ba6ee',
|
||||
accent: '#03a9f4',
|
||||
neutral: '#1f2937',
|
||||
'base-100': '#000011',
|
||||
info: '#4994ec',
|
||||
success: '#67ad5b',
|
||||
warning: '#f5c344',
|
||||
error: '#e15241',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
@ -1,17 +1,15 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [
|
||||
".astro/types.d.ts",
|
||||
"**/*",
|
||||
"src/**/*.d.ts",
|
||||
"src/**/*.ts",
|
||||
"src/**/*.astro"
|
||||
],
|
||||
"exclude": ["dist"],
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["src/*"]
|
||||
}
|
||||
}
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext"
|
||||
}
|
||||
}
|
||||
|
7
vite.config.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { sveltekit } from '@sveltejs/kit/vite';
|
||||
import { enhancedImages } from '@sveltejs/enhanced-img';
|
||||
import { defineConfig } from 'vite';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [enhancedImages(), sveltekit()]
|
||||
});
|