SkinPrice is a desktop application for tracking skin prices with a local-first setup. The app is built on Wails, Go, and React, and stores data in SQLite by default.
- Search skins by name.
- Save skins to a personal watchlist.
- Refresh the price for one skin or the whole list.
- Store data locally without requiring external infrastructure.
- Use
SQLiteby default, with optionalPostgressupport for development scenarios.
- Backend:
Go - Desktop runtime:
Wails v2 - Frontend:
React + TypeScript + Vite - Default database:
SQLite
Tagged releases publish bootstrap packages for supported desktop platforms. Each bootstrap package already contains the launcher, current.json, and the latest application build in versions/<version>/.
- Latest release page: github.com/EnterNick/SkinPrice/releases/latest
- Linux bootstrap (
amd64): skinprice-bootstrap-linux-amd64.tar.gz - Windows bootstrap (
amd64): skinprice-bootstrap-windows-amd64.zip
These links point to bootstrap assets from the most recent published GitHub Release.
.
├── skinprice/ # Wails application
│ ├── frontend/ # React + TypeScript frontend
│ ├── internal/ # Backend application code
│ ├── build/ # Wails build configuration and output
│ ├── app.go
│ ├── main.go
│ └── wails.json
├── Makefile
├── go.mod
└── .github/workflows/ # CI/CD pipelines
Go 1.26.3Node.js 20npmWails v2
For Linux desktop builds, system packages required by Wails must also be installed.
- Create the environment file:
cp .env.example .env- Install frontend dependencies:
cd skinprice/frontend
npm install- Start the desktop app in development mode:
cd ../
wails devIf wails is not installed:
go install github.com/wailsapp/wails/v2/cmd/wails@v2.12.0Example configuration is provided in .env.example.
Important variables:
APP_ENV=localAPP_DB_DRIVER=sqlite3APP_DB_NAME=./skinprice.dbSTEAM_BASE_URL=https://steamcommunity.com/marketLISSKINS_BASE_URL=https://api.lis-skins.com/v1HTTP_TIMEOUT_SECONDS=10CACHE_TTL_SECONDS=300LOG_LEVEL=debugLOG_TO_FILE=true
SQLite is the default and recommended storage for local usage. Postgres can be enabled for development if needed.
Backend tests:
go test ./...Для поиска через LisSkins нужен персональный API-токен.
TOKEN_ENCRYPTION_KEY— base64-ключ длиной 32 байта (AES-256-GCM).
Пример генерации:
openssl rand -base64 32- Откройте профиль LisSkins:
https://lis-skins.com/profile/settings. - Сгенерируйте/скопируйте API-токен в личном кабинете.
- В приложении переключитесь на источник LisSkins, вставьте токен и нажмите Сохранить токен.
- Через UI: повторно откройте экран поиска LisSkins и очистите/обновите токен.
- Через БД SQLite вручную:
sqlite3 skinprice/skinprice.db "DELETE FROM source_states WHERE source = 'lisskins';"После удаления приложение снова покажет CTA на ввод токена.