diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index e3a54b33..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,220 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -This is Adam Jolicoeur's portfolio website built with Eleventy (11ty), Node.js, Bootstrap 5, and Sass. It's a static site generator project that outputs to the `docs/` directory for GitHub Pages hosting. - -## Essential Commands - -### Development -```bash -npm run start # Start dev server with live reload on port 8081 -npm run build # Full production build (clean + images + sass + eleventy + postbuild) -npm run clean # Remove docs/ directory -``` - -### Building Components -```bash -npm run build:sass # Compile SCSS to CSS -npm run build:eleventy # Generate static site -npm run images:optimize # Process images from src/assets/img-raw/ using Sharp -npm run postbuild # Run autoprefixer and cssnano (automatically runs after build) -``` - -### Linting -```bash -npm run lint # Check Sass/SCSS files with Stylelint -npm run lint:fix # Auto-fix Stylelint issues -npm run webhint # Test accessibility/performance (requires dev server running) -``` - -### Versioning -```bash -npm run bump patch|minor|major # Update package.json version without git tag -``` - -## Important Build Information - -- **Node.js version**: 22 (specified in package.json engines and .nvmrc) -- **Development server port**: 8081 (NOT the default 8080) -- **Output directory**: `docs/` (required for GitHub Pages, gets deleted on build) -- **Input directory**: `src/` -- **Environment variables**: - - `ELEVENTY_ENV=dev` - includes posts directory - - `ELEVENTY_ENV=prod` - excludes posts directory (line 33-35 in .eleventy.js) - -## Architecture - -### Directory Structure - -``` -src/ -├── _data/ # Global data files -│ └── meta.js # Site metadata (URLs, social links, descriptions) -├── _includes/ # Nunjucks templates and partials -│ ├── base.njk # Main layout with navigation logic -│ ├── footer.njk # Footer template -│ ├── markdown.njk # Markdown content wrapper -│ └── ... -├── _generate/ # Generated content templates (social cards) -├── pages/ # Markdown content pages -│ ├── about/ -│ ├── designs/ -│ ├── development/ -│ └── ... -├── posts/ # Blog posts (excluded in prod builds) -├── assets/ -│ ├── img/ # Optimized images (generated, committed) -│ └── img-raw/ # Original high-res images for processing -├── sass/ # SCSS stylesheets -│ ├── style.scss # Main stylesheet (imports Bootstrap + partials) -│ ├── print.scss # Print-specific styles -│ ├── _variables.scss # Custom variables -│ ├── _layout.scss # Layout and grid customizations -│ ├── _cards.scss # Card component styles -│ ├── _navigation.scss# Navigation styles -│ └── ... -└── js/ # JavaScript (passed through) - -docs/ # Build output (DO NOT EDIT) -scripts/ -└── image-optimizer.js # Custom Sharp image processing script -``` - -### Template System - -- **Primary templating**: Nunjucks (`.njk` files) -- **Content format**: Markdown with YAML front matter -- **Base layout**: `src/_includes/base.njk` - - Contains conditional navigation logic based on URL - - Home page (`/`) has bottom navigation with anchor links - - About pages (`/about/*`) have About/Resume navigation - - Other pages have Home/Task-It/ALM navigation -- **Style system**: Bootstrap 5 grid + custom Sass in modular partials - -### Eleventy Configuration (.eleventy.js) - -Key features configured: -- **Plugins**: Syntax highlighting, RSS, navigation, inclusive language, TOC, dropcap, emoji read time -- **Markdown library**: markdown-it with anchor links and syntax highlighting -- **Custom collections**: `development`, `general`, `design`, `portfolio` (lines 139-153) -- **Custom filters**: `slug` filter for URL-safe strings (removes emojis, special chars) -- **Shortcodes**: `year`, `packageVersion` -- **Pass-through copy**: Images, icons, manifests, service worker, JavaScript -- **Watch targets**: `src/sass/*.scss` -- **404 handling**: Custom BrowserSync middleware (lines 82-96) - -### Image Processing - -The `scripts/image-optimizer.js` script: -- **Input**: `src/assets/img-raw/` (original high-res images) -- **Output**: `src/assets/img/` (optimized images) -- **Formats generated**: - - WebP: 1200px @ 80% quality, 300px thumbnails @ 70% quality - - JPEG fallbacks: 1200px @ 85% quality, 300px thumbnails @ 75% quality -- **Naming convention**: `filename.webp`, `filename-thumb.webp`, `filename.jpg`, `filename-thumb.jpg` -- **Run automatically**: Part of `npm run start` and `npm run build` - -### Sass Architecture - -The styling is modular with Bootstrap 5 as the foundation: -- **Entry point**: `src/sass/style.scss` imports Bootstrap and all partials -- **Key partials**: - - `_variables.scss` - Custom variables and Bootstrap overrides - - `_layout.scss` - Layout and grid customizations - - `_typography.scss` - Font styles and text utilities - - `_navigation.scss` - Navigation component styles - - `_cards.scss` - Card component styles for portfolio items - - `_buttons.scss` - Button styles - - `_footer.scss` - Footer styles - - `_components.scss` - Misc component styles - - `_animations.scss` - Animation utilities - - `_markdown.scss` - Markdown content styling -- **Build process**: Sass → CSS → PostCSS (autoprefixer + cssnano) - -## Key Technical Details - -### Content Management - -- **Adding pages**: Create `.md` file in `src/pages/` with front matter -- **Front matter fields**: `title`, `description`, `layout`, `eleventyNavigation`, `categories`, `type` -- **Navigation**: Uses `@11ty/eleventy-navigation` plugin, configured via front matter -- **Collections**: Auto-generated from `categories` front matter (development, general, design, portfolio) - -### Metadata and SEO - -Configured in `src/_data/meta.js`: -- Site metadata (name, description, URL) -- Social media links (GitHub, LinkedIn, Bluesky, Mastodon, CodePen, Figma) -- Author information -- Environment-aware URL configuration - -### Service Worker - -- Service worker registration in `src/_includes/base.njk` (lines 131-139) -- PWA support via `manifest.json` -- Multiple icon sizes for various devices - -### GitHub Actions CI/CD - -The site auto-deploys via `.github/workflows/eleventy_build.yml`: -- Triggers on push to `main` branch -- Builds with Node.js 22.x -- Publishes `docs/` to `gh-pages` branch -- Live site deploys automatically to GitHub Pages - -## Common Development Patterns - -### Adding a New Design Case Study - -1. Create markdown file: `src/pages/designs/project-name.md` -2. Add front matter with title, description, categories: `['design', 'portfolio']` -3. Add images to `src/assets/img-raw/` -4. Run `npm run images:optimize` -5. Reference images in markdown: `![alt text](/assets/img/filename.webp)` -6. Update navigation in `src/_includes/base.njk` if needed - -### Modifying Styles - -1. Edit relevant partial in `src/sass/` -2. Changes auto-compile with `npm run start` (watch mode) -3. For production: `npm run build:sass` -4. PostCSS automatically runs after build - -### Working with Collections - -Collections are auto-created based on `categories` in front matter. To add items to a collection: -```yaml ---- -title: My Project -categories: ['portfolio', 'design'] ---- -``` - -Access in templates: `collections.portfolio`, `collections.design`, etc. - -## Expected Warnings (Safe to Ignore) - -- **Sass deprecation warnings**: Bootstrap uses deprecated `@import` syntax (~144 warnings) -- **npm audit vulnerabilities**: Non-critical for static site generation -- **Stylelint errors**: Legacy code issues (~176 errors) - fix with `npm run lint:fix` -- **Node version warnings**: Package requires Node 22, works with 20+ (EBADENGINE warnings) - -## Testing Before Committing - -1. **Build succeeds**: `npm run build` -2. **Dev server runs**: `npm run start` and verify http://localhost:8081 -3. **Key pages load**: Test home, designs, development, about pages -4. **Images display**: Verify portfolio images load correctly -5. **Navigation works**: Test all navigation links -6. **Responsive behavior**: Check mobile/tablet layouts -7. **Run linting**: `npm run lint` (don't introduce new errors) - -## Deployment - -- **Main branch**: Triggers automatic GitHub Actions build -- **Output**: `docs/` directory published to `gh-pages` branch -- **Live URL**: https://www.adamjolicoeur.com -- **Cloudflare**: Creates PR previews automatically diff --git a/docs/about/adam/index.html b/docs/about/adam/index.html index f62ff9fa..aedfd16d 100644 --- a/docs/about/adam/index.html +++ b/docs/about/adam/index.html @@ -124,7 +124,7 @@

Connect

+
+
+ Previous Case Study + Next Case Study +
+
@@ -342,7 +348,7 @@

Connect

+
+
+ Previous Case Study + Next Case Study +
+
@@ -241,7 +247,7 @@

Connect

+
+
+ Previous Case Study +
+
@@ -347,7 +352,7 @@

Connect

+
+
+ Next Case Study +
+
@@ -367,7 +372,7 @@

Connect

+
+

Archparser

+

Architectural drawing analysis platform for OCR-based architectural drawing analysis management.

+
+ DevelopmentClaude Code +
+ View Case Study +

Component Library

Built comprehensive design system for construction management software spanning web and iOS applications. Created design tokens, component documentation, and prototypes that accelerated development cycles by 25%.

@@ -120,13 +128,6 @@

Customer Engagement Platform

View Case Study -
-

Dashboard Analytics

-

Designed real-time data visualization platform for Saylent Technologies. Created intuitive interfaces that helped users identify trends and make data-driven decisions 40% faster.

-
- VisualizationsData-Driven -
-
@@ -162,7 +163,7 @@

Connect

+
+
+ Previous Case Study + Next Case Study +
+
diff --git a/src/pages/designs/component-library.md b/src/pages/designs/component-library.md index c353670e..ff4eacef 100644 --- a/src/pages/designs/component-library.md +++ b/src/pages/designs/component-library.md @@ -1,8 +1,8 @@ --- -title: "Component Library" +title: 'Component Library' date: git Last Modified -abbreviation: "componentlibrary" -description: "Design System for Construction Management Software" +abbreviation: 'componentlibrary' +description: 'Design System for Construction Management Software' eleventyNavigation: key: ComponentLibrary parent: Designs @@ -143,3 +143,9 @@ eleventyNavigation: +
+
+ Previous Case Study + Next Case Study +
+
diff --git a/src/pages/designs/customer-engagement.md b/src/pages/designs/customer-engagement.md index 8546860c..cc7765a0 100644 --- a/src/pages/designs/customer-engagement.md +++ b/src/pages/designs/customer-engagement.md @@ -1,8 +1,8 @@ --- -title: "Customer Engagement App" +title: 'Customer Engagement App' date: git Last Modified -abbreviation: "cea" -description: "The central hub where users monitor engagement metrics and campaign performance. " +abbreviation: 'cea' +description: 'The central hub where users monitor engagement metrics and campaign performance. ' eleventyNavigation: key: Designs parent: Designs @@ -249,3 +249,8 @@ eleventyNavigation: +
+
+ Previous Case Study +
+
diff --git a/src/pages/designs/task-it.md b/src/pages/designs/task-it.md index ac902bbf..d044232f 100644 --- a/src/pages/designs/task-it.md +++ b/src/pages/designs/task-it.md @@ -1,8 +1,8 @@ --- -title: "Task Management System" +title: 'Task Management System' date: git Last Modified -abbreviation: "task" -description: "One enterprise task management system to rule them all." +abbreviation: 'task' +description: 'One enterprise task management system to rule them all.' eleventyNavigation: key: Designs parent: Designs @@ -267,3 +267,8 @@ eleventyNavigation: +
+
+ Next Case Study +
+
diff --git a/src/pages/development/archparser.md b/src/pages/development/archparser.md new file mode 100644 index 00000000..d8c19590 --- /dev/null +++ b/src/pages/development/archparser.md @@ -0,0 +1,351 @@ +--- +title: 'ArchParser: Architectural Drawing Analysis Platform' +date: git Last Modified +abbreviation: 'archparser' +description: 'Full-stack TypeScript application for OCR-based architectural drawing analysis and management.' +eleventyNavigation: + key: Development + parent: Development + order: 1 +--- + +
+

Project Overview

+
+

+ Project Type:Personal/Open Source +

+

+ Role:Product Designer & Full-Stack Developer +

+

+ Timeline:2025 (Ongoing) +

+

+ Development Partner: + Built with Claude Code (Anthropic's AI development assistant) +

+

+ THE CHALLENGE: + Construction project managers at Component Assembly Systems needed a way to efficiently extract metadata from hundreds of architectural drawing PDFs. Manual data entry from title blocks (drawing numbers, revision dates, project names) was time-consuming, error-prone, and didn't scale for projects with 500+ page drawing sets. No existing tools could handle the specialized OCR requirements or support custom title block layouts across different architectural firms. +

+

+ MY ROLE: + I designed and developed ArchParser, a full-stack TypeScript application that automates the extraction of drawing metadata using OCR technology. I created both the technical architecture and user experience, focusing on reliability, performance, and flexibility to handle diverse document formats. +

+

+ THE SOLUTION: + ArchParser is a monorepo application with a NestJS backend for OCR processing and a React/PatternFly frontend for drawing management. The system features customizable OCR templates with a visual template creator, memory-optimized processing for large PDFs, and an optional AI chatbot for semantic search. The platform successfully processes drawing sets of 500+ pages while maintaining accurate metadata extraction. +

+

+ THE IMPACT: +
+

+

+
+
+
+

The Development Process

+

Unlike traditional design-first projects, ArchParser required simultaneous development of both technical architecture and user experience. The process was highly iterative, driven by real-world testing with large PDF sets and continuous feedback from construction project managers.

+
+

Development approach:

+
    +
  1. Problem validation & requirements gathering +
      +
    • Interviewed construction project managers about their drawing management workflows
    • +
    • Identified pain points: manual data entry, inconsistent title block formats, large file sizes
    • +
    • Determined core requirements: OCR accuracy, template flexibility, performance at scale
    • +
    +
  2. +
  3. Technology stack selection +
      +
    • Chose TypeScript monorepo for type safety across frontend and backend
    • +
    • Selected NestJS for backend (familiar enterprise patterns from AWS experience)
    • +
    • Used React with PatternFly UI (leveraging my Red Hat design system expertise) - later changed to RadixUI
    • +
    • Implemented Tesseract.js for client-side OCR processing
    • +
    +
  4. +
  5. Iterative development with Claude Code +
      +
    • Used Claude Code as a development partner for architecture decisions and implementation
    • +
    • Leveraged AI assistance for complex TypeORM migrations and NestJS module structure
    • +
    • Rapid prototyping of OCR extraction algorithms with Claude's code generation
    • +
    • Collaborative debugging of memory optimization and path management issues
    • +
    +
  6. +
  7. Real-world testing & optimization +
      +
    • Tested with actual 500+ page architectural drawing sets from construction projects
    • +
    • Identified and resolved critical memory constraints through optimization iterations
    • +
    • Refined OCR accuracy through template system improvements
    • +
    +
  8. +
+
+
+

Working with Claude Code as a development partner: +

+

+
+
+
+

Technical Architecture

+

ArchParser is built as a TypeScript monorepo with three primary workspaces: backend (NestJS), frontend (React/Vite), and shared type definitions. The architecture emphasizes type safety, memory efficiency, and extensibility.

+

Backend

+

NestJS

+

Core Modules:

+ +

Database (TypeORM + MySQL):

+ +

Frontend

+

React + RadixUI

+

Key Features:

+ +

UI/UX Decisions:

+ +
+
Dashboard
+
+
+ Image of the archparser dashboard +
+
+
+

Template Creator

+

Standalone Tool

+

Built as a standalone HTML/JavaScript tool using PDF.js, the template creator allows users to:

+ +

This tool democratizes OCR template creation—construction managers can create templates without developer assistance.

+
+
+
Initial Load
+
+
+ Image of the template creator's empty canvas +
Empty canvas, ready for PDF
+
+
+
+
+
PDF Loaded
+
+
+ Image of the template creator with a loaded PDF +
Document details loaded and ready
+
+
+
+
+
+
+

Key Iterations & Problem Solving

+

Throughout development, several critical issues emerged that required significant architectural changes. Each iteration improved reliability, performance, or usability based on real-world testing.

+

Iteration 1: Memory Optimization for Large PDFs

+
+
+

Problem: Processing 500+ page PDFs caused memory exhaustion and server crashes. The initial implementation converted entire PDFs to PNG images in memory before processing.

+

Solution: Implemented single-page PDF conversion and dynamic batch processing:

+
    +
  • Convert one PDF page at a time instead of the entire document
  • +
  • Adjust batch sizes based on document size (smaller batches for larger PDFs)
  • +
  • Add memory monitoring and garbage collection tuning
  • +
  • Process OCR regions sequentially to prevent memory spikes
  • +
+

Result: Successfully processes 500+ page documents without crashes. Memory-optimized startup script (start-optimized.sh) provides production-ready performance.

+
+
+

Iteration 2: Path Management System Overhaul

+
+
+

Problem: Processed drawings became disassociated from database records after server restarts. Three root causes identified:

+
    +
  1. Inconsistent path resolution between process.cwd() and __dirname
  2. +
  3. Directory naming mismatch during deletion operations
  4. +
  5. Absolute paths in database made system non-portable across environments
  6. +
+

Solution: Complete path management overhaul with centralized configuration:

+
    +
  • Created storage.config.ts with centralized path constants
  • +
  • Implemented toRelativePath() and toAbsolutePath() utilities
  • +
  • Standardized folder naming: {sanitizedName}_{jobId} format
  • +
  • Updated all services to use centralized path resolution
  • +
  • Wrote migration script to convert 373 existing records from absolute to relative paths
  • +
+

Result: System is now portable across deployment environments. Paths resolve correctly regardless of server startup directory. Database can be migrated to new servers without breaking file associations.

+
+
+

Iteration 3: Dashboard UI Enhancement

+
+
+

Problem: Initial dashboard struggled with high-volume data tables. Users needed better filtering, sorting, and status visualization.

+

Solution: Comprehensive dashboard refactoring:

+
    +
  • Added independent pagination and sorting for Job and Template tables
  • +
  • Implemented date range filtering with "Created" and "Updated" pivots
  • +
  • Added status (Active/Archived) and type (Included/Custom) filters
  • +
  • Created Kanban-style Monitor Dashboard for job status visualization
  • +
  • Added Floating Action Button (FAB) for streamlined task creation
  • +
  • Persisted filter selections in local storage for session continuity
  • +
+

Result: Users can efficiently navigate large datasets. The Kanban view provides at-a-glance status monitoring, while table filters enable rapid data discovery.

+
+
+
+
+

Results & Impact

+

Technical Achievements

+

+

+

+

User Experience Wins

+

+

+

+

Development Process Insights

+

+

+

+
+
+
Set Details
+
+ Image of the drawing set details page +
+
+
+
Drawing List
+
+ Image of the drawing list page +
+
+
+
Drawing Details
+
+ Image of the drawing details page +
+
+
+
+ +
+
+
+

What I Learned

+
+
+

+ This project provided valuable insights about full-stack development, AI-assisted coding, and building for real-world constraints: +

    +
  1. Memory constraints require proactive optimization. The initial implementation worked fine for small PDFs but crashed on real-world 500+ page documents. Building with realistic test data from the start would have caught this earlier. Memory profiling and optimization became critical skills.
  2. +
  3. AI development assistance is transformative when used strategically. Claude Code was most valuable for architectural planning, debugging complex issues, and generating boilerplate. I learned to use AI as a collaborative partner—explaining problems thoroughly, reviewing generated code critically, and iterating on solutions together. The key is maintaining ownership of architectural decisions while leveraging AI for implementation acceleration.
  4. +
  5. Path management is harder than it looks. The path resolution issues taught me that assumptions about working directories break in production. Centralizing path logic and storing relative paths in the database made the system portable and maintainable. This lesson applies broadly: centralize cross-cutting concerns early.
  6. +
  7. User empowerment beats technical complexity. The visual template creator was more impactful than any backend optimization. Enabling non-technical users to configure OCR templates themselves removed a bottleneck and increased adoption. Simple, visual tools often provide more value than sophisticated algorithms.
  8. +
  9. Design system expertise translates across contexts. My experience with PatternFly at Red Hat paid dividends—I could build an enterprise-grade UI quickly while ensuring accessibility and consistency. Design systems aren't just for design teams; they accelerate solo development too.
  10. +
  11. Monorepo structure enforces discipline. Shared TypeScript interfaces between frontend and backend prevented the API contract drift that plagues many full-stack projects. The initial setup overhead was worth it for the compile-time safety and refactoring confidence.
  12. +
+

+

+ ArchParser demonstrated that full-stack development—especially with AI assistance—enables rapid prototyping and iteration. By combining my design background with technical implementation, I could build and refine features based on direct user feedback without handoff delays. The project serves as both a practical tool for construction project management and a portfolio demonstration of end-to-end product development capabilities. +

+
+
+
+
+
+
+

Project Links

+
+ +
+
+
+
+ Previous Case Study + Next Case Study +
+
diff --git a/src/pages/portfolio.md b/src/pages/portfolio.md index 106939d1..ffbc6501 100644 --- a/src/pages/portfolio.md +++ b/src/pages/portfolio.md @@ -1,8 +1,8 @@ --- -title: "My Work" +title: 'My Work' date: git Last Modified -abbreviation: "portfolio" -description: "Selected projects from AWS, Red Hat, and high-growth B2B companies" +abbreviation: 'portfolio' +description: 'Selected projects from AWS, Red Hat, and high-growth B2B companies' eleventyNavigation: key: Portfolio order: 1 @@ -35,6 +35,14 @@ eleventyNavigation:
+
+

Archparser

+

Architectural drawing analysis platform for OCR-based architectural drawing analysis management.

+
+ DevelopmentClaude Code +
+ View Case Study +

Component Library

Built comprehensive design system for construction management software spanning web and iOS applications. Created design tokens, component documentation, and prototypes that accelerated development cycles by 25%.

@@ -51,13 +59,6 @@ eleventyNavigation:
View Case Study -
-

Dashboard Analytics

-

Designed real-time data visualization platform for Saylent Technologies. Created intuitive interfaces that helped users identify trends and make data-driven decisions 40% faster.

-
- VisualizationsData-Driven -
-
diff --git a/src/sass/_layout.scss b/src/sass/_layout.scss index e6b92ba1..245a6d3a 100644 --- a/src/sass/_layout.scss +++ b/src/sass/_layout.scss @@ -12,6 +12,12 @@ section { .justify-content-center { justify-content: center !important; } +.justify-content-between { + justify-content: space-between !important; +} +.justify-content-end { + justify-content: flex-end !important; +} .row { display: flex; flex-wrap: wrap; diff --git a/src/sass/style.scss b/src/sass/style.scss index 317a13e4..5b0ff6ae 100644 --- a/src/sass/style.scss +++ b/src/sass/style.scss @@ -3,7 +3,7 @@ ** https://www.adamjolicoeur.com **/ -@import "variables"; +@import 'variables'; * { margin: 0; @@ -69,7 +69,6 @@ body { margin: 0 auto; } - .rounded { border-radius: var(--radius-xl, 20px) !important; } @@ -82,7 +81,9 @@ body { .fade-in { opacity: 0; visibility: hidden; - transition: opacity 0.5s ease-in, visibility 0s linear 0.5s; /* 0.5s for opacity transition, 0s visibility transition after 0.5s delay */ + transition: + opacity 0.5s ease-in, + visibility 0s linear 0.5s; /* 0.5s for opacity transition, 0s visibility transition after 0.5s delay */ } .fade-in.show { opacity: 1; @@ -99,7 +100,9 @@ body { .hide { opacity: 0; visibility: hidden; - transition: opacity 0.5s ease-in, visibility 0s linear 0.5s; /* 0.5s for opacity transition, 0s visibility transition after 0.5s delay */ + transition: + opacity 0.5s ease-in, + visibility 0s linear 0.5s; /* 0.5s for opacity transition, 0s visibility transition after 0.5s delay */ } .hide-on-screen { display: none !important; @@ -132,20 +135,28 @@ body { } } +figcaption { + font-size: var(--font-size-sm, 0.875rem); + line-height: 1.4; + color: var(--text-secondary); + text-align: center; + font-style: italic; +} + /* stylint-disable */ -@import "animations"; -@import "fonts"; -@import "typography"; -@import "spacing"; -@import "layout"; -@import "lists"; -@import "highlight"; -@import "navigation"; -@import "footer"; -@import "badge"; -@import "buttons"; -@import "cards"; -@import "markdown"; -@import "gallery"; +@import 'animations'; +@import 'fonts'; +@import 'typography'; +@import 'spacing'; +@import 'layout'; +@import 'lists'; +@import 'highlight'; +@import 'navigation'; +@import 'footer'; +@import 'badge'; +@import 'buttons'; +@import 'cards'; +@import 'markdown'; +@import 'gallery'; /* stylint-enable */