diff --git a/20260501-HomeLab/index.html b/20260501-HomeLab/index.html index 0045121..3beb8fa 100644 --- a/20260501-HomeLab/index.html +++ b/20260501-HomeLab/index.html @@ -10,11 +10,11 @@ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.6; - color: #333; + color: #e6edf3; max-width: 1000px; margin: 0 auto; padding: 2rem; - background-color: #f4f7f9; + background-color: #0d1117; display: flex; flex-direction: column; align-items: center; @@ -24,18 +24,18 @@ margin-bottom: 2rem; } h1 { - color: #2c3e50; + color: #e6edf3; margin-bottom: 0.5rem; } .date { - color: #7f8c8d; + color: #8b949e; font-style: italic; } .pdf-container { width: 100%; height: 80vh; - border: 1px solid #ccc; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + border: 1px solid #21262d; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.4); border-radius: 8px; overflow: hidden; } @@ -47,14 +47,14 @@ .btn { display: inline-block; padding: 0.5rem 1rem; - background-color: #3498db; + background-color: #1f6feb; color: white; text-decoration: none; border-radius: 4px; transition: background-color 0.2s; } .btn:hover { - background-color: #2980b9; + background-color: #388bfd; } diff --git a/README.md b/README.md index 14e1c6b..5b5397e 100644 --- a/README.md +++ b/README.md @@ -2,22 +2,26 @@ This repository contains the FLUG presentations. -## Serving localls +## Usage + +Install the required dependencies: -Run once to install Vite globally: ```bash -npm install -g vite +nvm use stable npm install +npm install -g vite ``` Run the development server: + ```bash -vite serve +vite ``` ## Building docker image To build the Docker image, run: + ```bash docker buildx build --platform linux/arm64 --push -t docker.tipsy.codes/flug:20260519 . ``` diff --git a/calendar/events.ics b/calendar/events.ics new file mode 100644 index 0000000..d061904 --- /dev/null +++ b/calendar/events.ics @@ -0,0 +1,18 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//FLUG//NONSGML Event Calendar//EN +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WRAPER-NAME:ical4j +BEGIN:VEVENT +UID:flug-meeting-2026-05-29@flug.org +DTSTAMP:20260101T000000Z +DTSTART;TZID=America/Los_Angeles:20260529T203000 +DTEND;TZID=America/Los_Angeles:20260529T220000 +SUMMARY:FLUG Meeting +LOCATION:Google CRSM1240, Sunnyvale CA 94089 +DESCRIPTION:FLUG Meeting +STATUS:CONFIRMED +TRANSP:OPAQUE +END:VEVENT +END:VCALENDAR diff --git a/calendar/index.html b/calendar/index.html new file mode 100644 index 0000000..5c4c709 --- /dev/null +++ b/calendar/index.html @@ -0,0 +1,164 @@ + + + + + + FLUG Calendar + + + + ← Back to Home +

FLUG Calendar

+ +
+
Next FLUG Meeting
+
+ Date: May 29, 2026
+ Time: 8:30pm PT
+ Location: Google CRSM1240, Sunnyvale CA 94089 +
+
+ Download ICS + Add to Google Calendar + Subscribe (Thunderbird/Evolution/Merkuro/Calendar) +
+
+ +
+

Subscribe via Google Calendar

+

+ Google Calendar requires you to manually add the calendar URL: +

+
+ + +
+

+ Then go to Google Calendar → + Other calendars (+) → + From URL and paste the link. +

+
+ + + + diff --git a/index.html b/index.html index 9e82c97..ca82b60 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - + @@ -14,9 +14,11 @@ margin: 0 auto; padding: 2rem; line-height: 1.5; + background: #0d1117; + color: #e6edf3; } h1 { - border-bottom: 2px solid #eaecef; + border-bottom: 2px solid #21262d; padding-bottom: 0.3em; } ul { @@ -26,12 +28,13 @@ li { margin-bottom: 1rem; padding: 1rem; - border: 1px solid #eaecef; + border: 1px solid #21262d; border-radius: 6px; + background: #161b22; } a { text-decoration: none; - color: #0366d6; + color: #58a6ff; font-weight: bold; font-size: 1.2rem; } @@ -39,7 +42,7 @@ text-decoration: underline; } .date { - color: #586069; + color: #8b949e; font-size: 0.9rem; margin-top: 0.5rem; } @@ -51,8 +54,8 @@

📅 View Calendar & Add to yours

diff --git a/vite.config.js b/vite.config.js index 21a92cb..98bbfab 100644 --- a/vite.config.js +++ b/vite.config.js @@ -29,8 +29,24 @@ function getInputs() { export default defineConfig({ plugins: [ { - name: "copy-pdfs", + name: "copy-assets", writeBundle() { + function copyDir(srcDir, destDir, skipFile) { + const entries = fs.readdirSync(srcDir, { withFileTypes: true }); + for (const entry of entries) { + if (skipFile && entry.name === skipFile) continue; + const src = resolve(srcDir, entry.name); + const dest = resolve(destDir, entry.name); + if (entry.isDirectory()) { + fs.mkdirSync(dest, { recursive: true }); + copyDir(src, dest); + } else { + fs.mkdirSync(destDir, { recursive: true }); + fs.copyFileSync(src, dest); + } + } + } + const entries = fs.readdirSync(__dirname, { withFileTypes: true }); for (const entry of entries) { if ( @@ -40,19 +56,11 @@ export default defineConfig({ !entry.name.startsWith(".") ) { const dirPath = resolve(__dirname, entry.name); - const files = fs.readdirSync(dirPath); - for (const file of files) { - if (file.toLowerCase().endsWith(".pdf")) { - const src = resolve(dirPath, file); - const destDir = resolve(__dirname, "dist", entry.name); - const dest = resolve(destDir, file); + const indexPath = resolve(dirPath, "index.html"); + if (!fs.existsSync(indexPath)) continue; - if (!fs.existsSync(destDir)) { - fs.mkdirSync(destDir, { recursive: true }); - } - fs.copyFileSync(src, dest); - } - } + const destDir = resolve(__dirname, "dist", entry.name); + copyDir(dirPath, destDir, "index.html"); } } },