- TypeScript 71.1%
- Svelte 21%
- CSS 4.2%
- JavaScript 2.1%
- Shell 1.2%
- Other 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .forgejo/workflows | ||
| .husky | ||
| .opencode | ||
| assets | ||
| docs | ||
| public/assets | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| AI_PROFILES.md | ||
| CHANGELOG.md | ||
| Dockerfile | ||
| index.html | ||
| nginx.conf | ||
| nginx.main.conf | ||
| openapi-ts.config.ts | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| renovate.json | ||
| svelte.config.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
Slovo Propovedi — admin SPA (frontend)
Standalone frontend for the Слово.Проповеди admin panel: a Svelte 5 + Vite single-page
application (dark theme, Russian UI). It was split from the former slovo-propovedi-admin monorepo;
the old frontend/web-app/ path is now this repository's root.
The app talks to the API backend over generated HTTP clients — there is no OpenAPI file in this repo (see Regenerating the API client).
Prerequisites
- Node.js 22+ (npm 10+)
Development
npm install
npm run dev
npm run dev starts the Vite dev server (default http://localhost:5173).
Build
npm run build
Produces the production bundle in dist/. The app is served as a static SPA through nginx.conf
(a Docker image is built by Forgejo Actions on release — see Deployment).
Type-check
npm run check
Runs svelte-check — this is the project's type-check gate. The git pre-commit hook
(.husky/pre-commit) runs it automatically on every commit and blocks commits that fail.
Regenerating the API client
The API contract is OpenAPI-first and lives in the external slovo-propovedi-docs repository,
published at https://docs.slovo-propovedi.ru/openAPI.yaml.
npm run gen:api
Regenerates src/lib/api/generated/ via openapi-ts (SDK + @tanstack/svelte-query hooks + zod
validators) and applies the zod binary/strict patches (scripts/patch-zod-binary.mjs,
scripts/patch-zod-strict.mjs). Generated code is a contract — never edit it by hand; only
regenerate.
Releasing
npm run bump-version <version|patch|minor|major>
Promotes ## [Unreleased] in CHANGELOG.md to <version> with today's date, opens a fresh empty
[Unreleased] section, updates package.json, commits (chore: bump version to <version>), and
creates + pushes an annotated tag v<version>.
Deployment
Deployment is fully automated via Forgejo Actions, driven by git tags.
How it works
-
Push a commit to
main(the pre-commit hook runsnpm run check). -
Tag a release (
v*) — either withnpm run bump-version <ver>or manually:git tag v0.1.0 git push origin v0.1.0 -
The tag-triggered release workflow builds the Docker image and deploys to the VPS via
scripts/vps-deploy.sh(SSH, Docker build, Traefik labels, systemd service).
Boundary.
vps-deploy.showns only theslovo-frontendcontainer and its ownslovo-frontendDocker network. Shared infrastructure — Docker, theslovouser/group, theslovo-constrainedbuildx builder, Traefik (slovo-traefik.service) and thetraefiknetwork — is owned by the externalslovo-propovedi-playbookand must be provisioned first (just setup-all). The script only verifies it and fails fast if anything is missing.
Required Forgejo secrets
Settings → Actions → Secrets.
| Secret | Description |
|---|---|
VPS_SSH_PRIVATE_KEY |
SSH private key (ed25519) for root access to the VPS |
VPS_HOST |
VPS hostname or IP |
VPS_SSH_USER |
SSH user on the VPS (root) |
Required Forgejo variables
Settings → Actions → Variables.
| Variable | Description |
|---|---|
FRONTEND_HOSTNAME |
Public hostname for the admin SPA (e.g. admin.example.com) |
Rollback
The VPS keeps the previously deployed image under the mirror backup convention (previous tag
preserved alongside latest). To roll back, redeploy the previous tag — point Forgejo Actions at the
older v* tag (or locally build/run that image), and the deploy script restores the previous
version.