diff --git a/backend/igny8_core/modules/system/settings_serializers.py b/backend/igny8_core/modules/system/settings_serializers.py index 97e45f0f..093e0677 100644 --- a/backend/igny8_core/modules/system/settings_serializers.py +++ b/backend/igny8_core/modules/system/settings_serializers.py @@ -23,11 +23,11 @@ class SystemSettingsSerializer(serializers.ModelSerializer): class AccountSettingsSerializer(serializers.ModelSerializer): class Meta: model = AccountSettings - fields = ['id', 'key', 'config', 'is_active', 'created_at', 'updated_at'] + fields = ['id', 'key', 'value', 'created_at', 'updated_at'] read_only_fields = ['created_at', 'updated_at', 'account'] - def validate_config(self, value): - """Validate config against schema if schema exists""" + def validate_value(self, value): + """Validate value against schema if schema exists""" if self.instance: validate_settings_schema(self.instance.key, value) return value @@ -49,14 +49,8 @@ class UserSettingsSerializer(serializers.ModelSerializer): class ModuleSettingsSerializer(serializers.ModelSerializer): class Meta: model = ModuleSettings - fields = ['id', 'module_name', 'key', 'config', 'is_active', 'created_at', 'updated_at'] + fields = ['id', 'module_name', 'key', 'is_active', 'created_at', 'updated_at'] read_only_fields = ['created_at', 'updated_at', 'account'] - - def validate_config(self, value): - """Validate config against schema if schema exists""" - if self.instance: - validate_settings_schema(self.instance.key, value) - return value # ModuleEnableSettingsSerializer is DEPRECATED - use GlobalModuleSettings instead diff --git a/backend/igny8_core/templates/emails/welcome.html b/backend/igny8_core/templates/emails/welcome.html index e48e2f90..b0a542d9 100644 --- a/backend/igny8_core/templates/emails/welcome.html +++ b/backend/igny8_core/templates/emails/welcome.html @@ -18,7 +18,7 @@

- Go to Dashboard + Go to Dashboard

If you have any questions, our support team is here to help. {% if support_url %}Visit our help center or {% endif %}reply to this email.

diff --git a/docs/00-SYSTEM/REPO-STRUCTURE.md b/docs/00-SYSTEM/REPO-STRUCTURE.md new file mode 100644 index 00000000..c879b6bc --- /dev/null +++ b/docs/00-SYSTEM/REPO-STRUCTURE.md @@ -0,0 +1,268 @@ +# Repository Structure (App Repo) + +**Last Verified:** January 20, 2026 +**Scope:** `/data/app/igny8` (app repo) +**Excluded from tree:** `.git/`, `node_modules/`, `dist/`, `staticfiles/`, `backups/`, `__pycache__/` + +--- + +## Root + +``` +/data/app/igny8 +├── backend/ +├── docs/ +├── frontend/ +├── KW_DB/ +├── plugins/ +├── scripts/ +├── .claude/ +├── .gitignore +├── .rules +├── CHANGELOG.md +├── CLEANUP_SUMMARY_20260113.md +├── content_generation.md +├── docker-compose.app.yml +├── git-credential-helper.sh +├── idea_genration.md +├── last-session.md +├── README.md +└── test_routes.sh +``` + +--- + +## Backend + +``` +backend/ +├── igny8_core/ +├── migrations/ +├── logs/ +├── scripts/ +├── Dockerfile +├── container_startup.sh +├── create_groups.py +├── manage.py +├── requirements.txt +└── seed_keywords_import_template.csv +``` + +### Django App Core + +``` +backend/igny8_core/ +├── admin/ +├── ai/ +├── api/ +├── auth/ +├── business/ +├── common/ +├── management/ +├── middleware/ +├── migrations/ +├── modules/ +├── plugins/ +├── static/ +├── tasks/ +├── templates/ +├── urls/ +├── utils/ +├── __init__.py +├── asgi.py +├── celery.py +├── settings.py +├── tasks.py +├── urls.py +└── wsgi.py +``` + +### Feature Modules + +``` +backend/igny8_core/modules/ +├── billing/ +├── integration/ +├── linker/ +├── optimizer/ +├── planner/ +├── publisher/ +├── system/ +└── writer/ +``` + +### Business Services + +``` +backend/igny8_core/business/ +├── automation/ +├── billing/ +├── content/ +├── integration/ +├── linking/ +├── notifications/ +├── optimization/ +├── planning/ +└── publishing/ +``` + +--- + +## Frontend + +``` +frontend/ +├── public/ +├── src/ +├── audit-results/ +├── eslint/ +├── Caddyfile +├── Caddyfile.marketing +├── Dockerfile +├── Dockerfile.dev +├── Dockerfile.marketing +├── Dockerfile.marketing.dev +├── LICENSE.md +├── README.md +├── container_startup.sh +├── eslint.config.js +├── index.html +├── marketing.html +├── package.json +├── package-lock.json +├── postcss.config.js +├── tsconfig.app.json +├── tsconfig.json +├── tsconfig.node.json +├── vite.config.ts +└── vitest.config.ts +``` + +### Frontend Source + +``` +frontend/src/ +├── api/ +├── components/ +├── config/ +├── constants/ +├── context/ +├── hooks/ +├── icons/ +├── layout/ +├── marketing/ +├── modules/ +├── pages/ +├── services/ +├── store/ +├── styles/ +├── templates/ +├── types/ +├── utils/ +├── App.tsx +├── main.tsx +├── svg.d.ts +└── vite-env.d.ts +``` + +--- + +## Documentation + +``` +docs/ +├── 00-SYSTEM/ +├── 10-MODULES/ +├── 20-API/ +├── 30-FRONTEND/ +├── 40-WORKFLOWS/ +├── 50-DEPLOYMENT/ +├── 60-PLUGINS/ +├── 90-REFERENCE/ +├── audits/ +├── plans/ +├── FILTER_GUIDELINES.md +└── INDEX.md +``` + +--- + +## Plugins + +``` +plugins/ +└── wordpress/ + ├── dist/ + ├── source/ + │ └── igny8-wp-bridge/ + │ ├── admin/ + │ ├── data/ + │ ├── docs/ + │ ├── includes/ + │ ├── languages/ + │ ├── sync/ + │ ├── templates/ + │ ├── tests/ + │ ├── igny8-bridge.php + │ └── uninstall.php + └── UI-REDESIGN-v1.2.0.md +``` + +--- + +## KW_DB (Seed Keyword CSV Library) + +Top-level categories and subcategories (CSV files omitted for brevity): + +``` +KW_DB/ +├── Advertising_&_Media/ +│ └── Printing_Services/ +├── Apparel_&_Fashion/ +│ ├── Jewelery/ +│ ├── Menswear/ +│ └── Womens_Wear/ +├── Automotive/ +│ ├── Car_Accessories/ +│ ├── Cars_General/ +│ └── Tyres_&_Wheels/ +├── Beauty_&_Personal_Care/ +│ ├── Haircare/ +│ ├── Makeup_&_Cosmetics/ +│ └── Skincare/ +├── Finance_&_Insurance/ +│ ├── Insurance/ +│ ├── Investment_&_Weallth_Management/ +│ └── Loans_&_Lending/ +├── Food_&_Beverage/ +│ ├── Food Delivery/ +│ └── Restaurants/ +├── HealthCare_Medical/ +│ ├── Health_Practitioners/ +│ ├── Massage_&_Therapy/ +│ ├── Physiotherapy_Rehabilitation/ +│ ├── Relaxation_Devices/ +│ └── Wellness_&_Fitness/ +├── Home_&_Garden/ +│ ├── Bedding_&_Mattress/ +│ ├── Furniture/ +│ ├── Home_Decor/ +│ └── Storage_&_Organization/ +├── management/ +├── Real_Estate_&_Construction/ +└── Technology_&_IT_Services/ + ├── AI/ + ├── cloud_services/ + ├── DIgital_Marketing_&_SEO/ + ├── SAAS/ + └── Web_Development_&_Design/ +``` + +--- + +## Scripts + +``` +scripts/ +└── package_app.sh +``` \ No newline at end of file diff --git a/docs/30-FRONTEND/PAGE-AUDIT.md b/docs/30-FRONTEND/PAGE-AUDIT.md new file mode 100644 index 00000000..9b3960ab --- /dev/null +++ b/docs/30-FRONTEND/PAGE-AUDIT.md @@ -0,0 +1,101 @@ +# Frontend Page Audit (In Progress) + +**Last Updated:** January 20, 2026 +**Goal:** Verify each page’s functions, API usage, and flow consistency. + +--- + +## Audit Scope (Current Batch) + +- Auth pages: Sign In, Sign Up, Forgot Password, Reset Password, Verify Email, Unsubscribe +- Payment page + +--- + +## Auth Pages + +### Sign In + +- **Route:** `/signin` +- **File:** `frontend/src/pages/AuthPages/SignIn.tsx` +- **Components:** `PageMeta`, `AuthLayout`, `SignInForm` +- **API usage:** none in page (handled by `SignInForm`) +- **Notes:** Page is a wrapper; all auth logic is inside `SignInForm`. + +### Sign Up + +- **Route:** `/signup` +- **File:** `frontend/src/pages/AuthPages/SignUp.tsx` +- **Components:** `PageMeta`, `SignUpFormUnified`, `GridShape` +- **API usage:** `GET /v1/auth/plans/` (public) for plan list +- **Behavior:** + - Reads `plan` query param to preselect plan + - Defaults to first active plan if no match + - Sorts plans by price ascending +- **Notes:** + - Geo detection removed; country selected in form + - Payment selection deferred to `/account/plans` + +### Forgot Password + +- **Route:** `/forgot-password` +- **File:** `frontend/src/pages/AuthPages/ForgotPassword.tsx` +- **Components:** `PageMeta`, icons, local form +- **API usage:** `POST /v1/auth/password-reset/` with `{ email }` +- **Behavior:** + - Always shows success state to prevent email enumeration + +### Reset Password + +- **Route:** `/reset-password?token=...` +- **File:** `frontend/src/pages/AuthPages/ResetPassword.tsx` +- **Components:** `PageMeta`, icons, form +- **API usage:** `POST /v1/auth/password-reset/confirm/` with `{ token, new_password, new_password_confirm }` +- **Behavior:** + - If no `token`, redirects to `/forgot-password` + - Validates password strength client-side + - Handles expired/invalid token states + +### Verify Email + +- **Route:** `/verify-email?token=...` +- **File:** `frontend/src/pages/AuthPages/VerifyEmail.tsx` +- **Components:** `PageMeta`, icons +- **API usage:** `POST /v1/auth/users/verify_email/` with `{ token }` +- **Behavior:** + - Requires query param `token` + - Handles expired/invalid token state + +### Unsubscribe + +- **Route:** `/unsubscribe` +- **File:** `frontend/src/pages/AuthPages/Unsubscribe.tsx` +- **Components:** `PageMeta`, icons +- **Behavior:** + - Displays guidance and redirects to `/account/settings?tab=notifications` after 5 seconds + - Notes that transactional emails are not unsubscribable +- **Potential issue:** redirect requires auth; unauthenticated users will be sent to sign-in flow. + +--- + +## Payment Page + +### Payment + +- **Route:** `/payment` +- **File:** `frontend/src/pages/Payment.tsx` +- **Components:** `InputField`, `TextArea`, `Button` +- **Store usage:** `useAuthStore` for user/account plan +- **Behavior:** + - Reads `plan` from query string or current account plan + - Generates mailto for offline payment confirmation + - Redirects to `/pricing` if plan or user missing +- **Potential issue:** `/pricing` is not defined in `App.tsx` routes (may exist in marketing app). + +--- + +## Next Audit Batch + +- Dashboard and core workflow pages +- Sites pages (dashboard, settings, sync, deployment) +- Planner and Writer pages \ No newline at end of file diff --git a/docs/30-FRONTEND/PAGES.md b/docs/30-FRONTEND/PAGES.md index e09b14be..58ce955f 100644 --- a/docs/30-FRONTEND/PAGES.md +++ b/docs/30-FRONTEND/PAGES.md @@ -1,5 +1,357 @@ # Frontend Pages & Routes +**Last Verified:** January 20, 2026 +**Version:** 1.8.3 +**Framework:** React 19 + TypeScript + React Router 6 + Vite + +--- + +## Route Configuration + +Routes defined in `/frontend/src/App.tsx`: +- `ProtectedRoute` - requires authentication +- `AdminRoute` - requires staff/admin +- `AppLayout` - shared layout (sidebar + header) + +--- + +## Public Routes (No Auth Required) + +| Route | File | Description | +|-------|------|-------------| +| `/signin` | `AuthPages/SignIn.tsx` | User login | +| `/signup` | `AuthPages/SignUp.tsx` | Account registration | +| `/signup/pk` | `AuthPages/SignUp.tsx` | Legacy route → main signup | +| `/payment` | `Payment.tsx` | Payment page | +| `/forgot-password` | `AuthPages/ForgotPassword.tsx` | Request password reset | +| `/reset-password` | `AuthPages/ResetPassword.tsx` | Set new password | +| `/verify-email` | `AuthPages/VerifyEmail.tsx` | Verify email | +| `/unsubscribe` | `AuthPages/Unsubscribe.tsx` | Email unsubscribe | + +--- + +## Legal Pages + +| Route | File | Description | +|-------|------|-------------| +| `/privacy` | `legal/Privacy.tsx` | Privacy Policy | +| `/terms` | `legal/Terms.tsx` | Terms of Service | + +--- + +## Dashboard + +| Route | File | Description | +|-------|------|-------------| +| `/` | `Dashboard/Home.tsx` | Main dashboard with workflow widgets | + +--- + +## Setup & Keywords Library + +| Route | File | Description | +|-------|------|-------------| +| `/setup/wizard` | `Setup/SetupWizard.tsx` | Onboarding wizard | +| `/keywords-library` | `Setup/IndustriesSectorsKeywords.tsx` | Keywords library (primary route) | + +**Legacy redirects:** +- `/setup/add-keywords` → `/keywords-library` +- `/setup/industries-sectors-keywords` → `/keywords-library` + +--- + +## Sites Management + +| Route | File | Description | +|-------|------|-------------| +| `/sites` | `Sites/List.tsx` | Sites list | +| `/sites/:id` | `Sites/Dashboard.tsx` | Site dashboard | +| `/sites/:id/pages` | `Sites/PageManager.tsx` | Page manager | +| `/sites/:id/pages/new` | `Sites/PageManager.tsx` | New page (same manager) | +| `/sites/:id/pages/:pageId/edit` | `Sites/PageManager.tsx` | Edit page (same manager) | +| `/sites/:id/content` | `Sites/Content.tsx` | Site content overview | +| `/sites/:id/content/structure` | `Sites/ContentStructure.tsx` | Content structure | +| `/sites/:id/settings` | `Sites/Settings.tsx` | Site settings (tabs) | +| `/sites/:id/sync` | `Sites/SyncDashboard.tsx` | Sync dashboard | +| `/sites/:id/deploy` | `Sites/DeploymentPanel.tsx` | Deployment panel | +| `/sites/:id/posts/:postId` | `Sites/PostEditor.tsx` | Post editor | +| `/sites/:id/posts/:postId/edit` | `Sites/PostEditor.tsx` | Post editor (same view) | + +**Legacy redirect:** +- `/sites/:id/publishing-queue` → `/publisher/content-calendar` + +--- + +## Planner + +| Route | File | Description | +|-------|------|-------------| +| `/planner` | → `/planner/keywords` | Redirect | +| `/planner/keywords` | `Planner/Keywords.tsx` | Keyword management | +| `/planner/clusters` | `Planner/Clusters.tsx` | Cluster listing | +| `/planner/clusters/:id` | `Planner/ClusterDetail.tsx` | Cluster detail | +| `/planner/ideas` | `Planner/Ideas.tsx` | Content ideas | + +--- + +## Writer + +| Route | File | Description | +|-------|------|-------------| +| `/writer` | → `/writer/tasks` | Redirect | +| `/writer/tasks` | `Writer/Tasks.tsx` | Task queue | +| `/writer/content` | `Writer/Content.tsx` | Content list | +| `/writer/content/:id` | `Writer/ContentView.tsx` | Content detail | +| `/writer/drafts` | → `/writer/content` | Legacy redirect | +| `/writer/images` | `Writer/Images.tsx` | Images by content | +| `/writer/review` | `Writer/Review.tsx` | Review queue | +| `/writer/approved` | `Writer/Approved.tsx` | Approved/published list | +| `/writer/published` | → `/writer/approved` | Legacy redirect | + +--- + +## Automation + +| Route | File | Description | +|-------|------|-------------| +| `/automation` | → `/automation/overview` | Redirect | +| `/automation/overview` | `Automation/AutomationOverview.tsx` | Run history | +| `/automation/runs/:runId` | `Automation/AutomationRunDetail.tsx` | Run detail | +| `/automation/run` | `Automation/AutomationPage.tsx` | Run execution | + +**Legacy redirect:** +- `/automation/settings` → `/sites/settings?tab=automation` + +--- + +## Publisher + +| Route | File | Description | +|-------|------|-------------| +| `/publisher` | → `/publisher/content-calendar` | Redirect | +| `/publisher/content-calendar` | `Publisher/ContentCalendar.tsx` | Content calendar | + +--- + +## Linker (Optional) + +| Route | File | Description | +|-------|------|-------------| +| `/linker` | → `/linker/content` | Redirect | +| `/linker/content` | `Linker/ContentList.tsx` | Linker content list | + +--- + +## Optimizer (Optional) + +| Route | File | Description | +|-------|------|-------------| +| `/optimizer` | → `/optimizer/content` | Redirect | +| `/optimizer/content` | `Optimizer/ContentSelector.tsx` | Content selector | +| `/optimizer/analyze/:id` | `Optimizer/AnalysisPreview.tsx` | Analysis preview | + +--- + +## Thinker (Admin Only) + +| Route | File | Description | +|-------|------|-------------| +| `/thinker` | → `/thinker/prompts` | Redirect | +| `/thinker/prompts` | `Thinker/Prompts.tsx` | Prompt management | +| `/thinker/author-profiles` | `Thinker/AuthorProfiles.tsx` | Author profiles | +| `/thinker/profile` | `Thinker/Profile.tsx` | Profile settings | +| `/thinker/strategies` | `Thinker/Strategies.tsx` | Strategies (placeholder) | +| `/thinker/image-testing` | `Thinker/ImageTesting.tsx` | Image testing (placeholder) | + +--- + +## Billing + +| Route | File | Description | +|-------|------|-------------| +| `/billing` | → `/billing/overview` | Redirect | +| `/billing/overview` | `Settings/CreditsAndBilling.tsx` | Billing overview | +| `/billing/credits` | `Billing/Credits.tsx` | Credits listing | +| `/billing/transactions` | `Billing/Transactions.tsx` | Transactions | +| `/billing/usage` | `Billing/Usage.tsx` | Usage | + +--- + +## Account + +| Route | File | Description | +|-------|------|-------------| +| `/account/notifications` | `account/NotificationsPage.tsx` | Notifications | +| `/account/settings` | `account/AccountSettingsPage.tsx` | Account settings (tabs) | +| `/account/settings/profile` | `account/AccountSettingsPage.tsx` | Profile tab | +| `/account/settings/team` | `account/AccountSettingsPage.tsx` | Team tab | +| `/account/team` | → `/account/settings/team` | Legacy redirect | +| `/account/plans` | `account/PlansAndBillingPage.tsx` | Plans & billing | +| `/account/plans/upgrade` | `account/PlansAndBillingPage.tsx` | Upgrade tab | +| `/account/plans/history` | `account/PlansAndBillingPage.tsx` | History tab | +| `/account/purchase-credits` | → `/account/plans` | Legacy redirect | +| `/account/usage` | `account/UsageDashboardPage.tsx` | Usage dashboard | +| `/account/usage/logs` | → `/account/usage` | Legacy redirect | +| `/account/usage/credits` | → `/account/usage` | Legacy redirect | +| `/account/usage/insights` | → `/account/usage` | Legacy redirect | +| `/account/usage/activity` | → `/account/usage` | Legacy redirect | +| `/account/content-settings` | `account/ContentSettingsPage.tsx` | Content settings | +| `/account/content-settings/publishing` | `account/ContentSettingsPage.tsx` | Publishing tab | +| `/account/content-settings/images` | `account/ContentSettingsPage.tsx` | Images tab | + +--- + +## Reference Data + +| Route | File | Description | +|-------|------|-------------| +| `/reference/seed-keywords` | `Reference/SeedKeywords.tsx` | Seed keywords | +| `/reference/industries` | `Reference/Industries.tsx` | Industries | + +--- + +## Settings + +| Route | File | Description | +|-------|------|-------------| +| `/settings` | `Settings/General.tsx` | General settings | +| `/settings/users` | `Settings/Users.tsx` | Users | +| `/settings/subscriptions` | `Settings/Subscriptions.tsx` | Subscriptions | +| `/settings/system` | `Settings/System.tsx` | System settings | +| `/settings/account` | `Settings/Account.tsx` | Account settings | +| `/settings/plans` | `Settings/Plans.tsx` | Plans | +| `/settings/industries` | `Settings/Industries.tsx` | Industries | +| `/settings/integration` | `Settings/Integration.tsx` | Integrations (admin only) | +| `/settings/publishing` | `Settings/Publishing.tsx` | Publishing settings | +| `/settings/sites` | `Settings/Sites.tsx` | Sites settings | +| `/settings/profile` | → `/account/settings` | Legacy redirect | +| `/settings/import-export` | → `/` | Legacy redirect | + +--- + +## Help + +| Route | File | Description | +|-------|------|-------------| +| `/help` | `Help/Help.tsx` | Help center | + +--- + +## Internal Pages (Non-Indexed) + +| Route | File | Description | +|-------|------|-------------| +| `/components` | `Components.tsx` | Component showcase | +| `/ui-elements` | `UIElements.tsx` | Design system reference | + +--- + +## Fallback Route + +| Route | File | Description | +|-------|------|-------------| +| `*` | `OtherPage/NotFound.tsx` | 404 page | + +--- + +## Page File Locations (Source of Truth) + +``` +frontend/src/pages/ +├── account/ +│ ├── AccountSettingsPage.tsx +│ ├── ContentSettingsPage.tsx +│ ├── NotificationsPage.tsx +│ ├── PlansAndBillingPage.tsx +│ ├── PurchaseCreditsPage.tsx +│ ├── UsageAnalyticsPage.tsx +│ └── UsageDashboardPage.tsx +├── AuthPages/ +│ ├── AuthPageLayout.tsx +│ ├── ForgotPassword.tsx +│ ├── ResetPassword.tsx +│ ├── SignIn.tsx +│ ├── SignUp.tsx +│ ├── Unsubscribe.tsx +│ └── VerifyEmail.tsx +├── Automation/ +│ ├── AutomationOverview.tsx +│ ├── AutomationPage.tsx +│ ├── AutomationRunDetail.tsx +│ └── PipelineSettings.tsx +├── Billing/ +│ ├── Credits.tsx +│ ├── Transactions.tsx +│ └── Usage.tsx +├── Dashboard/ +│ └── Home.tsx +├── Help/ +│ └── Help.tsx +├── legal/ +│ ├── Privacy.tsx +│ └── Terms.tsx +├── Linker/ +│ └── ContentList.tsx +├── Optimizer/ +│ ├── AnalysisPreview.tsx +│ └── ContentSelector.tsx +├── OtherPage/ +│ └── NotFound.tsx +├── Planner/ +│ ├── ClusterDetail.tsx +│ ├── Clusters.tsx +│ ├── Ideas.tsx +│ └── Keywords.tsx +├── Publisher/ +│ └── ContentCalendar.tsx +├── Reference/ +│ ├── Industries.tsx +│ └── SeedKeywords.tsx +├── Settings/ +│ ├── Account.tsx +│ ├── CreditsAndBilling.tsx +│ ├── General.tsx +│ ├── Industries.tsx +│ ├── Integration.tsx +│ ├── Plans.tsx +│ ├── Publishing.tsx +│ ├── Sites.tsx +│ ├── Subscriptions.tsx +│ ├── System.tsx +│ └── Users.tsx +├── Setup/ +│ ├── IndustriesSectorsKeywords.tsx +│ └── SetupWizard.tsx +├── Sites/ +│ ├── AIAutomationSettings.tsx +│ ├── Content.tsx +│ ├── ContentStructure.tsx +│ ├── Dashboard.tsx +│ ├── DeploymentPanel.tsx +│ ├── List.tsx +│ ├── PageManager.tsx +│ ├── PostEditor.tsx +│ ├── PublishingQueue.tsx +│ ├── Settings.tsx +│ └── SyncDashboard.tsx +├── Thinker/ +│ ├── AuthorProfiles.tsx +│ ├── ImageTesting.tsx +│ ├── Profile.tsx +│ ├── Prompts.tsx +│ └── Strategies.tsx +├── Writer/ +│ ├── Approved.tsx +│ ├── Content.tsx +│ ├── ContentView.tsx +│ ├── Images.tsx +│ ├── Review.tsx +│ └── Tasks.tsx +├── Components.tsx +├── Payment.tsx +└── UIElements.tsx +```# Frontend Pages & Routes + **Last Verified:** January 17, 2026 **Version:** 1.8.0 **Framework:** React 19 + TypeScript + React Router 6 + Vite diff --git a/docs/INDEX.md b/docs/INDEX.md index 7bcd5464..2e04319a 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -11,6 +11,7 @@ | I want to... | Go to | |--------------|-------| | Understand system architecture | [00-SYSTEM/ARCHITECTURE.md](00-SYSTEM/ARCHITECTURE.md) | +| See repository structure | [00-SYSTEM/REPO-STRUCTURE.md](00-SYSTEM/REPO-STRUCTURE.md) | | Read executive summary | [00-SYSTEM/IGNY8-APP.md](00-SYSTEM/IGNY8-APP.md) | | Work with a specific module | [10-MODULES/](#modules) | | Find an API endpoint | [20-API/ENDPOINTS.md](20-API/ENDPOINTS.md) | @@ -36,6 +37,7 @@ | Document | Purpose | |----------|---------| | [ARCHITECTURE.md](00-SYSTEM/ARCHITECTURE.md) | Tech stack, deployment, system design | +| [REPO-STRUCTURE.md](00-SYSTEM/REPO-STRUCTURE.md) | Repository layout and directory trees | | [AUTH-FLOWS.md](00-SYSTEM/AUTH-FLOWS.md) | Authentication, JWT, sessions, roles | | [TENANCY.md](00-SYSTEM/TENANCY.md) | Multi-tenant architecture, Account/Site/Sector | | [IGNY8-APP.md](00-SYSTEM/IGNY8-APP.md) | Executive summary (non-technical) | @@ -75,54 +77,95 @@ | [COMPONENT-SYSTEM.md](30-FRONTEND/COMPONENT-SYSTEM.md) | **UI components reference** (Button, InputField, etc.) | | [DESIGN-GUIDE.md](30-FRONTEND/DESIGN-GUIDE.md) | **Design system guide** (colors, rules) | | [DESIGN-TOKENS.md](30-FRONTEND/DESIGN-TOKENS.md) | **Design tokens** (CSS variables, color scales) | +| [PAGE-AUDIT.md](30-FRONTEND/PAGE-AUDIT.md) | Page-by-page function audit (in progress) | | [PAGES.md](30-FRONTEND/PAGES.md) | All pages and routes | | [PAGE-REQUIREMENTS.md](30-FRONTEND/PAGE-REQUIREMENTS.md) | Site/sector selector requirements | | [STORES.md](30-FRONTEND/STORES.md) | Zustand state management | -### Current Page Structure (v1.8.2) +### Current Page Structure (v1.8.3) ``` -/ → Dashboard (Home.tsx) - with workflow widgets +/ → Dashboard (Home.tsx) +├── AUTH +│ /signin → Sign In (SignIn.tsx) +│ /signup → Sign Up (SignUp.tsx) +│ /signup/pk → Legacy redirect to Sign Up +│ /forgot-password → Forgot Password (ForgotPassword.tsx) +│ /reset-password → Reset Password (ResetPassword.tsx) +│ /verify-email → Verify Email (VerifyEmail.tsx) +│ /unsubscribe → Unsubscribe (Unsubscribe.tsx) +│ /payment → Payment (Payment.tsx) +├── LEGAL +│ /terms → Terms (Terms.tsx) +│ /privacy → Privacy (Privacy.tsx) ├── SETUP │ /setup/wizard → Onboarding Wizard (SetupWizard.tsx) -│ /keywords-library → Keywords Library (IndustriesSectorsKeywords.tsx) [v1.8.2 renamed] -│ /account/content-settings → Content Settings (ContentSettingsPage.tsx) +│ /keywords-library → Keywords Library (IndustriesSectorsKeywords.tsx) +├── SITES │ /sites → Sites List (List.tsx) │ /sites/:id → Site Dashboard (Dashboard.tsx) +│ /sites/:id/pages → Page Manager (PageManager.tsx) +│ /sites/:id/content → Site Content (Content.tsx) +│ /sites/:id/content/structure → Content Structure (ContentStructure.tsx) │ /sites/:id/settings → Site Settings (Settings.tsx) -│ - Tabs: General, Automation (v1.8.0), Integrations -│ /thinker/prompts → Thinker Prompts (Prompts.tsx) [Admin] -│ /thinker/author-profiles → Author Profiles (AuthorProfiles.tsx) [Admin] +│ /sites/:id/sync → Sync Dashboard (SyncDashboard.tsx) +│ /sites/:id/deploy → Deployment Panel (DeploymentPanel.tsx) +│ /sites/:id/posts/:postId → Post Editor (PostEditor.tsx) ├── WORKFLOW │ /planner/keywords → Planner Keywords (Keywords.tsx) -│ /planner/clusters → Clusters (Clusters.tsx) -│ /planner/ideas → Ideas (Ideas.tsx) -│ /writer/tasks → Writer Queue (Tasks.tsx) -│ /writer/drafts → Drafts (Drafts.tsx) -│ /writer/images → Images (Images.tsx) -│ /writer/review → Review (Review.tsx) +│ /planner/clusters → Planner Clusters (Clusters.tsx) +│ /planner/clusters/:id → Cluster Detail (ClusterDetail.tsx) +│ /planner/ideas → Planner Ideas (Ideas.tsx) +│ /writer/tasks → Writer Tasks (Tasks.tsx) +│ /writer/content → Writer Content (Content.tsx) +│ /writer/content/:id → Content View (ContentView.tsx) +│ /writer/images → Writer Images (Images.tsx) +│ /writer/review → Review Queue (Review.tsx) │ /writer/approved → Approved (Approved.tsx) -│ /automation → Automation Dashboard (AutomationPage.tsx) -│ /automation/overview → Run History (AutomationOverview.tsx) [v1.7.0] -│ /automation/runs/:id → Run Detail (AutomationRunDetail.tsx) [v1.7.0] +│ /automation/overview → Automation Runs (AutomationOverview.tsx) +│ /automation/runs/:runId → Run Detail (AutomationRunDetail.tsx) +│ /automation/run → Automation Run (AutomationPage.tsx) ├── PUBLISHER │ /publisher/content-calendar → Content Calendar (ContentCalendar.tsx) ├── OPTIONAL MODULES -│ /linker/content → Linker [if enabled] -│ /optimizer/content → Optimizer [if enabled] +│ /linker/content → Linker Content (ContentList.tsx) +│ /optimizer/content → Optimizer Content (ContentSelector.tsx) +│ /optimizer/analyze/:id → Optimization Preview (AnalysisPreview.tsx) +├── THINKER (ADMIN) +│ /thinker/prompts → Prompts (Prompts.tsx) +│ /thinker/author-profiles → Author Profiles (AuthorProfiles.tsx) +│ /thinker/profile → Thinker Profile (Profile.tsx) +│ /thinker/strategies → Strategies (Strategies.tsx) +│ /thinker/image-testing → Image Testing (ImageTesting.tsx) ├── ACCOUNT │ /account/notifications → Notifications (NotificationsPage.tsx) │ /account/settings → Account Settings (AccountSettingsPage.tsx) -│ - Tabs: Account, Profile, Team +│ /account/settings/profile → Profile Tab +│ /account/settings/team → Team Tab │ /account/plans → Plans & Billing (PlansAndBillingPage.tsx) -│ - Tabs: Plan, Upgrade, History -│ /account/usage → Usage Analytics (UsageAnalyticsPage.tsx) -│ - Tabs: Limits, Credit History, API Activity -│ /settings/integration → Integration Settings (IntegrationPage.tsx) [Admin] +│ /account/plans/upgrade → Upgrade Tab +│ /account/plans/history → History Tab +│ /account/usage → Usage Dashboard (UsageDashboardPage.tsx) +│ /account/content-settings → Content Settings (ContentSettingsPage.tsx) +├── SETTINGS +│ /settings → General Settings (General.tsx) +│ /settings/users → Users (Users.tsx) +│ /settings/subscriptions → Subscriptions (Subscriptions.tsx) +│ /settings/system → System Settings (System.tsx) +│ /settings/account → Account Settings (Account.tsx) +│ /settings/plans → Plans (Plans.tsx) +│ /settings/industries → Industries (Industries.tsx) +│ /settings/integration → Integration (Integration.tsx) [Admin] +│ /settings/publishing → Publishing (Publishing.tsx) +│ /settings/sites → Sites Settings (Sites.tsx) +├── REFERENCE +│ /reference/seed-keywords → Seed Keywords (SeedKeywords.tsx) +│ /reference/industries → Industries (Industries.tsx) ├── HELP -│ /help → Help Center (HelpCenter.tsx) +│ /help → Help Center (Help.tsx) └── INTERNAL - /ui-elements → UI Elements (UIElements.tsx) [Design System Ref] + /ui-elements → UI Elements (UIElements.tsx) + /components → Components (Components.tsx) ``` **Removed in v1.8.0:** diff --git a/frontend/public/marketing/images/automation-dashboard.png b/frontend/public/marketing/images/automation-dashboard.png index 3000d608..88fc8d33 100644 Binary files a/frontend/public/marketing/images/automation-dashboard.png and b/frontend/public/marketing/images/automation-dashboard.png differ diff --git a/frontend/public/marketing/images/hero-dashboard.png b/frontend/public/marketing/images/hero-dashboard.png index d7f83792..585a1cde 100644 Binary files a/frontend/public/marketing/images/hero-dashboard.png and b/frontend/public/marketing/images/hero-dashboard.png differ diff --git a/frontend/public/marketing/images/planner-dashboard.png b/frontend/public/marketing/images/planner-dashboard.png index 71706171..13edf9bd 100644 Binary files a/frontend/public/marketing/images/planner-dashboard.png and b/frontend/public/marketing/images/planner-dashboard.png differ diff --git a/frontend/public/marketing/images/publisher-dashboard.png b/frontend/public/marketing/images/publisher-dashboard.png new file mode 100644 index 00000000..6190c566 Binary files /dev/null and b/frontend/public/marketing/images/publisher-dashboard.png differ diff --git a/frontend/public/marketing/images/writer-dashboard.png b/frontend/public/marketing/images/writer-dashboard.png index 3fa88944..1cfcd0b0 100644 Binary files a/frontend/public/marketing/images/writer-dashboard.png and b/frontend/public/marketing/images/writer-dashboard.png differ