create-stitchkit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/LICENSE +21 -0
  3. package/README.md +35 -0
  4. package/dist/cli.js +230 -0
  5. package/package.json +50 -0
  6. package/template/README.md +69 -0
  7. package/template/_env +11 -0
  8. package/template/_env.example +12 -0
  9. package/template/_gitignore +10 -0
  10. package/template/biome.json +43 -0
  11. package/template/bun.lock +1372 -0
  12. package/template/e2e/starter.spec.ts +237 -0
  13. package/template/ecosystem.config.cjs +28 -0
  14. package/template/ecosystem.dev.config.cjs +29 -0
  15. package/template/package.json +55 -0
  16. package/template/packages/backend/package.json +31 -0
  17. package/template/packages/backend/src/cli.ts +12 -0
  18. package/template/packages/backend/src/domain/errors.ts +9 -0
  19. package/template/packages/backend/src/domain/repository/github-cache.test.ts +72 -0
  20. package/template/packages/backend/src/domain/repository/github-cache.ts +205 -0
  21. package/template/packages/backend/src/index.ts +56 -0
  22. package/template/packages/backend/src/lib/db.ts +7 -0
  23. package/template/packages/backend/src/surface.ts +13 -0
  24. package/template/packages/backend/src/tools.ts +21 -0
  25. package/template/packages/backend/src/transport/errors.ts +28 -0
  26. package/template/packages/backend/src/transport/repository-service.ts +18 -0
  27. package/template/packages/backend/tsconfig.json +8 -0
  28. package/template/packages/config/package.json +22 -0
  29. package/template/packages/config/src/server.ts +24 -0
  30. package/template/packages/config/tsconfig.json +5 -0
  31. package/template/packages/db/migrations/20260808000000_init/migration.sql +16 -0
  32. package/template/packages/db/migrations/20260808170000_repository_visibility/migration.sql +4 -0
  33. package/template/packages/db/migrations/migration_lock.toml +1 -0
  34. package/template/packages/db/package.json +29 -0
  35. package/template/packages/db/prisma.config.ts +8 -0
  36. package/template/packages/db/schema.prisma +31 -0
  37. package/template/packages/db/tsconfig.json +5 -0
  38. package/template/packages/frontend/messages/en.json +15 -0
  39. package/template/packages/frontend/messages/ru.json +15 -0
  40. package/template/packages/frontend/next.config.ts +18 -0
  41. package/template/packages/frontend/package.json +62 -0
  42. package/template/packages/frontend/postcss.config.mjs +1 -0
  43. package/template/packages/frontend/public/ASSETS.md +6 -0
  44. package/template/packages/frontend/public/favicon/mascot-stitch.png +0 -0
  45. package/template/packages/frontend/public/icons/biome.svg +1 -0
  46. package/template/packages/frontend/public/icons/bun.svg +19 -0
  47. package/template/packages/frontend/public/icons/next.svg +1 -0
  48. package/template/packages/frontend/public/icons/postgresql.svg +1 -0
  49. package/template/packages/frontend/public/icons/prisma.svg +6 -0
  50. package/template/packages/frontend/public/icons/react-query.svg +9 -0
  51. package/template/packages/frontend/public/icons/react.svg +1 -0
  52. package/template/packages/frontend/public/icons/tailwind.svg +12 -0
  53. package/template/packages/frontend/public/icons/tsconfig.svg +1 -0
  54. package/template/packages/frontend/public/icons/typescript.svg +7 -0
  55. package/template/packages/frontend/public/icons/zod.svg +1 -0
  56. package/template/packages/frontend/public/mascot-stitch.png +0 -0
  57. package/template/packages/frontend/public/theme-dark.svg +8 -0
  58. package/template/packages/frontend/public/theme-light.svg +8 -0
  59. package/template/packages/frontend/src/app/[locale]/error.tsx +19 -0
  60. package/template/packages/frontend/src/app/[locale]/layout.tsx +59 -0
  61. package/template/packages/frontend/src/app/[locale]/loading.tsx +14 -0
  62. package/template/packages/frontend/src/app/[locale]/page.tsx +44 -0
  63. package/template/packages/frontend/src/app/[locale]/starter-page.tsx +151 -0
  64. package/template/packages/frontend/src/app/[locale]/ui/[story]/page.tsx +40 -0
  65. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/account-showcase.tsx +112 -0
  66. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/admin-showcase.tsx +101 -0
  67. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/catalogue-navigation.tsx +56 -0
  68. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/catalogue-shell.tsx +51 -0
  69. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/code-foundation.tsx +35 -0
  70. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/components-story.tsx +54 -0
  71. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/data-story.tsx +126 -0
  72. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/image-preloader.tsx +8 -0
  73. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/index.ts +3 -0
  74. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/landing-sections.tsx +269 -0
  75. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/landing-showcase.tsx +159 -0
  76. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/motion-story.tsx +78 -0
  77. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/overlays-story.tsx +134 -0
  78. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/payment-showcase.tsx +82 -0
  79. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/presentation-story.tsx +68 -0
  80. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/primitives-story.tsx +267 -0
  81. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/story-page.tsx +14 -0
  82. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/theme-story-client.tsx +208 -0
  83. package/template/packages/frontend/src/app/[locale]/ui/_catalogue/theme-story.tsx +13 -0
  84. package/template/packages/frontend/src/app/[locale]/ui/layout.tsx +6 -0
  85. package/template/packages/frontend/src/app/[locale]/ui/page.tsx +10 -0
  86. package/template/packages/frontend/src/app/api/og/[locale]/[page]/route.tsx +53 -0
  87. package/template/packages/frontend/src/app/globals.css +210 -0
  88. package/template/packages/frontend/src/app/robots.ts +9 -0
  89. package/template/packages/frontend/src/app/sitemap.ts +22 -0
  90. package/template/packages/frontend/src/components/brand-mark.tsx +22 -0
  91. package/template/packages/frontend/src/components/repository-summary.tsx +107 -0
  92. package/template/packages/frontend/src/components/system-controls.tsx +92 -0
  93. package/template/packages/frontend/src/components/ui/adaptive-modal.tsx +382 -0
  94. package/template/packages/frontend/src/components/ui/animated-counter.tsx +80 -0
  95. package/template/packages/frontend/src/components/ui/avatar.tsx +46 -0
  96. package/template/packages/frontend/src/components/ui/badge.tsx +94 -0
  97. package/template/packages/frontend/src/components/ui/button-variants.ts +24 -0
  98. package/template/packages/frontend/src/components/ui/button.tsx +81 -0
  99. package/template/packages/frontend/src/components/ui/card-deck.tsx +73 -0
  100. package/template/packages/frontend/src/components/ui/card.tsx +81 -0
  101. package/template/packages/frontend/src/components/ui/charts/area-chart.tsx +167 -0
  102. package/template/packages/frontend/src/components/ui/charts/index.ts +7 -0
  103. package/template/packages/frontend/src/components/ui/checkbox.tsx +133 -0
  104. package/template/packages/frontend/src/components/ui/confirmation-modal.tsx +129 -0
  105. package/template/packages/frontend/src/components/ui/copyable-text.tsx +85 -0
  106. package/template/packages/frontend/src/components/ui/drawer.tsx +136 -0
  107. package/template/packages/frontend/src/components/ui/dropdown-menu.tsx +185 -0
  108. package/template/packages/frontend/src/components/ui/field.tsx +28 -0
  109. package/template/packages/frontend/src/components/ui/hand-drawn-icons.tsx +41 -0
  110. package/template/packages/frontend/src/components/ui/index.ts +36 -0
  111. package/template/packages/frontend/src/components/ui/input.tsx +24 -0
  112. package/template/packages/frontend/src/components/ui/label.tsx +18 -0
  113. package/template/packages/frontend/src/components/ui/otp-input.tsx +140 -0
  114. package/template/packages/frontend/src/components/ui/select.tsx +240 -0
  115. package/template/packages/frontend/src/components/ui/sidebar.tsx +343 -0
  116. package/template/packages/frontend/src/components/ui/skeleton.tsx +8 -0
  117. package/template/packages/frontend/src/components/ui/slider.tsx +31 -0
  118. package/template/packages/frontend/src/components/ui/slot-drum.tsx +50 -0
  119. package/template/packages/frontend/src/components/ui/spinner.tsx +30 -0
  120. package/template/packages/frontend/src/components/ui/switch.tsx +31 -0
  121. package/template/packages/frontend/src/components/ui/table.tsx +106 -0
  122. package/template/packages/frontend/src/components/ui/tabs.tsx +196 -0
  123. package/template/packages/frontend/src/components/ui/textarea.tsx +21 -0
  124. package/template/packages/frontend/src/components/ui/toaster.tsx +72 -0
  125. package/template/packages/frontend/src/components/ui/tooltip.tsx +31 -0
  126. package/template/packages/frontend/src/env.ts +21 -0
  127. package/template/packages/frontend/src/features/data-table/components/column-helpers.tsx +136 -0
  128. package/template/packages/frontend/src/features/data-table/components/data-table.tsx +303 -0
  129. package/template/packages/frontend/src/features/data-table/components/inline-stat.tsx +113 -0
  130. package/template/packages/frontend/src/features/data-table/components/sortable-header.tsx +33 -0
  131. package/template/packages/frontend/src/features/data-table/components/table-error.tsx +24 -0
  132. package/template/packages/frontend/src/features/data-table/components/table-filters.tsx +82 -0
  133. package/template/packages/frontend/src/features/data-table/hooks/useTableState.ts +111 -0
  134. package/template/packages/frontend/src/features/data-table/index.ts +26 -0
  135. package/template/packages/frontend/src/features/data-table/table-features.ts +26 -0
  136. package/template/packages/frontend/src/hooks/index.ts +3 -0
  137. package/template/packages/frontend/src/hooks/useInfiniteScroll.ts +67 -0
  138. package/template/packages/frontend/src/hooks/useIsTouchDevice.ts +25 -0
  139. package/template/packages/frontend/src/hooks/useMediaQuery.ts +30 -0
  140. package/template/packages/frontend/src/i18n/locales.ts +6 -0
  141. package/template/packages/frontend/src/i18n/navigation.ts +4 -0
  142. package/template/packages/frontend/src/i18n/request.ts +9 -0
  143. package/template/packages/frontend/src/i18n/routing.ts +8 -0
  144. package/template/packages/frontend/src/lib/api/client.ts +20 -0
  145. package/template/packages/frontend/src/lib/api/queries.ts +11 -0
  146. package/template/packages/frontend/src/lib/query-client.ts +20 -0
  147. package/template/packages/frontend/src/lib/realtime/repository.ts +21 -0
  148. package/template/packages/frontend/src/lib/seo/metadata.ts +50 -0
  149. package/template/packages/frontend/src/lib/seo/pages.test.ts +25 -0
  150. package/template/packages/frontend/src/lib/seo/pages.ts +107 -0
  151. package/template/packages/frontend/src/lib/utils/cn.ts +6 -0
  152. package/template/packages/frontend/src/lib/utils/format.ts +25 -0
  153. package/template/packages/frontend/src/lib/utils/index.ts +2 -0
  154. package/template/packages/frontend/src/providers/index.tsx +18 -0
  155. package/template/packages/frontend/src/providers/react-query.tsx +9 -0
  156. package/template/packages/frontend/src/providers/realtime.tsx +16 -0
  157. package/template/packages/frontend/src/proxy.ts +6 -0
  158. package/template/packages/frontend/src/theme/config.ts +20 -0
  159. package/template/packages/frontend/src/theme/transition.ts +54 -0
  160. package/template/packages/frontend/tsconfig.json +13 -0
  161. package/template/packages/shared/package.json +23 -0
  162. package/template/packages/shared/src/contracts/repository.ts +28 -0
  163. package/template/packages/shared/src/events/repository.ts +9 -0
  164. package/template/packages/shared/src/index.ts +3 -0
  165. package/template/packages/shared/src/schemas/repository.test.ts +36 -0
  166. package/template/packages/shared/src/schemas/repository.ts +28 -0
  167. package/template/packages/shared/tsconfig.json +5 -0
  168. package/template/playwright.config.ts +15 -0
  169. package/template/scripts/check-authored.ts +81 -0
  170. package/template/scripts/dev.ts +23 -0
  171. package/template/scripts/local-env.ts +12 -0
  172. package/template/scripts/runtime-smoke.ts +67 -0
  173. package/template/scripts/tooling-env.ts +15 -0
  174. package/template/tsconfig.json +13 -0
@@ -0,0 +1,56 @@
1
+ import { env } from '@app/config';
2
+ import { wrapInRequestContext } from 'stitchkit/observability';
3
+ import { createServer, generateOpenApiDocument, openApiRoute } from 'stitchkit/server';
4
+ import { createMcpHandler } from 'stitchkit/tools';
5
+ import { prisma } from './lib/db';
6
+ import { createSurface } from './surface';
7
+ import { onError } from './transport/errors';
8
+
9
+ async function main(): Promise<void> {
10
+ const { services, socket } = await createSurface();
11
+ const mcp = createMcpHandler({
12
+ serverInfo: { name: 'stitchkit-starter', version: '0.1.0' },
13
+ auth: () => ({ scope: 'public' }),
14
+ services,
15
+ });
16
+ const openApi = generateOpenApiDocument({
17
+ info: { title: 'Stitchkit Starter API', version: '0.1.0' },
18
+ groups: [{ pathPrefix: '/api', services }],
19
+ });
20
+
21
+ const server = createServer({
22
+ groups: [{ pathPrefix: '/api', services }],
23
+ port: env.API_PORT,
24
+ hostname: '0.0.0.0',
25
+ cors: { origin: '*' },
26
+ hooks: { onError },
27
+ logging: { format: env.LOG_FORMAT },
28
+ websocket: socket.websocket,
29
+ rawRoutes: [
30
+ socket.route,
31
+ openApiRoute('/openapi.json', openApi),
32
+ { method: 'ALL', path: '/mcp', handler: (req) => mcp(req) },
33
+ {
34
+ method: 'GET',
35
+ path: '/health',
36
+ handler: () => Response.json({ status: 'ok' }),
37
+ },
38
+ ],
39
+ wrapFetch: (fetch) => wrapInRequestContext(fetch),
40
+ });
41
+
42
+ async function shutdown(): Promise<void> {
43
+ server.stop();
44
+ await socket.io.close();
45
+ await prisma.$disconnect();
46
+ }
47
+
48
+ process.once('SIGTERM', shutdown);
49
+ process.once('SIGINT', shutdown);
50
+ console.log(`API listening on http://127.0.0.1:${env.API_PORT}`);
51
+ }
52
+
53
+ main().catch((error: unknown) => {
54
+ console.error('API startup failed', error);
55
+ process.exit(1);
56
+ });
@@ -0,0 +1,7 @@
1
+ import { env } from '@app/config';
2
+ import { PrismaClient } from '@app/db';
3
+ import { PrismaPg } from '@prisma/adapter-pg';
4
+
5
+ const adapter = new PrismaPg({ connectionString: env.DATABASE_URL });
6
+
7
+ export const prisma = new PrismaClient({ adapter });
@@ -0,0 +1,13 @@
1
+ import type { ClientToServerEvents, ServerToClientEvents } from '@app/shared';
2
+ import { createSocketIOServer } from 'stitchkit/server';
3
+ import { createRepositoryService } from './transport/repository-service';
4
+
5
+ export async function createSurface() {
6
+ const socket = await createSocketIOServer<ServerToClientEvents, ClientToServerEvents>({
7
+ cors: { origin: '*' },
8
+ });
9
+ const repositoryService = createRepositoryService((snapshot) =>
10
+ socket.io.emit('repository:refreshed', snapshot),
11
+ );
12
+ return { socket, services: [repositoryService] };
13
+ }
@@ -0,0 +1,21 @@
1
+ import { buildToolManifest, listToolNames, summarizeTransports } from 'stitchkit/tools';
2
+ import { createSurface } from './surface';
3
+
4
+ const { services, socket } = await createSurface();
5
+
6
+ try {
7
+ const surface = { services };
8
+ console.log(
9
+ JSON.stringify(
10
+ {
11
+ manifest: buildToolManifest({ services, transport: 'AGENT' }),
12
+ names: listToolNames(surface),
13
+ transports: summarizeTransports(surface),
14
+ },
15
+ null,
16
+ 2,
17
+ ),
18
+ );
19
+ } finally {
20
+ await socket.io.close();
21
+ }
@@ -0,0 +1,28 @@
1
+ import type { StitchErrorCode } from 'stitchkit';
2
+ import { createErrorHook } from 'stitchkit/server';
3
+
4
+ const codeMap: Record<StitchErrorCode, string> = {
5
+ BAD_REQUEST: 'bad_request',
6
+ VALIDATION_ERROR: 'validation_error',
7
+ UNAUTHORIZED: 'unauthorized',
8
+ FORBIDDEN: 'forbidden',
9
+ NOT_FOUND: 'not_found',
10
+ METHOD_NOT_ALLOWED: 'method_not_allowed',
11
+ CONFLICT: 'conflict',
12
+ RATE_LIMITED: 'rate_limited',
13
+ INTERNAL_SERVER_ERROR: 'internal_error',
14
+ };
15
+
16
+ export const onError = createErrorHook({
17
+ codeMap,
18
+ render: (error, ctx) => ({
19
+ ok: false,
20
+ error: {
21
+ code: error.code,
22
+ message: error.message,
23
+ details: error.details,
24
+ hint: error.hint,
25
+ },
26
+ traceId: ctx.traceId,
27
+ }),
28
+ });
@@ -0,0 +1,18 @@
1
+ import { repositoryContract } from '@app/shared';
2
+ import { implement } from 'stitchkit/server';
3
+ import { GitHubRepositoryCache } from '../domain/repository/github-cache';
4
+
5
+ export function createRepositoryService(
6
+ onRefresh: (snapshot: Awaited<ReturnType<GitHubRepositoryCache['refresh']>>) => void,
7
+ ) {
8
+ const github = new GitHubRepositoryCache();
9
+
10
+ return implement(repositoryContract, {
11
+ read: () => github.read(),
12
+ refresh: async () => {
13
+ const snapshot = await github.refresh();
14
+ onRefresh(snapshot);
15
+ return snapshot;
16
+ },
17
+ });
18
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "types": ["bun"],
5
+ "paths": { "@/*": ["./src/*"] }
6
+ },
7
+ "include": ["src"]
8
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@app/config",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./src/server.ts"
8
+ },
9
+ "scripts": {
10
+ "check": "bun x tsc --noEmit",
11
+ "test": "bun test --pass-with-no-tests"
12
+ },
13
+ "dependencies": {
14
+ "@t3-oss/env-core": "^0.13.11",
15
+ "dotenv": "^17.4.2",
16
+ "zod": "^4.4.3"
17
+ },
18
+ "devDependencies": {
19
+ "@types/bun": "^1.3.14",
20
+ "typescript": "^7.0.2"
21
+ }
22
+ }
@@ -0,0 +1,24 @@
1
+ import path from 'node:path';
2
+ import { createEnv } from '@t3-oss/env-core';
3
+ import { config } from 'dotenv';
4
+ import { z } from 'zod';
5
+
6
+ config({ path: path.resolve(import.meta.dirname, '../../../.env'), quiet: true });
7
+
8
+ export const env = createEnv({
9
+ server: {
10
+ NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),
11
+ DATABASE_URL: z.url(),
12
+ API_PORT: z.coerce.number().int().positive(),
13
+ WEB_PORT: z.coerce.number().int().positive(),
14
+ NEXT_PUBLIC_API_URL: z.url(),
15
+ INTERNAL_API_URL: z.url(),
16
+ NEXT_PUBLIC_WEB_URL: z.url(),
17
+ LOG_FORMAT: z.enum(['pretty', 'json']).default('pretty'),
18
+ GITHUB_REPOSITORY: z.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/),
19
+ GITHUB_CACHE_TTL_SECONDS: z.coerce.number().int().positive().default(900),
20
+ GITHUB_TOKEN: z.string().min(1).optional(),
21
+ },
22
+ runtimeEnv: process.env,
23
+ emptyStringAsUndefined: true,
24
+ });
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": { "types": ["bun"] },
4
+ "include": ["src"]
5
+ }
@@ -0,0 +1,16 @@
1
+ CREATE TABLE "RepositorySnapshot" (
2
+ "fullName" TEXT NOT NULL,
3
+ "description" TEXT,
4
+ "htmlUrl" TEXT NOT NULL,
5
+ "language" TEXT,
6
+ "stars" INTEGER NOT NULL,
7
+ "forks" INTEGER NOT NULL,
8
+ "openIssues" INTEGER NOT NULL,
9
+ "commitCount" INTEGER NOT NULL,
10
+ "latestCommitSha" TEXT,
11
+ "latestCommitMessage" TEXT,
12
+ "latestCommittedAt" TIMESTAMP(3),
13
+ "fetchedAt" TIMESTAMP(3) NOT NULL,
14
+ "expiresAt" TIMESTAMP(3) NOT NULL,
15
+ CONSTRAINT "RepositorySnapshot_pkey" PRIMARY KEY ("fullName")
16
+ );
@@ -0,0 +1,4 @@
1
+ CREATE TYPE "RepositoryVisibility" AS ENUM ('PUBLIC', 'PRIVATE', 'INTERNAL');
2
+
3
+ ALTER TABLE "RepositorySnapshot"
4
+ ADD COLUMN "visibility" "RepositoryVisibility" NOT NULL DEFAULT 'PUBLIC';
@@ -0,0 +1 @@
1
+ provider = "postgresql"
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@app/db",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./src/generated/client.ts",
8
+ "./enums": "./src/generated/enums.ts"
9
+ },
10
+ "scripts": {
11
+ "check": "bun x tsc --noEmit",
12
+ "test": "bun test --pass-with-no-tests",
13
+ "db:generate": "bunx prisma generate",
14
+ "db:migrate": "bunx prisma migrate dev",
15
+ "db:deploy": "bunx prisma migrate deploy",
16
+ "db:studio": "bunx prisma studio"
17
+ },
18
+ "dependencies": {
19
+ "@app/config": "workspace:*",
20
+ "@prisma/adapter-pg": "^7.9.1",
21
+ "@prisma/client": "^7.9.1",
22
+ "pg": "^8.22.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/pg": "^8.21.0",
26
+ "prisma": "^7.9.1",
27
+ "typescript": "^7.0.2"
28
+ }
29
+ }
@@ -0,0 +1,8 @@
1
+ import { env } from '@app/config';
2
+ import { defineConfig } from 'prisma/config';
3
+
4
+ export default defineConfig({
5
+ schema: 'schema.prisma',
6
+ migrations: { path: 'migrations' },
7
+ datasource: { url: env.DATABASE_URL },
8
+ });
@@ -0,0 +1,31 @@
1
+ generator client {
2
+ provider = "prisma-client"
3
+ output = "./src/generated"
4
+ }
5
+
6
+ datasource db {
7
+ provider = "postgresql"
8
+ }
9
+
10
+ enum RepositoryVisibility {
11
+ PUBLIC
12
+ PRIVATE
13
+ INTERNAL
14
+ }
15
+
16
+ model RepositorySnapshot {
17
+ fullName String @id
18
+ description String?
19
+ htmlUrl String
20
+ language String?
21
+ visibility RepositoryVisibility @default(PUBLIC)
22
+ stars Int
23
+ forks Int
24
+ openIssues Int
25
+ commitCount Int
26
+ latestCommitSha String?
27
+ latestCommitMessage String?
28
+ latestCommittedAt DateTime?
29
+ fetchedAt DateTime
30
+ expiresAt DateTime
31
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": { "types": ["bun"] },
4
+ "include": ["src", "prisma.config.ts"]
5
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "App": {
3
+ "title": "Stitchkit Starter",
4
+ "description": "A compact production base with one typed contract across HTTP, MCP, agents and the browser — ready for your product, not a demo domain.",
5
+ "heroTitle": "Build the product, not the plumbing.",
6
+ "ui": "UI system"
7
+ },
8
+ "Common": {
9
+ "cancel": "Cancel",
10
+ "confirm": "Confirm",
11
+ "close": "Close",
12
+ "loading": "Loading",
13
+ "error": "Something went wrong"
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "App": {
3
+ "title": "Stitchkit Starter",
4
+ "description": "Компактная production-база с единым типизированным контрактом для HTTP, MCP, агентов и браузера — готовая к вашему продукту, а не к демо-домену.",
5
+ "heroTitle": "Стройте продукт, а не инфраструктурную рутину.",
6
+ "ui": "UI-система"
7
+ },
8
+ "Common": {
9
+ "cancel": "Отмена",
10
+ "confirm": "Подтвердить",
11
+ "close": "Закрыть",
12
+ "loading": "Загрузка",
13
+ "error": "Что-то пошло не так"
14
+ }
15
+ }
@@ -0,0 +1,18 @@
1
+ import path from 'node:path';
2
+ import type { NextConfig } from 'next';
3
+ import createNextIntlPlugin from 'next-intl/plugin';
4
+ import { env } from './src/env';
5
+
6
+ const config: NextConfig = {
7
+ agentRules: false,
8
+ reactStrictMode: true,
9
+ reactCompiler: true,
10
+ transpilePackages: ['shiki'],
11
+ turbopack: {
12
+ root: path.resolve(import.meta.dirname, '../..'),
13
+ },
14
+ allowedDevOrigins: [new URL(env.NEXT_PUBLIC_WEB_URL).hostname],
15
+ images: { remotePatterns: [] },
16
+ };
17
+
18
+ export default createNextIntlPlugin()(config);
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@app/frontend",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "next dev --port ${WEB_PORT:-3210}",
8
+ "build": "next build",
9
+ "start": "next start --port ${WEB_PORT:-3210}",
10
+ "check": "next typegen && bun x tsc --noEmit",
11
+ "test": "bun test --pass-with-no-tests"
12
+ },
13
+ "dependencies": {
14
+ "@app/db": "workspace:*",
15
+ "@app/shared": "workspace:*",
16
+ "@radix-ui/react-alert-dialog": "^1.1.23",
17
+ "@radix-ui/react-avatar": "^1.2.6",
18
+ "@radix-ui/react-checkbox": "^1.3.11",
19
+ "@radix-ui/react-dialog": "^1.1.23",
20
+ "@radix-ui/react-dropdown-menu": "^2.1.24",
21
+ "@radix-ui/react-select": "^2.3.7",
22
+ "@radix-ui/react-slider": "^1.4.7",
23
+ "@radix-ui/react-slot": "^1.3.3",
24
+ "@radix-ui/react-switch": "^1.3.7",
25
+ "@radix-ui/react-tabs": "^1.1.21",
26
+ "@radix-ui/react-tooltip": "^1.2.16",
27
+ "@t3-oss/env-nextjs": "^0.13.11",
28
+ "@tabler/icons-react": "^3.46.0",
29
+ "@tanstack/react-query": "^5.101.4",
30
+ "@tanstack/react-table": "^9.1.0",
31
+ "@wrksz/themes": "^1.1.0",
32
+ "class-variance-authority": "^0.7.1",
33
+ "clsx": "^2.1.1",
34
+ "date-fns": "^4.4.0",
35
+ "dotenv": "^17.4.2",
36
+ "framer-motion": "^13.0.0",
37
+ "next": "^16.3.0",
38
+ "next-intl": "^4.13.5",
39
+ "react": "^19.2.8",
40
+ "react-dom": "^19.2.8",
41
+ "react-query-kit": "^3.3.4",
42
+ "recharts": "^3.10.1",
43
+ "shiki": "^4.4.2",
44
+ "socket.io-client": "^4.8.3",
45
+ "sonner": "^2.0.7",
46
+ "stitchkit": "catalog:",
47
+ "tailwind-merge": "^3.6.0",
48
+ "vaul": "^1.1.2",
49
+ "zod": "^4.4.3"
50
+ },
51
+ "devDependencies": {
52
+ "@tailwindcss/postcss": "^4.3.3",
53
+ "@types/bun": "^1.3.14",
54
+ "@types/node": "^26.2.0",
55
+ "@types/react": "^19.2.18",
56
+ "@types/react-dom": "^19.2.4",
57
+ "babel-plugin-react-compiler": "^1.0.0",
58
+ "tailwindcss": "^4.3.3",
59
+ "tw-animate-css": "^1.4.0",
60
+ "typescript": "^7.0.2"
61
+ }
62
+ }
@@ -0,0 +1 @@
1
+ export default { plugins: { '@tailwindcss/postcss': {} } };
@@ -0,0 +1,6 @@
1
+ # Asset provenance
2
+
3
+ - Technology logo SVGs: the respective technology trademarks, used only as illustrative marks in the component catalogue. The Bun file retains its Streamline source description.
4
+ - `theme-light.svg` and `theme-dark.svg`: original neutral starter illustrations generated for this template.
5
+
6
+ Brand marks are not endorsements and remain subject to their owners' trademark policies.
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><svg viewBox="0 0 64 55.425" width="64" height="55.425" version="1.0" xmlns="http://www.w3.org/2000/svg"><rect id="biomejs__background" width="100%" height="100%" fill="none"/><path id="biomejs__emblem" d="m32 0-14.255 24.69c5.409-1.6676 11.228-1.9148 16.869-0.58434l4.8177 1.1372-4.5328 19.22-4.8247-1.1372c-5.9293-1.3987-11.628 1.716-14.036 6.6851l-4.4595-2.1575c3.4034-7.0291 11.424-11.285 19.636-9.3476l2.2595-9.579c-8.0938-1.9081-16.624-9e-3 -23.145 5.153-6.5204 5.1607-10.329 13.028-10.329 21.344l64 7.9e-4z" fill="#60a5fa" stroke-linecap="square" stroke-width="4.8768" style="paint-order:markers fill stroke"/></svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 96 96" id="Bun--Streamline-Svg-Logos">
2
+ <desc>
3
+ Bun Streamline Icon: https://streamlinehq.com
4
+ </desc>
5
+ <path fill="#000000" d="M84.9929 30.8838c-0.1904 -0.2023 -0.3927 -0.4046 -0.595 -0.5949 -0.2022 -0.1904 -0.3926 -0.4046 -0.5949 -0.595 -0.2023 -0.1904 -0.3926 -0.4045 -0.5949 -0.5949 -0.2023 -0.1904 -0.3927 -0.4046 -0.595 -0.595 -0.2022 -0.1903 -0.3926 -0.4045 -0.5949 -0.5949 -0.2023 -0.1904 -0.3927 -0.4045 -0.5949 -0.5949 -0.2023 -0.1904 -0.3927 -0.4046 -0.595 -0.595 5.902 5.8003 9.2831 13.691 9.4119 21.9651 0 19.7162 -20.0136 35.7557 -44.6202 35.7557 -13.7788 0 -26.1059 -5.0332 -34.3041 -12.922l0.595 0.5949 0.5949 0.595 0.5949 0.5949 0.595 0.5949 0.5949 0.595 0.5949 0.5949 0.595 0.5949c8.1863 8.2221 20.7871 13.517 34.899 13.517 24.6065 0 44.6202 -16.0395 44.6202 -35.6962 0 -8.4005 -3.6172 -16.3608 -10.0068 -22.6195Z" stroke-width="1"></path>
6
+ <path fill="#fbf0df" d="M87.2657 48.6843c0 18.0979 -18.6453 32.7691 -41.6455 32.7691 -23.0003 0 -41.64559 -14.6712 -41.64559 -32.7691 0 -11.2205 7.13919 -21.1322 18.10989 -27.0102C33.0551 15.7962 39.885 9.77539 45.6202 9.77539c5.7352 0 10.6374 4.91421 23.5357 11.89871 10.9706 5.878 18.1098 15.7897 18.1098 27.0102Z" stroke-width="1"></path>
7
+ <path fill="#f6dece" d="M87.2657 48.6841c-0.0058 -2.3249 -0.326 -4.6384 -0.9519 -6.8775 -3.2484 39.6228 -51.5811 41.5266 -70.5833 29.6755 8.5421 6.6209 19.0833 10.1374 29.8896 9.9711 22.9646 0 41.6456 -14.6949 41.6456 -32.7691Z" stroke-width="1"></path>
8
+ <path fill="#fffefc" d="M29.5926 19.4967c5.3187 -3.1889 12.3866 -9.174 19.3354 -9.1859 -1.069 -0.34551 -2.1844 -0.52606 -3.3078 -0.53541 -2.8795 0 -5.9494 1.48731 -9.8165 3.72431 -1.3445 0.7853 -2.7367 1.6539 -4.2121 2.5582 -2.7724 1.7134 -5.9494 3.6529 -9.519 5.5924C10.745 27.7782 3.97461 37.8802 3.97461 48.6843l0 1.4159C11.1852 24.625 24.2857 22.6855 29.5926 19.4967Z" stroke-width="1"></path>
9
+ <path fill="#ccbea7" d="M42.1939 12.7859c0.0337 5.6854 -2.4123 11.103 -6.699 14.8378 -0.3332 0.2974 -0.0714 0.8686 0.357 0.702 4.0098 -1.5587 9.4238 -6.223 7.1392 -15.6349 -0.0952 -0.5355 -0.7972 -0.3927 -0.7972 0.0951Zm2.701 0c2.9463 4.8072 3.646 10.6615 1.9157 16.0276 -0.1428 0.4165 0.3689 0.7735 0.6544 0.4284 2.6059 -3.3317 4.8785 -9.9473 -1.9276 -17.0866 -0.345 -0.3094 -0.8805 0.1666 -0.6425 0.583v0.0476Zm3.284 -0.2022c4.613 3.2658 7.5857 8.3692 8.1507 13.9929 -0.025 0.208 0.1177 0.3991 0.3243 0.434 0.2066 0.035 0.4043 -0.0984 0.4491 -0.3031 1.0947 -4.1527 0.476 -11.2324 -8.5314 -14.9092 -0.4759 -0.1903 -0.7853 0.4522 -0.3927 0.7378v0.0476Zm-21.965 12.3746c5.4849 -1.6386 10.0144 -5.5321 12.458 -10.7088 0.2141 -0.4284 0.8924 -0.2618 0.7853 0.2142 -2.0585 9.519 -8.9479 11.506 -13.2314 11.2443 -0.4522 0.0119 -0.4403 -0.6188 -0.0119 -0.7497Z" stroke-width="1"></path>
10
+ <path fill="#000000" d="M45.6203 84.44C21.0137 84.44 1 68.4005 1 48.6843c0 -11.8987 7.35342 -23.0002 19.6686 -29.6516 3.5696 -1.9038 6.6276 -3.8195 9.3524 -5.4972 1.4993 -0.9281 2.9152 -1.7967 4.2836 -2.6059 4.1764 -2.47489 7.746 -4.12882 11.3157 -4.12882 3.5696 0 6.687 1.42785 10.5898 3.73622 1.1899 0.6782 2.3798 1.4159 3.6529 2.225 2.9628 1.8325 6.3064 3.9028 10.7089 6.2707 12.3152 6.6514 19.6686 17.741 19.6686 29.6516 0 19.7162 -20.0137 35.7557 -44.6202 35.7557Zm0 -74.66453c-2.8795 0 -5.9494 1.48733 -9.8165 3.72433 -1.3446 0.7853 -2.7367 1.6539 -4.2122 2.5582 -2.7724 1.7134 -5.9493 3.6529 -9.5189 5.5924C10.7451 27.7783 3.97468 37.8803 3.97468 48.6843c0 18.0742 18.68102 32.7811 41.64562 32.7811 22.9645 0 41.6455 -14.7069 41.6455 -32.7811 0 -10.804 -6.7704 -20.906 -18.1098 -27.0101 -4.4978 -2.3797 -8.0079 -4.6167 -10.8517 -6.3777 -1.297 -0.7972 -2.4868 -1.535 -3.5696 -2.1894 -3.6053 -2.1418 -6.2349 -3.33163 -9.1144 -3.33163Z" stroke-width="1"></path>
11
+ <path fill="#b71422" d="M54.0082 57.3704c-0.5345 2.1893 -1.7512 4.1519 -3.4744 5.6043 -1.2937 1.254 -2.9684 2.0412 -4.7595 2.2369 -1.8449 -0.1647 -3.5784 -0.9538 -4.9142 -2.2369 -1.7055 -1.4593 -2.9051 -3.4212 -3.4268 -5.6043 -0.035 -0.2627 0.0535 -0.5268 0.2397 -0.7153s0.4491 -0.2803 0.7122 -0.2485h14.683c0.2612 -0.0278 0.5206 0.0657 0.704 0.2537 0.1833 0.188 0.2703 0.4497 0.236 0.7101Z" stroke-width="1"></path>
12
+ <path fill="#ff6164" d="M40.8607 63.0701c1.3331 1.2839 3.0603 2.0804 4.9023 2.2608 1.8377 -0.183 3.5604 -0.9793 4.8903 -2.2608 0.4255 -0.3965 0.823 -0.8219 1.1899 -1.2732 -1.4815 -1.6807 -3.5911 -2.6752 -5.8304 -2.7486 -2.4064 0.057 -4.631 1.2939 -5.9493 3.3079 0.2736 0.2499 0.5116 0.4878 0.7972 0.7139Z" stroke-width="1"></path>
13
+ <path fill="#000000" d="M41.0511 62.1303c1.1952 -1.5449 3.0324 -2.4569 4.9856 -2.4749 1.7819 0.0525 3.4797 0.7699 4.7595 2.0109 0.2736 -0.2975 0.5354 -0.6069 0.7853 -0.9162 -1.5138 -1.4417 -3.5142 -2.2614 -5.6043 -2.2965 -2.2617 0.0195 -4.3961 1.0496 -5.8185 2.8081 0.2813 0.3057 0.5792 0.5957 0.8924 0.8686Z" stroke-width="1"></path>
14
+ <path fill="#000000" d="M45.7274 65.9259c-1.9828 -0.1737 -3.8487 -1.0124 -5.2949 -2.3798 -1.8419 -1.5578 -3.1383 -3.6629 -3.7005 -6.0088 -0.0817 -0.423 0.032 -0.8603 0.3093 -1.1899 0.3305 -0.399 0.8267 -0.623 1.3446 -0.6068h14.683c0.5168 -0.0109 1.0109 0.2121 1.3446 0.6068 0.2747 0.3309 0.3841 0.7687 0.2974 1.1899 -0.5622 2.3459 -1.8586 4.451 -3.7005 6.0088 -1.4431 1.365 -3.3044 2.2034 -5.283 2.3798Zm-7.3415 -8.8051c-0.1904 0 -0.238 0.0833 -0.2499 0.1071 0.503 2.0343 1.6407 3.8556 3.2484 5.1998 1.1755 1.1581 2.7039 1.8909 4.343 2.0822 1.6349 -0.1891 3.1615 -0.9127 4.343 -2.0584 1.6026 -1.3465 2.736 -3.1674 3.2365 -5.1998 -0.0529 -0.0776 -0.1448 -0.1189 -0.238 -0.1071l-14.683 -0.0238Z" stroke-width="1"></path>
15
+ <path fill="#febbd0" d="M63.7298 58.1082c3.8443 0 6.9608 -1.8326 6.9608 -4.0932s-3.1165 -4.0931 -6.9608 -4.0931 -6.9608 1.8325 -6.9608 4.0931c0 2.2606 3.1165 4.0932 6.9608 4.0932Z" stroke-width="1"></path>
16
+ <path fill="#febbd0" d="M27.7127 58.1082c3.8443 0 6.9608 -1.8326 6.9608 -4.0932s-3.1165 -4.0931 -6.9608 -4.0931 -6.9607 1.8325 -6.9607 4.0931c0 2.2606 3.1164 4.0932 6.9607 4.0932Z" stroke-width="1"></path>
17
+ <path fill="#000000" d="M30.9838 52.3729c2.6528 0.0048 5.0471 -1.5896 6.0656 -4.0391 1.0185 -2.4495 0.4605 -5.2713 -1.4136 -7.1489 -1.8741 -1.8775 -4.695 -2.4406 -7.1463 -1.4265 -2.4514 1.014 -4.05 3.4054 -4.05 6.0582 0 3.6163 2.928 6.5497 6.5443 6.5563Zm29.4731 -0.0001c2.656 0.0193 5.0612 -1.5658 6.091 -4.0141 1.0298 -2.4483 0.4807 -5.276 -1.3906 -7.1609 -1.8712 -1.8849 -4.6949 -2.4546 -7.1506 -1.4427s-4.0584 3.4055 -4.0584 6.0615c-0.0066 3.6051 2.9036 6.5366 6.5086 6.5562Z" stroke-width="1"></path>
18
+ <path fill="#ffffff" d="M28.9614 46.2328c0.9973 0.0048 1.899 -0.5923 2.284 -1.5122 0.385 -0.92 0.1772 -1.9814 -0.5263 -2.6883 -0.7034 -0.7069 -1.7638 -0.9198 -2.6856 -0.5392 -0.9218 0.3805 -1.5232 1.2793 -1.5232 2.2766 0 1.3557 1.0954 2.4565 2.4511 2.4631Zm29.4732 0c0.9972 0.0048 1.899 -0.5923 2.284 -1.5122 0.385 -0.92 0.1772 -1.9814 -0.5263 -2.6883 -0.7035 -0.7069 -1.7638 -0.9198 -2.6856 -0.5392 -0.9219 0.3805 -1.5233 1.2793 -1.5233 2.2766 -0.0001 1.3465 1.081 2.4435 2.4274 2.4631h0.0238Z" stroke-width="1"></path>
19
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 180"><mask height="180" id="nextjs_icon_dark__:r8:mask0_408_134" maskUnits="userSpaceOnUse" width="180" x="0" y="0" style="mask-type: alpha;"><circle cx="90" cy="90" fill="black" r="90"/></mask><g mask="url(#nextjs_icon_dark__:r8:mask0_408_134)"><circle cx="90" cy="90" data-circle="true" fill="black" r="90"/><path d="M149.508 157.52L69.142 54H54V125.97H66.1136V69.3836L139.999 164.845C143.333 162.614 146.509 160.165 149.508 157.52Z" fill="url(#nextjs_icon_dark__:r8:paint0_linear_408_134)"/><rect fill="url(#nextjs_icon_dark__:r8:paint1_linear_408_134)" height="72" width="12" x="115" y="54"/></g><defs><linearGradient gradientUnits="userSpaceOnUse" id="nextjs_icon_dark__:r8:paint0_linear_408_134" x1="109" x2="144.5" y1="116.5" y2="160.5"><stop stop-color="white"/><stop offset="1" stop-color="white" stop-opacity="0"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="nextjs_icon_dark__:r8:paint1_linear_408_134" x1="121" x2="120.799" y1="54" y2="106.875"><stop stop-color="white"/><stop offset="1" stop-color="white" stop-opacity="0"/></linearGradient></defs></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 432.071 445.383"><g style="fill-rule:nonzero;clip-rule:nonzero;fill:none;stroke:#fff;stroke-width:12.4651;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"><path d="M323.205 324.227c2.833-23.601 1.984-27.062 19.563-23.239l4.463.392c13.517.615 31.199-2.174 41.587-7 22.362-10.376 35.622-27.7 13.572-23.148-50.297 10.376-53.755-6.655-53.755-6.655 53.111-78.803 75.313-178.836 56.149-203.322-52.27-66.789-142.748-35.206-144.262-34.386l-.482.089c-9.938-2.062-21.06-3.294-33.554-3.496-22.761-.374-40.032 5.967-53.133 15.904 0 0-161.408-66.498-153.899 83.628 1.597 31.936 45.777 241.655 98.47 178.31 19.259-23.163 37.871-42.748 37.871-42.748 9.242 6.14 20.307 9.272 31.912 8.147l.897-.765c-.281 2.876-.157 5.689.359 9.019-13.572 15.167-9.584 17.83-36.723 23.416-27.457 5.659-11.326 15.734-.797 18.367 12.768 3.193 42.305 7.716 62.268-20.224l-.795 3.188c5.325 4.26 4.965 30.619 5.72 49.452.756 18.834 2.017 36.409 5.856 46.771 3.839 10.36 8.369 37.05 44.036 29.406 29.809-6.388 52.6-15.582 54.677-101.107" style="fill:#000;stroke:#000;stroke-width:37.3953;stroke-linecap:butt;stroke-linejoin:miter"/><path stroke="none" d="M402.395 271.23c-50.302 10.376-53.76-6.655-53.76-6.655 53.111-78.808 75.313-178.843 56.153-203.326-52.27-66.785-142.752-35.2-144.262-34.38l-.486.087c-9.938-2.063-21.06-3.292-33.56-3.496-22.761-.373-40.026 5.967-53.127 15.902 0 0-161.411-66.495-153.904 83.63 1.597 31.938 45.776 241.657 98.471 178.312 19.26-23.163 37.869-42.748 37.869-42.748 9.243 6.14 20.308 9.272 31.908 8.147l.901-.765c-.28 2.876-.152 5.689.361 9.019-13.575 15.167-9.586 17.83-36.723 23.416-27.459 5.659-11.328 15.734-.796 18.367 12.768 3.193 42.307 7.716 62.266-20.224l-.796 3.188c5.319 4.26 9.054 27.711 8.428 48.969-.626 21.259-1.044 35.854 3.147 47.254 4.191 11.4 8.368 37.05 44.042 29.406 29.809-6.388 45.256-22.942 47.405-50.555 1.525-19.631 4.976-16.729 5.194-34.28l2.768-8.309c3.192-26.611.507-35.196 18.872-31.203l4.463.392c13.517.615 31.208-2.174 41.591-7 22.358-10.376 35.618-27.7 13.573-23.148z" style="fill:#336791;stroke:none"/><path d="M215.866 286.484c-1.385 49.516.348 99.377 5.193 111.495 4.848 12.118 15.223 35.688 50.9 28.045 29.806-6.39 40.651-18.756 45.357-46.051 3.466-20.082 10.148-75.854 11.005-87.281M173.104 38.256S11.583-27.76 19.092 122.365c1.597 31.938 45.779 241.664 98.473 178.316 19.256-23.166 36.671-41.335 36.671-41.335M260.349 26.207c-5.591 1.753 89.848-34.889 144.087 34.417 19.159 24.484-3.043 124.519-56.153 203.329"/><path d="M348.282 263.953s3.461 17.036 53.764 6.653c22.04-4.552 8.776 12.774-13.577 23.155-18.345 8.514-59.474 10.696-60.146-1.069-1.729-30.355 21.647-21.133 19.96-28.739-1.525-6.85-11.979-13.573-18.894-30.338-6.037-14.633-82.796-126.849 21.287-110.183 3.813-.789-27.146-99.002-124.553-100.599-97.385-1.597-94.19 119.762-94.19 119.762" style="stroke-linejoin:bevel"/><path d="M188.604 274.334c-13.577 15.166-9.584 17.829-36.723 23.417-27.459 5.66-11.326 15.733-.797 18.365 12.768 3.195 42.307 7.718 62.266-20.229 6.078-8.509-.036-22.086-8.385-25.547-4.034-1.671-9.428-3.765-16.361 3.994z"/><path d="M187.715 274.069c-1.368-8.917 2.93-19.528 7.536-31.942 6.922-18.626 22.893-37.255 10.117-96.339-9.523-44.029-73.396-9.163-73.436-3.193-.039 5.968 2.889 30.26-1.067 58.548-5.162 36.913 23.488 68.132 56.479 64.938"/><path d="M172.517 141.7c-.288 2.039 3.733 7.48 8.976 8.207 5.234.73 9.714-3.522 9.998-5.559.284-2.039-3.732-4.285-8.977-5.015-5.237-.731-9.719.333-9.996 2.367z" style="fill:#fff;stroke-width:4.155;stroke-linecap:butt;stroke-linejoin:miter"/><path d="M331.941 137.543c.284 2.039-3.732 7.48-8.976 8.207-5.238.73-9.718-3.522-10.005-5.559-.277-2.039 3.74-4.285 8.979-5.015 5.239-.73 9.718.333 10.002 2.368z" style="fill:#fff;stroke-width:2.0775;stroke-linecap:butt;stroke-linejoin:miter"/><path d="M350.676 123.432c.863 15.994-3.445 26.888-3.988 43.914-.804 24.748 11.799 53.074-7.191 81.435"/></g></svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 96 96" id="Prisma--Streamline-Svg-Logos">
2
+ <desc>
3
+ Prisma Streamline Icon: https://streamlinehq.com
4
+ </desc>
5
+ <path fill="#000000" d="M86.408 72.6146 54.0819 3.96521c-0.8183 -1.72119 -2.5144 -2.8552 -4.4177 -2.95369 -1.9076 -0.127818 -3.728 0.8159 -4.7231 2.44849L9.8798 60.2476c-1.08846 1.7506 -1.06556 3.9729 0.05875 5.7006L27.0803 92.4939c1.3319 2.0465 3.8513 2.973 6.1917 2.2769l49.7453 -14.7144c1.5154 -0.4431 2.7643 -1.5214 3.4236 -2.956 0.6504 -1.4278 0.6392 -3.0694 -0.0305 -4.4882l-0.0024 0.0024Zm-7.2373 2.9443L36.9589 88.041c-1.2877 0.383 -2.5237 -0.7331 -2.2558 -2.0326l15.081 -72.2116c0.282 -1.3512 2.1477 -1.565 2.7375 -0.3149l27.918 59.2854c0.2498 0.5347 0.2528 1.1519 0.0082 1.689 -0.2446 0.5371 -0.7122 0.94 -1.2795 1.1026h0.0024Z" stroke-width="1"></path>
6
+ </svg>
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 96 96" id="React-Query-Icon--Streamline-Svg-Logos">
2
+ <desc>
3
+ React Query Icon Streamline Icon: https://streamlinehq.com
4
+ </desc>
5
+ <path fill="#00435b" d="m59.0084 58.2218 -1.803 3.131c-0.5432 0.9431 -1.5487 1.5244 -2.6371 1.5244H40.7557c-1.0884 0 -2.0939 -0.5813 -2.6371 -1.5244l-1.8032 -3.131h22.693Zm5.0478 -8.7648 -3.1793 5.5203h-26.43l-3.1791 -5.5203h32.7884Zm-3.0625 -8.5709 3.0676 5.3266H31.2627l3.0675 -5.3266h26.6635Zm-6.4254 -8.1024c1.0884 0 2.0939 0.5813 2.6371 1.5244l1.9198 3.3335H36.1987l1.9199 -3.3335c0.5432 -0.9431 1.5487 -1.5244 2.6371 -1.5244h13.8126Z" stroke-width="1"></path>
6
+ <path fill="#002b3b" d="M20.6529 31.3313c-1.5301 -7.4194 -1.8584 -13.11 -0.8694 -17.2421 0.5882 -2.4576 1.6636 -4.46246 3.2989 -5.90893 1.7264 -1.52709 3.9091 -2.27644 6.3616 -2.27644 4.046 0 8.2992 1.845 12.8446 5.34997 1.854 1.4297 3.7782 3.1529 5.7765 5.1706 0.1591 -0.2048 0.3389 -0.3979 0.5392 -0.5764 5.6497 -5.0347 10.4062 -8.16276 14.4745 -9.36886 2.419 -0.71714 4.6902 -0.78547 6.7584 -0.08945 2.1831 0.73469 3.9226 2.25339 5.1499 4.38061 2.0254 3.5107 2.5595 8.1238 1.8044 13.8197 -0.3078 2.3217 -0.834 4.8508 -1.5775 7.591 0.2805 0.0339 0.5617 0.0961 0.8401 0.1883 7.1682 2.3754 12.244 4.9299 15.317 7.8493 1.8284 1.7369 3.0223 3.6706 3.4539 5.8111 0.4556 2.2593 0.0114 4.5255 -1.2144 6.6511 -2.0217 3.5056 -5.7389 6.2705 -11.0346 8.4604 -2.1264 0.8793 -4.5323 1.6757 -7.2204 2.392 0.1227 0.2769 0.2178 0.571 0.2815 0.8796 1.5301 7.4193 1.8584 13.1099 0.8694 17.2421 -0.5882 2.4576 -1.6637 4.4624 -3.2989 5.9089 -1.7264 1.5271 -3.9091 2.2764 -6.3617 2.2764 -4.0459 0 -8.2992 -1.845 -12.8446 -5.35 -1.8737 -1.4448 -3.8191 -3.1895 -5.8403 -5.235 -0.208 0.3253 -0.4633 0.6276 -0.7653 0.8968 -5.6497 5.0346 -10.4062 8.1627 -14.4745 9.3688 -2.419 0.7171 -4.6902 0.7854 -6.7584 0.0894 -2.1831 -0.7347 -3.9226 -2.2534 -5.1499 -4.3806 -2.0254 -3.5107 -2.5595 -8.1237 -1.8044 -13.8197 0.3189 -2.4056 0.8723 -5.0339 1.6589 -7.889 -0.3074 -0.0311 -0.6162 -0.0961 -0.9215 -0.1973 -7.1682 -2.3755 -12.24399 -4.93 -15.31702 -7.8493 -1.82837 -1.7369 -3.02232 -3.6706 -3.45392 -5.8111 -0.455563 -2.2593 -0.01136 -4.5255 1.21448 -6.6511 2.02167 -3.5056 5.73891 -6.2705 11.03456 -8.4604 2.1898 -0.9056 4.6759 -1.7231 7.4614 -2.4558 -0.0992 -0.243 -0.1776 -0.4984 -0.2325 -0.7646Z" stroke-width="1"></path>
7
+ <path fill="#ff4154" d="M70.6357 65.1418c0.7128 -0.1263 1.3957 0.3307 1.5549 1.0317l0.0087 0.0415 0.076 0.3945c2.4637 12.9531 0.7282 19.4297 -5.2067 19.4297 -5.8066 0 -13.1984 -5.5264 -22.1753 -16.5794 -0.1984 -0.2442 -0.3054 -0.5499 -0.3027 -0.8645 0.0065 -0.7329 0.5946 -1.3245 1.3223 -1.3404l0.0421 -0.0002 0.4727 0.0033c3.7776 0.0205 7.4499 -0.1112 11.017 -0.3951 4.2108 -0.3351 8.6078 -0.9088 13.191 -1.7211Zm-40.7582 -9.7913 0.0227 0.0384 0.2372 0.414c1.9009 3.3047 3.8814 6.4413 5.9414 9.4098 2.4261 3.4959 5.1543 7.0349 8.1847 10.617 0.4688 0.5542 0.4152 1.3767 -0.1136 1.8659l-0.0344 0.0308 -0.305 0.2624c-10.0264 8.5911 -16.5431 10.3061 -19.5503 5.1452 -2.9435 -5.0517 -1.8763 -14.2372 3.2016 -27.5564 0.1116 -0.2927 0.3213 -0.5376 0.5933 -0.6928 0.6358 -0.3629 1.4419 -0.1534 1.8224 0.4657ZM75.7236 36.237l0.0411 0.0134 0.3774 0.1303C88.518 40.6858 93.22 45.417 90.2479 50.5742c-2.9068 5.0438 -11.3571 8.7162 -25.351 11.0171 -0.3121 0.0513 -0.6323 -0.0084 -0.9049 -0.1687 -0.6439 -0.3785 -0.8591 -1.2074 -0.4805 -1.8514 2.0043 -3.4094 3.8095 -6.8018 5.4155 -10.1771 1.8215 -3.8281 3.5308 -7.937 5.128 -12.3267 0.2422 -0.6656 0.9535 -1.0271 1.6274 -0.8424l0.0412 0.012Zm-43.7162 -2.1675c0.6439 0.3785 0.8591 1.2074 0.4805 1.8514 -2.0043 3.4094 -3.8095 6.8018 -5.4155 10.1772 -1.8215 3.828 -3.5308 7.9369 -5.128 12.3267 -0.2471 0.6791 -0.9828 1.0416 -1.6686 0.8303l-0.0411 -0.0134 -0.3774 -0.1303C7.48136 54.8063 2.77941 50.0751 5.75147 44.918c2.90677 -5.0439 11.35713 -8.7163 25.35103 -11.0172 0.3121 -0.0513 0.6322 0.0084 0.9049 0.1687Zm39.7318 -21.2042c2.9435 5.0517 1.8763 14.2372 -3.2016 27.5564 -0.1116 0.2927 -0.3213 0.5376 -0.5933 0.6929 -0.6358 0.3628 -1.4419 0.1533 -1.8224 -0.4658l-0.0227 -0.0384 -0.2372 -0.414c-1.9009 -3.3047 -3.8814 -6.4413 -5.9414 -9.4098 -2.4261 -3.4958 -5.1543 -7.0349 -8.1847 -10.617 -0.4688 -0.5542 -0.4153 -1.3767 0.1136 -1.8659l0.0344 -0.0308 0.3049 -0.2624C62.2152 9.41945 68.732 7.7044 71.7392 12.8653ZM29.4379 9.79102c5.8067 0 13.1985 5.52648 22.1754 16.57938 0.1984 0.2442 0.3054 0.5499 0.3027 0.8645 -0.0065 0.7329 -0.5946 1.3245 -1.3223 1.3404l-0.0421 0.0003 -0.4727 -0.0034c-3.7776 -0.0205 -7.4499 0.1112 -11.017 0.3951 -4.2108 0.3352 -8.6078 0.9089 -13.191 1.7211 -0.7128 0.1263 -1.3958 -0.3306 -1.5549 -1.0316l-0.0087 -0.0416 -0.076 -0.3945c-2.4638 -12.9531 -0.7282 -19.42968 5.2066 -19.42968Z" stroke-width="1"></path>
8
+ <path fill="#ffd94c" d="M41.8656 32.9536h11.5943c1.6956 0 3.2617 0.9069 4.1057 2.3775l5.8216 10.1439c0.8375 1.4593 0.8375 3.2534 0 4.7126l-5.8216 10.1439c-0.844 1.4706 -2.4101 2.3775 -4.1057 2.3775H41.8656c-1.6956 0 -3.2617 -0.9069 -4.1057 -2.3775l-5.8217 -10.1439c-0.8374 -1.4592 -0.8374 -3.2533 0 -4.7126l5.8217 -10.1439c0.844 -1.4706 2.4101 -2.3775 4.1057 -2.3775Zm9.8272 3.0617c1.6965 0 3.2633 0.9078 4.1069 2.3797l4.0596 7.0822c0.8358 1.4581 0.8358 3.2501 0 4.7082l-4.0596 7.0823c-0.8436 1.4718 -2.4104 2.3797 -4.1069 2.3797h-8.0602c-1.6965 0 -3.2632 -0.9079 -4.1069 -2.3797l-4.0596 -7.0823c-0.8358 -1.4581 -0.8358 -3.2501 0 -4.7082l4.0596 -7.0822c0.8437 -1.4719 2.4104 -2.3797 4.1069 -2.3797h8.0602Zm-1.9047 3.3486h-4.2508c-1.6948 0 -3.2602 0.906 -4.1046 2.3755l-2.1452 3.7336c-0.839 1.4603 -0.839 3.2564 0 4.7167l2.1452 3.7335c0.8444 1.4695 2.4098 2.3755 4.1046 2.3755h4.2508c1.6948 0 3.2603 -0.906 4.1046 -2.3755l2.1452 -3.7335c0.839 -1.4603 0.839 -3.2564 0 -4.7167l-2.1452 -3.7336c-0.8443 -1.4695 -2.4098 -2.3755 -4.1046 -2.3755Zm-1.8339 3.2052c1.6935 0 3.258 0.9047 4.1027 2.3724l0.3042 0.5284c0.8414 1.4618 0.8414 3.261 0 4.7228l-0.3042 0.5284c-0.8447 1.4678 -2.4092 2.3724 -4.1027 2.3724h-0.583c-1.6935 0 -3.2579 -0.9046 -4.1027 -2.3724l-0.3042 -0.5284c-0.8414 -1.4618 -0.8414 -3.261 0 -4.7228l0.3042 -0.5284c0.8448 -1.4677 2.4092 -2.3724 4.1027 -2.3724h0.583Zm-0.2907 3.1573c-0.7538 0 -1.4489 0.4012 -1.8252 1.0525 -0.3763 0.6511 -0.3763 1.4537 0 2.1049 0.3763 0.6512 1.0714 1.0524 1.8236 1.0524 0.7538 0 1.4489 -0.4012 1.8252 -1.0524 0.3763 -0.6512 0.3763 -1.4538 0 -2.1049 -0.3763 -0.6513 -1.0714 -1.0525 -1.8236 -1.0525Zm-17.0776 2.1049h3.7897Z" stroke-width="1"></path>
9
+ </svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg width="569px" height="512px" viewBox="0 0 569 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill="none" fill-rule="evenodd"><g fill="#087EA4" fill-rule="nonzero"><path d="M285.5,201 C255.400481,201 231,225.400481 231,255.5 C231,285.599519 255.400481,310 285.5,310 C315.599519,310 340,285.599519 340,255.5 C340,225.400481 315.599519,201 285.5,201" id="react_light__Path"/><path d="M568.959856,255.99437 C568.959856,213.207656 529.337802,175.68144 466.251623,150.985214 C467.094645,145.423543 467.85738,139.922107 468.399323,134.521063 C474.621631,73.0415145 459.808523,28.6686204 426.709856,9.5541429 C389.677085,-11.8291748 337.36955,3.69129898 284.479928,46.0162134 C231.590306,3.69129898 179.282771,-11.8291748 142.25,9.5541429 C109.151333,28.6686204 94.3382249,73.0415145 100.560533,134.521063 C101.102476,139.922107 101.845139,145.443621 102.708233,151.02537 C97.4493791,153.033193 92.2908847,155.161486 87.3331099,157.39017 C31.0111824,182.708821 0,217.765415 0,255.99437 C0,298.781084 39.6220545,336.307301 102.708233,361.003527 C101.845139,366.565197 101.102476,372.066633 100.560533,377.467678 C94.3382249,438.947226 109.151333,483.32012 142.25,502.434597 C153.629683,508.887578 166.52439,512.186771 179.603923,511.991836 C210.956328,511.991836 247.567589,495.487529 284.479928,465.972527 C321.372196,495.487529 358.003528,511.991836 389.396077,511.991836 C402.475265,512.183856 415.36922,508.884856 426.75,502.434597 C459.848667,483.32012 474.661775,438.947226 468.439467,377.467678 C467.897524,372.066633 467.134789,366.565197 466.291767,361.003527 C529.377946,336.347457 569,298.761006 569,255.99437 M389.155214,27.1025182 C397.565154,26.899606 405.877839,28.9368502 413.241569,33.0055186 C436.223966,46.2772304 446.540955,82.2775015 441.522965,131.770345 C441.181741,135.143488 440.780302,138.556788 440.298575,141.990165 C414.066922,134.08804 387.205771,128.452154 360.010724,125.144528 C343.525021,103.224055 325.192524,82.7564475 305.214266,63.9661533 C336.586743,39.7116483 366.032313,27.1025182 389.135142,27.1025182 M378.356498,310.205598 C368.204912,327.830733 357.150626,344.919965 345.237759,361.405091 C325.045049,363.479997 304.758818,364.51205 284.459856,364.497299 C264.167589,364.51136 243.888075,363.479308 223.702025,361.405091 C211.820914,344.919381 200.80007,327.83006 190.683646,310.205598 C180.532593,292.629285 171.306974,274.534187 163.044553,255.99437 C171.306974,237.454554 180.532593,219.359455 190.683646,201.783142 C200.784121,184.229367 211.770999,167.201087 223.601665,150.764353 C243.824636,148.63809 264.145559,147.579168 284.479928,147.591877 C304.772146,147.579725 325.051559,148.611772 345.237759,150.68404 C357.109048,167.14607 368.136094,184.201112 378.27621,201.783142 C388.419418,219.363718 397.644825,237.458403 405.915303,255.99437 C397.644825,274.530337 388.419418,292.625022 378.27621,310.205598 M419.724813,290.127366 C426.09516,307.503536 431.324985,325.277083 435.380944,343.334682 C417.779633,348.823635 399.836793,353.149774 381.668372,356.285142 C388.573127,345.871232 395.263781,335.035679 401.740334,323.778483 C408.143291,312.655143 414.144807,301.431411 419.805101,290.207679 M246.363271,390.377981 C258.848032,391.140954 271.593728,391.582675 284.5,391.582675 C297.406272,391.582675 310.232256,391.140954 322.737089,390.377981 C310.880643,404.583418 298.10766,417.997563 284.5,430.534446 C270.921643,417.999548 258.18192,404.585125 246.363271,390.377981 Z M187.311556,356.244986 C169.137286,353.123646 151.187726,348.810918 133.578912,343.334682 C137.618549,325.305649 142.828222,307.559058 149.174827,290.207679 C154.754833,301.431411 160.736278,312.655143 167.239594,323.778483 C173.74291,334.901824 180.467017,345.864539 187.311556,356.285142 M149.174827,221.760984 C142.850954,204.473938 137.654787,186.794745 133.619056,168.834762 C151.18418,163.352378 169.085653,159.013101 187.211197,155.844146 C180.346585,166.224592 173.622478,176.986525 167.139234,188.210257 C160.65599,199.433989 154.734761,210.517173 149.074467,221.760984 M322.616657,121.590681 C310.131896,120.827708 297.3862,120.385987 284.379568,120.385987 C271.479987,120.385987 258.767744,120.787552 246.242839,121.590681 C258.061488,107.383537 270.801211,93.9691137 284.379568,81.4342157 C297.99241,93.9658277 310.765727,107.380324 322.616657,121.590681 Z M401.70019,188.210257 C395.196875,176.939676 388.472767,166.09743 381.527868,155.68352 C399.744224,158.819049 417.734224,163.151949 435.380944,168.654058 C431.331963,186.680673 426.122466,204.426664 419.785029,221.781062 C414.205023,210.55733 408.203506,199.333598 401.720262,188.230335 M127.517179,131.790423 C122.438973,82.3176579 132.816178,46.2973086 155.778503,33.0255968 C163.144699,28.9632474 171.455651,26.9264282 179.864858,27.1225964 C202.967687,27.1225964 232.413257,39.7317265 263.785734,63.9862316 C243.794133,82.7898734 225.448298,103.270812 208.949132,125.204763 C181.761691,128.528025 154.90355,134.14313 128.661281,141.990165 C128.199626,138.556788 127.778115,135.163566 127.456963,131.790423 M98.4529773,182.106474 C101.54406,180.767925 104.695358,179.429376 107.906872,178.090828 C114.220532,204.735668 122.781793,230.7969 133.498624,255.99437 C122.761529,281.241316 114.193296,307.357063 107.8868,334.058539 C56.7434387,313.076786 27.0971497,284.003505 27.0971497,255.99437 C27.0971497,229.450947 53.1907013,202.526037 98.4529773,182.106474 Z M155.778503,478.963143 C132.816178,465.691432 122.438973,429.671082 127.517179,380.198317 C127.838331,376.825174 128.259842,373.431953 128.721497,369.978497 C154.953686,377.878517 181.814655,383.514365 209.009348,386.824134 C225.500295,408.752719 243.832321,429.233234 263.805806,448.042665 C220.069,481.834331 180.105722,492.97775 155.838719,478.963143 M441.502893,380.198317 C446.520883,429.691161 436.203894,465.691432 413.221497,478.963143 C388.974566,493.017906 348.991216,481.834331 305.274481,448.042665 C325.241364,429.232737 343.566681,408.752215 360.050868,386.824134 C387.245915,383.516508 414.107066,377.880622 440.338719,369.978497 C440.820446,373.431953 441.221885,376.825174 441.563109,380.198317 M461.193488,334.018382 C454.869166,307.332523 446.294494,281.231049 435.561592,255.99437 C446.289797,230.744081 454.857778,204.629101 461.173416,177.930202 C512.216417,198.911955 541.942994,227.985236 541.942994,255.99437 C541.942994,284.003505 512.296705,313.076786 461.153344,334.058539" id="react_light__Shape"/></g></g></svg>
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 96 96" id="Tailwindcss-Icon--Streamline-Svg-Logos">
2
+ <desc>
3
+ Tailwindcss Icon Streamline Icon: https://streamlinehq.com
4
+ </desc>
5
+ <path fill="url(#a)" d="M48 19.7998c-12.5333 0-20.3667 6.2667-23.5 18.8 4.7-6.2667 10.1833-8.6167 16.45-7.05 3.5755.8939 6.1311 3.4878 8.9598 6.3591 4.6081 4.6774 9.9413 10.0909 21.5902 10.0909 12.5333 0 20.3667-6.2667 23.5-18.8-4.7 6.2667-10.1833 8.6167-16.45 7.05-3.5755-.8939-6.1311-3.4877-8.9598-6.3591C64.9821 25.2133 59.6489 19.7998 48 19.7998Zm-23.5 28.2c-12.5333 0-20.36667 6.2667-23.5 18.8 4.7-6.2667 10.1833-8.6167 16.45-7.05 3.5755.8939 6.1311 3.4878 8.9598 6.3591C31.0179 70.7863 36.3511 76.1998 48 76.1998c12.5333 0 20.3667-6.2667 23.5-18.8-4.7 6.2667-10.1833 8.6167-16.45 7.05-3.5755-.8939-6.1311-3.4877-8.9598-6.3591-4.6081-4.6774-9.9413-10.0909-21.5902-10.0909Z"></path>
6
+ <defs>
7
+ <linearGradient id="a" x1="-260.111" x2="7858.33" y1="1824.6" y2="6505.5" gradientUnits="userSpaceOnUse">
8
+ <stop stop-color="#2298bd"></stop>
9
+ <stop offset="1" stop-color="#0ed7b5"></stop>
10
+ </linearGradient>
11
+ </defs>
12
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><rect width="28" height="28" x="2" y="2" fill="#3178c6" rx="1.312"/><path fill="#fff" d="m25.158 25.589l.391-.383c1.809.058 1.837 0 1.917-.188l.5-1.193l.034-.114l-.041-.1c-.021-.052-.087-.212-1.217-1.273v-.558c1.3-1.238 1.276-1.3 1.2-1.486l-.5-1.206c-.075-.18-.108-.252-1.9-.2l-.392-.389a8.5 8.5 0 0 0-.061-1.759l-.051-.113l-1.292-.557c-.19-.086-.257-.117-1.477 1.193l-.548-.008c-1.257-1.322-1.316-1.3-1.508-1.223l-1.2.479c-.188.076-.254.107-.182 1.9l-.387.381c-1.809-.059-1.831 0-1.915.188l-.5 1.19l-.029.112l.041.1c.021.051.084.206 1.217 1.274v.557c-1.3 1.238-1.275 1.3-1.2 1.486l.494 1.207c.076.185.108.251 1.9.2l.391.4a8.5 8.5 0 0 0 .059 1.756l.05.114l1.3.56c.19.078.254.106 1.471-1.2l.548.006c1.258 1.324 1.323 1.3 1.508 1.225l1.2-.478c.187-.074.253-.103.179-1.9M20 22.8a2.11 2.11 0 0 1 1.214-2.73l.028-.011a2.164 2.164 0 0 1 2.781 1.225a2.113 2.113 0 0 1-1.2 2.726A2.19 2.19 0 0 1 20 22.8"/></svg>
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 96 96" id="Typescript-Icon--Streamline-Svg-Logos">
2
+ <desc>
3
+ Typescript Icon Streamline Icon: https://streamlinehq.com
4
+ </desc>
5
+ <path fill="#3178c6" d="M8.34375 1H87.6562C91.7121 1 95 4.28791 95 8.34375V87.6562C95 91.7121 91.7121 95 87.6562 95H8.34375C4.28791 95 1 91.7121 1 87.6562V8.34375C1 4.28791 4.28791 1 8.34375 1Z" stroke-width="1"></path>
6
+ <path fill="#ffffff" d="M56.2683 74.6119v10.1417c1.6494 0.8453 3.6003 1.4791 5.8523 1.9017 2.2519 0.4226 4.6254 0.6338 7.1208 0.6338 2.4315 0 4.7419 -0.2325 6.9303 -0.6973 2.1885 -0.4649 4.1078 -1.2308 5.7568 -2.2975 1.6494 -1.0671 2.9551 -2.4616 3.9175 -4.1838 0.962 -1.7217 1.4431 -3.8503 1.4431 -6.3857 0 -1.8381 -0.2751 -3.4494 -0.8247 -4.8333 -0.5497 -1.3839 -1.3428 -2.6147 -2.3791 -3.6921 -1.0358 -1.0777 -2.2783 -2.0441 -3.7265 -2.9 -1.4486 -0.8556 -3.0822 -1.6637 -4.9009 -2.4242 -1.3321 -0.5497 -2.5266 -1.0828 -3.5841 -1.6006 -1.0571 -0.5177 -1.956 -1.0457 -2.6959 -1.5847 -0.7402 -0.5387 -1.3112 -1.1093 -1.7129 -1.7115 -0.4017 -0.6022 -0.6026 -1.2833 -0.6026 -2.0441 0 -0.6973 0.1796 -1.3256 0.5391 -1.8855 0.3594 -0.56 0.8673 -1.0406 1.5227 -1.442 0.6554 -0.4017 1.4588 -0.7131 2.4106 -0.9352 0.9513 -0.2218 2.0088 -0.3327 3.1717 -0.3327 0.846 0 1.7394 0.0635 2.6801 0.1902 0.9411 0.1267 1.8874 0.322 2.8391 0.5864 0.9514 0.264 1.8764 0.5967 2.7752 0.9984 0.8985 0.4013 1.7287 0.8662 2.4899 1.3942v-9.476c-1.5436 -0.5915 -3.2301 -1.03 -5.0591 -1.3153 -1.8289 -0.2853 -3.9278 -0.4277 -6.2961 -0.4277 -2.4106 0 -4.6942 0.2588 -6.851 0.7766 -2.1569 0.5173 -4.0549 1.3255 -5.6936 2.4241 -1.6388 1.099 -2.9339 2.4987 -3.8856 4.1996 -0.9514 1.7008 -1.4273 3.7343 -1.4273 6.1008 0 3.0212 0.8721 5.5989 2.617 7.7329 1.7445 2.1338 4.3926 3.9403 7.9452 5.4194 1.3957 0.5706 2.6962 1.1302 3.9013 1.6798 1.2055 0.5494 2.2469 1.1196 3.1244 1.7111 0.8776 0.5916 1.5701 1.236 2.0776 1.9333 0.5074 0.6973 0.7612 1.4897 0.7612 2.3772 0 0.6547 -0.1587 1.2623 -0.4759 1.8223 -0.3169 0.5596 -0.7983 1.0458 -1.4431 1.4577 -0.6447 0.412 -1.4485 0.7341 -2.4105 0.9665 -0.9621 0.2324 -2.0882 0.3488 -3.3782 0.3488 -2.1991 0 -4.3768 -0.3855 -6.5337 -1.157 -2.1572 -0.7711 -4.1555 -1.9277 -5.9951 -3.4703ZM39.3645 49.374h13.0417v-8.3506H16.0547v8.3506h12.9781v37.1807h10.3317V49.374Z" stroke-width="1"></path>
7
+ </svg>