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.
bun install
bun run dev
bun run build
bun run preview
distro-picker/
βββ docs/
β βββ SEO.png
β βββ SEO_mobile.png
βββ src/
β βββ app.css
β βββ app.html
β βββ lib/
β β βββ components/
β β β βββ DistroGrid.svelte
β β β βββ DistroGridSkeleton.svelte
β β β βββ DistroModal.svelte
β β β βββ ErrorDisplay.svelte
β β β βββ GalleryModal.svelte
β β β βββ InfoModal.svelte
β β β βββ LanguageToggle.svelte
β β β βββ LoadingSpinner.svelte
β β β βββ OptimizedImage.svelte
β β β βββ QuickTestModal.svelte
β β β βββ TagFilter.svelte
β β β βββ TagSkeleton.svelte
β β β βββ ThemeToggle.svelte
β β βββ i18n/
β β β βββ locale.ts
β β β βββ translations.ts
β β βββ locales/
β β β βββ types.ts # Type definitions
β β β βββ en.json # English (bundled, used for SSR)
β β β βββ en_old.json
β β βββ stores/
β β β βββ index.ts
β β β βββ theme.ts
β β βββ types/
β β β βββ quiz.ts
β β βββ utils/
β β β βββ body.ts
β β β βββ data.ts
β β β βββ imageObserver.ts
β β β βββ index.ts
β β β βββ storage.ts
β β β βββ validation.ts
β β βββ distros.json
β β βββ supabase.ts
β β βββ tags.json
β β βββ types.ts
β βββ routes/
β βββ +layout.server.js
β βββ +layout.svelte
β βββ +page.server.ts
β βββ +page.svelte
βββ static/
β βββ locales/ # Translation files loaded via fetch
β βββ screenshots/ # Distro screenshots
β βββ _headers
β βββ .nojekyll
β βββ robots.txt
β βββ sitemap.xml
β βββ *.webp/*.svg # Distro logo images
βββ package.json
βββ svelte.config.js
βββ tsconfig.json
βββ README.md
| Column | Type | Description |
|---|---|---|
| id | text | Primary key (same as 'id' in distros.json) |
| likes | int2 | Number of likes |
Row Level Security (RLS) is enabled with public SELECT and UPDATE policies for the anon role.
The app supports language detection based on browser language and timezone:
| Language | Code | Native Name | Auto-Detect Method |
|---|---|---|---|
| English | en |
English | Browser default (bundled) |
| Belarusian | be |
ΠΠ΅Π»Π°ΡΡΡΠΊΠ°Ρ | Browser (be, be-BY, bel, be-tarask) + Timezone (Europe/Minsk) |
Language is automatically detected based on:
navigator.language with fallbackUsers can manually switch languages using the language toggle. The selected language is stored in localStorage.
To optimize performance, translations are lazy-loaded:
/locales/{lang}.json)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! π§