Ilia Mashkov 4126275c4d
Workflow / build (pull_request) Successful in 37s
Workflow / publish (pull_request) Has been skipped
refactor(SliderArea): extract grid overlay into bg-grid utilities
The decorative dotted-grid background on the paper surface was a
6-line $derived gridStyle string applied via inline style="" plus four
extra utility classes for color and opacity. Replace with two named
utilities and let CSS handle the responsive switch.

app.css:
- New --color-grid-line CSS var (light + dark) so the grid colour and
  intensity auto-switch without consumers needing a dark: variant or an
  opacity layer.
- @utility bg-grid (20px cells) and @utility bg-grid-sm (10px cells).
  Both reference --color-grid-line, so the same markup paints correctly
  in light and dark mode.

SliderArea.svelte:
- Drop the gridStyle $derived block and the inline style= attribute.
- Overlay becomes a single line:
  <div class="absolute inset-0 pointer-events-none bg-grid-sm md:bg-grid"
       aria-hidden="true" />
  Mobile picks the tight 10px grid; the md: breakpoint flips to 20px,
  matching the prior JS-driven behaviour with no extra runtime cost.
2026-05-25 11:09:26 +03:00
2026-05-05 16:49:56 +03:00
2026-02-09 15:27:14 +03:00
2026-02-09 15:22:57 +03:00
2026-04-23 14:52:11 +03:00
2026-01-06 12:21:33 +03:00

GlyphDiff

A modern font exploration and comparison tool for browsing fonts from Google Fonts and Fontshare with real-time visual comparisons, advanced filtering, and customizable typography.

Features

  • Multi-Provider Catalog: Browse fonts from Google Fonts and Fontshare in one place
  • Side-by-Side Comparison: Compare up to 4 fonts simultaneously with customizable text, size, and typography settings
  • Advanced Filtering: Filter by category, provider, character subsets, and weight
  • Virtual Scrolling: Fast, smooth browsing of thousands of fonts
  • Responsive UI: Beautiful interface built with Tailwind CSS
  • Type-Safe: Full TypeScript coverage with strict mode enabled

Tech Stack

  • Framework: Svelte 5 with reactive primitives (runes)
  • Styling: Tailwind CSS v4
  • Components: Bits UI primitives
  • State Management: TanStack Query for async data
  • Architecture: Feature-Sliced Design (FSD)
  • Quality: oxlint (linting), dprint (formatting), lefthook (git hooks)

Project Structure

src/
├── app/          # App shell, layout, providers
├── widgets/      # Composed UI blocks (ComparisonSlider, SampleList, FontSearch)
├── features/     # Business features (filters, search, display)
├── entities/     # Domain models and stores (Font, Breadcrumb)
├── shared/       # Reusable utilities, UI components, helpers
└── routes/       # Page-level components

Quick Start

# Install dependencies
yarn install

# Start development server
yarn dev

# Build for production
yarn build

# Preview production build
yarn preview

Available Scripts

Command Description
yarn dev Start development server
yarn build Build for production
yarn preview Preview production build
yarn check Run Svelte type checking
yarn lint Run oxlint
yarn format Format code with dprint
yarn test:unit Run unit tests
yarn test:unit:ui Run Vitest UI
yarn storybook Start Storybook dev server

Code Style

  • Path Aliases: Use $app/, $shared/, $features/, $entities/, $widgets/, $routes/
  • Components: PascalCase (e.g., ComparisonSlider.svelte)
  • Formatting: 100 char line width, 4-space indent, single quotes
  • Type Safety: Strict TypeScript with JSDoc comments for public APIs

Architecture Notes

This project follows the Feature-Sliced Design (FSD) methodology for clean separation of concerns. The application uses Svelte 5's new runes system ($state, $derived, $effect) for reactive state management.

License

MIT

S
Description
A modern font exploration and comparison tool for browsing fonts from different sources with real-time visual comparisons
https://glyphdiff.com
Readme 6.4 MiB
Languages
TypeScript 73.2%
Svelte 24.9%
CSS 1.7%