From f155e752f406efe48980d664a2a3471dc7b681b2 Mon Sep 17 00:00:00 2001
From: SvenVw <37927107+SvenVw@users.noreply.github.com>
Date: Tue, 10 Feb 2026 15:32:12 +0100
Subject: [PATCH 1/5] feat: Enhanced the farm selection screen with a
modernized UI, clearer feature breakdowns for new users, and a dedicated
Atlas section for existing farms. Improved sidebar navigation by adding
"muted" states for unavailable features and clarifying the distinction
between the farm list and farm overview
---
.changeset/calm-rivers-flow.md | 5 +
.../app/components/blocks/sidebar/apps.tsx | 402 ++++++-----
.../app/components/blocks/sidebar/farm.tsx | 472 +++++++------
fdm-app/app/routes/farm._index.tsx | 634 ++++++++++--------
4 files changed, 841 insertions(+), 672 deletions(-)
create mode 100644 .changeset/calm-rivers-flow.md
diff --git a/.changeset/calm-rivers-flow.md b/.changeset/calm-rivers-flow.md
new file mode 100644
index 000000000..88b003239
--- /dev/null
+++ b/.changeset/calm-rivers-flow.md
@@ -0,0 +1,5 @@
+---
+"@svenvw/fdm-app": patch
+---
+
+Enhanced the farm selection screen with a modernized UI, clearer feature breakdowns for new users, and a dedicated Atlas section for existing farms. Improved sidebar navigation by adding "muted" states for unavailable features and clarifying the distinction between the farm list and farm overview.
diff --git a/fdm-app/app/components/blocks/sidebar/apps.tsx b/fdm-app/app/components/blocks/sidebar/apps.tsx
index 0158b6e24..621f90802 100644
--- a/fdm-app/app/components/blocks/sidebar/apps.tsx
+++ b/fdm-app/app/components/blocks/sidebar/apps.tsx
@@ -25,6 +25,12 @@ import {
SidebarMenuSubButton,
SidebarMenuSubItem,
} from "~/components/ui/sidebar"
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "~/components/ui/tooltip"
export function SidebarApps() {
const farmId = useFarmStore((state) => state.farmId)
@@ -97,200 +103,234 @@ export function SidebarApps() {
omBalanceLink = undefined
}
return (
-
- Apps
-
-
-
-
- {atlasLink ? (
-
+
+
+ Apps
+
+
+
+
+ {atlasLink ? (
+
+
+
+ Atlas
+
+
+
+
+ ) : (
-
- Atlas
-
-
+
+
+ Atlas
+
-
- ) : (
+ )}
+
+
+
+ {atlasFieldsLink ? (
+
+
+
+ Gewaspercelen
+
+
+
+ ) : null}
+
+
+ {atlasElevationLink ? (
+
+
+ Hoogtekaart
+
+
+ ) : null}
+
+
+ {atlasSoilLink ? (
+
+
+ Bodemkaart
+
+
+ ) : null}
+
+
+
+
+
+
+
+ {nitrogenBalanceLink ? (
+
+
+
+ Balans
+
+
+
+
+ ) : (
+
+
+
+
+
+ Balans
+
+
+
+
+ Selecteer een bedrijf om de balansen
+ te raadplegen
+
+
+ )}
+
+
+
+ {nitrogenBalanceLink ? (
+
+
+ Stikstof
+
+
+ ) : null}
+
+
+ {omBalanceLink ? (
+
+
+
+ Organische stof
+
+
+
+ ) : null}
+
+
+
+
+
+
+ {nutrientAdviceLink ? (
-
-
- Atlas
-
+
+
+ Bemestingsadvies
+
+ ) : (
+
+
+
+
+
+ Bemestingsadvies
+
+
+
+
+ Selecteer een bedrijf voor
+ bemestingsadvies
+
+
)}
-
-
-
- {atlasFieldsLink ? (
-
-
- Gewaspercelen
-
-
- ) : null}
-
-
- {atlasElevationLink ? (
-
-
- Hoogtekaart
-
-
- ) : null}
-
-
- {atlasSoilLink ? (
-
-
- Bodemkaart
-
-
- ) : null}
-
-
-
-
-
- {nitrogenBalanceLink ? (
-
-
-
- Balans
-
-
-
-
- ) : (
+ {normsLink ? (
-
-
- Balans
-
+
+
+ Gebruiksruimte
+
+ ) : (
+
+
+
+
+
+ Gebruiksruimte
+
+
+
+
+ Selecteer een bedrijf om de
+ gebruiksruimte te berekenen
+
+
)}
-
-
-
- {nitrogenBalanceLink ? (
-
-
- Stikstof
-
-
- ) : null}
-
-
- {omBalanceLink ? (
-
-
- Organische stof
-
-
- ) : null}
-
-
-
-
-
- {nutrientAdviceLink ? (
-
-
-
- Bemestingsadvies
-
-
- ) : (
-
-
-
- Bemestingsadvies
-
-
- )}
-
-
- {normsLink ? (
-
-
-
- Gebruiksruimte
-
-
- ) : (
-
-
-
- Gebruiksruimte
-
-
- )}
-
-
-
-
+
+
+
+
)
}
diff --git a/fdm-app/app/components/blocks/sidebar/farm.tsx b/fdm-app/app/components/blocks/sidebar/farm.tsx
index 2e3252f1f..a112b907c 100644
--- a/fdm-app/app/components/blocks/sidebar/farm.tsx
+++ b/fdm-app/app/components/blocks/sidebar/farm.tsx
@@ -4,6 +4,7 @@ import {
Check,
ChevronRight,
House,
+ LayoutGrid,
Shapes,
Sprout,
Square,
@@ -30,6 +31,12 @@ import {
SidebarMenuSubButton,
SidebarMenuSubItem,
} from "~/components/ui/sidebar"
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "~/components/ui/tooltip"
export function SidebarFarm({
farm,
@@ -61,19 +68,12 @@ export function SidebarFarm({
location.pathname.includes("farm/create") ||
searchParams.get("returnUrl")?.includes("farm/create")
const farmRole = farm ? getSuperiorRole(farm.roles) : null
- // Set the farm link
- let farmLink: string
- let farmLinkDisplay: string
- if (isCreateFarmWizard) {
- farmLink = "/farm"
- farmLinkDisplay = "Terug naar bedrijven"
- } else if (farmId && farmId !== "undefined") {
- farmLink = `/farm/${farmId}`
- farmLinkDisplay = farm?.b_name_farm ? farm.b_name_farm : "Bedrijf"
- } else {
- farmLink = "/farm"
- farmLinkDisplay = "Overzicht bedrijven"
- }
+
+ const isFarmOverview =
+ location.pathname === "/farm" || location.pathname === "/farm/"
+
+ const isFarmSelected =
+ farmId && farmId !== "undefined" && !isCreateFarmWizard
let fieldsLink: string | undefined
if (isCreateFarmWizard) {
@@ -101,214 +101,268 @@ export function SidebarFarm({
}
return (
-
- Bedrijf
-
-
-
-
-
-
-
- {farmLinkDisplay}
-
- {farmRole && (
-
- {farmRole === "owner"
- ? "Eigenaar"
- : farmRole === "advisor"
- ? "Adviseur"
- : farmRole === "researcher"
- ? "Onderzoeker"
- : "Onbekend"}
-
- )}
-
-
-
- {/* Conditionally render the Kalender item */}
- {farmId && !isCreateFarmWizard ? (
-
-
-
-
-
- Kalender
- {!isCalendarOpen && (
-
- {selectedCalendar === "all"
- ? "Alle jaren"
- : selectedCalendar}
-
- )}
-
-
-
-
-
- {calendarSelection?.map((item) => {
- // Construct the new URL with the selected calendar
- const newUrl =
- location.pathname.replace(
- /\/(\d{4}|all)/,
- `/${item}`,
- )
- return (
-
-
- setCalendar(item)
- }
- >
-
-
- {item === "all"
- ? "Alle jaren"
- : item}
-
- {selectedCalendar ===
- item && (
-
- )}
-
-
-
- )
- })}
-
-
-
-
- ) : (
+
+
+ Bedrijf
+
+
-
-
- Kalender
-
-
-
- )}
-
- {fieldsLink ? (
-
-
-
- Percelen
+
+
+
+ {isCreateFarmWizard
+ ? "Terug naar bedrijven"
+ : "Mijn bedrijven"}
+
- ) : (
-
-
-
- Percelen
-
-
- )}
-
-
- {rotationLink ? (
-
-
-
- Bouwplan
-
-
- ) : (
-
-
-
- Bouwplan
-
-
+
+
+ {isFarmSelected && (
+
+
+
+
+
+ {farm?.b_name_farm ?? "Overzicht"}
+
+ {farmRole && (
+
+ {farmRole === "owner"
+ ? "Eigenaar"
+ : farmRole === "advisor"
+ ? "Adviseur"
+ : farmRole ===
+ "researcher"
+ ? "Onderzoeker"
+ : "Lid"}
+
+ )}
+
+
+
)}
-
-
- {fertilizersLink ? (
-
-
-
- Meststoffen
-
-
+
+
+
+
+ Kalender
+ {!isCalendarOpen && (
+
+ {selectedCalendar === "all"
+ ? "Alle jaren"
+ : selectedCalendar}
+
+ )}
+
+
+
+
+
+ {calendarSelection?.map((item) => {
+ // Construct the new URL with the selected calendar
+ const newUrl =
+ location.pathname.replace(
+ /\/(\d{4}|all)/,
+ `/${item}`,
+ )
+ return (
+
+
+ setCalendar(
+ item,
+ )
+ }
+ >
+
+
+ {item ===
+ "all"
+ ? "Alle jaren"
+ : item}
+
+ {selectedCalendar ===
+ item && (
+
+ )}
+
+
+
+ )
+ })}
+
+
+
+
) : (
-
-
-
- Meststoffen
-
-
+
+
+
+
+
+
+ Kalender
+
+
+
+
+ Selecteer een bedrijf om de kalender te
+ gebruiken
+
+
+
)}
-
- {/*
-
-
-
- Stal & dieren
+
+ {fieldsLink ? (
+
+
+
+ Percelen
- */}
-
-
-
+ ) : (
+
+
+
+
+
+ Percelen
+
+
+
+
+ Selecteer een bedrijf om uw percelen te
+ beheren
+
+
+ )}
+
+
+ {rotationLink ? (
+
+
+
+ Bouwplan
+
+
+ ) : (
+
+
+
+
+
+ Bouwplan
+
+
+
+
+ Selecteer een bedrijf om het bouwplan te
+ beheren
+
+
+ )}
+
+
+ {fertilizersLink ? (
+
+
+
+ Meststoffen
+
+
+ ) : (
+
+
+
+
+
+ Meststoffen
+
+
+
+
+ Selecteer een bedrijf om meststoffen te
+ beheren
+
+
+ )}
+
+
+
+
+
)
}
diff --git a/fdm-app/app/routes/farm._index.tsx b/fdm-app/app/routes/farm._index.tsx
index af935c12b..7ee0d4ee8 100644
--- a/fdm-app/app/routes/farm._index.tsx
+++ b/fdm-app/app/routes/farm._index.tsx
@@ -1,5 +1,15 @@
import { getFarms } from "@svenvw/fdm-core"
-import { CheckIcon, House, MapIcon, PlusCircle, PlusIcon } from "lucide-react"
+import {
+ ArrowRight,
+ Check,
+ House,
+ Layers,
+ LifeBuoy,
+ Map,
+ Mountain,
+ Plus,
+ PlusCircle,
+} from "lucide-react"
import {
type LoaderFunctionArgs,
type MetaFunction,
@@ -33,7 +43,7 @@ export const meta: MetaFunction = () => {
{ title: `Bedrijf | ${clientConfig.name}` },
{
name: "description",
- content: "Selecteer een bedrijf.",
+ content: "Beheer uw landbouwbedrijf en percelen.",
},
]
}
@@ -79,6 +89,27 @@ export async function loader({ request }: LoaderFunctionArgs) {
}
}
+function SupportNote() {
+ return (
+
+
+
+ Hulp nodig of vragen? Neem contact op via{" "}
+
+
+
+ )
+}
+
/**
* Renders the user interface for farm management.
*
@@ -98,134 +129,144 @@ export default function AppIndex() {
farmOptions={loaderData.farmOptions}
/>
-
+
{loaderData.farms.length === 0 ? (
-
-
-
-
-
-
-
-
- Nieuw bedrijf aanmaken
-
-
-
- Start met het aanmaken van je bedrijf en
- voeg je percelen toe.
-
-
-
-
- Een bedrijf vormt de basis voor al je
- analyses en adviezen. Krijg toegang tot:
-
-
- -
-
-
- Toegang tot de{" "}
- Stikstofbalans,{" "}
- Bemestingsadvies en{" "}
- Gebruiksruimte.
-
-
- -
-
-
- Beheer van meerdere jaren voor
- een compleet overzicht.
-
-
- -
-
-
- Een uitgebreide lijst van
- meststoffen die je zelf kunt
- aanpassen en uitbreiden.
-
-
- -
-
-
- De mogelijkheid om je adviseur
- toegang te geven tot je
- bedrijfsgegevens.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Verken de Atlas
-
-
-
- Bekijk percelen op de kaart en ontdek
- gedetailleerde informatie.
-
-
-
-
- De Atlas is een handige tool om percelen
- te analyseren, zelfs zonder een eigen
- bedrijf. Ontdek bijvoorbeeld:
-
-
- -
-
-
- De volledige teelthistorie van
- percelen tot 2009.
-
-
- -
-
-
- Of een perceel in een gebied met
- beperkingen voor de
- gebruiksruimte valt.
-
-
- -
-
-
- Een inschatting van de
- bodemtextuur en het
- grondwaterpeil.
-
-
-
-
-
-
) : (
@@ -233,182 +274,211 @@ export default function AppIndex() {
-
-
- {loaderData.farms.map((farm) => (
-
-
-
-
-
-
-
-
- {farm.b_name_farm}
-
-
- {farm.roles.map(
- (role) => (
-
- {role ===
- "owner"
- ? "Eigenaar"
- : role ===
- "advisor"
- ? "Adviseur"
- : role ===
- "researcher"
- ? "Onderzoeker"
- : "Onbekend"}
-
- ),
- )}
-
-
-
-
-
-
-
-
Adres:
- {farm.b_address_farm ? (
-
- {
- farm.b_address_farm
- }
-
- ) : (
-
- {"Onbekend"}
-
- )}
-
-
-
-
Postcode:
- {farm.b_postalcode_farm ? (
-
- {
- farm.b_postalcode_farm
- }
-
- ) : (
-
- {"Onbekend"}
-
- )}
-
-
-
KvK-nummer:
- {farm.b_businessid_farm ? (
-
- {
- farm.b_businessid_farm
- }
-
- ) : (
-
- {"Onbekend"}
-
- )}
-
-
-
-
-
- Selecteer →
-
-
-
-
- ))}
+
+ {loaderData.farms.map((farm) => (
-
-
-
+
+
+
+
+
+
+
+ {farm.b_name_farm}
+
+
+ {farm.roles.map(
+ (role) => (
+
+ {role ===
+ "owner"
+ ? "Eigenaar"
+ : role ===
+ "advisor"
+ ? "Adviseur"
+ : "Lid"}
+
+ ),
+ )}
+
+
-
Nieuw bedrijf
-
-
+
-
-
- Maak een nieuw bedrijf aan en
- beheer je percelen, gewassen en
- meststoffen.
-
-
- Hiermee kun je dan voor dit
- bedrijf de Nutriëntenbalans,
- Bemestingsadvies en
- Gebruiksruimte gaan gebruiken.
-
+
+
+
+
-
+ Adres
+
+ -
+ {farm.b_address_farm ||
+ "Onbekend"}
+
+
+
+
-
+ Postcode
+
+ -
+ {farm.b_postalcode_farm ||
+ "Onbekend"}
+
+
+
+
-
+ KvK
+
+ -
+ {farm.b_businessid_farm ||
+ "Onbekend"}
+
+
+
-
-
- Naar nieuw Bedrijf →
+
+
+ Selecteer bedrijf{" "}
+
-
+
-
-
-
-
-
-
- Atlas
+
+
+ Nieuw bedrijf
+
+ Voeg een extra bedrijf toe aan uw
+ account.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percelen
-
-
-
-
- Bekijk alle percelen op de kaart
- en selecteer een perceel voor
- meer details, zoals
- gewashistorie.
-
-
-
-
- Naar Atlas →
-
-
-
-
-
+
+
+
+ Bekijk de teelthistorie en ruimtelijke
+ kenmerken van alle percelen in
+ Nederland.
+
+
+
+ Naar percelen{" "}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hoogtekaart
+
+
+
+
+ Inzage in het Actueel Hoogtebestand
+ Nederland (AHN) voor gedetailleerde
+ hoogte-informatie.
+
+
+
+ Naar hoogtekaart{" "}
+
+
+
+
+
+
+
+
+
+
+
+
+ Raadpleeg de landelijke bodemkaart voor
+ informatie over bodemtype en
+ grondwatertrappen.
+
+
+
+ Naar bodemkaart{" "}
+
+
+
+
+
+
>
)}
From e4f5aa6f5bedc1e9f55c86d8f29d04822d1c5b75 Mon Sep 17 00:00:00 2001
From: SvenVw <37927107+SvenVw@users.noreply.github.com>
Date: Wed, 11 Feb 2026 13:51:24 +0100
Subject: [PATCH 2/5] fix: shadow import
---
fdm-app/app/routes/farm._index.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fdm-app/app/routes/farm._index.tsx b/fdm-app/app/routes/farm._index.tsx
index 7ee0d4ee8..9348ecc53 100644
--- a/fdm-app/app/routes/farm._index.tsx
+++ b/fdm-app/app/routes/farm._index.tsx
@@ -5,7 +5,7 @@ import {
House,
Layers,
LifeBuoy,
- Map,
+ MapIcon,
Mountain,
Plus,
PlusCircle,
@@ -399,7 +399,7 @@ export default function AppIndex() {
-
+
Percelen
From dcb60a380b988049c4e3c2e439b7aa713d6e2b0f Mon Sep 17 00:00:00 2001
From: SvenVw <37927107+SvenVw@users.noreply.github.com>
Date: Wed, 11 Feb 2026 13:52:49 +0100
Subject: [PATCH 3/5] fix: typo
---
fdm-app/app/routes/farm._index.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fdm-app/app/routes/farm._index.tsx b/fdm-app/app/routes/farm._index.tsx
index 9348ecc53..11e5cdfe2 100644
--- a/fdm-app/app/routes/farm._index.tsx
+++ b/fdm-app/app/routes/farm._index.tsx
@@ -151,7 +151,7 @@ export default function AppIndex() {
- Bedrijf aamaken
+ Bedrijf aanmaken
Beheer uw percelen en bereken
@@ -184,7 +184,7 @@ export default function AppIndex() {
- Gebruikruimte: Houd
+ Gebruiksruimte: Houd
uw gebruiksruimte voor
stikstof, dierlijke mest en
fosfaat in de gaten.
From 5f66416873ee9ae9d1218f8fa5546a2554ae4776 Mon Sep 17 00:00:00 2001
From: SvenVw <37927107+SvenVw@users.noreply.github.com>
Date: Wed, 11 Feb 2026 13:54:10 +0100
Subject: [PATCH 4/5] fix: role mapping
---
fdm-app/app/routes/farm._index.tsx | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/fdm-app/app/routes/farm._index.tsx b/fdm-app/app/routes/farm._index.tsx
index 11e5cdfe2..ec696578c 100644
--- a/fdm-app/app/routes/farm._index.tsx
+++ b/fdm-app/app/routes/farm._index.tsx
@@ -317,7 +317,10 @@ export default function AppIndex() {
: role ===
"advisor"
? "Adviseur"
- : "Lid"}
+ : role ===
+ "researcher"
+ ? "Onderzoeker"
+ : "Lid"}
),
)}
From 6412a2b4c0225b3144e17d1431e8989485f6cc47 Mon Sep 17 00:00:00 2001
From: SvenVw <37927107+SvenVw@users.noreply.github.com>
Date: Wed, 11 Feb 2026 14:12:31 +0100
Subject: [PATCH 5/5] nitpicks
---
.../app/components/blocks/sidebar/apps.tsx | 26 ++++++++++++-------
fdm-app/app/routes/farm._index.tsx | 2 +-
2 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/fdm-app/app/components/blocks/sidebar/apps.tsx b/fdm-app/app/components/blocks/sidebar/apps.tsx
index 621f90802..c7d41c959 100644
--- a/fdm-app/app/components/blocks/sidebar/apps.tsx
+++ b/fdm-app/app/components/blocks/sidebar/apps.tsx
@@ -127,15 +127,23 @@ export function SidebarApps() {
) : (
-
-
-
- Atlas
-
-
+
+
+
+
+
+ Atlas
+
+
+
+
+ Atlas is niet beschikbaar tijdens
+ het aanmaken van een bedrijf
+
+
)}
diff --git a/fdm-app/app/routes/farm._index.tsx b/fdm-app/app/routes/farm._index.tsx
index ec696578c..2a4c50613 100644
--- a/fdm-app/app/routes/farm._index.tsx
+++ b/fdm-app/app/routes/farm._index.tsx
@@ -391,7 +391,7 @@ export default function AppIndex() {