f874b58dd98076b89971b16211adbb093e514037
* spec update * update md files * add plan: monorepo * feat: add empty apps and packages directories * Add shared tsconfig.base.json * feat add workspaces * feat: move hudozka-writer into apps/ * feat: move migrate-to-pocketbase into apps/ * feat: split package.json for apps/hudozka workspace * feat: extend tsconfig.base.json in apps/hudozka * add dockerfile path * feat: verify Phase 3 monorepo migration of Next app * feat: scaffold @hudozka/utils package * feat: add utils barrel export * feat: extract utilities into hudozka-utils package * feat: extract hooks into hudozka-hooks package * Extract Box/Button/Panel/Title/Overlay into @hudozka/ui * Scope Next ESLint rules to apps/hudozka in root flat config * Update README and CLAUDE.md for monorepo layout * disable image optimisation
ART.SHLISSELBURG.ORG
Website for the Art School of Shlisselburg. Built with Next.js and powered by PocketBase (migrated from Strapi).
Font: «Shadow»
Repo layout
This is an npm-workspaces monorepo:
apps/hudozka— main Next.js app (art.shlisselburg.org)apps/hudozka-writer— Vite-based content editorapps/migrate-to-pocketbase— one-off migration script (Strapi → PocketBase)packages/ui—@hudozka/ui— shared React primitives (Box, Button, Panel, Title, Overlay)packages/hooks—@hudozka/hooks— generic React hookspackages/utils—@hudozka/utils— pure utilities (array, string, url, math, image, file, date)packages/text—@hudozka/text— markdown + typograf renderingpb/— PocketBase instance (untouched by the monorepo migration)
Common commands (from repo root):
npm run dev— run the web app dev servernpm run build— production build of the web appnpm run lint— lint the whole monoreponpm test— run tests across every workspacenpm run dev -w apps/hudozka-writer— run the writernpm run migrate -w apps/migrate-to-pocketbase— run the migration script
Development
Prerequisites
- Node.js 24 (see
mise.toml)
Getting Started
- Install dependencies
npm install
- Start development server
npm run dev
The development server runs at http://localhost:3000 with Turbo mode enabled.
Content Management
Content is fetched from PocketBase and rendered using flexible content tokens:
text— Markdown with Russian typography (Typograf)image— Responsive images with blur hashfile— Document downloadshtml— Raw HTML embedsyoutube— Video embedsinstagram— Social media embedsgrid— Card grids
Accessibility
The site includes an accessibility panel with configurable:
- Font size (8-48pt)
- Color schemes (5 presets: black-on-white, white-on-black, blue-on-blue, brown-on-yellow, green-on-brown)
- Line height and letter spacing
- Image toggling
- Font family (serif/sans-serif)
Contributors
- Roman Timashev (roman@tmshv.ru)
Description
No description provided
https://art.shlisselburg.org
40 MiB
0 Stars
1 Watchers
0 Forks
Languages
TypeScript
77.4%
CSS
11.8%
JavaScript
9.3%
Dockerfile
0.8%
SCSS
0.6%