SvelteKit UI for skins.sulej.net (frontend for skinhub/skinhub-api)
  • Svelte 60.8%
  • TypeScript 28.4%
  • JavaScript 8.2%
  • CSS 2.1%
  • HTML 0.2%
  • Other 0.2%
Find a file
skinhub-bot 16bda7504e
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
PR Check (skinhub-ui) / type-check + build (pull_request) Successful in 33s
Build and Push skinhub-ui / Release & build skinhub-ui (push) Successful in 56s
deps: update dependency bits-ui to v2.18.2
2026-08-22 14:01:19 +00:00
.forgejo/workflows fix: rename remaining osc references to skinhub 2026-08-13 09:13:00 +02:00
scripts chore: match the stub announcements limit 2026-08-19 00:21:38 +02:00
src feat: fold background rate limits into a collapsed section on the limits page 2026-08-19 00:20:52 +02:00
static chore: drop the unused logo-full.png asset 2026-07-07 17:25:04 +02:00
.dockerignore build(frontend): switch to pnpm, Node 24 LTS, pin TS to 5.x 2026-06-03 23:00:13 +02:00
.gitignore chore: ignore the playwright MCP scratch directory 2026-08-17 22:43:54 +02:00
.npmrc build(frontend): disable npm package-lock (pnpm repo) 2026-06-03 23:01:04 +02:00
.releaserc.cjs ci: skip changelog on beta prereleases via per-branch release config 2026-06-08 22:09:54 +02:00
CHANGELOG.md chore(release): 5.4.0 [skip ci] 2026-08-18 22:22:03 +00:00
components.json feat: adopt shadcn-svelte on the existing Catppuccin theme 2026-08-10 01:34:53 +02:00
Dockerfile build(frontend): switch to pnpm, Node 24 LTS, pin TS to 5.x 2026-06-03 23:00:13 +02:00
LICENSE chore: add AGPL-3.0 license 2026-05-19 11:52:51 +02:00
openapi.json chore: sync api types from skinhub-api@main 2026-08-19 00:17:42 +00:00
package.json chore(release): 5.4.0 [skip ci] 2026-08-18 22:22:03 +00:00
pnpm-lock.yaml deps: update dependency bits-ui to v2.18.2 2026-08-22 14:01:19 +00:00
README.md feat: first-run setup wizard, admin settings page, self-hosting link 2026-08-15 17:14:26 +02:00
renovate.json ci(renovate): use fast-forward automerge (repos disallow rebase-merge) 2026-07-03 16:20:27 +02:00
svelte.config.js docs: explain why style-src keeps unsafe-inline 2026-07-07 17:25:04 +02:00
tsconfig.json Initial commit: osc-skins-ui (SvelteKit UI for skins.sulej.net) 2026-05-17 14:35:15 +02:00
vite.config.ts chore: dev proxy /api/ only, not /api-prefixed pages 2026-08-13 09:56:36 +02:00

skinhub-ui

SvelteKit UI for skins.sulej.net. The backend lives at skinhub/skinhub-api.

Stack

  • SvelteKit 2.x + Svelte 5 (runes)
  • Tailwind 4 + bits-ui
  • CodeMirror 6 (JSON editor)
  • @lucide/svelte icons
  • @sveltejs/adapter-node (SSR)

Local dev

Requires Node 24 and pnpm (managed by corepack, which ships with Node):

corepack enable      # one-time: activates the pnpm pinned in package.json's "packageManager"
pnpm install
pnpm sync-types      # pull the committed openapi.json from skinhub-api, regenerate src/lib/api-types.generated.ts
pnpm dev             # vite dev server on :3000

pnpm sync-types fetches the openapi.json that skinhub-api's CI commits to the matching branch and runs openapi-typescript; pnpm sync-types:local dumps the spec straight from the sibling ../skinhub-api working tree instead (co-dev without a backend push). Run one of them whenever the backend's API shape changes and commit both the vendored openapi.json and the regenerated types — CI's check-types fails on any diff.

The lockfile is pnpm-lock.yaml; there is no package-lock.json (.npmrc sets package-lock=false).

Deployment

CI on push to main/beta builds + pushes git.sulej.net/skinhub/skinhub-ui, bumps the pinned tag in skinhub/deploy, and Komodo redeploys the stack (skinhub-ui, or skinhub-ui-beta for the beta branch).

Traefik routes everything under skins.sulej.net (except /api/*) → the UI container on :3000.

License

Licensed under AGPL-3.0-only. The LICENSE file was added in 2026; all prior versions, releases, and container images (which predate the LICENSE file in the source tree) are also offered under AGPL-3.0 at the discretion of the copyright holder.