├── .npmrc ├── tsconfig.json ├── .prettierignore ├── postcss.config.js ├── src ├── components │ ├── Footer.astro │ ├── ActiveLink.astro │ └── Header.astro ├── env.d.ts ├── js │ ├── glsl │ │ ├── main.vert │ │ └── main.frag │ └── modules │ │ └── scene.ts ├── pages │ ├── about.astro │ └── index.astro └── layouts │ └── Layout.astro ├── tailwind.config.js ├── .vscode ├── launch.json ├── extensions.json └── settings.json ├── .gitignore ├── .editorconfig ├── .prettierrc.js ├── astro.config.mjs ├── public └── favicon.svg ├── package.json ├── README.md └── .eslintrc.js /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict = true 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strict" 3 | } -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | yarn.lock 4 | pnpm-lock.yaml 5 | dist/ 6 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | 'tailwindcss/nesting': {}, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /src/components/Footer.astro: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 7 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /src/js/glsl/main.vert: -------------------------------------------------------------------------------- 1 | attribute vec2 uv; 2 | attribute vec2 position; 3 | varying vec2 vUv; 4 | 5 | void main() { 6 | vUv = uv; 7 | gl_Position = vec4(position, 0, 1); 8 | } 9 | -------------------------------------------------------------------------------- /src/pages/about.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Layout from '../layouts/Layout.astro'; 3 | --- 4 | 5 | 6 |

About page

7 |
8 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/js/glsl/main.frag: -------------------------------------------------------------------------------- 1 | precision highp float; 2 | uniform float uTime; 3 | uniform vec3 uColor; 4 | uniform float uOffset; 5 | varying vec2 vUv; 6 | 7 | void main() { 8 | gl_FragColor.rgb = 0.3 + 0.3 * cos(vUv.xyx * uOffset + uTime) + uColor; 9 | gl_FragColor.a = 1.0; 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "astro-build.astro-vscode", 4 | "bradlc.vscode-tailwindcss", 5 | "EditorConfig.EditorConfig", 6 | "dbaeumer.vscode-eslint", 7 | "esbenp.prettier-vscode" 8 | ], 9 | "unwantedRecommendations": [] 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | 4 | # generated types 5 | .astro/ 6 | 7 | # dependencies 8 | node_modules/ 9 | 10 | # logs 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # environment variables 17 | .env 18 | .env.production 19 | 20 | # macOS-specific files 21 | .DS_Store 22 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | indent_style = space 9 | indent_size = 2 10 | 11 | [*.{md,markdown}] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{css,scss,sass}] 15 | indent_style = tab 16 | indent_size = 4 17 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import('prettier').Options} 3 | **/ 4 | module.exports = { 5 | singleQuote: true, 6 | semi: true, 7 | plugins: [require.resolve('prettier-plugin-astro')], 8 | overrides: [ 9 | { 10 | files: '*.astro', 11 | options: { 12 | parser: 'astro', 13 | }, 14 | }, 15 | ], 16 | }; 17 | -------------------------------------------------------------------------------- /src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Layout from '../layouts/Layout.astro'; 3 | --- 4 | 5 | 6 |

Home page

7 | 8 |
9 | 16 | -------------------------------------------------------------------------------- /src/components/ActiveLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export interface Props { 3 | href: string; 4 | className?: string; 5 | activeClassName?: string; 6 | } 7 | 8 | const { href, className, activeClassName } = Astro.props; 9 | 10 | const isActive = href === Astro.url.pathname; 11 | --- 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /astro.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { defineConfig } from 'astro/config'; 3 | import tailwind from '@astrojs/tailwind'; 4 | // import relativeLinks from 'astro-relative-links'; 5 | 6 | // https://astro.build/config 7 | export default defineConfig({ 8 | scopedStyleStrategy: 'class', 9 | integrations: [ 10 | tailwind(), 11 | // relativeLinks(), 12 | ], 13 | devToolbar: { 14 | enabled: false, 15 | }, 16 | }); 17 | -------------------------------------------------------------------------------- /src/layouts/Layout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Footer from '../components/Footer.astro'; 3 | import Header from '../components/Header.astro'; 4 | 5 | export interface Props { 6 | title: string; 7 | } 8 | 9 | const { title } = Astro.props; 10 | --- 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {title} 19 | 20 | 21 |
22 |
23 | 24 |
25 |