diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 01a3212..6d44012 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '22' cache: 'npm' - name: Install dependencies diff --git a/README.md b/README.md index 499f514..91e521b 100644 --- a/README.md +++ b/README.md @@ -6,35 +6,26 @@ A SvelteKit website for BurbSec information security meetups and events. BurbSec is an information security meetup network hosting events across multiple locations including the greater Chicagoland area, Las Vegas, Galway (Ireland), Minneapolis, and more. This site provides information about upcoming events, locations, and sponsors. -## Project Structure - -This is a SvelteKit application with the following structure: - -- **Chicagoland Event Pages**: BurbSec locations across the Chicago metropolitan area - - Prime - Schaumburg (`/prime`) - - North - Wheeling (`/north`) - - South - Hickory Hills (`/south`) - - East - Chicago (`/east`) - - West - Naperville (`/west`) - - Northwest - Crystal Lake (`/northwest`) - - Southeast - South Bend, IN (`/southeast`) - -- **Elsewhere Event Pages**: BurbSec locations outside the Chicagoland area - - Galway, Ireland (`/galway`) - - Las Vegas, NV (`/lasvegas`) - - Minneapolis, MN (`/minneapolis`) - -- **Special Interest Groups** - - CigarSec (`/cigarsec`) - -- **Other Pages** - - Sponsors (`/sponsors`) +## Architecture + +This project uses a **data-driven architecture** where all event metadata lives in a single source of truth — `src/lib/data/events.js`. The homepage cards, navigation dropdowns, sponsors page, SEO meta tags, and structured data (JSON-LD) are all **auto-generated** from this file. Individual route pages only contain unique prose content. + +### Event Categories + +- **Chicagoland** — Chicago, Wheeling, Hickory Hills, Schaumburg, Crystal Lake, Naperville, South Bend +- **Elsewhere** — Minneapolis, Las Vegas, Galway (Ireland) +- **Special Interest** — CigarSec + +### Other Pages + +- **Sponsors** (`/sponsors`) — auto-generated cards from events with sponsor data +- **Error** (`+error.svelte`) — branded 404 / error page ## Development ### Prerequisites -- Node.js (version 16 or higher) +- Node.js 22 LTS (or higher) - npm ### Getting Started @@ -44,98 +35,130 @@ This is a SvelteKit application with the following structure: ```bash npm install ``` - 3. Start the development server: ```bash npm run dev ``` - 4. Open your browser and navigate to `http://localhost:5173` ### Building for Production -To build the application for production: - ```bash -npm run build +npm run build # Outputs to build/ with Brotli + Gzip precompression +npm run preview # Preview the production build locally ``` -To preview the production build: +## Technology Stack -```bash -npm run preview -``` +- **Framework**: SvelteKit 2 + Svelte 4 +- **Build Tool**: Vite 5 +- **Styling**: Bootstrap 5.3.8 (CDN with SRI) + Custom CSS +- **Icons**: Font Awesome 6.5.1 (CDN with SRI) +- **Deployment**: Static site generation → GitHub Pages (Node 22) +- **Domain**: `burbsec.com` (via CNAME) -## Technology Stack +### Security Features -- **Framework**: SvelteKit -- **Build Tool**: Vite -- **Styling**: Bootstrap 5 + Custom CSS -- **Icons**: Font Awesome 6 -- **Deployment**: Static site generation (GitHub Pages) +- **Subresource Integrity (SRI)** hashes on all CDN resources +- **Content Security Policy (CSP)** meta tag +- **Referrer Policy** (`strict-origin-when-cross-origin`) +- **`security.txt`** at `/.well-known/security.txt` +- Consistent `rel="noopener noreferrer"` on all external links + +### Accessibility + +- Skip-to-content link for keyboard/screen-reader navigation +- Visible `:focus-visible` indicators on all interactive elements +- `prefers-reduced-motion` support (disables animations) +- Semantic HTML landmarks (`