Initial commit: React frontend (SLP Software) + AIDLC workflow docs

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
2026-07-20 00:19:44 +02:00
co-authored by Junie
commit e299f1c745
73 changed files with 7275 additions and 0 deletions
@@ -0,0 +1,117 @@
# Requirements Clarification Questions — React Frontend
Please answer each question by filling in the letter choice after the `[Answer]:` tag.
## Question 1: Scope of this first iteration
The request says "start with setting up a static website, but as React". What should be included in this first delivery?
A) Only the landing page content that is already in the reference designs (nav, hero, pakketten, werkwijze, over, contact, footer), rebuilt 1-on-1 as React components
B) The reference page content, plus routing scaffolding (TanStack Router) even though there is only one route today
C) The reference page content, plus a full project skeleton including TanStack Router AND TanStack Query wired up (even though there is no data-fetching need yet)
X) Other (please describe after [Answer]: tag below)
[Answer]: C
## Question 2: Tooling / build setup
Which React tooling stack should be used to set up the project?
A) Vite + React + TypeScript (fast dev server, widely used with TanStack)
B) Vite + React (JavaScript, no TypeScript)
C) Next.js (React framework with built-in routing — note: overlaps with TanStack Router, so would need a decision on which router to use)
X) Other (please describe after [Answer]: tag below)
[Answer]: A
## Question 3: Styling approach
The reference designs use hand-written CSS with CSS custom properties (`:root { --bg; --accent; ... }`) for theming. How should styling be implemented in React?
A) Keep plain CSS (CSS Modules or global CSS) using the same CSS custom properties, so the color palette stays swappable exactly like the reference
B) Move to CSS-in-JS (e.g. styled-components / vanilla-extract)
C) Move to a utility CSS framework (e.g. Tailwind CSS), re-implementing the visuals with utility classes
X) Other (please describe after [Answer]: tag below)
[Answer]: C
## Question 4: Color theme switching mechanism
You want red as the default/primary theme, with the purple theme selectable as an addition to the reference designs. How should the user select the theme?
A) A visible UI toggle/switcher on the site (e.g. in the nav) that lets visitors switch between "Rood" and "Paars" at runtime
B) Only a developer-facing mechanism for now (e.g. a config value or environment variable) — no visible UI control yet, visible switcher can be a later iteration
X) Other (please describe after [Answer]: tag below)
[Answer]: A
## Question 5: Theme persistence
If a visible theme switcher is added (Question 4 = A), should the chosen theme be remembered between visits?
A) Yes — persist the choice in the browser (e.g. localStorage) so it's remembered on return visits
B) No — theme resets to red (default) on every page load/visit
X) Other (please describe after [Answer]: tag below)
[Answer]: A
## Question 6: Content fidelity vs. placeholders
The reference designs contain real Dutch marketing copy (package prices, e-mail address `info@slpsoftware.nl`, etc.). Should this content be copied 1-on-1?
A) Yes — copy all text, prices, and contact details 1-on-1 exactly as in the reference HTML
B) Copy the structure/layout 1-on-1, but replace specific business content (prices, e-mail) with placeholders to be finalized later
X) Other (please describe after [Answer]: tag below)
[Answer]: A, this will be replaced with data fetching later, but for now use the data from the designs
## Question 7: Interactivity already present in the reference
The reference HTML has a couple of small interactive/dynamic bits (a blinking caret animation in the hero code line, `:hover`/`:focus-visible` states, smooth scroll anchor links). Should these be preserved as-is?
A) Yes — preserve all existing visual micro-interactions exactly (blinking caret, hover states, smooth scroll)
B) Preserve hover/focus states, but drop the blinking caret animation
X) Other (please describe after [Answer]: tag below)
[Answer]: A
## Question 8: Target deployment / hosting
Is there a specific hosting target already in mind for this static React site (relevant later for build output configuration)?
A) Not decided yet — keep the build generic (static output, deployable anywhere)
B) Static hosting / CDN (e.g. Netlify, Vercel, Cloudflare Pages, GitHub Pages)
C) Traditional web host via FTP/manual upload (as hinted by the `demo-setup` / on-premises style deployment)
X) Other (please describe after [Answer]: tag below)
[Answer]: C
## Question 9: Browser/device support baseline
What is the minimum browser/device support baseline for this site?
A) Modern evergreen browsers only (latest Chrome, Firefox, Edge, Safari) — matches the reference's use of modern CSS (backdrop-filter, clamp, etc.)
B) Broader legacy support required (older browsers, e.g. older Safari/IE-adjacent) with graceful degradation
X) Other (please describe after [Answer]: tag below)
[Answer]: A
## Question: Security Extensions
Should security extension rules be enforced for this project?
A) Yes — enforce all SECURITY rules as blocking constraints (recommended for production-grade applications)
B) No — skip all SECURITY rules (suitable for PoCs, prototypes, and experimental projects, or for a marketing-only static site with no backend/user data)
X) Other (please describe after [Answer]: tag below)
[Answer]: A
## Question: Property-Based Testing Extension
Should property-based testing (PBT) rules be enforced for this project?
A) Yes — enforce all PBT rules as blocking constraints
B) Partial — enforce PBT rules only for pure functions and serialization round-trips
C) No — skip all PBT rules (suitable for this kind of largely static, UI-only marketing site with no significant business logic)
X) Other (please describe after [Answer]: tag below)
[Answer]: C
## Question: Operations Phase
Should this feature go through the Operations phase after Construction (setting up deployment and monitoring)?
A) Yes — run the Operations phase after Construction (deployment + monitoring setup)
B) No — stop after Build and Test (deployment/monitoring are out of scope for this feature)
C) Not sure yet — ask me again after the Construction phase
X) Other (please describe after [Answer]: tag below)
[Answer]: A
@@ -0,0 +1,100 @@
# Requirements — React Frontend (SLP Software Marketing Site)
## Intent Analysis Summary
- **User Request**: Build a React frontend for SLP Software. Two static HTML reference designs exist in `References/` (`slp-software.html` = purple accent, `slp-software-rood.html` = red accent) that are the same design with only a different accent color. Red must become the primary/default theme; the purple theme must remain selectable (this selectability is new, not present in the original static designs). All other content/layout must be ported 1-to-1 into React. Start with a static site, but built as React. For later use: TanStack Router and TanStack Query should be used where needed. The AI-DLC workflow must be used to set this up.
- **Request Type**: New Project (Greenfield)
- **Scope Estimate**: Single Component — one marketing/landing page rebuilt as a React application, plus supporting theming infrastructure
- **Complexity Estimate**: Simple to Moderate — the visual/content scope is a single static page, but a full modern tooling skeleton (Vite, TypeScript, TanStack Router, TanStack Query, Tailwind CSS, theming) is being set up for future growth
- **Requirements Depth**: Standard
## Reference Design Analysis
Both reference files were compared byte-for-byte (`Compare-Object`). They are **identical in structure, markup, and copy**; the only differences are CSS custom property values used for theming:
| Variable | Purple (`slp-software.html`) | Red (`slp-software-rood.html`) |
|---|---|---|
| `--bg` | `#0E1220` | `#140C0E` |
| `--surface` | `#151A2C` | `#1F1315` |
| `--surface-2` | `#1B2138` | `#291719` |
| `--line` | `#262E4A` | `#402226` |
| `--text` | `#E9EBF5` | `#F5EAEB` |
| `--muted` | `#98A0BA` | `#B69C9F` |
| `--accent` | `#8B7CFF` | `#E04848` |
| `--accent-soft` | `rgba(139,124,255,.14)` | `rgba(224,72,72,.16)` |
| `--accent-line` | `rgba(139,124,255,.35)` | `rgba(224,72,72,.40)` |
| Hero radial gradients, badge/button text color, `#pakketten` gradient | purple-tinted values | red-tinted values |
Page structure (both files, identical):
1. **Nav** — logo ("SLP.Software"), links (Pakketten / Werkwijze / Over), CTA ("Start project")
2. **Hero** — eyebrow label, H1, lead paragraph, animated code line with blinking caret, two CTA buttons
3. **Pakketten (Packages)** — 3 pricing cards (Landingspagina €300, Website €750 — featured, Maatwerk — quote-based)
4. **Werkwijze (Process)** — 3-step process (intake, bouwen, live)
5. **Over (About)** — company description + tech stack panel
6. **Contact** — contact box with mailto CTA
7. **Footer** — copyright + mono tagline
## Functional Requirements
### FR-1: Page Content Parity
The React application MUST reproduce all sections, copy, structure, and visual layout of the reference designs 1-to-1: Nav, Hero, Pakketten, Werkwijze, Over, Contact, Footer. All Dutch marketing copy, package prices (€300 / €750 / "Op maat"), and the contact e-mail address (`info@slpsoftware.nl`) are copied exactly as-is from the reference HTML for this iteration; this content is expected to be replaced by dynamically fetched data in a future iteration (see FR-5).
### FR-2: Componentization
The page MUST be decomposed into reusable React components (e.g. `Nav`, `Hero`, `PackagesSection`, `PackageCard`, `ProcessSection`, `AboutSection`, `ContactSection`, `Footer`) rather than a single monolithic page component.
### FR-3: Theme Switching
- The site MUST default to the **red** theme on first load.
- The **purple** theme MUST remain selectable by the visitor via a visible UI control (e.g. a toggle/switcher in the nav).
- The chosen theme MUST be persisted in the browser (`localStorage` or equivalent) so it is remembered on return visits; if no stored preference exists, red is used.
- Theme values MUST be implemented so that both palettes (and any future palette) can be added without duplicating component markup — i.e. only the color tokens change, not the structure.
### FR-4: Preserved Micro-Interactions
All existing micro-interactions from the reference designs MUST be preserved: the blinking caret animation in the hero code line, `:hover` / `:focus-visible` states on links, cards and buttons, and smooth-scroll behavior for in-page anchor navigation (respecting `prefers-reduced-motion`).
### FR-5: Forward-Looking Data Layer (Preparation Only)
- TanStack Router MUST be set up and wired into the application shell, even though the initial scope has effectively a single route (`/`). Route structure should be organized so that adding routes later is straightforward.
- TanStack Query MUST be installed and configured (e.g. `QueryClientProvider` at the app root) as part of this iteration's skeleton, in preparation for a future iteration where package/content data is fetched from a backend instead of being hardcoded. No actual network data-fetching is required yet — static data (matching FR-1) is used as the source for now, structured so it can be swapped for a TanStack Query hook later with minimal changes.
## Non-Functional Requirements
### NFR-1: Tooling & Language
- Build tool: **Vite**
- Language: **TypeScript**
- UI library: **React**
### NFR-2: Styling
- **Tailwind CSS** is used as the utility CSS framework to re-implement the reference visuals.
- The color palette (red default / purple alternate) MUST be modeled as design tokens (e.g. CSS custom properties consumed via Tailwind theme config, or a Tailwind theme extension keyed by a `data-theme` attribute/class) so that switching a single token set changes the whole site's palette, mirroring how the reference designs use `:root` CSS variables.
### NFR-3: Browser Support
Modern evergreen browsers only (latest Chrome, Firefox, Edge, Safari). No legacy/IE-adjacent support required. This matches the reference design's use of modern CSS features (`backdrop-filter`, `clamp()`, CSS custom properties).
### NFR-4: Deployment Target
The build output MUST remain a plain static bundle (HTML/CSS/JS, no Node.js server required at runtime) so it can be deployed to a traditional web host via FTP/manual upload. This has a design implication for TanStack Router: once more than one route exists, either hash-based routing or host-level rewrite rules (e.g. `.htaccess`) will be needed for direct-link/deep-link support on a plain static FTP host — to be finalized during Application Design / Infrastructure Design when routing needs are concrete.
### NFR-5: Operations Phase
This feature WILL go through the Operations phase after Construction (deployment setup + monitoring setup + production readiness validation).
## Extension Configuration
| Extension | Enabled | Notes |
|---|---|---|
| **Security Baseline** | Yes | Enforced as blocking constraints. Most backend-oriented rules (auth, API validation, network config, encryption at rest, etc.) are expected to be **N/A** for this static, no-backend marketing site — applicability will be re-assessed rule-by-rule at each stage (e.g. HTTP security headers via hosting/CDN config, dependency lock file & vulnerability scanning, Subresource Integrity for the Google Fonts CDN links). |
| **Property-Based Testing** | No | Skipped — this is a largely static, UI-only marketing site with no significant business logic. |
## Out of Scope (for this iteration)
- Real backend/API integration for package/content data (prepared for via TanStack Query, but not implemented)
- Multiple routes/pages beyond the single landing page
- CMS or admin interface for editing content
- Analytics/tracking integration
- Automated deployment pipeline details (handled in the Operations phase)
## Open Design Considerations (to resolve later, not blocking)
- Exact mechanism for FTP-safe client-side routing once multiple routes exist (hash routing vs. `.htaccess` rewrites) — Application Design / Infrastructure Design.
- Exact shape of the future data-fetching layer (API contract) that TanStack Query will eventually call — deferred until a backend exists.
## Summary
This is a greenfield React frontend for SLP Software's marketing site. The visual and content scope is a straightforward 1-to-1 port of an existing static HTML/CSS design (available in two color variants). The key net-new requirement beyond the reference designs is a red-default / purple-selectable theme switcher with persisted preference. The project is set up with Vite + React + TypeScript + Tailwind CSS, and is scaffolded from day one with TanStack Router and TanStack Query to support future growth, even though the current scope has a single route and static data. Security Baseline is enforced; Property-Based Testing is skipped; the Operations phase will run after Construction.