Skip to content

feat: simplify project config#79

Merged
AlejandroAkbal merged 2 commits intomainfrom
feat/simplify-project-config
May 24, 2025
Merged

feat: simplify project config#79
AlejandroAkbal merged 2 commits intomainfrom
feat/simplify-project-config

Conversation

@AlejandroAkbal
Copy link
Copy Markdown
Member

@AlejandroAkbal AlejandroAkbal commented May 24, 2025

Summary by CodeRabbit

  • New Features

    • Introduced a centralized project configuration, enabling dynamic management of app name, URLs, branding, analytics, and contact details throughout the application.
  • Refactor

    • Replaced hardcoded names, URLs, and email addresses in all pages and components with dynamic references from the project configuration.
    • Updated environment variable example file and added a new template for environment configuration.
    • Centralized SEO metadata, social links, and branding colors for consistent usage across the app.
    • Made proxy URLs, feedback links, sidebar navigation, and modal prompts dynamically configurable via the project settings.
  • Chores

    • Removed obsolete environment variable example file and introduced a new standardized example.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 24, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

The changes centralize all project-specific configuration, branding, and metadata into a new TypeScript configuration module (config/project.ts). Hardcoded strings for app name, URLs, emails, and branding are replaced throughout the codebase with dynamic references to this configuration object. Environment example files are renamed, and runtime/environment variable usage is largely replaced by config-driven values for consistency and maintainability.

Changes

File(s) Change Summary
.env.example, .example.env .env.example removed; .example.env added as new template for environment variables.
config/project.ts New TypeScript config module defining all project metadata, URLs, branding, analytics, SEO, Sentry, and social links.
nuxt.config.js Imports and uses project config for PWA, analytics, theme, site URL, and image provider settings; removes reliance on environment variables for most settings.
app.vue, assets/js/promotions.ts, assets/js/proxy.ts, assets/js/sidebarLinks.ts Replace hardcoded app/domain URLs and branding with dynamic values from project config.
components/layout/FeedbackButton.vue, components/layout/modal/FeedbackPrompt.vue Use project config for feedback URLs and branding in feedback-related components.
components/layout/modal/PwaPrompt.vue, components/layout/modal/ReviewPrompt.vue Use project config for PWA and review URLs, and app name in modal components.
components/layout/navigation/Sidebar.vue Sidebar now uses project config for app name and all URLs (premium, social, etc.).
components/pages/home/News.vue, components/pages/posts/PostsPageFooter.vue News and footer components use project config for app name and URLs.
components/pages/posts/navigation/DomainSelectorFallback.vue Uses project config for domain/hostname in fallback selector.
components/pages/posts/post/PostComponent.vue Share button uses dynamic app name from project config.
pages/cookie-policy.vue, pages/dmca.vue, pages/legal.vue, pages/privacy-policy.vue All legal/policy pages use project config for app name, URLs, and contact email.
pages/other-sites.vue, pages/settings.vue, pages/terms-of-service.vue Miscellaneous pages use project config for app name and URLs.
pages/index.vue Structured data (schema.org) now uses dynamic app name and social URLs from project config.
pages/posts/[domain].vue, pages/premium/backup.vue, pages/premium/dashboard.vue Premium and posts-related pages use project config for app name, URLs, and email.
pages/premium/forgot-password.vue, pages/premium/index.vue, pages/premium/saved-posts/[domain].vue, pages/premium/sign-in.vue All premium pages use project config for app name, URLs, and email.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant VueComponent
    participant ProjectConfig (config/project.ts)

    User->>VueComponent: Loads page/component
    VueComponent->>ProjectConfig: Import project config
    VueComponent->>VueComponent: Use project.name, project.urls, etc.
    VueComponent-->>User: Rendered with dynamic branding, URLs, and metadata
Loading
sequenceDiagram
    participant NuxtApp
    participant ProjectConfig
    participant NuxtConfig

    NuxtApp->>NuxtConfig: Load configuration (nuxt.config.js)
    NuxtConfig->>ProjectConfig: Import project config object
    NuxtConfig->>NuxtConfig: Set PWA, analytics, theme, URLs from project config
    NuxtConfig-->>NuxtApp: Export configured Nuxt app
Loading

Possibly related PRs

  • feat: simplify project config #79: Implements a comprehensive refactor to centralize and replace hardcoded strings and environment variables with a unified project configuration object imported from @/config/project, including removal of .env.example and addition of .example.env, and updating numerous files to use dynamic project config values instead of fixed literals.

Note

⚡️ AI Code Reviews for VS Code, Cursor, Windsurf

CodeRabbit now has a plugin for VS Code, Cursor and Windsurf. This brings AI code reviews directly in the code editor. Each commit is reviewed immediately, finding bugs before the PR is raised. Seamless context handoff to your AI code agent ensures that you can easily incorporate review feedback.
Learn more here.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 34fabae and dfbee4d.

📒 Files selected for processing (4)
  • app.vue (4 hunks)
  • config/project.ts (1 hunks)
  • pages/posts/[domain].vue (3 hunks)
  • pages/premium/backup.vue (2 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

🔭 Outside diff range comments (1)
assets/js/sidebarLinks.ts (1)

44-44: 🧹 Nitpick (assertive)

Consider making F.A.Q. link consistent with centralization.

The F.A.Q. link still uses a hardcoded URL while other links have been updated to use the project configuration. This creates inconsistency in the codebase.

Consider whether this should also use the project configuration or if there's a specific reason it remains hardcoded.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 500dbc8 and 34fabae.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (32)
  • .env.example (0 hunks)
  • .example.env (1 hunks)
  • app.vue (4 hunks)
  • assets/js/promotions.ts (2 hunks)
  • assets/js/proxy.ts (1 hunks)
  • assets/js/sidebarLinks.ts (3 hunks)
  • components/layout/FeedbackButton.vue (2 hunks)
  • components/layout/modal/FeedbackPrompt.vue (4 hunks)
  • components/layout/modal/PwaPrompt.vue (2 hunks)
  • components/layout/modal/ReviewPrompt.vue (3 hunks)
  • components/layout/navigation/Sidebar.vue (5 hunks)
  • components/pages/home/News.vue (1 hunks)
  • components/pages/posts/PostsPageFooter.vue (3 hunks)
  • components/pages/posts/navigation/DomainSelectorFallback.vue (4 hunks)
  • components/pages/posts/post/PostComponent.vue (2 hunks)
  • config/project.ts (1 hunks)
  • nuxt.config.js (6 hunks)
  • pages/cookie-policy.vue (8 hunks)
  • pages/dmca.vue (2 hunks)
  • pages/index.vue (3 hunks)
  • pages/legal.vue (2 hunks)
  • pages/other-sites.vue (3 hunks)
  • pages/posts/[domain].vue (4 hunks)
  • pages/premium/backup.vue (2 hunks)
  • pages/premium/dashboard.vue (4 hunks)
  • pages/premium/forgot-password.vue (6 hunks)
  • pages/premium/index.vue (6 hunks)
  • pages/premium/saved-posts/[domain].vue (8 hunks)
  • pages/premium/sign-in.vue (2 hunks)
  • pages/privacy-policy.vue (8 hunks)
  • pages/settings.vue (3 hunks)
  • pages/terms-of-service.vue (5 hunks)
💤 Files with no reviewable changes (1)
  • .env.example
🧰 Additional context used
🧬 Code Graph Analysis (4)
assets/js/proxy.ts (1)
config/project.ts (1)
  • project (68-105)
assets/js/promotions.ts (1)
config/project.ts (1)
  • project (68-105)
assets/js/sidebarLinks.ts (1)
config/project.ts (1)
  • project (68-105)
nuxt.config.js (1)
config/project.ts (1)
  • project (68-105)
🔇 Additional comments (69)
.example.env (1)

1-19: Well-structured environment configuration template.

The file provides a clear template for environment variables with good organization and helpful comments. The empty values for sensitive data (API keys, Sentry credentials) are appropriate for a template file.

config/project.ts (2)

5-59: Well-structured TypeScript interfaces for configuration.

The interface definitions provide excellent type safety and clear structure for the project configuration. The separation of concerns (URLs, branding, analytics, etc.) is well-designed.


76-77:

Details

✅ Verification successful

Verify URL construction safety.

The URL constructor will throw an error if invalid URLs are provided. Consider adding error handling or validation to ensure the application doesn't crash during initialization.


🏁 Script executed:

#!/bin/bash
# Check if there are any error handling patterns for URL construction in the codebase
rg -A 5 -B 5 "new URL\("

Length of output: 6286


Skip error handling for static config URLs
The URLs in config/project.ts are static literals ('https://r34.app' and 'http://localhost:3000'). Any typo would be caught immediately at build/startup rather than at runtime, so wrapping these in try/catch isn’t needed. Dynamic URL parsing elsewhere (e.g. in getFaviconUrl and isSourceAnUrl) already includes error handling where user input is involved.

pages/posts/[domain].vue (2)

16-16: Good adoption of centralized configuration.

The import of the project configuration aligns well with the centralization effort.


735-735: Proper usage of centralized configuration.

The replacement of hardcoded app names with project.shortName and project.name is implemented correctly and maintains consistency with the centralization effort.

Also applies to: 958-959

components/pages/posts/post/PostComponent.vue (2)

5-5: Consistent adoption of centralized configuration.

The import follows the established pattern for using the centralized project configuration.


140-140: Proper replacement of hardcoded app name.

The change from the hardcoded string to project.name maintains functionality while enabling centralized configuration management. This aligns well with the overall refactoring effort.

pages/premium/sign-in.vue (2)

4-4: Good addition of centralized config import.

The import follows a clean pattern for accessing centralized project configuration.


56-56: Excellent use of dynamic project name in SEO meta.

This change improves maintainability by removing hardcoded app names and allows for environment-specific branding.

pages/premium/backup.vue (1)

49-49: Smart improvement to backup filename generation.

Using the hostname from the project config makes backup files more environment-specific and easier to identify. This is a great improvement over the hardcoded "R34App_" prefix.

components/pages/home/News.vue (3)

2-2: Good import of centralized config.

Consistent with the standardization effort using the @/ alias.


7-7: Excellent dynamic text generation.

The use of template literals with project.name makes the content adaptable across different project configurations while maintaining readability.

Also applies to: 18-18


10-11:

Details

✅ Verification successful

Smart dynamic URL construction.

Using project.urls.production.hostname for subdomain generation is a clean approach that maintains the URL structure while making it configurable.

However, ensure that the config structure includes proper validation for the hostname property:

Also applies to: 21-22


🏁 Script executed:

#!/bin/bash
# Description: Verify the project config structure includes the expected properties
# Expected: Find the config file and check for hostname property definition

fd -t f "project.ts" config/ --exec cat {}

Length of output: 2521


Approved: Dynamic subdomain generation with built-in URL validation

Using project.urls.production.hostname to build feedback.<hostname> is a solid, configurable approach—and since urls.production is stored as a native URL object (via new URL(...)), invalid hostnames will throw at initialization. No further validation changes are needed.

pages/settings.vue (3)

5-5: Consistent import pattern.

Good use of the standardized @/config/project import path.


10-10: Excellent centralization of app name references.

Both the SEO meta description and template text now dynamically reference the project name, improving consistency and maintainability across different environments.

Also applies to: 116-116


205-208: Improved code formatting.

The multi-line formatting of the ExclamationTriangleIcon enhances readability without affecting functionality.

components/pages/posts/navigation/DomainSelectorFallback.vue (3)

3-3: LGTM! Clean import of centralized configuration.

The import follows the established pattern for accessing the centralized project configuration.


24-24: LGTM! Correct usage of dynamic hostname configuration.

The favicon URL construction and hostname display text now correctly use the centralized configuration. This improves maintainability by eliminating hardcoded domain references.

Also applies to: 37-37


46-49: LGTM! Formatting change with no functional impact.

The JSX syntax expansion from self-closing to multi-line format is purely stylistic and doesn't affect component behavior.

assets/js/proxy.ts (2)

1-1: LGTM! Proper import of centralized configuration.

The import statement correctly brings in the project configuration for dynamic URL construction.


4-4: LGTM! Correct URL construction with centralized configuration.

Using project.urls.production.toString() properly converts the URL object to a string and correctly constructs the proxy endpoint URL. This maintains the same functionality while using the centralized configuration.

components/layout/modal/PwaPrompt.vue (2)

4-4: LGTM! Consistent import of centralized configuration.

The import statement properly brings in the project configuration for dynamic URL construction.


52-52: LGTM! Correct dynamic URL construction for PWA installer.

The iframe source URL correctly uses the centralized hostname configuration in the template literal. This maintains the same functionality while eliminating hardcoded domain references.

assets/js/promotions.ts (2)

1-1: LGTM! Proper import of centralized configuration.

The import statement correctly brings in the project configuration for dynamic URL parameter construction.


84-84: LGTM! Correct dynamic utm_source parameter construction.

The template literal correctly uses the centralized hostname configuration for the utm_source tracking parameter. This ensures the tracking reflects the actual domain being used and eliminates hardcoded domain references.

components/layout/FeedbackButton.vue (1)

3-3: LGTM! Excellent centralization of configuration.

The replacement of hardcoded URLs with dynamic configuration references is well implemented. Both the click handler and NuxtLink use consistent URL construction with the project config.

Also applies to: 6-6, 19-19

components/pages/posts/PostsPageFooter.vue (3)

6-6: LGTM! Good addition of project configuration import.


82-82: LGTM! Proper replacement of hardcoded app name.

Using project.shortName instead of hardcoded "R34.app" improves maintainability and centralization.


136-140: LGTM! Consistent use of project configuration.

All instances of the hardcoded app name have been properly replaced with project.shortName, maintaining consistency throughout the component.

pages/legal.vue (2)

2-2: LGTM! Proper centralization of project metadata.

The import and usage of project.name in the SEO meta description correctly replaces hardcoded values with centralized configuration.

Also applies to: 7-7


79-80: LGTM! Consistent email configuration usage.

Both the link text and mailto href properly use project.email, ensuring consistency and maintainability for contact information.

components/layout/modal/ReviewPrompt.vue (1)

3-3:

Details

✅ Verification successful

LGTM! Consistent implementation of centralized configuration.

The changes properly replace hardcoded values with project config references. The URL construction for Trustpilot follows the same pattern used across other components.

Let me verify that the project configuration structure supports all the properties being used across these files:

Also applies to: 25-25, 38-38


🏁 Script executed:

#!/bin/bash
# Description: Verify the project configuration structure contains all required properties
# Expected: project config should have urls.production.hostname, shortName, name, and email properties

# Check if project config file exists and examine its structure
if [ -f "config/project.ts" ]; then
    echo "=== Project config file contents ==="
    cat config/project.ts
    echo -e "\n=== Checking for required properties ==="
    
    # Check for required properties
    echo "Checking for urls.production.hostname..."
    rg "urls.*production.*hostname" config/project.ts || echo "❌ urls.production.hostname not found"
    
    echo "Checking for shortName..."
    rg "shortName" config/project.ts || echo "❌ shortName not found"
    
    echo "Checking for name property..."
    rg "name.*:" config/project.ts || echo "❌ name property not found"
    
    echo "Checking for email property..."
    rg "email.*:" config/project.ts || echo "❌ email property not found"
else
    echo "❌ Project config file not found at config/project.ts"
fi

# Check for any remaining hardcoded values that might have been missed
echo -e "\n=== Checking for any remaining hardcoded values ==="
echo "Checking for 'R34.app' references..."
rg "R34\.app" --type vue --type ts --type js || echo "✅ No hardcoded R34.app found"

echo "Checking for 'r34.app' references..."
rg "r34\.app" --type vue --type ts --type js || echo "✅ No hardcoded r34.app found"

Length of output: 3945


Approved: Project configuration verified

All required properties (name, shortName, email) are present in config/project.ts and urls.production is defined as a URL (providing .hostname at runtime). No hardcoded R34.app or r34.app references remain.

pages/premium/forgot-password.vue (1)

3-3: Good addition of centralized config import.

The import follows the consistent pattern established across the codebase for the centralization effort.

pages/index.vue (2)

9-9: Consistent config import pattern.

Good adherence to the established import pattern for the centralization effort.


428-459: Excellent centralization of schema.org structured data.

Replacing hardcoded values with dynamic project configuration ensures:

  • Consistent branding across all structured data
  • Easier maintenance when URLs or social links change
  • Better SEO consistency

The implementation properly uses project.name, project.urls.production.toString(), and project.social.* properties, which will improve maintainability significantly.

pages/premium/dashboard.vue (3)

14-14: Consistent config import added.

Follows the established pattern for the centralization effort.


221-221: Proper centralization of feedback URL.

Dynamic feedback URL construction improves maintainability and ensures consistency with project configuration.


240-240: Good centralization of contact email.

Using project.email instead of hardcoded email ensures consistency and easier maintenance.

pages/terms-of-service.vue (4)

2-2: Consistent config import pattern.

Good adherence to the established centralization approach.


7-7: Proper centralization of SEO metadata.

Dynamic description ensures consistency with the project branding across all pages.


19-32: Excellent systematic replacement in legal content.

This comprehensive update to replace hardcoded references with dynamic config is particularly important for legal documents where accuracy and consistency are critical. Using project.name and project.urls.production.toString() ensures that:

  • Legal documents automatically reflect current branding
  • URL references remain accurate if the domain changes
  • Terms are consistent across the entire application

The systematic approach throughout the document maintains legal document integrity.


61-128: Comprehensive centralization throughout terms content.

The systematic replacement of hardcoded app names and URLs with project config references throughout the terms text ensures legal document accuracy and maintainability. This is a critical improvement for legal documents that need to stay consistent with the application branding.

pages/other-sites.vue (3)

2-2: LGTM: Clean import of centralized config.

Good practice to import the centralized project configuration for dynamic branding.


19-19: LGTM: Consistent dynamic branding implementation.

The replacement of hardcoded "Rule 34 App" with project.name ensures consistent branding across the application and makes the codebase more maintainable.

Also applies to: 27-27, 40-40


36-36: LGTM: Proper URL construction with hostname extraction.

Using project.urls.production.hostname correctly extracts just the domain name for the UTM source parameter, which is the appropriate approach for tracking.

components/layout/modal/FeedbackPrompt.vue (3)

3-3: LGTM: Proper import of centralized configuration.

Clean import following the established pattern for configuration centralization.


30-30: LGTM: Appropriate use of shortName for UI text.

Using project.shortName is perfect for user-facing text where a concise app name is preferred.


41-41: LGTM: Consistent dynamic URL construction.

The feedback URL construction using project.urls.production.hostname follows the established pattern and correctly builds subdomain URLs.

Also applies to: 59-59

pages/dmca.vue (3)

2-3: LGTM: Clean import and configuration usage.

Proper import of the centralized project configuration following the established pattern.


7-7: LGTM: Dynamic SEO description.

Using project.name in the SEO meta description ensures consistent branding and eliminates hardcoded references.


19-22: LGTM: Comprehensive dynamic content implementation.

Excellent use of the project configuration for app name, URL, and email. This centralizes all project-specific information and makes the content truly dynamic and maintainable.

Also applies to: 37-39

assets/js/sidebarLinks.ts (2)

10-10: LGTM: Proper import of centralized configuration.

Clean import following the established pattern for configuration centralization.


35-35: LGTM: Correct hostname usage for subdomain construction.

Using project.urls.production.hostname is the right approach for extracting just the domain name for the install PWA service.

pages/premium/index.vue (1)

16-16: LGTM! Excellent centralization of project configuration.

The systematic replacement of hardcoded strings with dynamic references to the centralized project configuration is a great improvement for maintainability. All usage patterns are consistent and the changes preserve the original functionality while making the codebase more configurable.

Also applies to: 158-158, 205-205, 263-263, 299-299, 415-415

pages/premium/saved-posts/[domain].vue (2)

17-17: LGTM! Consistent use of centralized configuration.

The changes properly replace hardcoded domain references with the centralized project configuration. The error message using project.shortName is a nice touch for user-facing text consistency.

Also applies to: 39-39, 320-320, 764-764


668-671: Good formatting improvement for icon components.

The multiline JSX-style formatting for icon components improves readability and consistency.

Also applies to: 736-739, 748-751, 799-802

components/layout/navigation/Sidebar.vue (1)

4-4: LGTM! Perfect centralization of branding and URLs.

All changes consistently use the centralized project configuration for app name, URLs, and social media links. This makes the sidebar component fully configurable and maintainable.

Also applies to: 21-21, 66-66, 98-98, 119-119

pages/cookie-policy.vue (1)

2-2: LGTM! Comprehensive centralization of project information.

Excellent work centralizing all project-specific information including name, email, and URLs throughout the cookie policy. This makes the content maintainable and consistent.

Also applies to: 7-7, 22-22, 97-97, 129-129, 176-176, 319-321

pages/privacy-policy.vue (2)

2-2: LGTM: Centralized configuration import

Good practice importing the centralized project configuration. This supports the broader refactoring effort to eliminate hardcoded values.


6-6: LGTM: Dynamic SEO description

The SEO meta description now properly uses the project name dynamically, improving maintainability.

app.vue (4)

2-2: LGTM: Centralized configuration import

Good practice importing the centralized project configuration with proper TypeScript extension.


7-7: LGTM: Clear variable naming

Renaming config to runtimeConfig improves clarity and distinguishes it from the static project configuration.


10-10: LGTM: Dynamic hostname usage

Using project.urls.production.hostname for canonical URL construction is appropriate and maintains flexibility.


27-27: LGTM: Dynamic title template

The title template properly uses both project.name and project.seo.title, providing good fallback behavior.

nuxt.config.js (5)

2-2: LGTM: Centralized configuration import

Good practice importing the centralized project configuration with proper TypeScript extension.


38-47: LGTM: Conditional analytics configuration

Good practice using conditional loading for Formbricks analytics. The script injection properly uses the project configuration values.


289-289: LGTM: Dynamic imgproxy URL construction

Using project.urls.production.hostname for the imgproxy base URL is appropriate and maintains consistency with the centralized configuration approach.


309-311: LGTM: PWA manifest configuration

The PWA manifest properly uses project configuration for name, description, and theme colors, ensuring consistency across the application.

Also applies to: 318-319


353-353: LGTM: Dynamic shortcut URL

Using project.urls.production.hostname in the PWA shortcut URL maintains consistency with the centralized configuration approach.

Comment thread config/project.ts
Comment thread pages/posts/[domain].vue Outdated
Comment thread pages/premium/backup.vue Outdated
Comment thread pages/premium/forgot-password.vue
Comment thread pages/premium/dashboard.vue
Comment thread components/layout/modal/FeedbackPrompt.vue
Comment thread assets/js/sidebarLinks.ts
Comment thread pages/cookie-policy.vue
Comment thread pages/privacy-policy.vue
Comment thread nuxt.config.js
@AlejandroAkbal AlejandroAkbal merged commit 8f31408 into main May 24, 2025
1 check was pending
@AlejandroAkbal AlejandroAkbal deleted the feat/simplify-project-config branch May 24, 2025 11:43
@coderabbitai coderabbitai Bot mentioned this pull request May 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant