- web/: server-rendered Astro over the Node API: home (poets by Hijri century), poet
(intro + sections), category (numbered contents), poem (couplets, prev/next, source),
search (paged); Naskh default with Nastaliq toggle, light/dark, Urdu digits, RTL, mobile
- api: section counts include nested categories
- README: how to run v2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- db/schema.sql: poets, categories, poems, verses; normalised search_text with pg_trgm index
- api/: Fastify + pg, Node native TypeScript (no build step)
- import.ts: loads divan-data (folder or CDN) with upserts; full import in ~36 s
- server.ts: /api/poets, /api/page?url=, /api/search (Urdu-normalised ILIKE), /health
- urdu.ts (+ test): normaliser ported from the .NET version
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- public data import ran with empty HtmlText for poet/category pages (upstream fills it
with a separate admin TOC job), so poet pages showed no works; the import now
regenerates tables of contents for the importing user
- replace Ganjoor's logo image (gdap/gdapk) with the Divan wordmark on all pages; delete it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- home page is public: no redirect to login/admin import; flat poet list until century
groups exist (upstream needed a pinned 'popular poets' group, which Divan never has, so
the home page always redirected); public 'being prepared' notice when there are no poets
- Naskh is the default font, Nastaliq the option (site and static reader)
- poet/writer photos hidden everywhere (CSS on /poet/image/), poet page photos tab removed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Projects (DivanRazor, DivanService.sln), files, folders, classes, settings (Divan:),
API routes (/api/divan), DB name and tables (divan, Divan*), local container/paths,
repo links (anas-rashid/divan, divan-data). Urdu دیوان unchanged.
Migrations renamed consistently (no pending model changes); requires a fresh database.
Stop tracking the generated RMuseum/RMuseum.xml (was upstream's stale doc).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GetPoetImageIdByUrl: missing portrait -> Guid.Empty (placeholder) instead of a null cast
- run-local.sh: wait for SQL Server with a query and for API/site via HTTP
(pipefail+grep -q never matched; API log level hides 'Now listening' outside Development)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- deploy/backup.sh / deploy/restore.sh (compose service or local container; side-by-side test restore)
- restore: chown copied backup for sqlservr, fail loudly on unreadable file list
- README: update, backup, test-restore and rollback steps
Validated locally: backup 194 MB, restored into a test DB with identical counts, test DB dropped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- appsettings: drop upstream's public JWT secret; API refuses to start outside Development without one
- Cors:AllowedOrigins (compose: https://SITE_DOMAIN); unset = any origin for local dev
- default admin/system/bot emails @divan.local instead of @ganjoor.net
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- poem page: drop manuscripts/images tab and Pinterest/museum image suggestion form
- remove image recommendation (Pin) page and route
- museum API, services and tables stay dormant (no schema change)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- translate remaining public views and page-model strings (titles, messages, relation names)
- Urdu stopword list for word-frequency stats (replaces Persian list)
- error pages: drop list of alternative Ganjoor services
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- translate reading-path views (poet, category, poem, search, header, login, partials)
from Persian to Urdu (exact-run dictionary, 262 strings; AI-summary data marker kept)
- semantic search widget only when SemanticSearchAPIRoot is configured
- appsettings defaults: no Ganjoor tracking script, no Ganjoor semantic search,
API/site roots default to the local Divan stack instead of api.ganjoor.net
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- MakeTextSearchable: Urdu letter variants, Urdu full stop, Urdu diacritics, zwj/marks
- SearchLikePatterns: phrase or per-word LIKE patterns (escaped), normalised like stored text
- poem, similar-poem and comment search use LIKE (Linux SQL Server image has no full-text)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- poet ImageUrl always points at the API image endpoint
- endpoint serves a neutral SVG placeholder when a poet has no portrait
- public data export: poet image URLs use our API (WebServiceUrl), not ganjoor.net
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- drop 7-day/top visits tabs (Ganjoor's kntr analytics)
- page language options: Urdu (default), Persian, Arabic; drop Turkish/Kurdish
- fa-IR -> ur-PK as default language/culture (site + API); JS digits ur-PK-u-nu-arabext
- unlink blog/museum/ava/... .ganjoor.net help links (text kept)
- random verse: data-driven random poem from our DB/API instead of c.ganjoor.net widget
and hard-coded Persian poet id ranges
- word tooltip: Urdu Wiktionary instead of vajehyab; drop abjad.ganjoor.net
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pages, API endpoints, services and assets removed; music DB models/tables kept
so the feature can be rebuilt for Urdu later.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- delete TajikGanjoor project (removed from solution)
- drop Tajik endpoints/services/DTOs/entities; migration DivanRemoveTajik drops their tables
- remove Tajik admin buttons/handlers and appsettings sections
- README is now Divan's; upstream README kept in docs/GANJOOR-README.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Rebrand گنجور -> دیوان across GanjooRazor; lang=ur; Urdu home page and footer
- Hijri century groups with Urdu names
- Noto Nastaliq Urdu (default) / Noto Naskh Arabic switch
- Remove footer links to Ganjoor-only services; link Wikisource, data and code
- Linux deployment: Dockerfile, docker-compose (SQL Server 2022, API, site, Caddy)
- DIVAN.md: changes and deploy guide
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>