diff --git a/messages/en.json b/messages/en.json index e5f4180d..09aa3467 100644 --- a/messages/en.json +++ b/messages/en.json @@ -262,6 +262,12 @@ "viewReport": "View Validation Report", "viewJsonReport": "View Validation Report in JSON format" }, + "datasetHistoryColumns": { + "downloadedAt": "Downloaded At", + "serviceDateRange": "Service Date Range", + "validationReport": "Validation Report", + "actions": "Actions" + }, "viewRealtimeVisualization": "View real-time visualization", "versions": "Versions", "dataAttribution": "Transit data provided by", @@ -368,7 +374,9 @@ "producerUrl": "Producer URL", "providerUrl": "Provider URL", "systemId": "System ID", - "feedAuthentication": "Feed Authentication" + "feedAuthentication": "Feed Authentication", + "openAutoDiscoveryUrl": "Open auto-discovery URL in new tab", + "downloadProducerUrl": "Download producer URL" } }, "account": { @@ -480,7 +488,7 @@ "browseFeeds": "Browse Feeds", "addFeed": "Add a feed", "signUpApi": "Sign up for the API", - "description": "The Mobility Database is an open data catalog including over 4000 GTFS, GTFS Realtime, and GBFS feeds in over 75 countries. Whether you're a transportation operator, a researcher studying public transit and shared mobility trends, or a maps app needing reliable data to use with your application, the Mobility Database has everything you need in one central location.", + "description": "The Mobility Database is an open data catalog including over 6000 GTFS, GTFS Realtime, and GBFS feeds in over 99 countries. Whether you're a transportation operator, a researcher studying public transit and shared mobility trends, or a maps app needing reliable data to use with your application, the Mobility Database has everything you need in one central location.", "validatorIntro": "Our database integrates with", "gtfsValidator": "the Canonical GTFS Schedule Validator", "and": "and", @@ -489,7 +497,7 @@ }, "about": { "title": "About", - "description": "The Mobility Database is an open catalog including over 4000 GTFS, GTFS Realtime, and GBFS feeds in over 75 countries. It integrates with the Canonical GTFS Schedule and GBFS Validators to share data quality reports for each feed.\n\nThis database is hosted and maintained by MobilityData, the global non-profit organization dedicated to the advancement of open transportation data standards.", + "description": "The Mobility Database is an open catalog including over 6000 GTFS, GTFS Realtime, and GBFS feeds in over 99 countries. It integrates with the Canonical GTFS Schedule and GBFS Validators to share data quality reports for each feed.\n\nThis database is hosted and maintained by MobilityData, the global non-profit organization dedicated to the advancement of open transportation data standards.", "learnMore": "Learn more about MobilityData", "whyUse": "Why Use the Mobility Database?", "whyUseAnswer": "The Mobility Database provides free access to historical and current GTFS, GTFS Realtime, and GBFS feeds from around the world. These feeds are checked for updates every day, ensuring that the data you're looking at is the most recent data available.", diff --git a/messages/fr.json b/messages/fr.json index f817b5a7..610c3162 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -262,6 +262,12 @@ "viewReport": "View Validation Report", "viewJsonReport": "View Validation Report in JSON format" }, + "datasetHistoryColumns": { + "downloadedAt": "Téléchargé le", + "serviceDateRange": "Plage de dates de service", + "validationReport": "Rapport de validation", + "actions": "Actions" + }, "viewRealtimeVisualization": "View real-time visualization", "versions": "Versions", "dataAttribution": "Transit data provided by", @@ -368,7 +374,9 @@ "producerUrl": "Producer URL", "providerUrl": "Provider URL", "systemId": "System ID", - "feedAuthentication": "Feed Authentication" + "feedAuthentication": "Feed Authentication", + "openAutoDiscoveryUrl": "Ouvrir l'URL de découverte automatique dans un nouvel onglet", + "downloadProducerUrl": "Télécharger l'URL du producteur" } }, "account": { @@ -480,7 +488,7 @@ "browseFeeds": "Parcourir les flux", "addFeed": "Ajouter un flux", "signUpApi": "S'inscrire à l'API", - "description": "La Mobility Database est un catalogue de données ouvertes comprenant plus de 4000 flux GTFS, GTFS Realtime et GBFS dans plus de 75 pays. Que vous soyez un opérateur de transport, un chercheur étudiant les tendances du transport public et de la mobilité partagée, ou une application de cartes ayant besoin de données fiables, la Mobility Database a tout ce dont vous avez besoin en un seul endroit.", + "description": "La Mobility Database est un catalogue de données ouvertes comprenant plus de 6000 flux GTFS, GTFS Realtime et GBFS dans plus de 99 pays. Que vous soyez un opérateur de transport, un chercheur étudiant les tendances du transport public et de la mobilité partagée, ou une application de cartes ayant besoin de données fiables, la Mobility Database a tout ce dont vous avez besoin en un seul endroit.", "validatorIntro": "Notre base de données s'intègre avec", "gtfsValidator": "le validateur canonique GTFS Schedule", "and": "et", @@ -489,7 +497,7 @@ }, "about": { "title": "À propos", - "description": "La Mobility Database est un catalogue ouvert comprenant plus de 4000 flux GTFS, GTFS Realtime et GBFS dans plus de 75 pays. Elle s'intègre avec les validateurs canoniques GTFS Schedule et GBFS pour partager des rapports de qualité des données pour chaque flux.\n\nCette base de données est hébergée et maintenue par MobilityData, l'organisation mondiale à but non lucratif dédiée à l'avancement des standards de données de transport ouvertes.", + "description": "La Mobility Database est un catalogue ouvert comprenant plus de 6000 flux GTFS, GTFS Realtime et GBFS dans plus de 99 pays. Elle s'intègre avec les validateurs canoniques GTFS Schedule et GBFS pour partager des rapports de qualité des données pour chaque flux.\n\nCette base de données est hébergée et maintenue par MobilityData, l'organisation mondiale à but non lucratif dédiée à l'avancement des standards de données de transport ouvertes.", "learnMore": "En savoir plus sur MobilityData", "whyUse": "Pourquoi utiliser la Mobility Database ?", "whyUseAnswer": "La Mobility Database fournit un accès gratuit aux flux GTFS, GTFS Realtime et GBFS historiques et actuels du monde entier. Ces flux sont vérifiés quotidiennement pour les mises à jour, garantissant que les données que vous consultez sont les plus récentes disponibles.", diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 00000000..4b4705c7 Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 00000000..8a3e2687 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 00000000..8ebb4134 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/assets/MOBILTYDATA_logo_light_blue_M.png b/public/assets/MOBILTYDATA_logo_light_blue_M.png new file mode 100644 index 00000000..42b85c2e Binary files /dev/null and b/public/assets/MOBILTYDATA_logo_light_blue_M.png differ diff --git a/public/assets/MOBILTYDATA_logo_purple_M.png b/public/assets/MOBILTYDATA_logo_purple_M.png index 634f37aa..eeb6eaf4 100644 Binary files a/public/assets/MOBILTYDATA_logo_purple_M.png and b/public/assets/MOBILTYDATA_logo_purple_M.png differ diff --git a/public/assets/MOBILTYDATA_logo_purple_M.webp b/public/assets/MOBILTYDATA_logo_purple_M.webp deleted file mode 100644 index b6ce130c..00000000 Binary files a/public/assets/MOBILTYDATA_logo_purple_M.webp and /dev/null differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 00000000..450d725f Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 00000000..8e723a6f Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico index 46e32c05..966e2576 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index 1f2f141f..00000000 --- a/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 00000000..49cc237d --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "Mobility Database", + "short_name": "MobilityDB", + "description": "Access GTFS, GTFS Realtime, GBFS transit data with over 6,000 feeds from 99+ countries.", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#3959fa", + "background_color": "#ffffff", + "display": "standalone", + "start_url": "/" +} diff --git a/src/app/[locale]/components/HomePage.tsx b/src/app/[locale]/components/HomePage.tsx index dcf79915..e456f42f 100644 --- a/src/app/[locale]/components/HomePage.tsx +++ b/src/app/[locale]/components/HomePage.tsx @@ -94,7 +94,7 @@ export default async function HomePage(): Promise { sx={{ fontSize: 30, color: 'primary.main', mx: 1 }} itemProp='numberOfItems' > - 4000 + 6000 {t('feeds')} { sx={{ fontSize: 30, color: 'primary.main', mx: 1 }} itemProp='spatialCoverage' > - 75 + 99 {t('countries')} diff --git a/src/app/[locale]/feeds/[feedDataType]/[feedId]/authed/page.tsx b/src/app/[locale]/feeds/[feedDataType]/[feedId]/authed/page.tsx index 63de6c9a..0fcad8b2 100644 --- a/src/app/[locale]/feeds/[feedDataType]/[feedId]/authed/page.tsx +++ b/src/app/[locale]/feeds/[feedDataType]/[feedId]/authed/page.tsx @@ -1,5 +1,6 @@ import { type ReactElement } from 'react'; import FeedView from '../../../../../screens/Feed/FeedView'; +import FeedJsonLd from '../lib/FeedJsonLd'; import type { Metadata, ResolvingMetadata } from 'next'; import { getTranslations } from 'next-intl/server'; import { fetchCompleteFeedData } from '../lib/feed-data'; @@ -22,8 +23,6 @@ export async function generateMetadata( return generateFeedMetadata({ feed: feedData?.feed, t, - gtfsFeeds: feedData?.relatedFeeds ?? [], - gtfsRtFeeds: feedData?.relatedGtfsRtFeeds ?? [], }); } @@ -57,14 +56,20 @@ export default async function AuthedFeedPage({ } = feedData; return ( - + <> + + + ); } diff --git a/src/app/[locale]/feeds/[feedDataType]/[feedId]/lib/FeedJsonLd.tsx b/src/app/[locale]/feeds/[feedDataType]/[feedId]/lib/FeedJsonLd.tsx new file mode 100644 index 00000000..2a47ee06 --- /dev/null +++ b/src/app/[locale]/feeds/[feedDataType]/[feedId]/lib/FeedJsonLd.tsx @@ -0,0 +1,60 @@ +import { type ReactElement } from 'react'; +import { getTranslations } from 'next-intl/server'; +import type { + AllFeedType, + GTFSRTFeedType, +} from '../../../../../services/feeds/utils'; +import { + formatProvidersSorted, + generateDescriptionMetaTag, +} from '../../../../../screens/Feed/Feed.functions'; +import generateFeedStructuredData from './generate-feed-metadata'; + +interface FeedJsonLdProps { + feed: AllFeedType; + relatedFeeds?: AllFeedType[]; + relatedGtfsRtFeeds?: GTFSRTFeedType[]; +} + +/** + * Server component that renders JSON-LD structured data for SEO. + * Injects a