- Svelte 64.5%
- TypeScript 32.9%
- CSS 1.7%
- JavaScript 0.3%
- Shell 0.3%
- Other 0.3%
| .forgejo/workflows | ||
| scripts | ||
| src | ||
| static | ||
| .dockerignore | ||
| .gitignore | ||
| .npmrc | ||
| .releaserc.cjs | ||
| CHANGELOG.md | ||
| Dockerfile | ||
| LICENSE | ||
| openapi.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| renovate.json | ||
| svelte.config.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
osc-skins-ui
SvelteKit UI for skins.sulej.net. The backend lives at osc_dev/osc-api.
Stack
- SvelteKit 2.x + Svelte 5 (runes)
- Tailwind 4 + bits-ui
- CodeMirror 6 (JSON editor)
@lucide/svelteicons@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 openapi.json from osc-api, regenerate src/lib/api-types.generated.ts
pnpm dev # vite dev server on :3000
pnpm sync-types fetches https://skins.sulej.net/api/openapi.json (the live backend spec — no git artifact needed) and runs openapi-typescript. Run it whenever the backend's API shape changes — the generated types replace the hand-mirrored SkinEntry / SkinsJson / CIRun etc. that used to drift in src/lib/api.ts. Override the base URL with OSC_API_URL=https://beta.skins.sulej.net pnpm sync-types to sync against the beta backend.
The lockfile is pnpm-lock.yaml; there is no package-lock.json (.npmrc sets package-lock=false).
Deployment
CI on push to main builds + pushes git.sulej.net/osc_dev/osc-skins-ui:latest. The server at /home/arlind/docker/oscbot/ runs docker compose pull && up -d to roll forward.
Traefik routes everything under skins.sulej.net (except /api/*) → osc-web-frontend: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.