From 2d8bf434d4a97e2d5d528d2bfb871754bd77a605 Mon Sep 17 00:00:00 2001 From: juancwu <46619361+juancwu@users.noreply.github.com> Date: Mon, 5 Jan 2026 16:02:44 -0500 Subject: [PATCH] remove the need of an http server --- .air.toml | 46 --- .gitignore | 3 +- .konbini.yaml | 4 - .prettierrc.json | 7 - Taskfile.yml | 49 ++- assets/css/input.css | 106 ++++++ cmd/server/main.go | 29 ++ cmd/static-generator/main.go | 28 ++ data/data.go | 131 +++++++ go.mod | 32 +- go.sum | 66 ++-- main.go | 93 ----- package.json | 23 -- page.go | 228 ----------- pnpm-lock.yaml | 717 ----------------------------------- postcss.config.js | 6 - tailwind.config.js | 48 --- views/index.html | 210 ---------- views/index.templ | 186 +++++++++ views/styles.css | 64 ---- 20 files changed, 566 insertions(+), 1510 deletions(-) delete mode 100644 .air.toml delete mode 100644 .konbini.yaml delete mode 100644 .prettierrc.json create mode 100644 assets/css/input.css create mode 100644 cmd/server/main.go create mode 100644 cmd/static-generator/main.go create mode 100644 data/data.go delete mode 100644 main.go delete mode 100644 package.json delete mode 100644 page.go delete mode 100644 pnpm-lock.yaml delete mode 100644 postcss.config.js delete mode 100644 tailwind.config.js delete mode 100644 views/index.html create mode 100644 views/index.templ delete mode 100644 views/styles.css diff --git a/.air.toml b/.air.toml deleted file mode 100644 index 66f8bd9..0000000 --- a/.air.toml +++ /dev/null @@ -1,46 +0,0 @@ -root = "." -testdata_dir = "testdata" -tmp_dir = "tmp" - -[build] - args_bin = [] - bin = "./tmp/main" - cmd = "go build -o ./tmp/main ." - delay = 1000 - exclude_dir = ["node_modules", "assets", "tmp", "vendor", "testdata"] - exclude_file = [] - exclude_regex = ["_test.go"] - exclude_unchanged = false - follow_symlink = false - full_bin = "" - include_dir = [] - include_ext = ["go", "tpl", "tmpl", "html", "css"] - include_file = [] - kill_delay = "0s" - log = "build-errors.log" - poll = false - poll_interval = 0 - post_cmd = [] - pre_cmd = ["pnpm tw:dev"] - rerun = false - rerun_delay = 500 - send_interrupt = false - stop_on_error = false - -[color] - app = "" - build = "yellow" - main = "magenta" - runner = "green" - watcher = "cyan" - -[log] - main_only = false - time = false - -[misc] - clean_on_exit = false - -[screen] - clear_on_rebuild = false - keep_scroll = true diff --git a/.gitignore b/.gitignore index 8c9d7af..df2fd49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ -static/styles.css .env .env.* node_modules tmp build *.pem +*_templ.go +static/output.css diff --git a/.konbini.yaml b/.konbini.yaml deleted file mode 100644 index 2972b08..0000000 --- a/.konbini.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: potoforio -bento_id: 69ee8dbe-2333-41f2-a21b-09ce9d2852b3 -public_key_path: /home/jc/ghq/juancwu/potoforio/public.pem -private_key_path: /home/jc/ghq/juancwu/potoforio/private.pem diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 837f9cd..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 4, - "semi": true, - "singleQuote": false, - "plugins": ["prettier-plugin-tailwindcss"] -} diff --git a/Taskfile.yml b/Taskfile.yml index fc7d41f..06a81ad 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,27 +1,52 @@ version: '3' - tasks: build: desc: 'Builds the application' cmds: - task: build-css - - task: build-go - + - task: build-views + - task: organize build-css: desc: 'Builds CSS with tailwind' cmds: - - pnpm run tw:prod - - build-go: - desc: 'Builds Go application' + - tailwindcss -i ./assets/css/input.css -o ./static/output.css --minify + build-views: + desc: 'Builds application views' cmds: - - go build -o ./build/potoforio . - + - go tool templ generate + - go run ./cmd/static-generator/main.go + organize: + desc: 'Organize built files into dist/' + cmds: + - rm -rf dist/ + - mkdir dist/ + - cp -r static dist + - mv index.html dist + # Development Tools + templ: + desc: Run templ with integrated server and hot reload + cmds: + - go tool templ generate --watch --cmd="go run ./cmd/server/main.go" --proxy="http://localhost:9000" --open-browser=false + tailwind-clean: + desc: Clean tailwind output + cmds: + - tailwindcss -i ./assets/css/input.css -o ./static/output.css --clean + tailwind-watch: + desc: Run tailwindcss in watch mode + cmds: + - tailwindcss -i ./assets/css/input.css -o ./static/output.css --watch + # Start development server + dev: + desc: Start development server with hot reload + deps: + - tailwind-clean + cmds: + - echo "Starting app..." + - task --parallel tailwind-watch templ clean: - desc: 'Cleans up build artifacts' + desc: 'Clean up built files' cmds: - - rm -f ./static/styles.css ./build/potoforio - + - rm -rf dist/ run: desc: 'Builds and runs the application' cmds: diff --git a/assets/css/input.css b/assets/css/input.css new file mode 100644 index 0000000..58af736 --- /dev/null +++ b/assets/css/input.css @@ -0,0 +1,106 @@ +@import "tailwindcss"; + +@source "./page.go"; +@source "./views/**/*.html"; + +@theme { + --font-inter: "Inter", sans-serif; + + --breakpoint-3xl: 2048px; + --breakpoint-4xl: 2560px; + --breakpoint-5xl: 4096px; +} + +@custom-variant retina { + @media only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and (min--moz-device-pixel-ratio: 2), + only screen and (-o-min-device-pixel-ratio: 2/1), + only screen and (min-device-pixel-ratio: 2), + only screen and (min-resolution: 192dpi), + only screen and (min-resolution: 2dppx) { + @slot; + } +} + +@custom-variant retina-sm { + @media only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 640px), + only screen and (min--moz-device-pixel-ratio: 2) and (min-width: 640px), + only screen and (-o-min-device-pixel-ratio: 2/1) and (min-width: 640px), + only screen and (min-device-pixel-ratio: 2) and (min-width: 640px), + only screen and (min-resolution: 192dpi) and (min-width: 640px), + only screen and (min-resolution: 2dppx) and (min-width: 640px) { + @slot; + } +} + +@custom-variant retina-md { + @media only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 1024px), + only screen and (min--moz-device-pixel-ratio: 2) and (min-width: 1024px), + only screen and (-o-min-device-pixel-ratio: 2/1) and (min-width: 1024px), + only screen and (min-device-pixel-ratio: 2) and (min-width: 1024px), + only screen and (min-resolution: 192dpi) and (min-width: 1024px), + only screen and (min-resolution: 2dppx) and (min-width: 1024px) { + @slot; + } +} + +@layer components { + .colourful-card { + @apply relative bg-white p-2 text-zinc-950 transition-all after:absolute after:-right-2 after:top-2 after:-z-10 after:h-full after:w-full after:bg-linear-to-r after:from-purple-500 after:to-pink-500 after:transition-all hover:bg-transparent hover:text-white hover:after:right-0 hover:after:top-0 focus:bg-transparent focus:text-white focus:after:right-0 focus:after:top-0; + } + + .clip-me-from-grass { + clip-path: polygon(58.36% 5.19%, + 52.34% 3.68%, + 45.85% 3.05%, + 37.74% 7.64%, + 35.66% 12.39%, + 34.82% 19.98%, + 32.57% 27.81%, + 29.87% 32.92%, + 22.01% 37.14%, + 17.02% 42.9%, + 10.6% 53.43%, + 8.22% 70.71%, + 6.32% 80.67%, + 10.69% 91.75%, + 9.18% 99.36%, + 47.27% 99.44%, + 92.39% 99.2%, + 91.85% 86.29%, + 94.77% 74.28%, + 88.08% 54.82%, + 83.74% 45.14%, + 78.61% 37.63%, + 71.62% 34.03%, + 64.62% 23.61%, + 63.88% 18.13%, + 62.23% 10.25%); + } + + .grid-pattern { + width: 100%; + height: 100%; + background-size: cover; + background-position: center center; + background-repeat: repeat; + background-image: url("/static/grid.svg"); + } + + .radial-overlay { + background: radial-gradient(circle, + rgba(24, 24, 27, 0) 0%, + rgba(24, 24, 27, 1) 50%); + } + + .polka-pattern { + background-color: #18181b; + opacity: 1; + background-image: radial-gradient(#27272a 1.3px, transparent 1.3px), + radial-gradient(#27272a 1.3px, #18181b 1.3px); + background-size: 52px 52px; + background-position: + 0 0, + 26px 26px; + } +} diff --git a/cmd/server/main.go b/cmd/server/main.go new file mode 100644 index 0000000..6d9f399 --- /dev/null +++ b/cmd/server/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "log" + "net/http" + + "github.com/juancwu/potoforio/data" + "github.com/juancwu/potoforio/views" +) + +func main() { + // Serve static files (images, manifest, etc.) + http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static")))) + + // Serve assets (compiled css) + http.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir("./assets")))) + + // Serve the Templ component + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + d := data.GetPageData() + component := views.Index(d) + component.Render(r.Context(), w) + }) + + log.Println("Dev server starting on :8080 (Proxy to :9000 via Templ)") + if err := http.ListenAndServe(":8080", nil); err != nil { + log.Fatal(err) + } +} diff --git a/cmd/static-generator/main.go b/cmd/static-generator/main.go new file mode 100644 index 0000000..1d90c1e --- /dev/null +++ b/cmd/static-generator/main.go @@ -0,0 +1,28 @@ +package main + +import ( + "context" + "log" + "os" + + "github.com/juancwu/potoforio/data" + "github.com/juancwu/potoforio/views" +) + +func main() { + f, err := os.Create("index.html") + if err != nil { + log.Fatalf("failed to create output file: %v", err) + } + defer f.Close() + + d := data.GetPageData() + component := views.Index(d) + + err = component.Render(context.Background(), f) + if err != nil { + log.Fatalf("failed to render template: %v", err) + } + + log.Println("Static site generated successfully to index.html") +} diff --git a/data/data.go b/data/data.go new file mode 100644 index 0000000..889dab2 --- /dev/null +++ b/data/data.go @@ -0,0 +1,131 @@ +package data + +type Tech struct { + TechName string + TechURL string + TechClasses string +} + +type Project struct { + Name string + URL string + Description string + TechList []Tech + Repo string + Classes string +} + +type Page struct { + Projects []Project +} + +func GetPageData() Page { + return Page{ + Projects: []Project{ + { + Name: "Hermes", + URL: "", + Description: "The user-friendly terminal API client for those who are in love and addicted to do everything on the terminal.", + Repo: "https://github.com/juancwu/hermes", + Classes: "border-orange-400", + TechList: []Tech{ + {TechName: "Rust", TechURL: "https://www.rust-lang.org/", TechClasses: ""}, + {TechName: "Ratatui", TechURL: "https://ratatui.rs/", TechClasses: ""}, + }, + }, + { + Name: "Konbini", + URL: "", + Description: "A \"convenient store\" with API services to manage projects' secrets or environment variables with the ability to separate the variables into their own environment.", + Repo: "https://github.com/juancwu/konbini", + Classes: "border-sky-500", + TechList: []Tech{ + {TechName: "Golang", TechURL: "https://go.dev/", TechClasses: "transition bg-zinc-950 text-zinc-100"}, + {TechName: "Echo", TechURL: "https://echo.labstack.com/", TechClasses: "bg-zinc-950 text-zinc-100"}, + {TechName: "PostgreSQL", TechURL: "https://www.postgresql.org/", TechClasses: "bg-zinc-950 text-zinc-100"}, + }, + }, + { + Name: "EmojiScript", + URL: "https://emojiscript.juancwu.dev/", + Description: "A silly project started for a brain rot hackathon host by Audrey Chen. Please give it a shot if you are interested!", + Repo: "https://github.com/KonferCA/EmojiScript", + Classes: "border-green-400", + TechList: []Tech{ + {TechName: "Typescript", TechURL: "https://www.typescriptlang.org/", TechClasses: ""}, + {TechName: "Devpost", TechURL: "https://brainrot-jia-seed-hackathon.devpost.com/", TechClasses: ""}, + }, + }, + { + Name: "Konfer Website", + URL: "https://konfer.ca", + Description: "The official landing site for Konfer Inc.", + Repo: "https://github.com/KonferCA/Konfer.ca", + Classes: "border-indigo-300", + TechList: []Tech{ + {TechName: "React", TechURL: "https://react.dev/", TechClasses: ""}, + {TechName: "Firebase", TechURL: "https://firebase.google.com/", TechClasses: ""}, + {TechName: "TailwindCSS", TechURL: "https://tailwindcss.com/", TechClasses: ""}, + }, + }, + { + Name: "HawkHacks Website", + URL: "https://hawkhacks.ca", + Description: "HawkHacks is a 36 hour in-person hackathon hosted at Wilfrid Laurier University.", + Repo: "https://github.com/LaurierHawkHacks/Landing", + Classes: "border-orange-300", + TechList: []Tech{ + {TechName: "React", TechURL: "https://react.dev/", TechClasses: ""}, + {TechName: "Firebase", TechURL: "https://firebase.google.com/", TechClasses: ""}, + {TechName: "TailwindCSS", TechURL: "https://tailwindcss.com/", TechClasses: ""}, + }, + }, + { + Name: "LCS Website", + URL: "https://lauriercs.ca", + Description: "The official Computer Science club at Wilfrid Laurier University website.", + Repo: "https://github.com/LaurierCS/Website", + Classes: "border-cyan-400", + TechList: []Tech{ + {TechName: "React", TechURL: "https://react.dev/", TechClasses: ""}, + {TechName: "Firebase", TechURL: "https://firebase.google.com/", TechClasses: ""}, + {TechName: "Mantine UI", TechURL: "https://mantine.dev/", TechClasses: ""}, + }, + }, + { + Name: "Shoto", + URL: "", + Description: "Simple and effective URL shortoner.", + Repo: "https://github.com/juancwu/shoto", + Classes: "border-indigo-500", + TechList: []Tech{ + {TechName: "Next.js", TechURL: "https://nextjs.org/", TechClasses: "transition bg-zinc-950 text-zinc-100 hover:bg-zinc-100 hover:text-gray-950"}, + {TechName: "Drizzle ORM", TechURL: "https://orm.drizzle.team/", TechClasses: "transition bg-zinc-950 text-zinc-100 hover:bg-green-600"}, + {TechName: "Turso", TechURL: "https://turso.tech/", TechClasses: "transition bg-zinc-950 text-zinc-100 hover:bg-teal-600"}, + }, + }, + { + Name: "Hachi-Bitto", + URL: "", + Description: "A general proramming language created just to satify YAPL, which stands for \"yet another programming language\".", + Repo: "https://github.com/juancwu/hachi-bitto", + Classes: "border-emerald-500", + TechList: []Tech{ + {TechName: "Golang", TechURL: "https://go.dev/", TechClasses: "bg-zinc-950 text-zinc-100"}, + }, + }, + { + Name: "This Site", + URL: "https://juancwu.dev", + Description: "My personal portolio site?", + Repo: "https://github.com/juancwu/potoforio", + Classes: "border-gray-600", + TechList: []Tech{ + {TechName: "Golang", TechURL: "https://go.dev/", TechClasses: "bg-zinc-950 text-zinc-100"}, + {TechName: "HTMX", TechURL: "https://htmx.org/", TechClasses: "bg-zinc-950 text-zinc-100"}, + {TechName: "Hyperscript", TechURL: "https://hyperscript.org/", TechClasses: "bg-zinc-950 text-zinc-100"}, + }, + }, + }, + } +} diff --git a/go.mod b/go.mod index 2220e29..135d352 100644 --- a/go.mod +++ b/go.mod @@ -1,22 +1,24 @@ module github.com/juancwu/potoforio -go 1.21.3 +go 1.23.0 + +require github.com/a-h/templ v0.3.977 require ( - github.com/joho/godotenv v1.5.1 - github.com/labstack/echo/v4 v4.11.2 -) - -require ( - github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/labstack/gommon v0.4.0 // indirect + github.com/a-h/parse v0.0.0-20250122154542-74294addb73e // indirect + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cli/browser v1.3.0 // indirect + github.com/fatih/color v1.16.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasttemplate v1.2.2 // indirect - golang.org/x/crypto v0.17.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.3.0 // indirect + github.com/natefinch/atomic v1.0.1 // indirect + golang.org/x/mod v0.26.0 // indirect + golang.org/x/net v0.42.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.34.0 // indirect + golang.org/x/tools v0.35.0 // indirect ) + +tool github.com/a-h/templ/cmd/templ diff --git a/go.sum b/go.sum index b451970..e7e087a 100644 --- a/go.sum +++ b/go.sum @@ -1,49 +1,43 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/a-h/parse v0.0.0-20250122154542-74294addb73e h1:HjVbSQHy+dnlS6C3XajZ69NYAb5jbGNfHanvm1+iYlo= +github.com/a-h/parse v0.0.0-20250122154542-74294addb73e/go.mod h1:3mnrkvGpurZ4ZrTDbYU84xhwXW2TjTKShSwjRi2ihfQ= +github.com/a-h/templ v0.3.977 h1:kiKAPXTZE2Iaf8JbtM21r54A8bCNsncrfnokZZSrSDg= +github.com/a-h/templ v0.3.977/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cli/browser v1.3.0 h1:LejqCrpWr+1pRqmEPDGnTZOjsMe7sehifLynZJuqJpo= +github.com/cli/browser v1.3.0/go.mod h1:HH8s+fOAxjhQoBUAsKuPCbqUuxZDhQ2/aD+SzsEfBTk= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= -github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/labstack/echo/v4 v4.11.2 h1:T+cTLQxWCDfqDEoydYm5kCobjmHwOwcv4OJAPHilmdE= -github.com/labstack/echo/v4 v4.11.2/go.mod h1:UcGuQ8V6ZNRmSweBIJkPvGfwCMIlFmiqrPqiEBfPYws= -github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= -github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= +github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= -github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go deleted file mode 100644 index 2ac3e20..0000000 --- a/main.go +++ /dev/null @@ -1,93 +0,0 @@ -package main - -import ( - "context" - "embed" - "fmt" - "html/template" - "io" - "io/fs" - "log" - "net/http" - "os" - "os/signal" - "syscall" - "time" - - "github.com/labstack/echo/v4" - "github.com/labstack/echo/v4/middleware" -) - -//go:embed static/* -var embeddedFiles embed.FS - -//go:embed views/*.html -var embeddedTemplates embed.FS - -type TemplateRenderer struct { - templates *template.Template -} - -func main() { - // create a channel to listen for signals - sigChan := make(chan os.Signal, 1) - - // listen to SIGTERM and SIGINT (ctrl-c) - signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT, os.Interrupt) - - templates, err := template.ParseFS(embeddedTemplates, "views/*.html") - if err != nil { - log.Fatalf("Error initializing templates: %v", err) - os.Exit(1) - } - - e := echo.New() - e.Renderer = &TemplateRenderer{ - templates: templates, - } - - // serve server in a goroutine, allow the code to listen to ctrl-c - go func() { - e.Use(middleware.Logger()) - - staticFiles, err := fs.Sub(embeddedFiles, "static") - if err != nil { - panic(err) - } - e.StaticFS("/static", staticFiles) - - e.GET("/", renderPage) - - e.GET("/service/health-check", func(c echo.Context) error { - c.Response().Writer.WriteHeader(http.StatusOK) - c.Response().Write([]byte("APP VERSION: 1.0.0")) - return nil - }) - - port := os.Getenv("PORT") - if port == "" { - port = "5173" - } - - e.Start(fmt.Sprintf(":%s", port)) - }() - - // block until a signal is received - sig := <-sigChan - log.Printf("Caught signal: %s\n", sig) - - // start graceful shutdown with a timeout - // should stop everything and clean up within 10 seconds - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - if err := e.Shutdown(ctx); err != nil { - log.Printf("Error during server shutdown: %v\n", err) - } else { - log.Println("Server shut down gracefully.") - } -} - -func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}, c echo.Context) error { - return t.templates.ExecuteTemplate(w, name, data) -} diff --git a/package.json b/package.json deleted file mode 100644 index e8cd616..0000000 --- a/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "potoforio", - "version": "1.0.0", - "description": "JC's personal portfolio site", - "main": "index.js", - "scripts": { - "tw:dev": "tailwindcss -i ./views/styles.css -o ./static/styles.css", - "tw:prod": "tailwindcss -i ./views/styles.css -o ./static/styles.css --minify" - }, - "keywords": [ - "personal", - "porfolio", - "projects", - "resume" - ], - "author": "JC", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.16", - "postcss": "^8.4.31", - "tailwindcss": "^3.3.3" - } -} diff --git a/page.go b/page.go deleted file mode 100644 index 84c4fe3..0000000 --- a/page.go +++ /dev/null @@ -1,228 +0,0 @@ -package main - -import ( - "github.com/labstack/echo/v4" -) - -type Tech struct { - TechName string - TechURL string - TechClasses string -} - -type Project struct { - Name string - URL string - Description string - TechList []Tech - Repo string - Classes string -} - -type Page struct { - Projects []Project -} - -func renderPage(c echo.Context) error { - data := Page{} - data.Projects = []Project{ - { - Name: "Hermes", - URL: "", - Description: "The user-friendly terminal API client for those who are in love and addicted to do everything on the terminal.", - Repo: "https://github.com/juancwu/hermes", - Classes: "border-orange-400", - TechList: []Tech{ - { - TechName: "Rust", - TechURL: "https://www.rust-lang.org/", - TechClasses: "", - }, - { - TechName: "Ratatui", - TechURL: "https://ratatui.rs/", - TechClasses: "", - }, - }, - }, - { - Name: "Konbini", - URL: "", - Description: "A \"convenient store\" with API services to manage projects' secrets or environment variables with the ability to separate the variables into their own environment.", - Repo: "https://github.com/juancwu/konbini", - Classes: "border-sky-500", - TechList: []Tech{ - { - TechName: "Golang", - TechURL: "https://go.dev/", - TechClasses: "transition bg-zinc-950 text-zinc-100", - }, - { - TechName: "Echo", - TechURL: "https://echo.labstack.com/", - TechClasses: "bg-zinc-950 text-zinc-100", - }, - { - TechName: "PostgreSQL", - TechURL: "https://www.postgresql.org/", - TechClasses: "bg-zinc-950 text-zinc-100", - }, - }, - }, - { - Name: "EmojiScript", - URL: "https://emojiscript.juancwu.dev/", - Description: "A silly project started for a brain rot hackathon host by Audrey Chen. Please give it a shot if you are interested!", - Repo: "https://github.com/KonferCA/EmojiScript", - Classes: "border-green-400", - TechList: []Tech{ - { - TechName: "Typescript", - TechURL: "https://www.typescriptlang.org/", - TechClasses: "", - }, - { - TechName: "Devpost", - TechURL: "https://brainrot-jia-seed-hackathon.devpost.com/", - TechClasses: "", - }, - }, - }, - { - Name: "Konfer Website", - URL: "https://konfer.ca", - Description: "The official landing site for Konfer Inc.", - Repo: "https://github.com/KonferCA/Konfer.ca", - Classes: "border-indigo-300", - TechList: []Tech{ - { - TechName: "React", - TechURL: "https://react.dev/", - TechClasses: "", - }, - { - TechName: "Firebase", - TechURL: "https://firebase.google.com/", - TechClasses: "", - }, - { - TechName: "TailwindCSS", - TechURL: "https://tailwindcss.com/", - TechClasses: "", - }, - }, - }, - { - Name: "HawkHacks Website", - URL: "https://hawkhacks.ca", - Description: "HawkHacks is a 36 hour in-person hackathon hosted at Wilfrid Laurier University.", - Repo: "https://github.com/LaurierHawkHacks/Landing", - Classes: "border-orange-300", - TechList: []Tech{ - { - TechName: "React", - TechURL: "https://react.dev/", - TechClasses: "", - }, - { - TechName: "Firebase", - TechURL: "https://firebase.google.com/", - TechClasses: "", - }, - { - TechName: "TailwindCSS", - TechURL: "https://tailwindcss.com/", - TechClasses: "", - }, - }, - }, - { - Name: "LCS Website", - URL: "https://lauriercs.ca", - Description: "The official Computer Science club at Wilfrid Laurier University website.", - Repo: "https://github.com/LaurierCS/Website", - Classes: "border-cyan-400", - TechList: []Tech{ - { - TechName: "React", - TechURL: "https://react.dev/", - TechClasses: "", - }, - { - TechName: "Firebase", - TechURL: "https://firebase.google.com/", - TechClasses: "", - }, - { - TechName: "Mantine UI", - TechURL: "https://mantine.dev/", - TechClasses: "", - }, - }, - }, - { - Name: "Shoto", - URL: "", - Description: "Simple and effective URL shortoner.", - Repo: "https://github.com/juancwu/shoto", - Classes: "border-indigo-500", - TechList: []Tech{ - { - TechName: "Next.js", - TechURL: "https://nextjs.org/", - TechClasses: "transition bg-zinc-950 text-zinc-100 hover:bg-zinc-100 hover:text-gray-950", - }, - { - TechName: "Drizzle ORM", - TechURL: "https://orm.drizzle.team/", - TechClasses: "transition bg-zinc-950 text-zinc-100 hover:bg-green-600", - }, - { - TechName: "Turso", - TechURL: "https://turso.tech/", - TechClasses: "transition bg-zinc-950 text-zinc-100 hover:bg-teal-600", - }, - }, - }, - { - Name: "Hachi-Bitto", - URL: "", - Description: "A general proramming language created just to satify YAPL, which stands for \"yet another programming language\".", - Repo: "https://github.com/juancwu/hachi-bitto", - Classes: "border-emerald-500", - TechList: []Tech{ - { - TechName: "Golang", - TechURL: "https://go.dev/", - TechClasses: "bg-zinc-950 text-zinc-100", - }, - }, - }, - { - Name: "This Site", - URL: "https://juancwu.dev", - Description: "My personal portolio site?", - Repo: "https://github.com/juancwu/potoforio", - Classes: "border-gray-600", - TechList: []Tech{ - { - TechName: "Golang", - TechURL: "https://go.dev/", - TechClasses: "bg-zinc-950 text-zinc-100", - }, - { - TechName: "HTMX", - TechURL: "https://htmx.org/", - TechClasses: "bg-zinc-950 text-zinc-100", - }, - { - TechName: "Hyperscript", - TechURL: "https://hyperscript.org/", - TechClasses: "bg-zinc-950 text-zinc-100", - }, - }, - }, - } - - return c.Render(200, "index.html", data) -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index dcdf6c6..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,717 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) - postcss: - specifier: ^8.4.31 - version: 8.4.31 - tailwindcss: - specifier: ^3.3.3 - version: 3.3.3 - -packages: - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - autoprefixer@10.4.16: - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001686: - resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==} - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - electron-to-chromium@1.4.561: - resolution: {integrity: sha512-eS5t4ulWOBfVHdq9SW2dxEaFarj1lPjvJ8PaYMOjY0DecBaj/t4ARziL2IPpDr4atyWwjLFGQ2vo/VCgQFezVQ==} - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - - has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - jiti@1.20.0: - resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} - hasBin: true - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.1: - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tailwindcss@3.3.3: - resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} - engines: {node: '>=14.0.0'} - hasBin: true - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yaml@2.3.3: - resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} - engines: {node: '>= 14'} - -snapshots: - - '@alloc/quick-lru@5.2.0': {} - - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - - '@jridgewell/resolve-uri@3.1.1': {} - - '@jridgewell/set-array@1.1.2': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.20': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - autoprefixer@10.4.16(postcss@8.4.31): - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001686 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - - balanced-match@1.0.2: {} - - binary-extensions@2.2.0: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.22.1: - dependencies: - caniuse-lite: 1.0.30001686 - electron-to-chromium: 1.4.561 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001686: {} - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - commander@4.1.1: {} - - concat-map@0.0.1: {} - - cssesc@3.0.0: {} - - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - - electron-to-chromium@1.4.561: {} - - escalade@3.1.1: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - fraction.js@4.3.7: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.1.6: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - has@1.0.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - - is-core-module@2.13.0: - dependencies: - has: 1.0.4 - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - jiti@1.20.0: {} - - lilconfig@2.1.0: {} - - lines-and-columns@1.2.4: {} - - merge2@1.4.1: {} - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.6: {} - - node-releases@2.0.13: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - path-is-absolute@1.0.1: {} - - path-parse@1.0.7: {} - - picocolors@1.0.0: {} - - picomatch@2.3.1: {} - - pify@2.3.0: {} - - pirates@4.0.6: {} - - postcss-import@15.1.0(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-js@4.0.1(postcss@8.4.31): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.31 - - postcss-load-config@4.0.1(postcss@8.4.31): - dependencies: - lilconfig: 2.1.0 - yaml: 2.3.3 - optionalDependencies: - postcss: 8.4.31 - - postcss-nested@6.0.1(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 - - postcss-selector-parser@6.0.13: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.4.31: - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - queue-microtask@1.2.3: {} - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - resolve@1.22.8: - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - source-map-js@1.0.2: {} - - sucrase@3.34.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supports-preserve-symlinks-flag@1.0.0: {} - - tailwindcss@3.3.3: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.1 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.20.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - ts-interface-checker@0.1.13: {} - - update-browserslist-db@1.0.13(browserslist@4.22.1): - dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - - util-deprecate@1.0.2: {} - - wrappy@1.0.2: {} - - yaml@2.3.3: {} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 33ad091..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 86b4eba..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,48 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./page.go", "./views/**/*.html"], - theme: { - extend: { - fontFamily: { - inter: ["Inter", "sans-serif"], - }, - screens: { - "3xl": "2048px", - "4xl": "2560px", - "5xl": "4096px", - // for mac users - retina: { - raw: `@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and (min--moz-device-pixel-ratio: 2), -only screen and (-o-min-device-pixel-ratio: 2/1), -only screen and (min-device-pixel-ratio: 2), -only screen and (min-resolution: 192dpi), -only screen and (min-resolution: 2dppx) -`, - }, - "retina-sm": { - raw: `@media -only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 640px), -only screen and (min--moz-device-pixel-ratio: 2) and (min-width: 640px), -only screen and (-o-min-device-pixel-ratio: 2/1) and (min-width: 640px), -only screen and (min-device-pixel-ratio: 2) and (min-wdith: 640px), -only screen and (min-resolution: 192dpi) and (min-width: 640px), -only screen and (min-resolution: 2dppx) and (min-width: 640px) -`, - }, - "retina-md": { - raw: `@media -only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 1024px), -only screen and (min--moz-device-pixel-ratio: 2) and (min-width: 1024px), -only screen and (-o-min-device-pixel-ratio: 2/1) and (min-width: 1024px), -only screen and (min-device-pixel-ratio: 2) and (min-wdith: 1024px), -only screen and (min-resolution: 192dpi) and (min-width: 1024px), -only screen and (min-resolution: 2dppx) and (min-width: 1024px) -`, - }, - }, - }, - }, - plugins: [], -}; diff --git a/views/index.html b/views/index.html deleted file mode 100644 index 6787186..0000000 --- a/views/index.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Juan Wu | Portfolio - - - - -
-
-
- JUAN WU -
- SOFTWARE DEVELOPER - -
-
- - -
-
-
- - -
-
-
-

- Hello there , -

-

- I am Juan, -

-

- a computer science student who
loves software development
and
tinkers with hardware! -

-

- I currently work at - Konfer - and - HawkHacks. -

- -

- Check out my -

- - PROJECTS - -
- -
-
-
- -
-
-
-

- Welcome to - - Project Backyard -

- - Checkout my GitHub for more projects! - -
-
- -
- {{ range .Projects }} -
-
-
- {{ if gt (len .URL) 1 }} - -

- {{ .Name }} - - - -

-
- {{ else }} -

{{ .Name }}

- {{ end }} - -
- -
- -

{{ .Description }}

-
-

- Checkout the code in - GitHub -

-
- {{ end }} -
-
- - - - diff --git a/views/index.templ b/views/index.templ new file mode 100644 index 0000000..771a095 --- /dev/null +++ b/views/index.templ @@ -0,0 +1,186 @@ +package views + +import "github.com/juancwu/potoforio/data" + +templ Index(d data.Page) { + + + + + + + + + + + + + + + + + + + + + Juan Wu | Portfolio + + + +
+
+
+ JUAN WU +
+ SOFTWARE DEVELOPER + +
+
+ + +
+
+
+ + +
+
+
+

+ Hello there , +

+

+ I am Juan, +

+

+ a computer science student who +
+ loves software development +
+ and +
+ tinkers with hardware! +

+

+ I currently work at + Konfer + and + HawkHacks. +

+ +

+ Check out my +

+ + PROJECTS + +
+ +
+
+
+ +
+
+
+

+ Welcome to + + Project Backyard + +

+ + Checkout my GitHub for more projects! + +
+
+ +
+ for _, p := range d.Projects { +
+
+
+ if len(p.URL) > 1 { + +

+ { p.Name } + + + +

+
+ } else { +

{ p.Name }

+ } + +
+ +
+ +

{ p.Description }

+
+

+ Checkout the code in + GitHub +

+
+ } +
+
+ + + +} diff --git a/views/styles.css b/views/styles.css deleted file mode 100644 index 0255ee0..0000000 --- a/views/styles.css +++ /dev/null @@ -1,64 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer components { - .colourful-card { - @apply relative bg-white p-2 text-zinc-950 transition-all after:absolute after:-right-2 after:top-2 after:-z-10 after:h-full after:w-full after:bg-gradient-to-r after:from-purple-500 after:to-pink-500 after:transition-all hover:bg-transparent hover:text-white hover:after:right-0 hover:after:top-0 focus:bg-transparent focus:text-white focus:after:right-0 focus:after:top-0; - } - - .clip-me-from-grass { - clip-path: polygon(58.36% 5.19%, - 52.34% 3.68%, - 45.85% 3.05%, - 37.74% 7.64%, - 35.66% 12.39%, - 34.82% 19.98%, - 32.57% 27.81%, - 29.87% 32.92%, - 22.01% 37.14%, - 17.02% 42.9%, - 10.6% 53.43%, - 8.22% 70.71%, - 6.32% 80.67%, - 10.69% 91.75%, - 9.18% 99.36%, - 47.27% 99.44%, - 92.39% 99.2%, - 91.85% 86.29%, - 94.77% 74.28%, - 88.08% 54.82%, - 83.74% 45.14%, - 78.61% 37.63%, - 71.62% 34.03%, - 64.62% 23.61%, - 63.88% 18.13%, - 62.23% 10.25%); - } - - .grid-pattern { - width: 100%; - height: 100%; - background-size: cover; - background-position: center center; - background-repeat: repeat; - background-image: url("/static/grid.svg"); - } - - .radial-overlay { - background: radial-gradient(circle, - rgba(24, 24, 27, 0) 0%, - rgba(24, 24, 27, 1) 50%); - } - - .polka-pattern { - background-color: #18181b; - opacity: 1; - background-image: radial-gradient(#27272a 1.3px, transparent 1.3px), - radial-gradient(#27272a 1.3px, #18181b 1.3px); - background-size: 52px 52px; - background-position: - 0 0, - 26px 26px; - } -}