refactor: Rename tags to categories (#572)

* Update schema and data

* Rename usage

* Tweak result count and anchors
This commit is contained in:
Lachlan Collins
2024-01-05 07:58:39 +11:00
committed by GitHub
parent 236c7369a6
commit 0359af5fdf
18 changed files with 653 additions and 802 deletions

View File

@@ -0,0 +1,64 @@
<script lang="ts">
import { page } from '$app/stores';
import Icon from '$lib/components/Icon/index.svelte';
export let categories: string[];
export let selectedCategories: string[];
</script>
<div class="flex flex-wrap items-center gap-2" data-sveltekit-noscroll>
{#each selectedCategories as category}
{@const newCategories = selectedCategories.filter((c) => c !== category)}
{@const title = category.replaceAll('-', ' ')}
{#if newCategories.length === 0}
<a class="category active" href={$page.url.pathname}>{title}</a>
{:else}
<a
class="category active"
href={`${$page.url.pathname}?${newCategories.map((t) => `category=${t}`).join('&')}`}
>
{title}
</a>
{/if}
{/each}
{#each categories as category}
{#if !selectedCategories.includes(category)}
{@const newCategories = [...selectedCategories, category]}
{@const title = category.replaceAll('-', ' ')}
<a
class="category"
href={`${$page.url.pathname}?${newCategories.map((t) => `category=${t}`).join('&')}`}
>
{title}
</a>
{/if}
{/each}
{#if selectedCategories.length !== 0}
<a href={$page.url.pathname}><Icon name="close" /></a>
{/if}
</div>
<style>
a {
text-decoration: none;
}
.category {
padding: 4px 12px;
border: 1px solid var(--link-color);
border-radius: 9999px;
font-family: Overpass;
font-style: normal;
font-weight: normal;
font-size: 14px;
line-height: 150%;
text-align: center;
}
.active {
color: #ff3e01;
background: #ffdbcf;
}
</style>

View File

@@ -3,13 +3,13 @@
import Seo from '$lib/components/Seo.svelte';
import Select from '$lib/components/Select.svelte';
import { packageManager } from '$stores/packageManager';
import TagFilters from '$lib/TagFilters.svelte';
import CategoryFilters from '$lib/CategoryFilters.svelte';
import { filterArray, sortArray } from '$utils/arrayUtils';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export let data: any[];
export let tags: string[];
export let selectedTags: string[];
export let categories: string[];
export let selectedCategories: string[];
export let sortableFields: { value: string; label: string; asc: boolean }[];
export let displayTitle = '';
export let displayTitleSingular = '';
@@ -26,7 +26,7 @@
<h1>{displayTitle}</h1>
<TagFilters {tags} {selectedTags} />
<CategoryFilters {categories} {selectedCategories} />
<br />
<section class="controls relative grid items-center justify-stretch gap-4">
<input
@@ -61,7 +61,7 @@
>
</div>
<span class="searchbar-count"
>{data.length} result{#if data.length !== 1}s{/if}</span
>{sortedData.length} result{#if sortedData.length !== 1}s{/if}</span
>
</section>
<hr />
@@ -72,7 +72,6 @@
description={entry.description}
repository={entry.repository}
stars={entry.stars}
tags={entry.tags}
date={entry.date}
npm={entry.npm}
version={entry.version}

View File

@@ -1,61 +0,0 @@
<script lang="ts">
import { page } from '$app/stores';
import Icon from '$lib/components/Icon/index.svelte';
export let tags: string[];
export let selectedTags: string[];
</script>
<div class="flex flex-wrap items-center gap-2" data-sveltekit-noscroll>
{#each selectedTags as tag}
{@const newTags = selectedTags.filter((t) => t !== tag)}
{@const title = tag.replaceAll('-', ' ')}
{#if newTags.length === 0}
<a class="tag active" href={$page.url.pathname}>{title}</a>
{:else}
<a
class="tag active"
href={`${$page.url.pathname}?${newTags.map((t) => `tag=${t}`).join('&')}`}
>
{title}
</a>
{/if}
{/each}
{#each tags as tag}
{#if !selectedTags.includes(tag)}
{@const newTags = [...selectedTags, tag]}
{@const title = tag.replaceAll('-', ' ')}
<a class="tag" href={`${$page.url.pathname}?${newTags.map((t) => `tag=${t}`).join('&')}`}>
{title}
</a>
{/if}
{/each}
{#if selectedTags.length !== 0}
<a href={$page.url.pathname}><Icon name="close" /></a>
{/if}
</div>
<style>
a {
text-decoration: none;
}
.tag {
padding: 4px 12px;
border: 1px solid var(--link-color);
border-radius: 9999px;
font-family: Overpass;
font-style: normal;
font-weight: normal;
font-size: 14px;
line-height: 150%;
text-align: center;
}
.active {
color: #ff3e01;
background: #ffdbcf;
}
</style>

View File

@@ -6,7 +6,6 @@
export let title: string;
export let description: string;
export let tags: string[];
export let stars: string;
export let npm = '';
export let repository = undefined;
@@ -27,11 +26,11 @@
};
</script>
<div class="card flex flex-col rounded-md p-3 text-base lg:text-lg" id="component-{title}">
<div class="card flex flex-col rounded-md p-3 text-base lg:text-lg" id={title}>
<div class="flex justify-between align-top">
<div>
<h3 class="text-xl">
<a href="#component-{title}"># {title}</a>
<a href="#{title}"># {title}</a>
</h3>
</div>
<div>

View File

@@ -308,7 +308,7 @@ const allItems: Array<SearchItem> = [
tags: item.tags,
type: 'Package',
search: searchKeywords(item.title, item.description, ...(item.tags ?? []), item.npm ?? ''),
url: '/packages#component-' + item.title
url: '/packages#' + item.title
})),
...(templates as Array<JsonItem>).map<SearchItem>((item) => ({
title: item.title,
@@ -316,7 +316,7 @@ const allItems: Array<SearchItem> = [
tags: item.tags,
type: 'Template',
search: searchKeywords(item.title, item.description, ...(item.tags ?? []), item.npm ?? ''),
url: '/templates#component-' + item.title
url: '/templates#' + item.title
})),
...Object.entries(
import.meta.glob('../routes/recipes/**/*.svx', { eager: true }) as Record<

View File

@@ -1,7 +1,7 @@
import { z } from 'zod';
import { packageNameRegex } from 'package-name-regex';
const PACKAGES_TAGS = /** @type {const} */ ([
const PACKAGES_CATEGORIES = /** @type {const} */ ([
'auth',
'build-plugins',
'data-fetching',
@@ -31,11 +31,11 @@ export const packagesSchema = z.array(
url: z.string().url().optional(),
repository: z.string().url(),
description: z.string().max(250),
tags: z.array(z.enum(PACKAGES_TAGS)).min(1).max(6)
categories: z.array(z.enum(PACKAGES_CATEGORIES)).min(1).max(6)
})
);
const TEMPLATES_TAGS = /** @type {const} */ ([
const TEMPLATES_CATEGORIES = /** @type {const} */ ([
'blog',
'code-splitting',
'component-sets',
@@ -66,6 +66,6 @@ export const templatesSchema = z.array(
url: z.string().url().optional(),
repository: z.string().url(),
description: z.string().max(250),
tags: z.array(z.enum(TEMPLATES_TAGS)).min(1).max(6)
categories: z.array(z.enum(TEMPLATES_CATEGORIES)).min(1).max(6)
})
);

View File

@@ -1,145 +0,0 @@
import { describe, it, expect } from 'vitest';
import { extractUnique } from './extractUnique';
describe('extractUnique', () => {
it("creates an object using the item's `category` field", () => {
const extracted = extractUnique(oneItem, 'category');
expect(extracted).toEqual([{ label: 'Testing', value: 'Testing' }]);
});
it('reduces down to unique values, including the empty string', () => {
const extracted = extractUnique(manyItems, 'category');
expect(extracted.length).toBeLessThan(manyItems.length);
expect(extracted.map((i) => i.value)).toEqual([
'',
'Data Visualisation',
'Forms & User Input',
'SvelteKit Adapters',
'Testing',
'User Interaction'
]);
});
});
const oneItem = [
{
title: 'svelte-carbonbadge',
url: 'https://gitlab.com/davidhund/svelte-carbonbadge',
description: 'Svelte badge component for https://www.websitecarbon.com/',
npm: 'svelte-carbonbadge',
addedOn: '2022-02-08',
category: 'Testing',
stars: 0
}
];
const manyItems = [
{
title: 'svelte-carbonbadge',
url: 'https://gitlab.com/davidhund/svelte-carbonbadge',
description: 'Svelte badge component for https://www.websitecarbon.com/',
npm: 'svelte-carbonbadge',
addedOn: '2022-02-08',
category: 'Testing',
stars: 0
},
{
title: 'svelte-form-validation',
url: 'https://github.com/DhyeyMoliya/svelte-form-validation',
npm: 'svelte-form-validation',
description: 'Svelte Form Validation Library',
tags: ['forms', 'form validation', 'components and libraries'],
addedOn: '2021-11-14T17:10:00.000Z',
category: 'Forms & User Input',
stars: 0
},
{
title: 'Date Picker Svelte',
url: 'https://github.com/probablykasper/date-picker-svelte',
description: 'Date and time picker for Svelte',
npm: 'date-picker-svelte',
addedOn: '2021-10-23',
category: 'Forms & User Input',
tags: [
'time and date',
'forms',
'components and libraries',
'form validation',
'inputs and widgets',
'component sets'
]
},
{
title: 'svelte-virtual-table',
description: 'A virtual, sortable table for Svelte ',
url: 'https://github.com/BernhardWebstudio/svelte-virtual-table',
npm: 'svelte-virtual-table',
tags: ['components and libraries'],
addedOn: '2021-10-04',
category: 'Data Visualisation',
stars: 1
},
{
title: 'svelte-number-spinner',
description:
'A number input field that can be controlled by mouse/touch drag, arrow keys or usual editing.',
url: 'https://github.com/bohnacker/svelte-number-spinner',
npm: 'svelte-number-spinner',
tags: ['components and libraries', 'inputs and widgets'],
addedOn: '2021-08-29T00:00:00Z',
category: 'Forms & User Input',
stars: 4
},
{
title: 'svelte-remixicon',
description:
'An icon library for svelte based on Remix Icon. Consists of more than 2000 icons.',
url: 'https://github.com/ABarnob/svelte-remixicon',
npm: 'https://www.npmjs.com/package/svelte-remixicon',
tags: ['components and libraries'],
addedOn: '2021-08-25T00:00:00Z',
category: '',
stars: 14
},
{
title: 'svelte-fast-marquee',
description: 'A Marquee component for Svelte inspired by react-fast-marquee.',
url: 'https://github.com/abosch19/svelte-fast-marquee',
npm: 'svelte-fast-marquee',
tags: ['components and libraries'],
addedOn: '2021-08-25T00:00:00Z',
category: '',
stars: 2
},
{
title: 'sswr',
category: 'User Interaction',
description: 'Svelte stale while revalidate (SWR) data fetching strategy',
url: 'https://github.com/ConsoleTVs/sswr',
npm: 'https://www.npmjs.com/package/sswr',
tags: ['components and libraries', 'fonts and icons'],
addedOn: '2021-07-29T00:00:00Z',
stars: 59
},
{
title: 'svelte-adapter-firebase',
description:
'SvelteKit adapter for Firebase Hosting rewrites to either Cloud Functions or Cloud Run for a Svelte SSR experience',
url: 'https://github.com/jthegedus/svelte-adapter-firebase',
npm: 'https://www.npmjs.com/package/svelte-adapter-firebase',
stars: 54,
tags: ['integrations'],
addedOn: '2021-03-31T00:00:00Z',
category: 'SvelteKit Adapters'
},
{
title: 'architect/sveltekit-adapter',
description:
'Adapter for Svelte apps that creates a Begin or Architect app, using a function for dynamic server rendering.',
url: 'https://github.com/architect/sveltekit-adapter',
npm: 'https://www.npmjs.com/package/@architect/sveltekit-adapter',
stars: 3,
tags: ['integrations'],
addedOn: '2021-08-09T00:00:00Z'
}
];

View File

@@ -1,18 +0,0 @@
export const extractUnique = (
source: Array<Record<string, unknown>>,
field: string
): Array<Record<'label' | 'value', unknown>> => {
const extracted = source.map((item) => item[field] ?? '');
const uniqued = Array.from(new Set(extracted.flat()));
return uniqued
.map((value) => ({ label: value, value }))
.sort((a, b) => {
if (typeof a.value === 'string' && typeof b.value === 'string') {
return a.value.toLowerCase().localeCompare(b.value.toLowerCase());
}
if (typeof a.value === 'number' && typeof b.value === 'number') {
return a.value - b.value;
}
return 0;
});
};

View File

@@ -0,0 +1,11 @@
export const getCategories = (input) => {
const output: string[] = [];
input.forEach((item) => {
item.categories.forEach((category) => {
if (!output.includes(category)) {
output.push(category);
}
});
});
return output.toSorted();
};

View File

@@ -1,11 +0,0 @@
export const getTags = (input) => {
const output = [];
input.forEach((item) => {
item.tags.forEach((tag) => {
if (!output.includes(tag)) {
output.push(tag);
}
});
});
return output.toSorted();
};

View File

@@ -6,7 +6,7 @@ import type { z } from 'zod';
import type { packagesSchema, templatesSchema } from '$lib/schemas';
export const injectData = (input: z.infer<typeof packagesSchema | typeof templatesSchema>) => {
const output = [];
const output: z.infer<typeof packagesSchema | typeof templatesSchema> = [];
for (const item of input) {
// Github
const githubIndex = Object.keys(github).find((key) =>

View File

@@ -4,7 +4,7 @@
import templates from '../../templates/templates.json';
import { onMount, tick } from 'svelte';
import { copyToClipboard } from '$lib/utils/clipboard';
import { extractUnique } from '$lib/utils/extractUnique';
import { getCategories } from '$utils/getCategories';
import Seo from '$lib/components/Seo.svelte';
const repoURL = 'https://github.com/svelte-society/sveltesociety.dev';
@@ -15,10 +15,10 @@
const data = {
package: {
tags: extractUnique(packages, 'tags')
categories: getCategories(packages)
},
template: {
tags: extractUnique(templates, 'tags')
categories: getCategories(templates)
}
};
@@ -33,7 +33,7 @@
let url = 'https://svelte-lorem-ipsum.dev';
let description = 'A dummy text generator that does not exist';
let npm = 'svelte-lorem-ipsum';
let tags;
let categories;
let repository = 'https://github.com/sveltejs/svelte-lorem-ipsum';
$: pathName = `${type.value}s`;
@@ -43,19 +43,19 @@
repository: repository ? repository : undefined,
description,
npm: npm ? npm : undefined,
tags: tags?.map((tag) => tag.value)
categories: categories?.map((c) => c.value)
};
$: currentTags = data[type.value].tags;
$: currentCategories = data[type.value].categories;
onMount(() => {
const typeQuery = new URLSearchParams(location.search).get('type');
type = types.find((t) => t.value == typeQuery) || types[0];
});
async function clearTags() {
async function clearCategories() {
await tick();
tags = null;
categories = null;
}
</script>
@@ -80,7 +80,7 @@
isClearable={false}
showIndicator
bind:value={type}
on:select={clearTags}
on:select={clearCategories}
/>
<span class="input-helper">The type of snippet to generate</span>
</div>
@@ -123,10 +123,16 @@
</div>
</div>
<div class="input-wrapper">
<label for="tags" class="required">Tags:</label>
<label for="categories" class="required">Categories:</label>
<div>
<SvelteSelect id="tags" items={currentTags} showIndicator isMulti bind:value={tags} />
<span class="input-helper">A list of tags</span>
<SvelteSelect
id="categories"
items={currentCategories}
showIndicator
isMulti
bind:value={categories}
/>
<span class="input-helper">A list of categories</span>
</div>
</div>
</div>

View File

@@ -1,5 +1,5 @@
import { packagesSchema } from '$lib/schemas.js';
import { getTags } from '$utils/getTags';
import { getCategories } from '$utils/getCategories';
import { injectData } from '$utils/injectData';
import packages from './packages.json';
@@ -8,15 +8,15 @@ export const prerender = false;
export const load = async ({ url }) => {
const data = injectData(packagesSchema.parse(packages));
const selectedTags = url.searchParams.getAll('tag');
const selectedCategories = url.searchParams.getAll('category');
if (!selectedTags) {
return { packages: data, tags: getTags(data), selectedTags: [] };
if (!selectedCategories) {
return { packages: data, categories: getCategories(data), selectedCategories: [] };
}
const filteredData = data.filter((entry) => {
return selectedTags.every((val) => entry.tags.includes(val));
return selectedCategories.every((val) => entry.categories.includes(val));
});
return { packages: filteredData, tags: getTags(filteredData), selectedTags };
return { packages: filteredData, categories: getCategories(filteredData), selectedCategories };
};

View File

@@ -6,8 +6,8 @@
<SearchableJson
data={data.packages}
tags={data.tags}
selectedTags={data.selectedTags}
categories={data.categories}
selectedCategories={data.selectedCategories}
sortableFields={[
{ value: 'stars', label: 'Stars', asc: false },
{ value: 'title', label: 'Name', asc: true },

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
import { templatesSchema } from '$lib/schemas.js';
import { getTags } from '$utils/getTags';
import { getCategories } from '$utils/getCategories';
import { injectData } from '$utils/injectData';
import templates from './templates.json';
@@ -8,15 +8,15 @@ export const prerender = false;
export const load = async ({ url }) => {
const data = injectData(templatesSchema.parse(templates));
const selectedTags = url.searchParams.getAll('tag');
const selectedCategories = url.searchParams.getAll('category');
if (!selectedTags) {
return { packages: data, tags: getTags(data), selectedTags: [] };
if (!selectedCategories) {
return { templates: data, categories: getCategories(data), selectedCategories: [] };
}
const filteredData = data.filter((entry) => {
return selectedTags.every((val) => entry.tags.includes(val));
return selectedCategories.every((val) => entry.categories.includes(val));
});
return { templates: filteredData, tags: getTags(filteredData), selectedTags };
return { templates: filteredData, categories: getCategories(filteredData), selectedCategories };
};

View File

@@ -6,8 +6,8 @@
<SearchableJson
data={data.templates}
tags={data.tags}
selectedTags={data.selectedTags}
categories={data.categories}
selectedCategories={data.selectedCategories}
sortableFields={[
{ value: 'stars', label: 'Stars', asc: false },
{ value: 'title', label: 'Name', asc: true }

View File

@@ -3,443 +3,450 @@
"title": "openai-quickstart-sveltekit",
"repository": "https://github.com/nguyentuansi/openai-quickstart-sveltekit",
"description": "This is an example pet name generator app used in the OpenAI API. It uses the SvelteKit framework with Pico. Check out the tutorial or follow the instructions below to get set up.",
"tags": ["typescript", "sveltekit"]
"categories": ["typescript", "sveltekit"]
},
{
"title": "Skinny Pug Starter Template",
"repository": "https://github.com/lightning-jar/svelte-typescript-tailwind-pug-starter",
"description": "Sveltekit template with Typescript, Tailwind, Pug, Playwright, EsLint, Prettier",
"tags": ["typescript", "sveltekit"]
"categories": ["typescript", "sveltekit"]
},
{
"title": "SvelteKit Authentication Example",
"repository": "https://github.com/nstuyvesant/sveltekit-auth-example",
"description": "Fully documented example of how to setup local and \"Sign in with Google\" authentication (including Google One-Tap) using PostgreSQL, signup, page authorization, user profile management and password reset using SendGrid.",
"tags": ["database", "integrations", "ssr", "typescript", "sveltekit"]
"categories": ["database", "integrations", "ssr", "typescript", "sveltekit"]
},
{
"title": "sveltekit-windicss-flowbite-template",
"repository": "https://github.com/AlessioGr/sveltekit-windicss-flowbite-template",
"description": "Minimal SvelteKit template with a perfect set-up for WindiCSS and Flowbite",
"tags": ["typescript", "integrations", "sveltekit"]
"categories": ["typescript", "integrations", "sveltekit"]
},
{
"title": "CMSvelte",
"repository": "https://github.com/sawyerclick/CMSvelte",
"description": "A Svelte template built with newsroom CMS's in mind",
"tags": ["blog", "svelte"]
"categories": ["blog", "svelte"]
},
{
"description": "Boilerplate with TypeScript, Webpack, Storybook, Travis CI, SCSS, Babel, EsLint, Prettier, Jest",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "agusID/boilerplate-svelte",
"repository": "https://github.com/agusID/boilerplate-svelte"
},
{
"description": "An example repo of a Svelte app that is IE11 compatible",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "benjazehr/svelte-example-museums",
"repository": "https://github.com/benjazehr/svelte-example-museums"
},
{
"description": "A truffle box for Svelte, a seed for building an Ethereum dapp using Truffle",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "antony/svelte-box",
"repository": "https://github.com/antony/svelte-box"
},
{
"description": "Typescript template for Svelte v3",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "Axelen123/svelte-ts-template",
"repository": "https://github.com/Axelen123/svelte-ts-template"
},
{
"description": "A complete implementation with components, store, unit e2e tests and linting.",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "TodoMVC Svelte",
"repository": "https://github.com/vuesomedev/todomvc-svelte"
},
{
"description": "Electron Svelte boilerplate",
"tags": ["electron", "svelte"],
"categories": ["electron", "svelte"],
"title": "Blade67/Sveltron",
"repository": "https://github.com/Blade67/Sveltron"
},
{
"description": "A template to create multi-page application powered by Webpack",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "brandonxiang/svelte-webpack-mpa",
"repository": "https://github.com/brandonxiang/svelte-webpack-mpa"
},
{
"description": "The bare minimum boilerplate to use Svelte in electron",
"tags": ["electron", "svelte"],
"categories": ["electron", "svelte"],
"title": "chuanqisun/svelte-electron-template",
"repository": "https://github.com/chuanqisun/svelte-electron-template"
},
{
"description": "Minimal boilerplate example of Svelte with Typescript using Parcel. This also includes scss support",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "dafn/svelte-typescript-parcel",
"repository": "https://github.com/dafn/svelte-typescript-parcel"
},
{
"description": "Minimal boilerplate example of Svelte with Typescript using Rollup. This also includes scss support",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "dafn/svelte-typescript-rollup",
"repository": "https://github.com/dafn/svelte-typescript-rollup"
},
{
"description": "Skeleton app with Parcel, Jest, ESLint, Prettier, Babel, Wallaby",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "devghost/svelte",
"repository": "https://github.com/devghost/svelte"
},
{
"description": "Svelte template with basic Babel setup for IE11 compatibility",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "svelte-ie11",
"repository": "https://github.com/elsonigo/svelte-ie11"
},
{
"description": "Typescript + Storybook + Webpack boilerplate",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "farhan2106/svelte-typescript",
"repository": "https://github.com/farhan2106/svelte-typescript"
},
{
"description": "Typescript + Storybook + Webpack with SSR boilerplate",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "farhan2106/svelte-typescript-ssr",
"repository": "https://github.com/farhan2106/svelte-typescript-ssr"
},
{
"description": "Starter for Svelte 3/rollup/typescript/vscode",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "geakstr/svelte-3-rollup-typescript-vscode",
"repository": "https://github.com/geakstr/svelte-3-rollup-typescript-vscode"
},
{
"description": "A small starter template to get up and running with Svelte v3",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "bholmesdev/svelte-starter-template",
"repository": "https://github.com/bholmesdev/svelte-starter-template"
},
{
"description": "The open-source storefront for any eCommerce. Built with a PWA and headless approach, using a modern JS stack.",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "svelte-commerce",
"repository": "https://github.com/itswadesh/svelte-commerce"
},
{
"description": "Svelte + Storybook + Tailwind - Starter Template",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "jerriclynsjohn/svelte-storybook-tailwind",
"repository": "https://github.com/jerriclynsjohn/svelte-storybook-tailwind"
},
{
"description": "A template to help you start developing SPAs with Svelte and Firebase",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "jorgegorka/svelte-firebase",
"repository": "https://github.com/jorgegorka/svelte-firebase"
},
{
"description": "SvelteJS and TailwindCSS template",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "justinekizhak/svelte-tailwind-template",
"repository": "https://github.com/justinekizhak/svelte-tailwind-template"
},
{
"description": "Template for building phonegap hybrid applications with Svelte",
"tags": ["mobile", "svelte"],
"categories": ["mobile", "svelte"],
"title": "lpshanley/svelte-phonegap",
"repository": "https://github.com/lpshanley/svelte-phonegap"
},
{
"description": "Minimal setup for building svelte as a web component module",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "LunaTK/svelte-web-component-builder",
"repository": "https://github.com/LunaTK/svelte-web-component-builder"
},
{
"description": "Tailwindcss v1 + Svelte v3 = <3",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "marcograhl/tailwindcss-svelte-starter",
"repository": "https://github.com/marcograhl/tailwindcss-svelte-starter"
},
{
"description": "Svelte template with webpack, babel, eslint and scss. Using browserslist with corejs for legacy browser support",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "svelte-webpack-babel-scss",
"repository": "https://github.com/markoboy/svelte-webpack-babel-scss"
},
{
"description": "Svelte + Tailwind = ❤",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "muhajirdev/svelte-tailwind-template",
"repository": "https://github.com/muhajirdev/svelte-tailwind-template"
},
{
"description": "Boilerplate code with Typescript and Sass bundled by Webpack",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "n0th1ng-else/svelte-typescript-sass",
"repository": "https://github.com/n0th1ng-else/svelte-typescript-sass"
},
{
"description": "Modern build process with Svelte, WebPack, PurgeCSS, code splitting, lazy loading...etc",
"tags": ["testing", "typescript", "code-splitting", "lazy-loading", "preprocessors", "svelte"],
"categories": [
"testing",
"typescript",
"code-splitting",
"lazy-loading",
"preprocessors",
"svelte"
],
"title": "NazimHAli/svelte-template",
"repository": "https://github.com/NazimHAli/svelte-template"
},
{
"description": "Offline-Capable todo list built with Svelte, PouchDB and CouchDB",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "neighbourhoodie/svelte-pouchdb-couchdb",
"repository": "https://github.com/neighbourhoodie/svelte-pouchdb-couchdb"
},
{
"description": "Template with Typescript, Sass, Storybook, Webpack",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "ryburn52/svelte-typescript-sass-template",
"repository": "https://github.com/ryburn52/svelte-typescript-sass-template"
},
{
"description": "Starter to built Electron apps with Svelte and Better SQLite3",
"tags": ["electron", "database", "svelte"],
"categories": ["electron", "database", "svelte"],
"title": "nye/svelte-electron-better-sqlite3-starter",
"repository": "https://github.com/nye/svelte-electron-better-sqlite3-starter"
},
{
"description": "Svelte webpack template with routing and lazy-loading",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "OrdinaryJellyfish/svelte-routing-template",
"repository": "https://github.com/OrdinaryJellyfish/svelte-routing-template"
},
{
"description": "Svelte application boilerplate with Webpack, Sass, BabelJS, Fetch, PostCSS, Jest, and .Env",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "pankod/svelte-boilerplate",
"repository": "https://github.com/pankod/svelte-boilerplate"
},
{
"description": "A base for building Svelte component library",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "patoi/svelte-component-library-template",
"repository": "https://github.com/patoi/svelte-component-library-template"
},
{
"description": "Svelte 3 starter with POI 12 and Prettier. Outputs web apps or web components",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "pbastowski/svelte-poi-starter",
"repository": "https://github.com/pbastowski/svelte-poi-starter"
},
{
"description": "Typescript monorepo for Svelte v3 (preprocess, template, types)",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "pyoner/svelte-typescript",
"repository": "https://github.com/pyoner/svelte-typescript"
},
{
"description": "Typescript monorepo for Svelte v3 (preprocess, template, types)",
"tags": ["integrations", "preprocessors", "svelte"],
"categories": ["integrations", "preprocessors", "svelte"],
"title": "@pyoner/svelte-ts-preprocess",
"repository": "https://github.com/pyoner/svelte-typescript"
},
{
"description": "Svelte App with Firebase Authentication for all purposes",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "ricalamino/svelte-firebase-auth",
"repository": "https://github.com/ricalamino/svelte-firebase-auth"
},
{
"description": "A template for building Electron apps with Svelte (**VERSION 2**)",
"tags": ["electron", "svelte"],
"categories": ["electron", "svelte"],
"title": "Rich-Harris/svelte-template-electron",
"repository": "https://github.com/Rich-Harris/svelte-template-electron"
},
{
"description": "Clone of official Svelte template with added HMR support using Nollup",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "rixo/svelte-template-hot",
"repository": "https://github.com/rixo/svelte-template-hot"
},
{
"description": "Yeoman generator generating a boilerplate Svelte.js app with all of svelte-preprocess' options",
"tags": ["preprocessors", "svelte"],
"categories": ["preprocessors", "svelte"],
"title": "generator-svelte",
"repository": "https://github.com/Samuel-Martineau/generator-svelte"
},
{
"description": "A boilerplate with Material, Babel, PostCSS, and Webpack",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "Shyam-Chen/Svelte-Starter",
"repository": "https://github.com/Shyam-Chen/Svelte-Starter"
},
{
"description": "A Svelte template for browserify",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "soapdog/svelte-template-browserify",
"repository": "https://github.com/soapdog/svelte-template-browserify"
},
{
"description": "Boilerplate template project for SPA router spaceavocado/svelte-router",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "spaceavocado/svelte-router-template",
"repository": "https://github.com/spaceavocado/svelte-router-template"
},
{
"description": "Boilerplate with Webpack, Cypress, Travis CI, Storybook, and SASS",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "stephanepericat/svelte-boilerplate",
"repository": "https://github.com/stephanepericat/svelte-boilerplate"
},
{
"description": "Template with VSCode, Prettier, ESLint, Cypress, and Rollup",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "SteveALee/svelte-code-cypress-project",
"repository": "https://github.com/SteveALee/svelte-code-cypress-project"
},
{
"description": "A base for building shareable Svelte components",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "sveltejs/component-template",
"repository": "https://github.com/sveltejs/component-template"
},
{
"description": "Template for building basic applications with Svelte with rollup",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "sveltejs/template",
"repository": "https://github.com/sveltejs/template"
},
{
"description": "Template for building basic applications with Svelte and custom elements",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "sveltejs/template-custom-element",
"repository": "https://github.com/sveltejs/template-custom-element"
},
{
"description": "Template for building basic Svelte applications with webpack",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "sveltejs/template-webpack",
"repository": "https://github.com/sveltejs/template-webpack"
},
{
"description": "Starter template for Cordova featuring hot reload",
"tags": ["mobile", "svelte"],
"categories": ["mobile", "svelte"],
"title": "syonip/svelte-cordova",
"repository": "https://github.com/syonip/svelte-cordova"
},
{
"description": "A showcase app for all Ionic UI elements to create awesome mobile apps. Published as web app too.",
"tags": ["components-and-libraries", "component-sets", "mobile", "svelte"],
"categories": ["components-and-libraries", "component-sets", "mobile", "svelte"],
"title": "Ionic Svelte UI demo",
"repository": "https://github.com/Tommertom/svelte-ionic-app"
},
{
"description": "Starter pack for Rollup, Typescript, and VSCode",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "tonyrewin/svelte3-ts-boilerplate",
"repository": "https://github.com/tonyrewin/svelte3-ts-boilerplate"
},
{
"description": "Template with TypeScript, Babel, Jest, Svelte-Testing-Library, Eslint, and Prettier",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "will-wow/svelte-typescript-template",
"repository": "https://github.com/will-wow/svelte-typescript-template"
},
{
"description": "A base for building shareable Svelte 3 components",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "YogliB/svelte-component-template",
"repository": "https://github.com/YogliB/svelte-component-template"
},
{
"description": "A base for building shareable Svelte 3 components.",
"tags": ["svelte"],
"categories": ["svelte"],
"title": "svelte-component-template",
"repository": "https://github.com/YogliB/svelte-component-template"
},
{
"description": "SvelteKit template with TailwindCSS, Storybook, TypeScript and Sass.",
"tags": ["sveltekit"],
"categories": ["sveltekit"],
"title": "tejasag/sveltetron-9000",
"repository": "https://github.com/tejasag/sveltetron-9000"
},
{
"description": "SvelteKit Starter template with Typescript, Postcss, scss, TailwindCSS, Storybook, husky, and eslint.",
"tags": ["blog", "seo", "ssr", "storybook", "sveltekit"],
"categories": ["blog", "seo", "ssr", "storybook", "sveltekit"],
"title": "navneetsharmaui/sveltekit-starter",
"repository": "https://github.com/navneetsharmaui/sveltekit-starter"
},
{
"description": "SvelteKit Blog Starter template with Typescript, Postcss, scss, TailwindCSS, Storybook, husky, and eslint. The template is free to use and developers are welcome to contribute to it.",
"tags": ["blog", "mdsvex", "seo", "ssr", "storybook", "sveltekit"],
"categories": ["blog", "mdsvex", "seo", "ssr", "storybook", "sveltekit"],
"title": "navneetsharmaui/sveltekit-blog",
"repository": "https://github.com/navneetsharmaui/sveltekit-blog"
},
{
"description": "SvelteKit boilerplate with Koa for building backend API, Typescript support, Docker support",
"tags": ["sveltekit"],
"categories": ["sveltekit"],
"title": "kaladivo/svelte-kit-koa-boilerplate",
"repository": "https://github.com/kaladivo/svelte-kit-koa-boilerplate"
},
{
"description": "SvelteKit template with Stripe Checkout and Typescript.",
"tags": ["sveltekit"],
"categories": ["sveltekit"],
"title": "srmullen/sveltekit-stripe",
"repository": "https://github.com/srmullen/sveltekit-stripe"
},
{
"description": "A minimalistic blog template built with SvelteKit and MDsveX",
"tags": ["sveltekit"],
"categories": ["sveltekit"],
"title": "mvasigh/sveltekit-mdsvex-blog",
"repository": "https://github.com/mvasigh/sveltekit-mdsvex-blog"
},
{
"description": "A personal website built with SvelteKit",
"tags": ["sveltekit"],
"categories": ["sveltekit"],
"title": "babichjacob/university-website",
"repository": "https://github.com/babichjacob/university-website"
},
{
"description": "Add PostCSS to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/postcss",
"repository": "https://github.com/svelte-add/postcss"
},
{
"description": "Add Tailwind CSS to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/tailwindcss",
"repository": "https://github.com/svelte-add/tailwindcss"
},
{
"description": "Add Tauri to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/tauri",
"repository": "https://github.com/svelte-add/tauri"
},
{
"description": "Add Bulma to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/bulma",
"repository": "https://github.com/svelte-add/bulma"
},
{
"description": "Add CoffeeScript to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/coffeescript",
"repository": "https://github.com/svelte-add/coffeescript"
},
{
"description": "A command to add a GraphQL server to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/graphql-server",
"repository": "https://github.com/svelte-add/graphql-server"
},
{
"description": "A command to add hosting on Firebase to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/firebase-hosting",
"repository": "https://github.com/svelte-add/firebase-hosting"
},
@@ -447,41 +454,41 @@
"title": "svelte-add/scss",
"repository": "https://github.com/svelte-add/scss",
"description": "Add SCSS to your Svelte project",
"tags": ["svelte-add"]
"categories": ["svelte-add"]
},
{
"title": "svelte-add/3d",
"repository": "https://github.com/svelte-add/3d",
"description": "Add 3D scenes to your Svelte project",
"tags": ["svelte-add"]
"categories": ["svelte-add"]
},
{
"title": "vhscom/svelte-headlessui-starter",
"repository": "https://github.com/vhscom/svelte-headlessui-starter",
"description": "Template designed to make it faster and easier to build libre Svelte apps using Headless UI.",
"tags": ["ssr", "typescript", "sveltekit"]
"categories": ["ssr", "typescript", "sveltekit"]
},
{
"description": "Add mdsvex to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "svelte-add/mdsvex",
"repository": "https://github.com/svelte-add/mdsvex"
},
{
"description": "Add Supabase to your Svelte project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "supabase-community/svelte-supabase",
"repository": "https://github.com/supabase-community/svelte-supabase"
},
{
"description": "Add Jest to your SvelteKit project",
"tags": ["svelte-add"],
"categories": ["svelte-add"],
"title": "rossyman/svelte-add-jest",
"repository": "https://github.com/rossyman/svelte-add-jest"
},
{
"description": "SvelteKit blog powered with mdsvex, json schema support, sitemap.xml, RSS-feed and other tools required for good SEO.",
"tags": ["ssr", "mdsvex", "seo", "sveltekit"],
"categories": ["ssr", "mdsvex", "seo", "sveltekit"],
"title": "MailCheck-co/mailcheck.site",
"repository": "https://github.com/MailCheck-co/mailcheck.site"
},
@@ -489,212 +496,212 @@
"title": "svelte-postgrest-template",
"repository": "https://github.com/guyromm/svelte-postgrest-template",
"description": "SvelteKit & auth with a PostgreSQL + postgREST backend",
"tags": ["database", "integrations", "ssr", "sveltekit"]
"categories": ["database", "integrations", "ssr", "sveltekit"]
},
{
"title": "SvelteKit i18n Template",
"repository": "https://github.com/ivanhofer/typesafe-i18n-demo-sveltekit",
"description": "A fully working SEO optimized i18n template",
"tags": ["code-splitting", "lazy-loading", "seo", "ssr", "typescript", "sveltekit"]
"categories": ["code-splitting", "lazy-loading", "seo", "ssr", "typescript", "sveltekit"]
},
{
"title": "svelte-ts-tailwind-template",
"repository": "https://github.com/colinbate/svelte-ts-tailwind-template",
"description": "Svelte app template with TypeScript and TailwindCSS.",
"tags": ["typescript", "svelte"]
"categories": ["typescript", "svelte"]
},
{
"title": "SENT-template",
"repository": "https://github.com/the-homeless-god/SENT-template",
"description": "Skip setup and start code with SENT (Sapper Express Node Template) and other tools like TypeScript, Linters, Tests, Docker and so on",
"tags": ["code-splitting", "webpack", "typescript", "storybook", "ssr", "svelte"]
"categories": ["code-splitting", "webpack", "typescript", "storybook", "ssr", "svelte"]
},
{
"title": "Yuyutsu",
"repository": "https://github.com/sharu725/yuyutsu",
"description": "A minimal Sveltekit theme with a sidebar.",
"tags": ["blog", "markdown", "sveltekit"]
"categories": ["blog", "markdown", "sveltekit"]
},
{
"title": "sveltekit-blog-template",
"repository": "https://github.com/K-Sato1995/sveltekit-blog-template",
"description": "A minimalistic markdown based blog template built with Sveltekit",
"tags": ["blog", "sveltekit"]
"categories": ["blog", "sveltekit"]
},
{
"title": "Urara",
"repository": "https://github.com/importantimport/urara",
"description": "Sweet, Powerful, IndieWeb-Compatible SvelteKit Blog Starter.",
"tags": ["blog", "mdsvex", "typescript", "sveltekit"]
"categories": ["blog", "mdsvex", "typescript", "sveltekit"]
},
{
"title": "Svelte-Typescript-Electron-Webpack",
"repository": "https://github.com/ryan-way-boilerplate/stew",
"description": "Template with Svelte Typescript Electron and webpack",
"tags": ["typescript", "webpack", "electron", "svelte"]
"categories": ["typescript", "webpack", "electron", "svelte"]
},
{
"title": "Svelte SCSS/TailwindCSS/Typescript Template",
"repository": "https://github.com/timoyo93/svelte-template",
"description": "A template that uses TailwindCSS v3, Typescript and SCSS",
"tags": ["typescript", "preprocessors", "svelte"]
"categories": ["typescript", "preprocessors", "svelte"]
},
{
"title": "Svelte + FAST + Vite template",
"repository": "https://github.com/microsoft/fast/tree/master/examples/svelte-starters/svelte-fast-starter",
"description": "A Svelte + FAST + Vite starter project",
"tags": ["svelte"]
"categories": ["svelte"]
},
{
"title": "Svelte + FAST + Vite + TypeScript template",
"repository": "https://github.com/microsoft/fast/tree/master/examples/svelte-starters/svelte-fast-typescript-starter",
"description": "A Svelte + FAST + Vite + TypeScript starter project",
"tags": ["svelte"]
"categories": ["svelte"]
},
{
"title": "svelte-vite-typescript-tailwindcss-template",
"repository": "https://github.com/skshahriarahmedraka/vite-svelte-tailwind-template",
"description": "svelte & vite & typescript & tailwindcss",
"tags": ["typescript", "svelte"]
"categories": ["typescript", "svelte"]
},
{
"title": "Swyxkit",
"repository": "https://github.com/swyxio/swyxkit/",
"description": "An opinionated blog starter for SvelteKit + Tailwind + Netlify. Refreshed for the great SvelteKit refactor of 2022!",
"tags": ["blog", "mdsvex", "markdown", "sveltekit"]
"categories": ["blog", "mdsvex", "markdown", "sveltekit"]
},
{
"title": "QWER Blog Starter",
"repository": "https://github.com/kwchang0831/svelte-QWER",
"description": "Blog Starter built with SvelteKit and Love. 100 Lighthouse, SEO, Post tags and TOC, Atom feed, Sitemap, PWA, image optimisation, Giscus, UnoCSS, typesafe-i18n",
"tags": ["blog", "markdown", "seo", "typescript", "sveltekit"]
"categories": ["blog", "markdown", "seo", "typescript", "sveltekit"]
},
{
"title": "svelte-mpa",
"repository": "https://github.com/kokizzu/svelte-mpa",
"description": "Multipage Svelte for any backend",
"tags": ["integrations", "svelte"]
"categories": ["integrations", "svelte"]
},
{
"title": "SvelteKit with Prisma and AuthJS",
"repository": "https://github.com/KoljaL/SK-AuthJS",
"description": "Just to try out the new way to authorizes with a common library",
"tags": ["database", "typescript", "integrations", "sveltekit"]
"categories": ["database", "typescript", "integrations", "sveltekit"]
},
{
"title": "SveDev",
"repository": "https://github.com/etherCorps/SveDev",
"description": "A blog starter for SvelteKit + Dev.to + Tailwind with DaisyUI + Any Adapter",
"tags": ["blog", "typescript", "sveltekit"]
"categories": ["blog", "typescript", "sveltekit"]
},
{
"title": "Wails.io w/ Sveltekit",
"repository": "https://github.com/plihelix/wails-template-sveltekit",
"description": "A template to generate cross-platform golang applications with a SvelteKit front-end.",
"tags": ["integrations", "sveltekit"]
"categories": ["integrations", "sveltekit"]
},
{
"title": "Tablog",
"repository": "https://github.com/lemmon/tablog-svelte",
"description": "A minimalistic blog theme built with SvelteKit and mdsvex.",
"tags": ["blog", "markdown", "mdsvex", "seo", "sveltekit"]
"categories": ["blog", "markdown", "mdsvex", "seo", "sveltekit"]
},
{
"title": "Web3 Hardhat & Svelte Boilerplate",
"repository": "https://github.com/fede-rodes/hardhat-svelte-boilerplate",
"description": "This boilerplate includes Hardhat, Svelte, Tailwind, TS and cva libs. Example integration using MetaMask",
"tags": ["testing", "typescript", "svelte"]
"categories": ["testing", "typescript", "svelte"]
},
{
"title": "Sveltepress",
"url": "https://sveltepress.site/",
"repository": "https://github.com/SveltePress/sveltepress",
"description": "A markdown centered site build tool with full power of sveltekit.",
"tags": ["markdown", "integrations", "sveltekit"]
"categories": ["markdown", "integrations", "sveltekit"]
},
{
"title": "SvelteKit PWA Template",
"repository": "https://github.com/joemmalatesta/SvelteKit-PWA-Guide",
"description": "A PWA Starter Template for SvelteKit",
"tags": ["sveltekit"]
"categories": ["sveltekit"]
},
{
"title": "Vontigo",
"repository": "https://github.com/Vontigo/Vontigo",
"description": "An open-source CMS built with SvelteKit, featuring 🤖 AI-powered (ChatGPT) content generation. With fast page loads and seamless routing, Vontigo offers a user-friendly interface with customizable themes and templates.",
"tags": ["blog", "typescript", "components-and-libraries", "component-sets", "sveltekit"]
"categories": ["blog", "typescript", "components-and-libraries", "component-sets", "sveltekit"]
},
{
"title": "svelte-pilot-template",
"repository": "https://github.com/svelte-pilot/svelte-pilot-template",
"description": "A template based on the Svelte Pilot routing library, offering server-side rendering (SSR) and other rich features.",
"tags": ["ssr", "svelte"]
"categories": ["ssr", "svelte"]
},
{
"title": "surreal-sveltekit",
"repository": "https://github.com/oskar-gmerek/surreal-sveltekit",
"description": "A Starter Kit with SurrealDB and SvelteKit, featuring Authentication and CRUD Operations + Realtime",
"tags": ["database", "integrations", "typescript", "ssr", "sveltekit"]
"categories": ["database", "integrations", "typescript", "ssr", "sveltekit"]
},
{
"title": "SvelteStore",
"repository": "https://github.com/gitbreaker222/SvelteStore",
"description": "Template for client side svelte store",
"tags": ["stores-and-state", "svelte"]
"categories": ["stores-and-state", "svelte"]
},
{
"title": "sveltekit-shadcn-ai",
"url": "https://github.com/juliuslipp/sveltekit-shadcn-ai",
"repository": "https://github.com/juliuslipp/sveltekit-shadcn-ai",
"description": "An innovative project combining Svelte, AI, and a range of web technologies, powered by Bun as its efficient package manager.",
"tags": ["blog", "database", "mdsvex", "markdown", "typescript", "sveltekit"]
"categories": ["blog", "database", "mdsvex", "markdown", "typescript", "sveltekit"]
},
{
"title": "svelte-library-template",
"repository": "https://github.com/lachlancollins/svelte-library-template",
"description": "Template to use svelte-package for library development.",
"tags": ["typescript", "testing", "svelte"]
"categories": ["typescript", "testing", "svelte"]
},
{
"title": "KitForStartups",
"repository": "https://github.com/okupter/kitforstartups",
"description": "A starter kit for building and shipping fast, secure, and scalable full stack SaaS applications with SvelteKit and TypeScript.",
"tags": ["typescript", "sveltekit"]
"categories": ["typescript", "sveltekit"]
},
{
"title": "Animotion",
"repository": "https://github.com/animotionjs/animotion",
"description": "Animotion is a presentational framework for creating beautiful slides and visualizing ideas with code using Svelte, Reveal.js and Tailwind CSS.",
"tags": ["svelte"]
"categories": ["svelte"]
},
{
"title": "create-o7-app",
"repository": "https://github.com/ottomated/create-o7-app",
"description": "An opinionated CLI for creating type-safe Svelte apps.",
"tags": ["sveltekit"]
"categories": ["sveltekit"]
},
{
"title": "Sveltekit Auth Starter",
"repository": "https://github.com/delay/sveltekit-auth-starter",
"description": "Utilizes Lucia for authentication, Skeleton for ui elements, Prisma for database connectivity and type safety, Lucide for icons, inlang for translation, Zod and Superforms to handle forms and validation and Sveltekit.",
"tags": ["sveltekit"]
"categories": ["sveltekit"]
},
{
"title": "Svelte Realworld",
"repository": "https://github.com/sveltejs/realworld",
"description": "Svelte codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API.",
"tags": ["sveltekit"]
"categories": ["sveltekit"]
},
{
"title": "editable-website",
"repository": "https://github.com/michael/editable-website",
"description": "A SvelteKit template for coding completely custom websites, while allowing non-technical people to make edits to the content by simply logging in with a secure admin password.",
"tags": ["sveltekit"]
"categories": ["sveltekit"]
},
{
"title": "SPLAT",
"repository": "https://github.com/zeucapua/splat-template",
"description": "A project template to get started with the SPLAT stack (SvelteKit, Prisma, Lucia (Auth), TailwindCSS)",
"tags": ["sveltekit"]
"categories": ["sveltekit"]
}
]