# Tenant 사이트

## 렌더링 흐름

Tenant 요청은 tenant context를 초기화한 뒤 `Tenant\HomeController`, `PostController`, `SiteSettingsController` 등이 tenant 모델과 설정을 읽는다. 공개 레이아웃은 `resources/views/tenant/layouts/base.blade.php`를 기반으로 하며, 실제 테마 본문은 `resources/views/tenant/themes/{theme}` 계층을 사용한다.

## Site Settings와 identity

Tenant `SiteSetting`은 사이트 이름/설명, 로고·파비콘·OG 이미지, 메타 검증, AdSense, footer, main board 등의 사이트 표시 설정을 저장한다. Central `Platform\SiteSetting`은 플랫폼 사이트와 공통 head code 등 central 범위의 설정이다. 업로드 자산은 tenant별 저장 경로와 파일 controller를 통해 제공한다.

회사명·연락처·SNS·브랜드 표시 영역의 정확한 필드는 `app/Models/Tenant/SiteSetting`과 tenant 관리자 설정 뷰/컨트롤러를 source of truth로 확인한다.

## 도메인

- path: `/sites/{tenant}`
- subdomain/custom domain: tenancy의 domain 해석 및 canonical 정책을 통해 tenant를 결정

`RedirectTenantCanonicalDomain`과 URL helper가 대표 접근 방식을 유지한다. 새 링크나 redirect에 중앙 `route('tenant...')`를 직접 쓰면 host/path가 깨질 수 있다.

## Header/Footer/Navigation

Header/Footer는 tenant layout에서 독립적으로 선택된다. `header_design`과 `footer_design`은 각각 `default` 또는 `visual`이며 누락/잘못된 값은 default로 처리한다. 메뉴는 tenant `SiteSetting`의 계층형 `menus`를 공통 nav partial이 렌더링한다. visual footer도 기존 Site Settings의 회사/연락처/info/socials를 사용한다. visual 전용 CSS는 구조·spacing·animation만 보유하고 색상은 `public/assets/tenant/theme.css`의 `--color-*` token을 사용한다.

## SEO와 공개 정책

Tenant layout은 title, description, keywords, canonical, robots, OG 메타를 출력한다. `robots.txt`, `sitemap.xml`, `ads.txt`, `/style.css`는 tenant route로 제공된다. sitemap은 tenant `indexable`, canonical domain, 공개/발행/예약/접근 권한을 함께 판단하며 `pages/home`은 내부 home 콘텐츠로 취급한다. 기존 `docs/references/legacy/사이트맵규칙.md`는 정책 참고자료이고 실제 generator/controller 코드와 함께 변경한다.

## 변경 시 확인

사이트 설정을 바꿀 때는 저장 controller validation, 모델 casts/defaults, tenant 관리자 화면, 공개 layout, path/subdomain/custom-domain URL, 캐시와 관련 Feature 테스트를 함께 확인한다. 디자인만의 변경은 [frontend-system.md](frontend-system.md)를 함께 읽는다.
