DDS-014L: Add public Getting Started hub - #30
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR introduces a new public Getting Started knowledge hub at /getting-started, backed by a code-owned guide catalogue and new Inertia React pages, and wires it into the public site navigation and contact experience. It also extends the existing public page layout/pattern components to support the new content structure, with added feature + browser coverage.
Changes:
- Add
/getting-startedhub + 3 guide detail pages, with backend controller/catalogue support and SEO metadata. - Rework public navigation to include “Starten met FPV” and group “Over DDS / Projecten / Partners” under an “Informatie” submenu; add community channel section to Contact.
- Add Feature + Browser test coverage for routing, SEO, navigation, content, and entry-source behavior.
Reviewed changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/Feature/PublicStaticPagesTest.php | Adds regression coverage for house rules wording/contract. |
| tests/Feature/PublicGettingStartedPageTest.php | Adds feature coverage for Getting Started routes, SEO, guide catalogue integrity, and entry-source sanitization. |
| tests/Browser/PublicSiteTest.php | Adds browser coverage for navigation restructuring and Getting Started content expectations. |
| routes/web.php | Registers the new public Getting Started routes. |
| resources/js/types/index.ts | Re-exports Getting Started TS types. |
| resources/js/types/getting-started.ts | Adds TS types for entry-source + guide summaries. |
| resources/js/pages/welcome.tsx | Adds homepage entry point to Getting Started hub. |
| resources/js/pages/public/location-show.tsx | Adds location page entry point to the hub. |
| resources/js/pages/public/getting-started/index.tsx | Implements the hub index UI (hero, guide cards, quick answers, CTAs). |
| resources/js/pages/public/getting-started/first-fpv-flight.tsx | Implements guide page: FPV basics and simulator recommendations. |
| resources/js/pages/public/getting-started/first-dds-event.tsx | Implements guide page: training flow and event preparation. |
| resources/js/pages/public/getting-started/choosing-equipment.tsx | Implements guide page: equipment compatibility and safety. |
| resources/js/pages/public/events-index.tsx | Adds events index entry point to the relevant guide. |
| resources/js/pages/public/event-show.tsx | Adds training event entry point to the relevant guide. |
| resources/js/pages/public/contact.tsx | Adds hub entry point + new community channel section/links. |
| resources/js/layouts/public-layout.tsx | Reorganizes public nav (desktop + mobile) with “Informatie” submenu. |
| resources/js/components/public/public-patterns.tsx | Extends public layout primitives (separator tone, compact/alternate content patterns). |
| config/seo.php | Adds SEO config for the Getting Started hub and updates house rules description wording. |
| config/public_pages.php | Updates house rules eyebrow/body wording to align with “rules” terminology. |
| config/getting_started_guides.php | Adds code-owned guide catalogue entries (slug/order/metadata). |
| app/Support/GettingStartedGuides.php | Adds config-backed guide catalogue loader/sorter + lookup. |
| app/Support/GettingStartedGuide.php | Adds typed guide value object for catalogue entries. |
| app/Http/Controllers/Public/GettingStartedController.php | Adds controller for hub index + guide detail rendering and entry-source validation. |
| app/Enums/GettingStartedEntrySource.php | Adds enum of validated entry-source values. |
Comments suppressed due to low confidence (2)
resources/js/pages/public/getting-started/index.tsx:89
- This link always appends a
sourcequery value viaguideEntrySource, even when the page was loaded without a valid entry source. Use the conditionalguideLinkOptionsso direct visitors don’t get mislabeled asnavigation.
label: 'Start bij de basis',
href: gettingStartedShow.url('first-fpv-flight', {
query: { source: guideEntrySource },
}),
resources/js/pages/public/getting-started/index.tsx:177
- These guide links currently always append
?source=navigationfor direct visitors becauseguideEntrySourcedefaults whenentrySourceis null. Use the shared conditionalguideLinkOptionsso the query param is only present when a validated source was provided.
href={gettingStartedShow(guide.slug, {
query: {
source: guideEntrySource,
},
})}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
/getting-startedknowledge hub with three focused guides:Informatiesubmenu for Over DDS, Projecten, and Partners.Why
New pilots need a readable path from first interest to participating at DDS without being overloaded or relying on dated event and season content. The new hub groups the essential explanation into a small number of coherent pages and reflects the actual training flow: register, pay when needed, help build the track, walk the track, fly in heats, and clean up together.
User impact
Visitors can understand FPV, compare starter equipment and simulators, find DDS community channels, and prepare for a training through consistent entry points across the public site.
Validation
php artisan test --compact— 349 tests, 3,454 assertions passedcomposer run types:check— PHPStan passedcomposer run lint:check— Pint passednpm run types:check— passednpm run build— passedgit diff --check— passedLocal CI caveats
The aggregate
composer run ci:checkcommand locally scans ignored.claude/worktreesthrougheslint ., producing unrelated lint output outside this repository diff. The repository-wide Prettier check also reports four unchanged baseline files. All files changed by this PR pass their scoped ESLint and Prettier checks.