emblem-site Svelte Themes

Emblem Site

A content-driven website for BannerVC using Astro, Tailwind, Svelte, and Three. Part of the Astro-Knots family of sites by The Lossless Group

A content-rich website for BannerVC

A modern web application built with by
The Lossless Group The Lossless Group
SSG and Styles with Astro and Tailwind CSS v4 for BannerVC

Modern site generation, presentations, styling, testing, and 3D graphics.

What's New in v0.0.6

All Three Portfolio Companies Live

Impulse Space is now pulling 139 jobs via the Pinpoint JSON API — including structured salary data that Greenhouse and Ashby don't provide. All three portfolio companies are live with zero custom scraping needed.

192 live job listings across 3 portfolio companies, updated daily.

Universal Snippet Sanitization

Job board APIs return descriptions in wildly different formats — HTML entities (Greenhouse), plain text with boilerplate (Ashby), raw HTML with comment nodes (Pinpoint). The scraper now runs a universal sanitization pass on all snippets regardless of provider: decode entities, strip HTML tags, extract unique content past boilerplate headings. Every card shows clean, role-specific text.


What's New in v0.0.5

Portfolio-Wide Job Aggregator

Banner.vc now aggregates open positions across its entire portfolio — automatically, daily, and for free.

Instead of paying Getro or Portfolio Jobs thousands per year for a job board widget, the site scrapes portfolio company careers pages directly. All three portfolio companies use hosted job boards with free public JSON APIs (Greenhouse, Ashby, Pinpoint).

192 live job listings across 3 portfolio companies, updated daily.

How it works:

  1. pnpm validate:careers — Build-time script that verifies each portfolio company's careers URL is reachable and auto-detects their job board provider (Greenhouse, Ashby, Lever, etc.)
  2. pnpm scrape:jobs — Fetches live job data from provider APIs, normalizes it to a common schema, deduplicates against prior runs, and writes jobs.json + jobs-meta.json
  3. Astro renders the /jobs page statically from that data at build time

Zero extra dependencies. Scripts run on Node 22's native TypeScript support (--experimental-strip-types). No tsx, no ts-node, no bundler.

Smart snippet extraction. Job descriptions typically start with 300+ words of identical company boilerplate. The scraper detects section headings like "Responsibilities" and starts the preview snippet from the unique content — so every card shows what actually differentiates the role.

What you see at /jobs:

  • Company tabs with mode-aware logos (light/dark) and job count badges
  • Jobs grouped by portfolio company with OG image banners
  • Medium-sized cards showing title, department, location, seniority, and a unique snippet
  • "Apply" links that open the original posting in a new tab

Component library (pick your favorite):

Component Description
JobCard--Small Compact single-line: title, company, location, type pill
JobCard--Medium Default: OG image, metadata tags, snippet, apply CTA
JobCard--Large Featured: full-width banner, all metadata, prominent CTA
JobRow--Wide Table row format for dense listings
JobCardGrid Responsive CSS grid (2-4 columns)
JobCardSpan Full-width stacked layout
JobGroup--ByCompany Groups jobs under company header with OG banner
JobStats Summary: total jobs, companies hiring, last updated

Clients pick their preferred card size and layout in src/config/jobs.ts.

Portfolio companies in this release:

Company Provider Jobs API Bonus
Impulse Space Pinpoint 139 Free JSON API Structured salary data
Mesh Optical Technologies Greenhouse 31 Free JSON API
TerraFirma Ashby 22 Free JSON API

Full spec: See context-v/specs/Portfolio-Wide-Job-Aggregator.md in the astro-knots repo for architecture, data models, scraping strategy, component specifications, and future plans including "Put Your Name in the Arena" — a candidate pipeline where job seekers connect via LinkedIn and the VC firm curates warm introductions to portfolio hiring managers.

Brand Color Migration

The site's primary color has been migrated from crimson red to Banner Blue (#0052E6) across all three theme modes:

  • All semantic tokens (--color-primary, --color-ring, effect tokens)
  • Header navigation underlines and dropdown hover states
  • Card borders, glows, and shadow effects
  • Job component accents (tags, badges, CTAs, tab underlines)

The color system remains fully token-driven — change --color-brand-blue in emblem-theme.css and everything follows.

Dependency Updates

All dependencies bumped to latest:

Package Previous Current
Astro 5.16.11 6.1.7
Tailwind CSS 4.1.18 4.2.2
@shikijs/rehype 3.21.0 4.0.2
Three.js 0.182.0 0.184.0
unist-util-visit 5.0.0 5.1.0

Features

Multi-Mode Theme System

A sophisticated theming engine that adapts to user preference with three distinct visual modes:

  • Light Mode — Clean, professional aesthetics with ivory backgrounds and blue accents
  • Dark Mode — Bold, confident design featuring deep navy backgrounds with vibrant highlights
  • Vibrant Mode — High-impact expressive styling with dramatic glows and maximum contrast

The theme system uses semantic CSS tokens that cascade automatically — change one color and watch the entire interface adapt. Mode preferences persist across sessions via localStorage.

Developer Changelog

A polished changelog system for tracking development progress, inspired by Linear, Notion, and GitHub Releases:

  • Timeline View — Stripe-inspired vertical timeline grouped by month with animated interactions
  • Cards View — Filterable card grid with category badges and gradient headers
  • Releases View — GitHub-style collapsible release notes with version tags

Each entry supports rich markdown with:

  • Aurora-X syntax highlighting for beautiful code blocks
  • Mermaid diagram rendering for flowcharts and architecture visuals
  • Claude AI attribution badges for AI-augmented development
  • Tag-based filtering and shareable view URLs

Visit /changelog to explore the development timeline.

Design System Hub

An internal reference for collaborators documenting the complete theming system:

  • Theme Tokens — Brand colors, semantic tokens, effect tokens across all modes
  • Visual Swatches — Color palette with CSS variable names and hex values
  • Mode Comparison — Side-by-side token values for light, dark, and vibrant
  • Usage Examples — Syntax-highlighted code showing CSS variables, Tailwind classes, and helper utilities

Visit /design-system to explore the documentation.

Flare: Three.js Visual Effects

A collection of animated WebGL visual effects for hero backgrounds and decorative elements:

  • PlanetRising — Dotted sphere with configurable lighting, parallax, and breathing animation
  • EclipseEnding — Crescent illumination effect with sharp falloff and slow rotation
  • BannerFlag — Animated brand icon with thick wavy lines and tilted flagpole

Each Flare component is configurable, performant, responsive, and theme-aware.

Visit /design-system/flare to explore the effects gallery.

Built With

  • Astro 6 — Lightning-fast static site generation
  • Tailwind CSS 4 — Utility-first styling with custom theme integration
  • Three.js — WebGL-powered 3D graphics and animations
  • Shiki 4 — VS Code-quality syntax highlighting
  • Node 22 — Native TypeScript execution for build scripts
  • Content Collections — Type-safe markdown with Zod schemas

Commands

All commands are run from the root of the project:

Command Action
pnpm install Installs dependencies
pnpm dev Starts local dev server at localhost:4321
pnpm build Build production site to ./dist/
pnpm preview Preview build locally before deploying
pnpm validate:careers Validate portfolio company careers URLs
pnpm scrape:jobs Fetch latest job listings from portfolio APIs
pnpm astro ... Run Astro CLI commands

Top categories

Loading Svelte Themes