distro-picker Svelte Themes

Distro Picker

An app that allows you to pick a Linux distribution based on your needs by providing a comprehensive filtering mechanism. Written with the assistance of the Opencode AI agent. Keywords: distro chooser, distrochooser, choose a distro.

Linux Distribution Picker

A modern Linux distribution picker built with SvelteKit to help users find the perfect Linux distribution for their needs based on gaming, development, user-friendliness, and other criteria.

Install dependencies

bun install

Start development server

bun run dev

Create production build

bun run build

Preview production build

bun run preview

๐Ÿ“ Project Structure

distro-picker/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ app.css
โ”‚   โ”œโ”€โ”€ app.html
โ”‚   โ”œโ”€โ”€ lib/
โ”‚   โ”‚   โ”œโ”€โ”€ components/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ DistroGrid.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ DistroGridSkeleton.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ DistroPanel.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ErrorDisplay.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ GalleryModal.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ InfoModal.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ LanguageToggle.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ LoadingSpinner.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ OptimizedImage.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ QuickTestModal.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ TagFilter.svelte
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ TagSkeleton.svelte
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ThemeToggle.svelte
โ”‚   โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”œโ”€โ”€ i18n/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ locale.ts
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ translations.ts
โ”‚   โ”‚   โ”œโ”€โ”€ locales/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ types.ts      # Type definitions
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ en.json       # English (used for SSR)
โ”‚   โ”‚   โ”œโ”€โ”€ stores/
โ”‚   โ”‚   โ”œโ”€โ”€ supabase.ts
โ”‚   โ”‚   โ”œโ”€โ”€ types/
โ”‚   โ”‚   โ”œโ”€โ”€ utils/
โ”‚   โ”‚   โ”œโ”€โ”€ distros.json
โ”‚   โ”‚   โ””โ”€โ”€ tags.json
โ”‚   โ””โ”€โ”€ routes/
โ”‚       โ”œโ”€โ”€ +layout.svelte
โ”‚       โ””โ”€โ”€ +page.svelte
โ”œโ”€โ”€ static/
โ”‚   โ”œโ”€โ”€ locales/              # Translation files (edit JSON to add/edit languages, loaded via fetch)
โ”‚   โ””โ”€โ”€ screenshots/
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ svelte.config.js
โ”œโ”€โ”€ tsconfig.json
โ””โ”€โ”€ README.md

๐Ÿ—„๏ธ Database Structure (Supabase)

'distros' table

Column Type Description
id text Primary key (same as 'id' in distros.json)
likes int2 Number of likes

๐ŸŒ Supported Languages

The app supports 17 languages with automatic detection based on browser language and timezone:

Language Code Native Name Auto-Detect Method
English en English Browser default
Belarusian be ะ‘ะตะปะฐั€ัƒัะบะฐั Browser (be, be-BY) + Timezone (Europe/Minsk)
Ukrainian uk ะฃะบั€ะฐั—ะฝััŒะบะฐ Browser (uk, uk-UA) + Timezone (Europe/Kyiv)
Polish pl Polski Browser (pl, pl-PL) + Timezone (Europe/Warsaw)
Russian ru ะ ัƒััะบะธะน Browser (ru, ru-RU) + Multiple Russian timezones
Spanish es Espaรฑol Browser (es, es-ES, etc.)
Portuguese pt Portuguรชs Browser + Timezone (America/Sao_Paulo, Europe/Lisbon)
German de Deutsch Browser + Timezone (Europe/Berlin, Europe/Vienna)
French fr Franรงais Browser + Timezone (Europe/Paris, America/Montreal)
Italian it Italiano Browser + Timezone (Europe/Rome)
Turkish tr Tรผrkรงe Browser + Timezone (Europe/Istanbul)
Vietnamese vi Tiแบฟng Viแป‡t Browser + Timezone (Asia/Ho_Chi_Minh)
Indonesian id Bahasa Indonesia Browser + Timezone (Asia/Jakarta)
Thai th เน„เธ—เธข Browser + Timezone (Asia/Bangkok)
Chinese zh ็ฎ€ไฝ“ไธญๆ–‡ Browser + Timezone (Asia/Shanghai, Asia/Tokyo)
Japanese ja ๆ—ฅๆœฌ่ชž Browser + Timezone (Asia/Tokyo)
Korean ko ํ•œ๊ตญ์–ด Browser + Timezone (Asia/Seoul)

Language Detection

Language is automatically detected based on:

  1. Browser language - Uses navigator.language with fallback
  2. System timezone - Some languages are also detected by timezone (e.g., Minsk โ†’ Belarusian)

Users can manually switch languages using the language toggle. The selected language is stored in localStorage.

Lazy Loading

To optimize performance, translations are lazy-loaded:

  • English - Bundled with the app (fallback language)
  • Other languages - Loaded on-demand as JSON files (/locales/{lang}.json)
  • Each language file is ~10-16 KB
  • Total non-English translations: ~200 KB (loaded only when needed)

SEO

The app has a great SEO score (a11y is 96 due to tag color contrasts in the light theme).


Find Your Perfect Linux Distribution Today! ๐Ÿง

Top categories

Loading Svelte Themes