Skip to content

Make it configurable to name and brand the fdm-app#99

Merged
SvenVw merged 41 commits into
developmentfrom
rename-to-minas2
Apr 7, 2025
Merged

Make it configurable to name and brand the fdm-app#99
SvenVw merged 41 commits into
developmentfrom
rename-to-minas2

Conversation

@SvenVw
Copy link
Copy Markdown
Collaborator

@SvenVw SvenVw commented Mar 12, 2025

Summary by CodeRabbit

  • New Features

    • Dynamic page metadata now displays customized titles and descriptions (e.g., for Dashboard, Authentication, Farm Settings) that reflect your organization’s name.
    • A new alert on the sign‐in page indicates that the application is still in development.
  • Documentation

    • Setup instructions have been enhanced with additional configuration options and clear guidance for environment variables.
  • Improvements

    • The overall user interface now consistently uses Dutch language and benefits from refined analytics integration and error handling for a smoother experience.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Mar 12, 2025

🦋 Changeset detected

Latest commit: 3418b7a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@svenvw/fdm-app Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@SvenVw SvenVw self-assigned this Mar 12, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 12, 2025

Walkthrough

This update introduces new minor version documentation files, extensive metadata enhancements across routes, and widespread refactoring of import paths from "@/..." to "~/...". Numerous components and pages now export dynamic metadata using clientConfig.name for improved SEO and user context. Changes also include enhanced type safety and error handling in UI components, updates to analytics (Sentry and PostHog) configuration, adjustments in environment and configuration files, and the addition of a new integration module for soil parameter estimates.

Changes

Files Change Summary
.changeset/*.md Added files documenting minor version updates for the package, highlighting UI text enhancements and configurability improvements.
fdm-app/app/routes/*.tsx (e.g., api.auth.$.tsx, farm.*.tsx, signin.tsx, etc.) Introduced new meta: MetaFunction exports; updated page titles, descriptions, and dynamic branding references using clientConfig.name.
fdm-app/app/components/**/*.tsx Refactored import paths from "@/..." to "~/..."; enhanced type safety, error handling, and conditional rendering in components such as SidebarApp, Banner, and others.
fdm-app/app/integrations/*, config files (.env.example, README.md, tsconfig.json, vite.config.ts) Updated analytics initialization (Sentry/PostHog), refactored getMapboxToken, added new nmi.ts for soil parameter estimates, and improved configuration clarity and module mapping.

Sequence Diagram(s)

sequenceDiagram
  participant Caller as Function Caller
  participant Field as Field Geometry
  participant NMI as NMI API Server
  participant Func as getSoilParameterEstimates()

  Caller->>Func: Invoke getSoilParameterEstimates(field, nmiApiKey)
  Func->>Field: Calculate centroid (lat, lng)
  Func->>NMI: Send GET request with coordinates
  NMI-->>Func: Return soil parameter estimates JSON
  Func->>Caller: Return modified response (with source & depth)
Loading

Possibly related PRs

Poem

I'm a rabbit on a coding spree,
Hoping through paths now clear as can be.
Metadata flows like a gentle stream,
With imports refactored—a developer's dream!
Hopping along with a whiskered wink,
I celebrate changes with a joyful blink! 🐇✨

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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 resolve resolve all the CodeRabbit review comments.
  • @coderabbitai plan to trigger planning for file edits and PR creation.
  • @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.

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 12, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 92.64%. Comparing base (60dbb04) to head (3418b7a).
Report is 42 commits behind head on development.

Additional details and impacted files
@@             Coverage Diff              @@
##           development      #99   +/-   ##
============================================
  Coverage        92.64%   92.64%           
============================================
  Files               44       44           
  Lines             4702     4702           
  Branches           502      502           
============================================
  Hits              4356     4356           
  Misses             345      345           
  Partials             1        1           
Flag Coverage Δ
fdm-calculator 92.68% <ø> (ø)
fdm-core 92.55% <ø> (ø)
fdm-data 94.82% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@SvenVw SvenVw changed the base branch from add-docker to main March 12, 2025 14:35
@SvenVw SvenVw marked this pull request as ready for review March 12, 2025 14:36
@SvenVw SvenVw linked an issue Mar 12, 2025 that may be closed by this pull request
@SvenVw SvenVw added this to the Alpha release milestone Mar 12, 2025
@coderabbitai coderabbitai Bot added the fdm-app label Mar 12, 2025
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: 1

🧹 Nitpick comments (10)
.changeset/fluffy-hotels-switch.md (1)

1-5: Consider adding the article "a" in the message description.

The message description could be more grammatically correct by adding the article "a" before "message".

-Add message at signin page that the app is still in development
+Add a message at signin page that the app is still in development
🧰 Tools
🪛 LanguageTool

[uncategorized] ~5-~5: You might be missing the article “a” here.
Context: --- "@svenvw/fdm-app": minor --- Add message at signin page that the app is still in...

(AI_EN_LECTOR_MISSING_DETERMINER_A)

fdm-app/app/routes/farm.$b_id_farm.atlas.soil.tsx (1)

15-24: Fix minor spacing issue in title

The title includes an extra space between "Bodem" and the hyphen. This appears to be a small typographical error.

-        { title: "Bodem  - Kaart | MINAS2" },
+        { title: "Bodem - Kaart | MINAS2" },

Otherwise, the added metadata for the soil map page looks good and follows the same pattern as other pages, providing context for SEO and accessibility.

fdm-app/app/routes/farm.$b_id_farm.atlas.fields.tsx (1)

23-23: Consider standardizing imports across files.

The MetaFunction type is imported from "@remix-run/node" here, while other files import it from "react-router". For consistency and to align with the project's use of React Router v7, consider standardizing these imports.

-import type { MetaFunction } from "@remix-run/node"
+import type { MetaFunction } from "react-router"
fdm-app/app/routes/farm.create.$b_id_farm.cultivations._index.tsx (1)

10-10: Fix typo in page title.

There appears to be a typo in the page title: "Bowupland" should likely be "Bouwplan" (cultivation plan), which would be consistent with the page's purpose and description.

-        { title: "Bowupland - Bedrijf toevoegen | MINAS2" },
+        { title: "Bouwplan - Bedrijf toevoegen | MINAS2" },
fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx (1)

2-13: Consider capitalizing "toegang" in the title for consistency.

The metadata implementation is good, but there's a minor inconsistency in the title's capitalization. Other titles in this PR capitalize the first word, but here "toegang" starts with a lowercase letter.

-        { title: "toegang - Instellingen - Bedrijf | MINAS2" },
+        { title: "Toegang - Instellingen - Bedrijf | MINAS2" },
fdm-app/app/routes/farm.$b_id_farm.field.$b_id.overview.tsx (1)

46-47: Consider using consistent import source

The MetaFunction is imported from '@remix-run/node' here while other files import it from 'react-router'. Though both likely work, consider standardizing the import source across files for better maintainability.

fdm-app/app/routes/farm.$b_id_farm.field._index.tsx (1)

25-25: Inconsistent import source for MetaFunction

I noticed that MetaFunction is imported from "@remix-run/node" in this file and farm.$b_id_farm.field.$b_id.soil.tsx, but from "react-router" in other files. Consider standardizing the import source across the codebase for better maintainability.

Also applies to: 7-7

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.atlas.tsx (2)

24-24: Import source inconsistency.

The MetaFunction type is imported from @remix-run/node in this file, while other files import it from react-router. Consider using a consistent import source across all files.

-import type { MetaFunction } from "@remix-run/node"
+import { type MetaFunction } from "react-router"

26-35: Fix spacing in title.

There's an extra space between "Perceel" and "MINAS2" in the title that should be removed for consistency.

-        { title: "Kaart - Perceel  MINAS2" },
+        { title: "Kaart - Perceel | MINAS2" },

Additionally, consider using the vertical bar separator ("|") between title segments as used in other pages for consistency.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.tsx (1)

31-31: Remove unnecessary blank line

There's an extra blank line here that could be removed for consistency.

-
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between fa5d447 and 7240125.

📒 Files selected for processing (42)
  • .changeset/all-schools-lay.md (1 hunks)
  • .changeset/fluffy-hotels-switch.md (1 hunks)
  • .changeset/warm-dryers-start.md (1 hunks)
  • fdm-app/app/components/custom/sidebar-app.tsx (1 hunks)
  • fdm-app/app/routes/api.auth.$.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.atlas.elevation.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.atlas.fields.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.atlas.soil.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.atlas.tsx (2 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.atlas.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation.$b_lu._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.fertilizer.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.norm.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.overview.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.soil.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field.$b_id.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.field._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx (2 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.tsx (1 hunks)
  • fdm-app/app/routes/farm._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.atlas.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.covercrop.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.crop._index.tsx (2 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.crop.harvest._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.fertilizers.tsx (2 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.cultivations.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx (2 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.fields._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.fields.tsx (1 hunks)
  • fdm-app/app/routes/farm.create._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.tsx (1 hunks)
  • fdm-app/app/routes/signin.tsx (6 hunks)
🧰 Additional context used
🧠 Learnings (6)
fdm-app/app/routes/farm.create.$b_id_farm.cultivations._index.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#16
File: fdm-app/app/routes/app.addfarm.$b_id_farm.cultivations.$b_lu_catalogue.fertilizers.tsx:1-1
Timestamp: 2025-03-12T14:05:51.527Z
Learning: The project uses `react-router` v7, and the `data` function is exported and used for error handling in loaders and actions.
fdm-app/app/routes/farm.create.$b_id_farm.fields._index.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#67
File: fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx:601-610
Timestamp: 2025-03-12T14:05:51.527Z
Learning: The `updateField` function in fdm-core has optional parameters after `fdm` and `b_id`. The TypeScript definitions might show 8 required parameters due to a potential version mismatch.
fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx (3)
Learnt from: SvenVw
PR: SvenVw/fdm#6
File: fdm-app/app/routes/app.addfarm.$b_id_farm.fields.tsx:63-99
Timestamp: 2025-03-12T14:05:51.527Z
Learning: i18n will be added in future PRs; for now, hardcoded Dutch text is acceptable until a translation system is implemented.
Learnt from: SvenVw
PR: SvenVw/fdm#67
File: fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx:601-610
Timestamp: 2025-03-12T14:05:51.527Z
Learning: The `updateField` function in fdm-core has optional parameters after `fdm` and `b_id`. The TypeScript definitions might show 8 required parameters due to a potential version mismatch.
Learnt from: SvenVw
PR: SvenVw/fdm#67
File: fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx:601-610
Timestamp: 2025-03-12T14:05:51.527Z
Learning: The `updateField` function in fdm-core has optional parameters that don't need to be passed as undefined. Only `fdm` and `b_id` are required.
fdm-app/app/routes/farm.create._index.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#6
File: fdm-app/app/routes/app.addfarm.$b_id_farm.fields.tsx:63-99
Timestamp: 2025-03-12T14:05:51.527Z
Learning: i18n will be added in future PRs; for now, hardcoded Dutch text is acceptable until a translation system is implemented.
fdm-app/app/routes/farm.create.$b_id_farm.atlas.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#6
File: fdm-app/app/routes/app.addfarm.$b_id_farm.fields.tsx:63-99
Timestamp: 2025-03-12T14:05:51.527Z
Learning: i18n will be added in future PRs; for now, hardcoded Dutch text is acceptable until a translation system is implemented.
fdm-app/app/routes/farm.create.$b_id_farm.fields.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#6
File: fdm-app/app/routes/app.addfarm.$b_id_farm.fields.tsx:63-99
Timestamp: 2025-03-12T14:05:51.527Z
Learning: i18n will be added in future PRs; for now, hardcoded Dutch text is acceptable until a translation system is implemented.
🪛 LanguageTool
.changeset/fluffy-hotels-switch.md

[uncategorized] ~5-~5: You might be missing the article “a” here.
Context: --- "@svenvw/fdm-app": minor --- Add message at signin page that the app is still in...

(AI_EN_LECTOR_MISSING_DETERMINER_A)

🔇 Additional comments (56)
.changeset/warm-dryers-start.md (1)

1-5: Changeset documentation looks good.

The changeset correctly documents the renaming of "FDM" to "MINAS2" as a minor version change for the @svenvw/fdm-app package. This aligns with the rebranding effort seen across the codebase.

.changeset/all-schools-lay.md (1)

1-5: Changeset documentation looks good.

The changeset correctly documents the addition of titles and descriptions to pages as a minor version change for the @svenvw/fdm-app package.

fdm-app/app/components/custom/sidebar-app.tsx (1)

141-143: Rebranding looks good.

The change from "FDM" to "MINAS2" in the sidebar header aligns with the rebranding effort documented in the changesets.

fdm-app/app/routes/farm.$b_id_farm.atlas.tsx (2)

11-11: Import addition looks good.

Adding the MetaFunction type import is necessary for the metadata implementation.


20-29: Metadata implementation looks good.

The added metadata provides a clear title and description for the page, enhancing SEO and user context. The title includes the new "MINAS2" branding, aligning with the rebranding effort.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation.$b_lu._index.tsx (1)

22-39: Metadata implementation looks good.

The meta function correctly sets up the page title and description for SEO purposes, aligning with the rebranding to MINAS2.

fdm-app/app/routes/farm.$b_id_farm.atlas.elevation.tsx (1)

9-24: Metadata implementation looks good.

The meta function properly defines the page title and description, consistent with the application's rebranding to MINAS2.

fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1)

2-13: Metadata implementation looks good.

The meta function appropriately sets the page title and description for the deletion settings page, maintaining consistency with other pages in the application.

fdm-app/app/routes/api.auth.$.tsx (1)

11-16:

Details

❓ Verification inconclusive

Branding inconsistency detected.

While other files in this PR have been updated to use "MINAS2" in the title, this file still uses "FDM". Consider updating the title to "Authenticatie | MINAS2" for consistent branding across the application.

-        { title: "Authenticatie | FDM" },
+        { title: "Authenticatie | MINAS2" },
         {
             name: "description",
             content:
-                "Beveiligde authenticatie voor toegang tot het FDM platform.",
+                "Beveiligde authenticatie voor toegang tot het MINAS2 platform.",
         },

Let's verify the branding consistency in all meta titles:


🏁 Script executed:

#!/bin/bash
# Search for all meta title definitions in route files to check branding consistency
echo "Searching for titles using FDM:"
rg -n "title.*FDM" --type=tsx app/routes/

echo -e "\nSearching for titles using MINAS2:"
rg -n "title.*MINAS2" --type=tsx app/routes/

Length of output: 304


Action Required: Update Meta Tags to Use MINAS2 Branding

It has been detected that the meta title and description in the file fdm-app/app/routes/api.auth.$.tsx still reference “FDM”. To ensure consistent branding across the application, please update these to use “MINAS2” instead. The diff snippet below illustrates the required change:

-        { title: "Authenticatie | FDM" },
+        { title: "Authenticatie | MINAS2" },
         {
             name: "description",
             content:
-                "Beveiligde authenticatie voor toegang tot het FDM platform.",
+                "Beveiligde authenticatie voor toegang tot het MINAS2 platform.",
         },

Since the initial verification script did not produce the expected output due to unrecognized file type errors, please re-run the following verification script (which uses a glob pattern for TSX files) to confirm that no other route files still reference “FDM”:

#!/bin/bash
echo "Searching for titles using FDM:"
rg -n "title.*FDM" -g "*.tsx" app/routes/

echo -e "\nSearching for titles using MINAS2:"
rg -n "title.*MINAS2" -g "*.tsx" app/routes/

Please manually verify the output to ensure complete consistency across the codebase.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.tsx (1)

27-35: LGTM: Title and description updated to reflect new branding

The title has been updated from "FDM App" to "Bowuplan - Bedrijf toevoegen | MINAS2" and the description has been improved to "Beheer de gewassen op je percelen." This change aligns with the renaming effort from FDM to MINAS2 and provides more descriptive metadata for SEO purposes.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation.$b_lu.harvest._index.tsx (2)

18-18: LGTM: Added MetaFunction import

Properly imported the MetaFunction type from react-router to support the new meta function.


25-34: LGTM: Added metadata for harvest page

This new meta function provides better SEO and accessibility by adding a contextual title "Oogsten - Gewas - Perceel | MINAS2" and description for the harvest page. The addition follows React Router conventions and maintains consistency with other pages.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.fertilizer.tsx (2)

21-21: LGTM: Added MetaFunction import

Properly imported the MetaFunction type from react-router to support the new meta function.


29-38: LGTM: Added metadata for fertilizer page

This new meta function provides better SEO and accessibility by adding a contextual title "Bemesting - Perceel | MINAS2" and description for the fertilizer page. The addition follows React Router conventions and maintains consistency with other pages.

fdm-app/app/routes/farm.$b_id_farm.atlas.soil.tsx (1)

9-9: LGTM: Added MetaFunction import

Properly imported the MetaFunction type from react-router to support the new meta function.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.covercrop.tsx (1)

1-13: LGTM: Metadata implementation is clean and follows best practices.

The addition of the meta function correctly implements SEO metadata for this route, providing relevant title and description information for the cover crop page. The implementation aligns with the React Router v7 standards.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.norm.tsx (1)

6-18: LGTM: Metadata correctly implemented for field usage norms page.

The import update and new meta function are properly implemented, providing appropriate title and description for the usage norms page. This maintains consistency with the metadata implementation across other routes.

fdm-app/app/routes/farm.$b_id_farm.atlas.fields.tsx (1)

25-34: LGTM: Field map metadata provides useful context.

The metadata implementation correctly provides title and description information for the fields map page. The description is particularly well-crafted, clearly explaining the page's purpose and benefits to users.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations._index.tsx (1)

5-16: LGTM: Metadata implementation is appropriate (aside from the title typo).

The addition of the meta function and the import update are correctly implemented, providing necessary metadata for the cultivation plan page. The description accurately reflects the page's purpose.

fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (1)

1-12: Good metadata addition for SEO and user context!

The added meta function properly exports metadata for the settings page, including a title and description. This follows React Router's metadata API correctly and is part of the broader effort to rename "FDM" to "MINAS2" as mentioned in the PR summary.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (2)

12-13: LGTM - Good type import addition.

The addition of MetaFunction to the imports is correct for implementing the metadata function.


18-27: Good metadata implementation!

The added meta function correctly provides title and description metadata for the harvest page, enhancing SEO and user context. This is consistent with the pattern used across other routes in this PR.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (2)

13-18: Good import updates!

The addition of MetaFunction and replacement of useFetcher with redirectWithSuccess from "remix-toast" are positive changes. This suggests improved error handling in the action function.


20-29: Good metadata implementation for the harvest page!

The added meta function correctly provides title and description metadata for the harvest page, enhancing SEO and user context. This is consistent with the pattern used across other routes in this PR.

fdm-app/app/routes/farm.$b_id_farm.settings.tsx (2)

12-13: Imports extended to include MetaFunction

Good addition of the MetaFunction type import from react-router to support the new metadata functionality.


18-27: Well-structured metadata implementation for SEO

The metadata implementation looks good, providing a clear title and description for the farm settings page. This will enhance SEO capabilities and improve user experience.

fdm-app/app/routes/farm.$b_id_farm.tsx (2)

3-3: Clean import consolidation

Good job combining the import statement to include MetaFunction alongside other imports from react-router.


5-14: Proper metadata implementation

The metadata implementation follows best practices, with a clear title and description that accurately describes the page's purpose.

fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx (2)

25-26: MetaFunction type properly imported

Good addition of the MetaFunction type to support the metadata implementation.


35-44: Consistent metadata implementation

The metadata implementation maintains consistency with other pages, providing appropriate title and description for the farm properties settings page.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.overview.tsx (1)

48-57: Detailed metadata with comprehensive description

Good implementation of the metadata with a more detailed description that thoroughly explains the page's purpose. This enhances both SEO and user experience.

fdm-app/app/routes/farm._index.tsx (1)

18-29: Good addition of SEO metadata

The addition of the meta function enhances the page's SEO capabilities by providing appropriate title and description. The title reflects the new product name "MINAS2" which aligns with the PR's objective of renaming from "FDM" to "MINAS2".

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.fertilizers.tsx (1)

19-20: Good addition of SEO metadata

The metadata properly identifies the page content with a clear title and description. The title correctly uses "MINAS2" branding which aligns with the PR's renaming objective.

Also applies to: 28-37

fdm-app/app/routes/farm.$b_id_farm.field._index.tsx (2)

25-36: Good addition of comprehensive SEO metadata

The metadata provides a clear title and detailed description that accurately reflects the page's purpose. The title correctly uses "MINAS2" which aligns with the PR's renaming objective.


41-42: Minor grammar correction in comment

Good catch correcting the apostrophe in "user's" for consistency in possessive form.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.tsx (1)

18-27: LGTM! Good addition of meta information.

The implementation of the meta function adds proper SEO metadata for the page, setting the title to "Perceel | MINAS2" and providing a descriptive content that explains the page purpose.

fdm-app/app/routes/farm.$b_id_farm.field.$b_id.cultivation._index.tsx (2)

25-25: Nice cleanup of unused imports.

Good job removing the unused imports (dataWithError and dataWithWarning) while keeping only the needed dataWithSuccess.


27-36: LGTM! Good addition of meta information.

The meta function implementation properly sets the page title to "Gewas - Perceel | MINAS2" and provides a clear description that enhances SEO.

fdm-app/app/routes/farm.create.$b_id_farm.fields._index.tsx (2)

5-9: Well-organized imports.

Good restructuring of the imports into a cleaner grouped format.


11-21: LGTM! Good addition of meta information.

The meta function implementation properly sets the page title to "Percelen beheren - Bedrijf toevoegen | MINAS2" and provides a comprehensive description of the page's purpose.

fdm-app/app/routes/farm.tsx (1)

13-21: LGTM: Updated page metadata to reflect the new branding

The title and description metadata have been updated to reflect the new "MINAS2" branding and provide a more descriptive Dutch context for the dashboard functionality.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.crop.harvest._index.tsx (1)

22-32: Nice addition of SEO metadata

Adding the meta function with title and description improves SEO and provides better context for users. The Dutch description clearly communicates the purpose of this page for viewing and selecting crop harvests.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.tsx (1)

20-29: LGTM: Consistent metadata update

The metadata has been updated to follow the "MINAS2" branding pattern and includes a helpful Dutch description that clearly communicates the page's purpose.

fdm-app/app/routes/farm.create.$b_id_farm.cultivations.$b_lu_catalogue.crop._index.tsx (2)

26-36: LGTM: Good addition of SEO metadata

The new meta function follows the consistent pattern of "MINAS2" branding and provides clear Dutch descriptions for the page purpose.


70-74: Improved code formatting

The function call has been nicely reformatted to improve readability with parameters on separate lines.

fdm-app/app/routes/farm.create._index.tsx (1)

33-41: Improved page metadata with new branding and context

The title and description have been updated to reflect the MINAS2 branding and better describe the page's purpose. This enhances SEO and provides users with clearer context.

fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx (2)

59-67: Improved page metadata with new branding and context

The title and description have been updated to reflect the MINAS2 branding and provide more specific information about the page's purpose, enhancing both SEO and user experience.


207-211: Improved code formatting

The function call to getCultivationsFromCatalogue has been reformatted with one parameter per line for better readability, which is a good practice for multi-parameter function calls.

fdm-app/app/routes/farm.create.$b_id_farm.fields.tsx (1)

32-40: Improved page metadata with new branding and context

The title and description have been updated to reflect the MINAS2 branding and provide more specific information about the fields management functionality, improving both SEO and user experience.

fdm-app/app/routes/farm.create.$b_id_farm.atlas.tsx (1)

56-64: Improved page metadata with new branding and context

The title and description have been updated to reflect the MINAS2 branding and provide detailed information about the map functionality, enhancing both SEO and user experience.

fdm-app/app/routes/signin.tsx (6)

14-14: Good additions to the imports.

The new imports are properly added and necessary for the new components and functionality in the file. The Info icon is used in the new Alert component, and the MetaFunction type is needed for the new metadata export.

Also applies to: 18-19


64-64: Great improvement to error handling.

Changing the error parameter type from Error to unknown is a good practice. This makes the function more flexible as it can handle any type of error that might be thrown, not just instances of the Error class.


75-76: Brand update correctly implemented.

The title has been updated to "MINAS2" as part of the rebranding effort. The commented code about the logo suggests that a logo might be added in the future.


142-155: Good addition of informative alert.

The Alert component effectively informs users that the application is still under development. This sets proper expectations and improves the user experience by clearly communicating the status of the application.


281-281: Consistent branding in button text.

The button text has been updated to reference "MINAS2" instead of "FDM", maintaining consistency with the rebranding effort across the application.


300-308: Good implementation of metadata.

The new meta function properly exports SEO-friendly title and description that include the MINAS2 branding. This improves search engine visibility and provides better page information to users and browsers.

Comment thread fdm-app/app/routes/farm.$b_id_farm.field.$b_id.soil.tsx Outdated
SvenVw and others added 2 commits March 12, 2025 15:45
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Sven Verweij <37927107+SvenVw@users.noreply.github.com>
@SvenVw SvenVw requested a review from gerardhros March 12, 2025 14:59
Copy link
Copy Markdown
Collaborator

@gerardhros gerardhros left a comment

Choose a reason for hiding this comment

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

Thanks for the update.

@SvenVw
Copy link
Copy Markdown
Collaborator Author

SvenVw commented Mar 21, 2025

The naming and branding of fdm should be configurable.

@SvenVw SvenVw marked this pull request as draft March 21, 2025 15:58
@SvenVw SvenVw changed the title Rename to minas2 Make it configurable to name and brand the fdm-app Mar 21, 2025
@SvenVw SvenVw changed the base branch from main to development April 4, 2025 09:47
@SvenVw
Copy link
Copy Markdown
Collaborator Author

SvenVw commented Apr 4, 2025

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 4, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

1 similar comment
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 4, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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: 1

🧹 Nitpick comments (14)
fdm-app/app/root.tsx (1)

67-71: Consider ignoring the Biome linter warning about useEffect dependencies.

The static analysis tool flagged that 'location' may be an unnecessary dependency, but this is a false positive. The useEffect should run whenever the location changes to capture new pageviews correctly.

🧰 Tools
🪛 Biome (1.9.4)

[error] 67-67: This hook specifies more dependencies than necessary: location

This dependency can be removed from the list.

(lint/correctness/useExhaustiveDependencies)

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (1)

25-25: Update import path for consistency

The import for clientConfig is still using the @/app/lib/config path, while other imports have been updated to use the tilde notation (~/lib/config). Update this for consistency with the other import paths in this file.

-import { clientConfig } from "@/app/lib/config"
+import { clientConfig } from "~/lib/config"
fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (1)

7-7: Fix extra space in title

There's an extra space between "Instellingen" and "- Bedrijf" in the title that should be removed for consistency with other similar titles in the application.

-        { title: `Instellingen  - Bedrijf | ${clientConfig.name}` },
+        { title: `Instellingen - Bedrijf | ${clientConfig.name}` },
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.covercrop.tsx (1)

1-15:

Details

❓ Verification inconclusive

Good meta implementation but import path is inconsistent

The addition of the meta function enhances SEO and properly uses dynamic branding through clientConfig.name. However, the import path for clientConfig uses "@/app/lib/config" while other files in the PR are using "~/lib/config".

Consider standardizing the import path to maintain consistency:

-import { clientConfig } from "@/app/lib/config"
+import { clientConfig } from "~/lib/config"

🏁 Script executed:

#!/bin/bash
# Check for consistency in import paths across the codebase
echo "Checking import consistency in route files..."
echo "Files in routes directory using '@/app/lib/config':"
rg -l '@/app/lib/config' --type=tsx app/routes/

echo -e "\nFiles in routes directory using '~/lib/config':"
rg -l '~/lib/config' --type=tsx app/routes/

Length of output: 486


Below is a revised review comment that incorporates the suggestion while noting that a re-check for consistency is still recommended, given that our initial automated script encountered file‐type issues:


Attention: Standardize Import Paths for Consistency

The meta implementation is well done and correctly leverages dynamic branding via clientConfig.name. However, the import path in this file—

import { clientConfig } from "@/app/lib/config"

—differs from the standard used elsewhere in the PR (i.e. "~/lib/config"). For consistency, please update the import as follows:

- import { clientConfig } from "@/app/lib/config"
+ import { clientConfig } from "~/lib/config"

Action Items:

  • Change the import in fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.covercrop.tsx as shown.
  • Verify across other route files that the import path is standardized to "~/lib/config". (Note: Our initial check using rg with the --type=tsx flag encountered file-type recognition issues. Please re-run a search with a filter such as -g "*.tsx" to manually confirm consistency.)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)

2-11: Import path inconsistency detected

The import for clientConfig is using a different path pattern (@/app/lib/config) compared to the other imports that use ~/lib/.... This inconsistency might cause confusion and potential issues.

-import { clientConfig } from "@/app/lib/config"
+import { clientConfig } from "~/lib/config"
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)

9-9: Import consistency suggestion

The MetaFunction type is imported separately here, while in other files it's included in the main react-router import block. Consider consolidating this with the main import for consistency.

import {
    type LoaderFunctionArgs,
    NavLink,
+   type MetaFunction,
    data,
    redirect,
    useLoaderData,
} from "react-router"
-import type { MetaFunction } from "react-router"
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)

5-5: Well-implemented metadata function with minor formatting issue

The addition of the MetaFunction import and implementation of the meta export function correctly integrates with the configurable branding system. However, there's an unnecessary empty line in the content string (between lines 27-28) that should be removed for consistency with other similar implementations.

export const meta: MetaFunction = () => {
    return [
        { title: `Oogst - Gewas - Perceel | ${clientConfig.name}` },
        {
            name: "description",
-
            content: "Bekijk en bewerk de oogst van je gewas.",
+            content: "Bekijk en bewerk de oogst van je gewas.",
        },
    ]
}

Also applies to: 22-31

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (1)

28-28: Inconsistent import path format detected.

While most imports have been updated to use the "~/" prefix, this import still uses the "@/" prefix. Consider updating it for consistency.

-import { clientConfig } from "@/app/lib/config"
+import { clientConfig } from "~/lib/config"
fdm-app/app/integrations/nmi.ts (2)

1-1: Inconsistent import path format detected.

This file uses the "@/" prefix for imports while most other updated files are using the "~/" prefix. Consider standardizing the import path format across the codebase.

-import { serverConfig } from "@/app/lib/config"
+import { serverConfig } from "~/lib/config"

14-58: LGTM: Well-structured API integration function with proper error handling.

The getSoilParameterEstimates function:

  • Includes proper error handling for missing API keys
  • Correctly extracts coordinates from the field geometry
  • Makes a properly formatted API request
  • Includes appropriate error handling for API failures
  • Adds source and depth information to the response

Consider adding basic retry logic for transient API failures:

+async function fetchWithRetry(url: string, options: RequestInit, retries = 3): Promise<Response> {
+    try {
+        return await fetch(url, options)
+    } catch (error) {
+        if (retries <= 1) throw error
+        return fetchWithRetry(url, options, retries - 1)
+    }
+}

 export async function getSoilParameterEstimates(
     field: Feature,
     nmiApiKey: string | undefined,
 ): Promise<{
     a_p_al: number
     a_p_cc: number
     a_som_loi: number
     b_soiltype_agr: string
     b_gwl_class: string
     a_source: string
     a_depth: number
 }> {
     if (!nmiApiKey) {
         throw new Error("Please provide a NMI API key")
     }

     const fieldCentroid = centroid(field.geometry)
     const a_lon = fieldCentroid.geometry.coordinates[0]
     const a_lat = fieldCentroid.geometry.coordinates[1]

-    const responseApi = await fetch(
+    const responseApi = await fetchWithRetry(
         `https://api.nmi-agro.nl/estimates?${new URLSearchParams({
             a_lat: a_lat.toString(),
             a_lon: a_lon.toString(),
         })}`,
         {
             method: "GET",
             headers: {
                 Authorization: `Bearer ${nmiApiKey}`,
             },
         },
     )
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1)

28-28: Inconsistent import path format detected.

While most imports have been updated to use the "~/" prefix, this import still uses the "@/" prefix. Consider updating it for consistency.

-import { clientConfig } from "@/app/lib/config"
+import { clientConfig } from "~/lib/config"
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (1)

12-18: Standardize import path for clientConfig

While most import paths have been updated to use the ~ prefix, the import for clientConfig still uses the @ prefix. Update it for consistency.

-import { clientConfig } from "@/app/lib/config"
+import { clientConfig } from "~/lib/config"
fdm-app/app/routes/farm.whats-new.tsx (1)

44-44: Fix the comment typo.

There's a small typo in the comment: "Dta" should be "Data".

-// Dta for update posts
+// Data for update posts
fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.tsx (1)

1-281: Consider adding a meta function for consistent SEO and branding.

Other route files in this PR have added meta functions that use the configurable application name. This file would benefit from the same enhancement to maintain consistency across routes.

+import { type MetaFunction } from "react-router"
+import { clientConfig } from "~/lib/config"

+export const meta: MetaFunction = () => {
+    return [
+        { title: `Meststof toevoegen | ${clientConfig.name}` },
+        {
+            name: "description",
+            content: "Voeg een meststof toe om deze te gebruiken op dit bedrijf.",
+        },
+    ]
+}
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 2be80c9 and c01d00d.

⛔ Files ignored due to path filters (7)
  • fdm-app/app/lib/auth.server.ts is excluded by !fdm-app/app/lib/**
  • fdm-app/app/lib/cache.server.ts is excluded by !fdm-app/app/lib/**
  • fdm-app/app/lib/config.server.ts is excluded by !fdm-app/app/lib/**
  • fdm-app/app/lib/config.ts is excluded by !fdm-app/app/lib/**
  • fdm-app/app/lib/fdm.server.tsx is excluded by !fdm-app/app/lib/**
  • fdm-app/app/lib/form.ts is excluded by !fdm-app/app/lib/**
  • fdm-app/app/lib/nmi.ts is excluded by !fdm-app/app/lib/**
📒 Files selected for processing (88)
  • fdm-app/.env.example (1 hunks)
  • fdm-app/README.md (1 hunks)
  • fdm-app/app/components/blocks/farm.tsx (1 hunks)
  • fdm-app/app/components/blocks/fields.tsx (1 hunks)
  • fdm-app/app/components/custom/atlas/atlas-panels.tsx (1 hunks)
  • fdm-app/app/components/custom/atlas/atlas-sources.tsx (2 hunks)
  • fdm-app/app/components/custom/atlas/atlas.d.tsx (1 hunks)
  • fdm-app/app/components/custom/banner.tsx (2 hunks)
  • fdm-app/app/components/custom/combobox.tsx (1 hunks)
  • fdm-app/app/components/custom/cultivation/form.tsx (1 hunks)
  • fdm-app/app/components/custom/cultivation/list.tsx (1 hunks)
  • fdm-app/app/components/custom/error.tsx (1 hunks)
  • fdm-app/app/components/custom/farm/farm-content.tsx (1 hunks)
  • fdm-app/app/components/custom/farm/farm-header.tsx (1 hunks)
  • fdm-app/app/components/custom/farm/farm-pagination.tsx (1 hunks)
  • fdm-app/app/components/custom/farm/farm-title.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer-applications.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer-applications/cards.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer-applications/form.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer-applications/list.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer/column-header.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer/columns.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer/form.tsx (1 hunks)
  • fdm-app/app/components/custom/fertilizer/table.tsx (1 hunks)
  • fdm-app/app/components/custom/harvest/form.tsx (1 hunks)
  • fdm-app/app/components/custom/harvest/list.tsx (1 hunks)
  • fdm-app/app/components/custom/loadingspinner.tsx (1 hunks)
  • fdm-app/app/components/custom/multi-select.tsx (2 hunks)
  • fdm-app/app/components/custom/sidebar-app.tsx (9 hunks)
  • fdm-app/app/components/custom/sidebar-page.tsx (1 hunks)
  • fdm-app/app/components/custom/soil/cards.tsx (1 hunks)
  • fdm-app/app/components/custom/soil/form.tsx (1 hunks)
  • fdm-app/app/components/custom/soil/list.tsx (1 hunks)
  • fdm-app/app/entry.client.tsx (1 hunks)
  • fdm-app/app/entry.server.tsx (1 hunks)
  • fdm-app/app/integrations/mapbox.ts (1 hunks)
  • fdm-app/app/integrations/nmi.ts (1 hunks)
  • fdm-app/app/root.tsx (3 hunks)
  • fdm-app/app/routes/api.auth.$.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.soil._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.soil.analysis.$a_id.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.soil.analysis.new.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.fertilizers.$p_id.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.fertilizers._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1 hunks)
  • fdm-app/app/routes/farm.$b_id_farm.tsx (1 hunks)
  • fdm-app/app/routes/farm._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.account.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx (3 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.covercrop.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.$b_id.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.new_analysis.tsx (1 hunks)
  • fdm-app/app/routes/farm.create._index.tsx (1 hunks)
  • fdm-app/app/routes/farm.tsx (2 hunks)
  • fdm-app/app/routes/farm.whats-new.tsx (2 hunks)
  • fdm-app/app/routes/signin.tsx (5 hunks)
  • fdm-app/app/types/config.d.ts (1 hunks)
  • fdm-app/tsconfig.json (1 hunks)
  • fdm-app/vite.config.ts (1 hunks)
✅ Files skipped from review due to trivial changes (34)
  • fdm-app/app/components/custom/farm/farm-title.tsx
  • fdm-app/app/components/custom/cultivation/list.tsx
  • fdm-app/app/entry.server.tsx
  • fdm-app/app/components/custom/error.tsx
  • fdm-app/app/components/custom/fertilizer/table.tsx
  • fdm-app/app/components/custom/fertilizer-applications/list.tsx
  • fdm-app/app/components/custom/farm/farm-content.tsx
  • fdm-app/app/routes/farm.$b_id_farm.fertilizers._index.tsx
  • fdm-app/app/components/custom/fertilizer/form.tsx
  • fdm-app/app/components/custom/harvest/list.tsx
  • fdm-app/app/components/blocks/fields.tsx
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.soil.analysis.$a_id.tsx
  • fdm-app/app/components/custom/farm/farm-header.tsx
  • fdm-app/app/routes/farm.$b_id_farm.fertilizers.$p_id.tsx
  • fdm-app/app/components/custom/fertilizer/column-header.tsx
  • fdm-app/app/components/custom/farm/farm-pagination.tsx
  • fdm-app/app/components/custom/cultivation/form.tsx
  • fdm-app/app/components/blocks/farm.tsx
  • fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id._index.tsx
  • fdm-app/app/components/custom/soil/list.tsx
  • fdm-app/app/components/custom/atlas/atlas-panels.tsx
  • fdm-app/app/components/custom/fertilizer/columns.tsx
  • fdm-app/app/components/custom/atlas/atlas-sources.tsx
  • fdm-app/app/components/custom/fertilizer-applications/cards.tsx
  • fdm-app/app/components/custom/combobox.tsx
  • fdm-app/app/components/custom/sidebar-page.tsx
  • fdm-app/app/components/custom/fertilizer-applications/form.tsx
  • fdm-app/app/components/custom/harvest/form.tsx
  • fdm-app/app/components/custom/soil/cards.tsx
  • fdm-app/app/components/custom/multi-select.tsx
  • fdm-app/app/components/custom/soil/form.tsx
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.soil.analysis.new.tsx
  • fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.new_analysis.tsx
  • fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.soil._index.tsx
🚧 Files skipped from review as they are similar to previous changes (8)
  • fdm-app/app/routes/farm._index.tsx
  • fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx
  • fdm-app/app/routes/api.auth.$.tsx
  • fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx
  • fdm-app/app/routes/farm.$b_id_farm.tsx
  • fdm-app/app/routes/farm.$b_id_farm.settings.tsx
  • fdm-app/app/routes/farm.create._index.tsx
  • fdm-app/app/routes/farm.tsx
🧰 Additional context used
🧠 Learnings (7)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (6)
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/routes/farm/_b_id_farm/layout.tsx:46-95
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The `FarmLayout` component in `components/custom/farm-layout.tsx` provides a reusable layout structure for farm-related pages, with support for farm selection dropdown, customizable breadcrumb titles, and flexible content rendering through either children or Outlet components.
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/components/custom/farm-layout/header.tsx:2-2
Timestamp: 2025-01-10T12:59:59.444Z
Learning: The project has been migrated from Remix to React Router v7, so imports should be from "react-router" or "react-router-dom" packages instead of "@remix-run/react".
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/routes/farm/_b_id_farm/layout.tsx:46-95
Timestamp: 2025-04-03T11:17:04.373Z
Learning: A comprehensive farm layout system has been created in `components/custom/farm-layouts/` with `BaseFarmLayout` and `FarmSidebarLayout` components. The system supports both simple and sidebar-based layouts while maintaining consistent header and farm selection functionality across all farm routes.
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/routes/farm/_b_id_farm/layout.tsx:46-95
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The farm layout system has been reorganized into separate components (`FarmHeader`, `ContentLayout`, `PaginationLayout`) to support different navigation patterns (sidebar, pagination) while maintaining consistent styling. Each layout component is designed to be used independently or combined as needed.
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/routes/farm/_b_id_farm/layout.tsx:46-95
Timestamp: 2025-04-03T11:17:04.373Z
Learning: A shared layout component `FarmLayoutBase` has been created in `components/custom/farm-layout-base.tsx` to maintain consistency across farm-related pages. The component handles farm selection dropdown, breadcrumb navigation, and provides a common layout structure.
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/routes/farm/_b_id_farm/layout.tsx:46-94
Timestamp: 2025-01-10T15:01:42.572Z
Learning: A shared layout component `BaseFarmLayout` has been created in `components/custom/farm-layouts/base.tsx` to maintain consistency across farm-related pages. The component handles farm selection dropdown, breadcrumb navigation, and provides a common layout structure.
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#16
File: fdm-app/app/routes/app.addfarm.$b_id_farm.cultivations.$b_lu_catalogue.fertilizers.tsx:1-1
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The project uses `react-router` v7, and the `data` function is exported and used for error handling in loaders and actions.
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (3)
Learnt from: SvenVw
PR: SvenVw/fdm#6
File: fdm-app/app/routes/app.addfarm.$b_id_farm.fields.tsx:63-99
Timestamp: 2025-04-03T11:17:04.373Z
Learning: i18n will be added in future PRs; for now, hardcoded Dutch text is acceptable until a translation system is implemented.
Learnt from: SvenVw
PR: SvenVw/fdm#67
File: fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx:601-610
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The `updateField` function in fdm-core has optional parameters after `fdm` and `b_id`. The TypeScript definitions might show 8 required parameters due to a potential version mismatch.
Learnt from: SvenVw
PR: SvenVw/fdm#67
File: fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx:601-610
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The `updateField` function in fdm-core has optional parameters that don't need to be passed as undefined. Only `fdm` and `b_id` are required.
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#42
File: fdm-app/app/components/custom/farm-layout/header.tsx:2-2
Timestamp: 2025-01-10T12:59:59.444Z
Learning: The project has been migrated from Remix to React Router v7, so imports should be from "react-router" or "react-router-dom" packages instead of "@remix-run/react".
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.$b_id.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#67
File: fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id.tsx:601-610
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The `updateField` function in fdm-core has optional parameters after `fdm` and `b_id`. The TypeScript definitions might show 8 required parameters due to a potential version mismatch.
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#16
File: fdm-app/app/routes/app.addfarm.$b_id_farm.cultivations.$b_lu_catalogue.fertilizers.tsx:1-1
Timestamp: 2025-04-03T11:17:04.373Z
Learning: The project uses `react-router` v7, and the `data` function is exported and used for error handling in loaders and actions.
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1)
Learnt from: SvenVw
PR: SvenVw/fdm#6
File: fdm-app/app/routes/app.addfarm.$b_id_farm.fields.tsx:63-99
Timestamp: 2025-04-03T11:17:04.373Z
Learning: i18n will be added in future PRs; for now, hardcoded Dutch text is acceptable until a translation system is implemented.
🧬 Code Definitions (28)
fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (6)
fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx (1)
  • meta (6-14)
fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1)
  • meta (6-16)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.tsx (1)
  • meta (7-15)
fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx (1)
  • meta (37-47)
fdm-app/app/routes/farm._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (2)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1)
  • meta (23-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (16)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (1)
  • meta (32-40)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (1)
  • meta (15-23)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (1)
  • meta (49-58)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1)
  • meta (34-45)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (16)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (1)
  • meta (32-40)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (1)
  • meta (15-23)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (1)
  • meta (49-58)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (16)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (1)
  • meta (15-23)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (1)
  • meta (32-40)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (1)
  • meta (49-58)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.covercrop.tsx (4)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (1)
  • meta (29-37)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1)
  • meta (23-31)
fdm-app/app/routes/farm.create._index.tsx (1)
  • meta (34-42)
fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id._index.tsx (1)
  • meta (63-68)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (4)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (1)
  • meta (31-41)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.covercrop.tsx (1)
  • meta (5-15)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1)
  • meta (23-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (3)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.$b_id.tsx (1)
  • meta (59-70)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields._index.tsx (1)
  • meta (14-25)
fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id._index.tsx (1)
  • meta (63-68)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (4)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (4)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (4)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (4)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields._index.tsx (2)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1)
  • meta (34-45)
fdm-app/app/routes/farm.create._index.tsx (1)
  • meta (34-42)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.$b_id.tsx (3)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1)
  • meta (34-45)
fdm-app/app/routes/farm.create.$b_id_farm.fields.$b_id._index.tsx (1)
  • meta (63-68)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields._index.tsx (1)
  • meta (14-25)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (2)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (7)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/signin.tsx (15)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/api.auth.$.tsx (1)
  • meta (10-18)
fdm-app/app/routes/farm.create._index.tsx (1)
  • meta (34-42)
fdm-app/app/routes/farm._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.tsx (1)
  • meta (7-15)
fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx (1)
  • meta (37-47)
fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx (1)
  • meta (6-14)
fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1)
  • meta (6-16)
fdm-app/app/routes/farm.account.tsx (1)
  • meta (28-36)
fdm-app/app/routes/farm.whats-new.tsx (1)
  • meta (25-33)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.covercrop.tsx (1)
  • meta (5-15)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (1)
  • meta (21-32)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1)
  • meta (34-45)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (3)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1)
  • meta (23-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (1)
  • meta (29-37)
fdm-app/app/routes/farm.whats-new.tsx (16)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.account.tsx (1)
  • meta (28-36)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.create._index.tsx (1)
  • meta (34-42)
fdm-app/app/routes/signin.tsx (1)
  • meta (22-30)
fdm-app/app/routes/api.auth.$.tsx (1)
  • meta (10-18)
fdm-app/app/routes/farm.$b_id_farm.settings.access.tsx (1)
  • meta (6-14)
fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1)
  • meta (6-16)
fdm-app/app/routes/farm.$b_id_farm.tsx (1)
  • meta (7-15)
fdm-app/app/routes/farm.$b_id_farm.settings.properties.tsx (1)
  • meta (37-47)
fdm-app/app/routes/farm._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (1)
  • meta (5-13)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (1)
  • meta (34-45)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (1)
  • meta (31-41)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.$b_id.tsx (1)
  • meta (59-70)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (55-64)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (16)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (1)
  • meta (32-40)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (1)
  • meta (15-23)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (1)
  • meta (49-58)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (5)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (3)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (1)
  • meta (29-37)
fdm-app/app/routes/farm.create._index.tsx (1)
  • meta (34-42)
fdm-app/app/routes/farm.account.tsx (1)
  • meta (28-36)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (16)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (1)
  • meta (18-26)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (1)
  • meta (32-40)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (1)
  • meta (24-33)
fdm-app/app/routes/farm.$b_id_farm.settings.tsx (1)
  • meta (21-29)
fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (1)
  • meta (15-23)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (1)
  • meta (49-58)
fdm-app/app/routes/farm.tsx (1)
  • meta (22-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop._index.tsx (5)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)
  • meta (14-22)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (1)
  • meta (21-32)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest._index.tsx (1)
  • meta (25-34)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (1)
  • meta (29-37)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (1)
  • meta (23-31)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (2)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest._index.tsx (1)
  • meta (25-34)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop._index.tsx (1)
  • meta (29-38)
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx (1)
fdm-core/src/soil.ts (1)
  • addSoilAnalysis (34-89)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (5)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (1)
  • meta (33-42)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (1)
  • meta (30-38)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (1)
  • meta (22-30)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (1)
  • meta (27-35)
fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)
  • meta (22-31)
🪛 Biome (1.9.4)
fdm-app/vite.config.ts

[error] 10-10: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

fdm-app/app/root.tsx

[error] 67-67: This hook specifies more dependencies than necessary: location

This dependency can be removed from the list.

(lint/correctness/useExhaustiveDependencies)

🔇 Additional comments (98)
fdm-app/app/components/custom/atlas/atlas.d.tsx (2)

10-10: Type naming convention improvement.

Great job updating the type name from fieldsAvailableUrlType to FieldsAvailableUrlType. This follows the standard TypeScript naming convention of using PascalCase for type names, which improves consistency and code readability.


14-14: Type definition looks good.

The definition of FieldsAvailableUrlType as string | undefined is clear and appropriate. This supports the PR's objective of making the application more configurable by allowing the fields URL to be either a string value or undefined.

fdm-app/app/root.tsx (3)

20-23: Import path reorganization and new clientConfig import looks good.

The change from "@" to "~/" path prefixes is consistent with the larger effort to standardize import paths across the application. The addition of the clientConfig import facilitates the PR objective of making the app configurable for naming and branding.


66-71: Good implementation of conditional analytics tracking.

The conditional check before capturing pageviews is a great improvement:

  1. Only captures data when PostHog is configured (respecting the app's configuration)
  2. Includes a check for browser environment to prevent server-side rendering errors

This change supports the goal of making the application configurable while also following best practices.

🧰 Tools
🪛 Biome (1.9.4)

[error] 67-67: This hook specifies more dependencies than necessary: location

This dependency can be removed from the list.

(lint/correctness/useExhaustiveDependencies)


90-90: Verify if language change from "en" to "nl" is intentional.

The default language has been changed from English to Dutch. Ensure this change aligns with your application's primary audience and localization strategy.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.fertilizers.tsx (1)

30-41: LGTM! Good addition of metadata

The addition of the meta function that uses clientConfig.name in the page title is correctly implemented, supporting the PR's goal of making the app's name and branding configurable.

fdm-app/app/components/custom/loadingspinner.tsx (1)

1-1: LGTM! Import path updated correctly

This import path change from @/lib/utils to ~/lib/utils is consistent with the overall standardization of import paths in this PR.

fdm-app/tsconfig.json (1)

30-30:

Details

❓ Verification inconclusive

Verify impact of path alias change

The path mapping for @/* has been broadened from ./app/* to ./*. This changes how imports with the @ prefix are resolved, potentially affecting many files.


🏁 Script executed:

#!/bin/bash
# Check for any existing imports using the @ prefix to ensure they still work with the new path mapping
echo "Files using @ imports that might be affected by the path change:"
rg -l "from\s+['\"]@/" --type=ts --type=tsx | sort

Length of output: 221


Impact of updated '@/*' path alias mapping

The change from "@/*": ["./app/*"] to "@/*": ["./*"] broadens how modules are resolved, which may affect multiple files using @/ imports. The initial verification script returned an error (unrecognized file type: tsx) because the --type=tsx flag isn't recognized in this context.

Recommendations:

  • Adjust the verification script: Replace the file type options with glob patterns to ensure both .ts and .tsx files are included. For example, use:
    rg -l "from\s+['\"]@/" --glob "*.ts" --glob "*.tsx" | sort
  • Review affected imports: After modifying the script, verify that all import paths using the @ prefix resolve correctly with the new alias mapping.
fdm-app/app/routes/farm.$b_id_farm.settings._index.tsx (1)

4-13: LGTM! Well-structured metadata implementation

The addition of the meta function follows the consistent pattern used throughout the application, correctly implementing configurable branding via clientConfig.name.

fdm-app/app/integrations/mapbox.ts (1)

1-4:

Details

❓ Verification inconclusive

Good architectural shift to centralized configuration

The change from using environment variables directly to a centralized server configuration is a good architectural decision. This aligns perfectly with the PR objective of making the app more configurable for naming and branding.


🏁 Script executed:

#!/bin/bash
# Check for import path consistency across the codebase
echo "Checking import path patterns for config imports..."
echo "Files using '@/app/lib/config':"
rg -l '@/app/lib/config' --type=ts --type=tsx

echo -e "\nFiles using '~/lib/config':"
rg -l '~/lib/config' --type=ts --type=tsx

# Count the occurrences of each pattern
echo -e "\nCount of '@/app/lib/config' occurrences:"
rg -c '@/app/lib/config' --type=ts --type=tsx | wc -l

echo "Count of '~/lib/config' occurrences:"
rg -c '~/lib/config' --type=ts --type=tsx | wc -l

Length of output: 772


Centralized Config Implementation Approved – Minor Note on Import Scan

The shift to using a centralized configuration via "@/app/lib/config" in the Mapbox integration is a solid architectural improvement that aligns with our PR objectives. One minor observation from the automated import consistency check: the use of the --type=tsx option in the ripgrep command caused an "unrecognized file type" error. This appears to be an issue with the file type flag rather than the code itself. If you intend to scan React TypeScript files, consider using the appropriate flag (e.g., --type=typescriptreact) or adjust the command to ensure full coverage.

  • Mapbox integration (fdm-app/app/integrations/mapbox.ts): The centralized config use is correctly applied.
  • Import scan note: Update the search command to properly recognize TS/TSX files to avoid false negatives.
fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields._index.tsx (2)

1-12: Import path standardization looks good

The modification of import paths to use the "~/" format instead of "@/" improves consistency across the codebase. This standardization makes the code more maintainable and follows modern React/TypeScript conventions.


13-25: Well-implemented meta function for SEO and branding

The addition of the meta function enhances SEO and provides better page context for users. The implementation correctly uses the dynamic clientConfig.name, which directly supports the PR objective of making the app configurable for naming and branding.

fdm-app/app/routes/farm.$b_id_farm.settings.delete.tsx (1)

1-16: Well-implemented meta function with consistent imports

The standardization of import paths and addition of the meta function enhance both code consistency and SEO. The implementation correctly uses the dynamic clientConfig.name, which directly supports the PR objective of making the app configurable for naming and branding.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations._index.tsx (1)

14-22: LGTM: Dynamic page title with configurable app name

The addition of the meta function looks good! This implementation correctly uses the clientConfig.name to create a dynamic page title, which aligns with the PR objective of making the app name configurable.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.norm.tsx (2)

2-12: LGTM: Well-structured import statements

The import statements are properly organized and consistently use the ~/ path format.


15-23: LGTM: Metadata function with configurable app name

The meta function is well implemented, providing both a title with the configurable app name and a descriptive content for SEO purposes.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.tsx (2)

3-5: LGTM: Properly added MetaFunction type

The MetaFunction type has been correctly added to the imports from react-router.


22-30: LGTM: Metadata function with configurable app name

The meta function implementation looks good, providing both a title with the configurable app name and a descriptive content.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field._index.tsx (2)

29-38: LGTM: Comprehensive metadata with configurable app name

Well-implemented meta function with a good descriptive content that's more detailed than in other files, which is appropriate for this index page.


43-44: LGTM: Comment typo fixed

Good catch on fixing the apostrophe in "user's".

fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.fields.tsx (2)

11-11: Well-implemented metadata function with configurable branding

The addition of the MetaFunction import and implementation of the meta export function properly integrates with the configurable branding system using clientConfig.name. This enhances SEO capabilities while maintaining consistency with the pattern used across other route files in the application.

Also applies to: 24-33


12-22: Consistent import path standardization

The import paths have been successfully updated from "@/" to "~/" prefix, maintaining consistency with the rest of the codebase and potentially improving module resolution. This standardization aligns with best practices for path management in React applications.

fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.tsx (2)

4-5: Good implementation of metadata with configurable branding

The addition of MetaFunction import and the meta function implementation properly leverages the configurable branding through clientConfig.name. This is consistent with the React Router v7 approach mentioned in the project's learnings and follows the same pattern used across other routes.

Also applies to: 22-30


12-20: Consistent import path standardization

The import paths have been updated from "@" to "~/" prefix, maintaining consistency with the import path standardization seen throughout the PR. This change improves maintainability and ensures consistent module resolution across the application.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.atlas.tsx (2)

11-11: Well-implemented metadata function with consistent branding

The addition of the MetaFunction import and implementation of the meta export function successfully integrates with the configurable branding system using clientConfig.name. The detailed description provides good context for SEO purposes and follows the consistent pattern used across the application.

Also applies to: 24-33


13-22: Good architectural improvement with centralized integrations

The import paths have been updated to the "~/" prefix for consistency, with a notable improvement in how Mapbox integration is handled. Moving the Mapbox token and style functions to a dedicated ~/integrations/mapbox path centralizes integration code, improving maintainability and making the external service dependencies more explicit.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest.$b_id_harvesting.tsx (1)

11-20: Consistent import path standardization

The import paths have been successfully updated from "@" to "~/" prefix, maintaining consistency with the standardization effort throughout the codebase. This systematic approach to path management enhances maintainability and ensures reliable module resolution.

fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.elevation.tsx (3)

4-4: Import for MetaFunction added.

The import for MetaFunction has been correctly added to enable page metadata functionality.


9-15: Improved import paths.

The import paths have been updated from relative paths to absolute paths with the ~ prefix, which provides better organization and maintainability.


18-26: Well-implemented page metadata.

The metadata function correctly implements dynamic page title that includes the configurable app name from clientConfig.name. This implementation is consistent with other route files in the application and enhances SEO.

fdm-app/app/types/config.d.ts (2)

1-32: Well-structured ServerConfig interface.

The ServerConfig interface provides a comprehensive type definition for server-side configuration, including auth secrets, database credentials, and integration tokens. The use of optional properties is appropriate for conditional configurations like Google/Microsoft auth.


34-55: Well-designed ClientConfig interface for branding.

The ClientConfig interface effectively defines the structure for branding configuration with properties for name, logo, and logomark, directly supporting the PR objective of making the app name and branding configurable. The analytics section is also well-structured with appropriate optional properties.

fdm-app/app/routes/farm.$b_id_farm.$calendar.atlas.soil.tsx (3)

4-4: Import for MetaFunction added.

The import for MetaFunction has been correctly added to enable page metadata functionality.


9-15: Improved import paths.

The import paths have been updated from relative paths to absolute paths with the ~ prefix, which provides better organization and maintainability.


18-26: Well-implemented page metadata.

The metadata function correctly implements dynamic page title that includes the configurable app name from clientConfig.name. This follows the same pattern seen across other route files and enhances SEO by providing appropriate title and description.

fdm-app/app/routes/farm.account.tsx (3)

1-5: Updated imports and added MetaFunction.

The imports have been properly updated to include MetaFunction from react-router, enabling page metadata functionality.


6-26: Improved import paths and organization.

The import paths have been updated from relative paths to absolute paths with the ~ prefix for better organization. The import for clientConfig has been added to support the dynamic page title.


28-36: Well-implemented page metadata.

The metadata function correctly implements dynamic page title that includes the configurable app name from clientConfig.name. This maintains consistency with the pattern used across route files in the application and improves SEO.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.tsx (2)

9-26: Import paths have been standardized using the "~/" prefix.

The import statements have been updated to use absolute paths with the "~/" prefix, which aligns with modern module resolution practices and improves maintainability.


29-36: LGTM: Dynamic page title implemented with client configuration.

The meta function now uses a dynamic title that includes the client's configurable name, which aligns with the PR objective of making the app name configurable.

fdm-app/app/integrations/nmi.ts (1)

5-12: LGTM: Clean implementation of the API key retrieval function.

The getNmiApiKey function is well-implemented with proper null checking for the integration configuration.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.tsx (2)

15-31: Import paths have been standardized using the "~/" prefix.

The import statements have been updated to use absolute paths with the "~/" prefix, which improves maintainability and readability.


34-44: LGTM: Dynamic page title implemented with client configuration.

The meta function now uses a dynamic title that includes the client's configurable name, which aligns with the PR objective of making the app name configurable. The description is also more specific and helpful for users.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.tsx (2)

10-20: Import paths have been standardized using the "~/" prefix.

The import statements have been updated to use absolute paths with the "~/" prefix, which aligns with modern module resolution practices and improves maintainability.


23-30: LGTM: Dynamic page title implemented with client configuration.

The meta function now uses a dynamic title that includes the client's configurable name, which aligns with the PR objective of making the app name configurable. The description is also more specific and context-appropriate.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest._index.tsx (3)

9-9: Import changes look good.

Added the MetaFunction type for the new metadata function.


14-22: Import path standardization implemented correctly.

The import paths have been standardized from "@/components/..." to "~/components/..." format, which provides consistency across the application.


24-34: Good implementation of configurable page metadata.

The addition of the meta function with dynamic title using clientConfig.name aligns perfectly with the PR objective of making the app name configurable. This approach ensures the app name is consistently applied across page titles.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.tsx (3)

12-12: Import changes look good.

Added the MetaFunction type for the new metadata function.


19-29: Import path standardization implemented correctly.

The import paths have been standardized from "@/components/..." to "~/components/..." format, which provides consistency across the application.


31-40: Good implementation of configurable page metadata.

The addition of the meta function with dynamic title using clientConfig.name aligns perfectly with the PR objective of making the app name configurable. This pattern is consistently applied across the codebase, which is excellent for maintainability.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation._index.tsx (3)

12-12: Import changes look good.

Added the MetaFunction type for the new metadata function.


18-27: Import path standardization implemented correctly.

The import paths have been standardized from "@/components/..." to "~/components/..." format, which provides consistency across the application.


29-38: Good implementation of configurable page metadata.

The addition of the meta function with dynamic title using clientConfig.name aligns perfectly with the PR objective of making the app name configurable. The metadata is consistent with related pages, which ensures a coherent user experience.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu._index.tsx (3)

12-12: Import changes look good.

Added the MetaFunction type for the new metadata function.


19-31: Import path standardization implemented correctly.

The import paths have been standardized from "@/components/..." to "~/components/..." format, which provides consistency across the application.


32-42: Good implementation of configurable page metadata.

The addition of the meta function with dynamic title using clientConfig.name aligns perfectly with the PR objective of making the app name configurable. The description provides clear context about the page's purpose.

fdm-app/app/components/custom/fertilizer-applications.tsx (2)

1-12: LGTM: Import paths standardized to absolute paths

The imports have been updated from relative paths to absolute paths using the ~ prefix, which improves consistency across the codebase.


13-29: LGTM: UI component imports standardized

UI component imports have been consistently updated to use absolute paths with the ~ prefix, maintaining the standardization throughout the file.

fdm-app/vite.config.ts (1)

21-21: LGTM: Plugin array updated to include conditional Sentry plugin

The plugins array now correctly includes the conditionally created Sentry plugin, which aligns with the goal of making the app's configuration more flexible.

fdm-app/app/entry.client.tsx (2)

12-65: LGTM: Conditional Sentry initialization based on configuration

The Sentry initialization is now properly conditional based on the presence of configuration in clientConfig.analytics.sentry. This enhances the configurability of the app's analytics setup and aligns with the PR's objective.


68-81: LGTM: Improved PostHog initialization with configuration

The PostHog initialization has been updated to use the configuration from clientConfig.analytics.posthog and includes proper dependency tracking in the useEffect hook.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop.harvest.$b_id_harvesting.tsx (2)

7-8: LGTM: Added MetaFunction import

The MetaFunction import has been added to support the new meta function implementation.


20-32: LGTM: Added meta function for dynamic page title

The new meta function allows for dynamic page titles that include the app's configured name, which aligns with the PR's goal of making the app's naming and branding configurable.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fields.$b_id.tsx (3)

26-56: Import paths consistently updated to use the tilde prefix.

The import statements have been updated from using '@' prefix to '~' prefix for local imports, which provides more consistent module resolution. This change aligns with modern JavaScript/TypeScript module import standards.


53-53: New import for client configuration added.

The import for clientConfig is correctly imported from @/app/lib/config, which aligns with the PR objective of making the app name and branding configurable.


59-70: Dynamic application title now uses configurable branding.

The meta function has been updated to use dynamic branding with ${clientConfig.name}, allowing for customizable application naming across the platform. The description has also been enhanced to provide clearer context about managing farm plots.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.cultivations.$b_lu_catalogue.crop._index.tsx (2)

10-26: Import paths standardized and MetaFunction type added.

The imports have been reorganized to use the tilde path prefix (~/) consistently, and the MetaFunction type has been properly imported from react-router.


28-38: SEO enhancement with dynamic branding in metadata.

A new meta function has been added that correctly implements dynamic branding using ${clientConfig.name} in the page title. The metadata includes an appropriate description that aligns with the page's purpose for better SEO and user experience.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.cultivation.$b_lu.harvest._index.tsx (2)

10-24: Import statements updated for consistency.

The imports have been standardized to use the tilde path prefix (~/) and the MetaFunction type has been added from react-router.


26-35: Added metadata with configurable branding.

A meta function has been implemented to enhance SEO with appropriate page titles including the configurable app name from ${clientConfig.name}. The description properly explains the page's purpose of viewing and editing crop harvests.

fdm-app/README.md (1)

27-45: Comprehensive configuration documentation added.

The README has been significantly improved with detailed instructions for configuring the application. It now clearly explains:

  • How to create and manage the .env file
  • Various configuration categories (General, Session, Database, etc.)
  • Important environment variables including VITE_FDM_NAME for app branding
  • Security considerations (not committing .env to version control)

This documentation enhancement will help users properly configure the application, including the new naming and branding features.

fdm-app/app/routes/signin.tsx (5)

1-20: Import updates are consistent with modularity improvements.

The imports have been updated to use the new "~/" path prefix pattern instead of the old "@" pattern, which provides better consistency across the codebase. The additional imports (Info, Alert components) are necessary for the new alert section.


22-30: Good implementation of dynamic meta data.

The addition of the meta function that uses the configurable clientConfig.name aligns with the PR objective of making the app naming and branding configurable. This improves SEO and browser tab display.


75-75: Type safety improvement.

Changing the error parameter type from Error to unknown is a good practice as it provides better type safety. This allows handling of any error type, not just instances of the Error class.


173-186: Well-implemented development status alert.

This new alert section properly informs users that the application is still under development. Using clientConfig.name here aligns with the PR objective of configurable branding.


312-312: Consistent branding in button text.

The button text now correctly uses the configurable name, which is consistent with the PR objective.

fdm-app/app/components/custom/banner.tsx (2)

1-5: Import pattern standardization.

The imports have been updated to follow the new "~/" path prefix pattern, which provides better consistency across the codebase.


40-42: Improved conditional analytics initialization.

The addition of the clientConfig.analytics.posthog check ensures that PostHog persistence is only configured if it's enabled in the client configuration. This is a good practice for conditional analytics activation.

fdm-app/app/routes/farm.whats-new.tsx (3)

5-24: Import organization improvement.

The imports have been restructured to use the "~/" path prefix, which aligns with the rest of the codebase. The type imports are now properly grouped.


25-33: Dynamic meta data implementation.

The addition of the meta function that uses clientConfig.name ensures consistent branding throughout the application's metadata.


48-55: Dynamic content in update posts.

Using clientConfig.name in the update posts ensures that the content also reflects the configurable branding, which is consistent with the PR objectives.

fdm-app/app/components/custom/sidebar-app.tsx (9)

66-72: Good type definition for user properties.

Creating a dedicated interface for the user properties improves code organization and type safety. The added documentation explains the purpose clearly.


75-76: Type safety improvement in SideBarAppType.

Updating the user property to use the new interface improves type safety and code maintainability.


145-154: Conditional Sentry initialization.

The addition of the clientConfig.analytics.sentry check ensures that Sentry user tracking is only configured if it's enabled in the client configuration, aligning with the configurable approach.


156-174: Improved error handling for feedback initialization.

The updates to the feedback initialization provide better error handling and user feedback. The use of try/catch with console warnings helps with debugging, and the finally block ensures the loading state is properly updated.


181-189: Robust feedback form validation.

Adding validation before attempting to create the feedback form prevents potential runtime errors and provides a better user experience through error toasts.


224-230: Dynamic branding in sidebar.

Using clientConfig.name for the logo alt text and sidebar title ensures consistent branding throughout the application.


479-492: Conditional rendering of feedback option.

Conditionally rendering the feedback menu item based on Sentry configuration prevents showing features that aren't available, improving the user experience.


508-508: Improved null handling for avatar image.

Using the nullish coalescing operator to handle potential null values in the avatar image source prevents runtime errors.


599-603: Conditional PostHog reset.

Adding a check for clientConfig.analytics.posthog before resetting it ensures that the code only attempts to use PostHog when it's configured.

fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.overview.tsx (2)

1-47: Import paths reorganized for consistency.

The imports have been updated to use the "~/" prefix instead of "@" for local imports, which improves consistency across the codebase.


49-58: Added meta function for improved SEO and branding.

The new meta function adds proper page metadata including a dynamic title that incorporates the configurable application name. This enhances SEO and maintains consistent branding across the application.

This implementation is consistent with similar meta functions in other route files and supports the PR objective of making the application name configurable.

fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx (3)

23-52: Improved integration structure and import organization.

The imports have been reorganized to use centralized integration functions instead of direct environment variable access. This enhances maintainability and follows good separation of concerns principles.


55-63: Updated meta function with configurable application name.

The meta function now uses clientConfig.name for dynamic page titles, supporting the PR objective of making the application name configurable.


269-316: Refactored soil parameter estimation for better maintainability.

The implementation now uses centralized integration functions (getNmiApiKey() and getSoilParameterEstimates()) instead of direct API calls and environment variable access. This improves code organization and maintainability.

fdm-app/.env.example (1)

1-91: Enhanced configuration documentation and added key branding variable.

The environment configuration file has been significantly improved with:

  1. Better organization with clear section headers
  2. Enhanced documentation for each variable
  3. Added the critical VITE_FDM_NAME variable that enables configurable application naming
  4. Additional configuration options for various integrations

This directly supports the PR objective of making the application name and branding configurable.

fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.tsx (1)

16-26: Updated import paths for consistency.

The import paths have been updated to use the "~/" prefix consistently, matching the pattern used throughout the codebase.

Comment thread fdm-app/vite.config.ts
@SvenVw SvenVw marked this pull request as ready for review April 4, 2025 10:23
@SvenVw SvenVw requested a review from gerardhros April 4, 2025 10:23
@SvenVw SvenVw merged commit 7153513 into development Apr 7, 2025
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add an info message that the app is still in development

2 participants