c92de06c28
Adds the missing public-facing content pages and their admin authoring, all powered by the existing content-svc Blog entity discriminated by `kind`. Backend (content-svc): - BlogKind enum += Learn, Page (reuses Blog CRUD/SEO/slug/publish for all three). - SQL migration services/content/migrations/001_blog_kind_learn_page.sql (ALTER TYPE content.blog_kind ADD VALUE 'Learn','Page'). Frontend (public, Next.js): - lib/content-api.ts: fetchArticles(kind) / fetchArticle(slug) / fetchPage(slug) with safe empty/null fallbacks. - components/content: article-ui (card/list/detail + RTL prose), CmsPageContent, CmsRoute (admin-authored page or localized built-in fallback copy). - Routes: /blog, /blog/[slug], /learn, /learn/[slug] and static pages /about /contact /careers /privacy /terms /cookies /help. - Navbar "tutorials" → /learn; all footer links now resolve. Admin: - AdminResource: new `fixedValues` option (injects kind on create/update). - learnConfig (kind=Learn) + pagesConfig (kind=Page) reuse the /v1/blogs endpoint; /admin/learn + /admin/pages routes + nav items. i18n: blog, learn and 7 *Page namespaces added to both fa.json and en.json (verified key parity); admin nav labels learn/pages. Frontend tsc clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
10 lines
615 B
SQL
10 lines
615 B
SQL
-- Adds the Learn + Page values to the content.blog_kind enum so the Blog entity
|
|
-- can power the public Learn (tutorials) section and the static CMS pages
|
|
-- (About, Privacy, Terms, …) in addition to Blog/Landing.
|
|
--
|
|
-- Idempotent. ADD VALUE cannot run inside a transaction on older PG, so apply
|
|
-- each statement on its own (psql autocommit):
|
|
-- docker exec fr2-postgres sh -c 'PGPASSWORD="$POSTGRES_PASSWORD" psql -U "$POSTGRES_USER" -d flatrender -f -' < 001_blog_kind_learn_page.sql
|
|
ALTER TYPE content.blog_kind ADD VALUE IF NOT EXISTS 'Learn';
|
|
ALTER TYPE content.blog_kind ADD VALUE IF NOT EXISTS 'Page';
|