refactor: move public static pages
Some checks failed
Backend CI/CD / build_and_deploy (push) Has been cancelled
Frontend CI/CD / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-05-05 11:39:02 -04:00
parent 5baacbceea
commit f6c351c31e
22 changed files with 47 additions and 28 deletions

View File

@@ -88,7 +88,7 @@ When adding, removing, or renaming public indexed pages, update all of these:
Public page metadata helper:
```txt
frontend/src/features/landing/publicPageMeta.js
frontend/src/static/publicPageMeta.js
```
## Server Routing

View File

@@ -0,0 +1,19 @@
# Task: Move public static pages
## Goal
Move public marketing/static page code out of `frontend/src/features/landing` into `frontend/src/static` so it is separated from application feature modules.
## Relevant Files
- `frontend/src/router/router.js`
- `frontend/src/entry-public-ssr.js`
- `frontend/src/static/**`
- `docs/SEO.md`
## Validation
```bash
cd frontend
npm run build
```

View File

@@ -6,12 +6,12 @@ import { createI18n } from 'vue-i18n';
import { createPinia } from 'pinia';
import en from '@/locales/en.json';
import fr from '@/locales/fr.json';
import Landing from '@/features/landing/views/Landing.vue';
import ProductPage from '@/features/landing/views/ProductPage.vue';
import ProductFeaturePage from '@/features/landing/views/ProductFeaturePage.vue';
import PricingPage from '@/features/landing/views/PricingPage.vue';
import BlogsPage from '@/features/landing/views/BlogsPage.vue';
import GuidesPage from '@/features/landing/views/GuidesPage.vue';
import Landing from '@/static/views/Landing.vue';
import ProductPage from '@/static/views/ProductPage.vue';
import ProductFeaturePage from '@/static/views/ProductFeaturePage.vue';
import PricingPage from '@/static/views/PricingPage.vue';
import BlogsPage from '@/static/views/BlogsPage.vue';
import GuidesPage from '@/static/views/GuidesPage.vue';
import './assets/main.css';
const publicRoutes = [

View File

@@ -2,12 +2,12 @@ import { useAuthStore } from '@/features/auth/stores/authStore.js';
import { createRouter, createWebHistory } from 'vue-router';
const LoginView = () => import('@/features/auth/views/LoginView.vue');
const Landing = () => import('@/features/landing/views/Landing.vue');
const ProductPage = () => import('@/features/landing/views/ProductPage.vue');
const ProductFeaturePage = () => import('@/features/landing/views/ProductFeaturePage.vue');
const PricingPage = () => import('@/features/landing/views/PricingPage.vue');
const BlogsPage = () => import('@/features/landing/views/BlogsPage.vue');
const GuidesPage = () => import('@/features/landing/views/GuidesPage.vue');
const Landing = () => import('@/static/views/Landing.vue');
const ProductPage = () => import('@/static/views/ProductPage.vue');
const ProductFeaturePage = () => import('@/static/views/ProductFeaturePage.vue');
const PricingPage = () => import('@/static/views/PricingPage.vue');
const BlogsPage = () => import('@/static/views/BlogsPage.vue');
const GuidesPage = () => import('@/static/views/GuidesPage.vue');
const RegisterView = () => import('@/features/auth/views/RegisterView.vue');
const ForgotPasswordView = () => import('@/features/auth/views/ForgotPasswordView.vue');
const ResetPasswordView = () => import('@/features/auth/views/ResetPasswordView.vue');

View File

@@ -125,7 +125,7 @@
import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useAuthStore } from '@/features/auth/stores/authStore.js';
import { productFeatureItems } from '@/features/landing/productFeatures.js';
import { productFeatureItems } from '@/static/productFeatures.js';
const allowedLocales = ['en', 'fr'];
const localeStorageKey = 'user-locale';

View File

@@ -1,8 +1,8 @@
<script setup>
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import LandingSiteMenu from '@/features/landing/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/features/landing/publicPageMeta.js';
import LandingSiteMenu from '@/static/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/static/publicPageMeta.js';
const { t } = useI18n();

View File

@@ -1,8 +1,8 @@
<script setup>
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import LandingSiteMenu from '@/features/landing/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/features/landing/publicPageMeta.js';
import LandingSiteMenu from '@/static/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/static/publicPageMeta.js';
const { t } = useI18n();

View File

@@ -1,8 +1,8 @@
<script setup>
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import LandingSiteMenu from '@/features/landing/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/features/landing/publicPageMeta.js';
import LandingSiteMenu from '@/static/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/static/publicPageMeta.js';
const { t } = useI18n();

View File

@@ -1,8 +1,8 @@
<script setup>
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import LandingSiteMenu from '@/features/landing/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/features/landing/publicPageMeta.js';
import LandingSiteMenu from '@/static/components/LandingSiteMenu.vue';
import { usePublicPageMeta } from '@/static/publicPageMeta.js';
const { t } = useI18n();
const tierKeys = ['free', 'freelance', 'agency', 'enterprise'];

View File

@@ -2,9 +2,9 @@
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import LandingSiteMenu from '@/features/landing/components/LandingSiteMenu.vue';
import { getProductFeature, productFeatureItems } from '@/features/landing/productFeatures.js';
import { usePublicPageMeta } from '@/features/landing/publicPageMeta.js';
import LandingSiteMenu from '@/static/components/LandingSiteMenu.vue';
import { getProductFeature, productFeatureItems } from '@/static/productFeatures.js';
import { usePublicPageMeta } from '@/static/publicPageMeta.js';
const route = useRoute();
const { t } = useI18n();

View File

@@ -1,9 +1,9 @@
<script setup>
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import LandingSiteMenu from '@/features/landing/components/LandingSiteMenu.vue';
import { productFeatureItems } from '@/features/landing/productFeatures.js';
import { usePublicPageMeta } from '@/features/landing/publicPageMeta.js';
import LandingSiteMenu from '@/static/components/LandingSiteMenu.vue';
import { productFeatureItems } from '@/static/productFeatures.js';
import { usePublicPageMeta } from '@/static/publicPageMeta.js';
const { t } = useI18n();