# Content mapping: WordPress → this project

How each part of the original prudas.com maps onto this project's data
model and pages, for anyone comparing the two side by side.

| Original WordPress page/section | New route | Backend resource | Admin-editable |
|---|---|---|---|
| Home — hero / "Our Products" | `/` | `case_studies` table | ✅ `/admin/case-studies` |
| Home — "Our Services" (6 cards) | `/` (preview) + own pages | `services` (`show_on_home=true`) | ✅ `/admin/services` |
| Home — "Our Tie-Ups" logo strip | `/` | `tie_up_partners` | ✅ `/admin/tie-up-partners` |
| Home — testimonials carousel | `/` | `testimonials` | ✅ `/admin/testimonials` |
| Home — "Industry Updates" blog preview | `/` | `blog_posts` (latest 3) | ✅ `/admin/blog` |
| Newsletter signup (footer + service pages) | any page | `newsletter_subscribers` | view only (leads) |
| Service dropdown → Affiliate/Chatbot/Email/Video Marketing | `/services/:slug` | `services` (`show_in_nav=true`) | ✅ `/admin/services` |
| Service page "Our Development Process" steps | `/services/:slug` | `service_process_steps` | ✅ (nested in service form) |
| Blog listing | `/blog` | `blog_posts` (paginated) | ✅ `/admin/blog` |
| Blog post | `/blog/:slug` | `blog_posts` | ✅ `/admin/blog` |
| About Us — intro / "Who We Are" | `/about` | static copy (see note) | — |
| About Us — Vision / Mission tabs | `/about#our-vision` | static copy (see note) | — |
| About Us — Our Team | `/about` | `team_members` | ✅ `/admin/team` |
| About Us — Our Values | `/about#our-values` | `core_values` | ✅ `/admin/core-values` |
| Contact form | `/contact` | `contact_submissions` | view/mark-read/delete |
| Contact page — office addresses & phone | `/contact` | `office_locations` | seeded, not yet in admin UI (see below) |
| Footer — social links | every page | `social_links` | seeded, not yet in admin UI (see below) |
| Gallery | `/gallery` | `gallery_images` | ✅ `/admin/gallery` |
| Careers | `/careers` | `job_postings` | ✅ `/admin/careers` |
| Privacy Policy | `/privacy-policy` | static copy | — |

## Notes on "static copy"

A few pieces of content are intentionally **not** database-backed:

- **About Us intro paragraphs, Vision/Mission tab text, and the Privacy
  Policy body** are one-off brand/legal copy, not list-of-records content.
  They live directly in `frontend/src/pages/AboutPage.tsx` and
  `PrivacyPolicyPage.tsx`. If you want these editable from `/admin` too,
  the natural extension is a small `site_settings` key/value table (see
  "Extending the CMS" below) — the rest of the schema is deliberately built
  so that pattern slots in without touching anything else.
- **Office locations and social links** are seeded in
  `V2__seed_content.sql` and served publicly (`GET /api/offices`,
  `GET /api/social-links`), but don't yet have an `/admin` screen — there
  are only two office rows and six social links, so editing them via a
  migration or a direct SQL update was judged not worth a dedicated UI for
  v1. Both already have full repository/entity/DTO/controller support on
  the backend (`OfficeLocationController`, `SocialLinkController`) — adding
  an admin CRUD controller and an `AdminSimpleListPage` config entry (see
  `frontend/src/pages/admin/adminResourceConfig.ts`) is a ~15-minute
  follow-up whenever it's wanted.

## Real media assets (`V3__real_media.sql`)

`V2__seed_content.sql` shipped with the real *text* content from
prudas.com but placeholder image paths that pointed at files that don't
exist anywhere. `V3__real_media.sql` backfills the actual photos, the
one case-study video, blog covers, gallery photos, and tie-up partner
logos — matched item-by-item against the live site (team photo ↔ correct
person, case study ↔ correct image or video, etc.).

These all currently point directly at `https://prudas.com/wp-content/uploads/...`
— the existing WordPress media library — rather than at copies bundled
with this project. Pulling the actual files into the project wasn't
possible from the tooling available when this migration was written.
**Before retiring the old WordPress hosting, re-upload each of these
through the new admin panel** (each has its own field there) so the new
site stops depending on the old one staying online. The tie-up partner
names (`Espion Infotech`, `CropC`, `ABDM`, `EFRA Management`, `India
Health Link`, `Healthopia`) are inferred from the logo file names —
two are confirmed by the testimonials already on the page, the rest are
worth a quick double-check.

Six of the ten services (the homepage-card ones, not the four nav
services) and the six process-step icons don't have a confirmed hero
image or original icon set carried over — the process-step icons on the
live site turned out to be unattributed third-party stock art, not
site-specific content worth reproducing.

## Extending the CMS

Every content type follows the same layered pattern end to end:
`entity` → `repository` → `dto` → `service` → `controller` (public read) +
`controller/admin` (authenticated write). To add a new content type,
copy the shape of `CoreValue` (the simplest one) end to end, add a Flyway
migration for the table, and add a config entry to
`adminResourceConfig.ts` on the frontend if it fits the generic
title/description/order pattern — otherwise build a dedicated admin page
the way `AdminBlogPage.tsx` and `AdminServicesPage.tsx` do for the two
richer content types.
