gspec 1.6.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -7
- package/bin/gspec.js +275 -8
- package/commands/gspec.analyze.md +2 -4
- package/commands/gspec.architect.md +2 -3
- package/commands/gspec.feature.md +37 -7
- package/commands/gspec.implement.md +14 -19
- package/commands/gspec.migrate.md +1 -2
- package/commands/gspec.practices.md +3 -1
- package/commands/gspec.research.md +1 -1
- package/commands/gspec.stack.md +11 -6
- package/commands/gspec.style.md +18 -23
- package/dist/antigravity/gspec-analyze/SKILL.md +2 -4
- package/dist/antigravity/gspec-architect/SKILL.md +3 -4
- package/dist/antigravity/gspec-feature/SKILL.md +39 -9
- package/dist/antigravity/gspec-implement/SKILL.md +15 -20
- package/dist/antigravity/gspec-migrate/SKILL.md +6 -7
- package/dist/antigravity/gspec-practices/SKILL.md +4 -2
- package/dist/antigravity/gspec-profile/SKILL.md +1 -1
- package/dist/antigravity/gspec-research/SKILL.md +4 -4
- package/dist/antigravity/gspec-stack/SKILL.md +12 -7
- package/dist/antigravity/gspec-style/SKILL.md +19 -24
- package/dist/claude/gspec-analyze/SKILL.md +2 -4
- package/dist/claude/gspec-architect/SKILL.md +3 -4
- package/dist/claude/gspec-feature/SKILL.md +39 -9
- package/dist/claude/gspec-implement/SKILL.md +15 -20
- package/dist/claude/gspec-migrate/SKILL.md +6 -7
- package/dist/claude/gspec-practices/SKILL.md +4 -2
- package/dist/claude/gspec-profile/SKILL.md +1 -1
- package/dist/claude/gspec-research/SKILL.md +4 -4
- package/dist/claude/gspec-stack/SKILL.md +12 -7
- package/dist/claude/gspec-style/SKILL.md +19 -24
- package/dist/codex/gspec-analyze/SKILL.md +2 -4
- package/dist/codex/gspec-architect/SKILL.md +3 -4
- package/dist/codex/gspec-feature/SKILL.md +39 -9
- package/dist/codex/gspec-implement/SKILL.md +15 -20
- package/dist/codex/gspec-migrate/SKILL.md +6 -7
- package/dist/codex/gspec-practices/SKILL.md +4 -2
- package/dist/codex/gspec-profile/SKILL.md +1 -1
- package/dist/codex/gspec-research/SKILL.md +4 -4
- package/dist/codex/gspec-stack/SKILL.md +12 -7
- package/dist/codex/gspec-style/SKILL.md +19 -24
- package/dist/cursor/gspec-analyze.mdc +2 -4
- package/dist/cursor/gspec-architect.mdc +3 -4
- package/dist/cursor/gspec-feature.mdc +39 -9
- package/dist/cursor/gspec-implement.mdc +15 -20
- package/dist/cursor/gspec-migrate.mdc +6 -7
- package/dist/cursor/gspec-practices.mdc +4 -2
- package/dist/cursor/gspec-profile.mdc +1 -1
- package/dist/cursor/gspec-research.mdc +4 -4
- package/dist/cursor/gspec-stack.mdc +12 -7
- package/dist/cursor/gspec-style.mdc +19 -24
- package/dist/opencode/gspec-analyze/SKILL.md +168 -0
- package/dist/opencode/gspec-architect/SKILL.md +361 -0
- package/dist/opencode/gspec-feature/SKILL.md +204 -0
- package/dist/opencode/gspec-implement/SKILL.md +200 -0
- package/dist/opencode/gspec-migrate/SKILL.md +118 -0
- package/dist/opencode/gspec-practices/SKILL.md +137 -0
- package/dist/opencode/gspec-profile/SKILL.md +221 -0
- package/dist/opencode/gspec-research/SKILL.md +302 -0
- package/dist/opencode/gspec-stack/SKILL.md +305 -0
- package/dist/opencode/gspec-style/SKILL.md +224 -0
- package/package.json +3 -1
- package/starters/features/about-page.md +98 -0
- package/starters/features/contact-form.md +147 -0
- package/starters/features/contact-page.md +103 -0
- package/starters/features/home-page.md +103 -0
- package/starters/features/responsive-navbar.md +113 -0
- package/starters/features/services-page.md +103 -0
- package/starters/features/site-footer.md +121 -0
- package/starters/features/theme-switcher.md +124 -0
- package/starters/practices/tdd-pipeline-first.md +192 -0
- package/starters/stacks/astro-tailwind-github-pages.md +283 -0
- package/starters/stacks/nextjs-supabase-vercel.md +319 -0
- package/starters/stacks/nextjs-vercel-typescript.md +264 -0
- package/starters/styles/clean-professional.md +316 -0
- package/starters/styles/dark-minimal-developer.md +442 -0
- package/templates/spec-sync.md +2 -2
- package/commands/gspec.epic.md +0 -228
- package/dist/antigravity/gspec-epic/SKILL.md +0 -232
- package/dist/claude/gspec-epic/SKILL.md +0 -233
- package/dist/codex/gspec-epic/SKILL.md +0 -232
- package/dist/cursor/gspec-epic.mdc +0 -231
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Hero section, service highlights, testimonials, and CTA
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Home Page
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A home page for a professional services business that introduces the brand, communicates its value proposition, and presents its service offerings. The page serves as the primary entry point for prospective clients researching the business, giving them enough information to understand what the firm does and why it is credible.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** Prospective clients visiting the website for the first time.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A prospective client arrives from a search engine and needs to quickly understand what the business does and whether it is relevant to their needs.
|
|
19
|
+
2. A referral visits the site to validate the recommendation they received, looking for professionalism and evidence of expertise.
|
|
20
|
+
3. A returning visitor navigates back to the home page to review service offerings before engaging further.
|
|
21
|
+
|
|
22
|
+
## Scope
|
|
23
|
+
|
|
24
|
+
**In scope:**
|
|
25
|
+
|
|
26
|
+
- Hero banner section with headline, supporting text, and optional imagery
|
|
27
|
+
- Value proposition section summarizing the firm's core differentiators
|
|
28
|
+
- Services overview section listing the primary service offerings with brief descriptions
|
|
29
|
+
- Responsive layout that works across desktop, tablet, and mobile devices
|
|
30
|
+
- Static content coded directly into the page
|
|
31
|
+
|
|
32
|
+
**Out of scope:**
|
|
33
|
+
|
|
34
|
+
- Calls-to-action, buttons, or conversion flows (handled by a separate feature)
|
|
35
|
+
- Blog, news, or dynamic content feeds
|
|
36
|
+
- Client portal or authenticated experiences
|
|
37
|
+
- Search engine optimization tooling or analytics integration
|
|
38
|
+
|
|
39
|
+
**Deferred ideas:**
|
|
40
|
+
|
|
41
|
+
- Testimonials or social proof section
|
|
42
|
+
- Team or leadership section
|
|
43
|
+
- Partner or client logo bar
|
|
44
|
+
- Animation or scroll-based interactions
|
|
45
|
+
|
|
46
|
+
## Capabilities
|
|
47
|
+
|
|
48
|
+
- [ ] **P0**: Hero banner displays a prominent headline and supporting text that communicates what the business does
|
|
49
|
+
- Headline and supporting text are visible immediately on page load without scrolling
|
|
50
|
+
- Text is legible across viewport sizes (desktop, tablet, mobile)
|
|
51
|
+
- Section accommodates an optional background image or visual element
|
|
52
|
+
|
|
53
|
+
- [ ] **P0**: Value proposition section presents 2-4 core differentiators of the business
|
|
54
|
+
- Each differentiator has a short title and brief description
|
|
55
|
+
- Differentiators are visually distinct and scannable (not a wall of text)
|
|
56
|
+
- Section is visually separated from the hero and services sections
|
|
57
|
+
|
|
58
|
+
- [ ] **P0**: Services overview section lists the primary service offerings
|
|
59
|
+
- Each service has a name and a brief description (1-3 sentences)
|
|
60
|
+
- Services are presented in a consistent, repeatable layout pattern
|
|
61
|
+
- The section accommodates 3-6 service items without feeling cluttered
|
|
62
|
+
|
|
63
|
+
- [ ] **P0**: Page is fully responsive across common device sizes
|
|
64
|
+
- Layout adapts cleanly to desktop (1024px+), tablet (768px), and mobile (375px) viewports
|
|
65
|
+
- No horizontal scrolling on any viewport
|
|
66
|
+
- Text remains readable and images scale appropriately at all sizes
|
|
67
|
+
|
|
68
|
+
- [ ] **P1**: Page loads quickly with static content
|
|
69
|
+
- Page is usable within 2 seconds on a standard broadband connection
|
|
70
|
+
- Images are appropriately sized and optimized for web delivery
|
|
71
|
+
|
|
72
|
+
- [ ] **P2**: Semantic page structure supports accessibility
|
|
73
|
+
- Page uses proper heading hierarchy (single h1, logical h2/h3 nesting)
|
|
74
|
+
- Images include descriptive alt text
|
|
75
|
+
- Content is navigable via keyboard
|
|
76
|
+
|
|
77
|
+
## Dependencies
|
|
78
|
+
|
|
79
|
+
None. This is a foundational page with no dependencies on other features.
|
|
80
|
+
|
|
81
|
+
## Assumptions & Risks
|
|
82
|
+
|
|
83
|
+
**Assumptions:**
|
|
84
|
+
|
|
85
|
+
- The business has established branding (name, logo, colors) available for use.
|
|
86
|
+
- Service offerings are defined and can be summarized in 1-3 sentences each.
|
|
87
|
+
- Static content is acceptable for the initial version; content updates will be infrequent and handled by developers.
|
|
88
|
+
|
|
89
|
+
**Key risks:**
|
|
90
|
+
|
|
91
|
+
- **Content readiness:** The page cannot launch without finalized copy for the hero, value proposition, and services sections. Mitigation: use realistic placeholder content during development so layout and structure can be validated independently.
|
|
92
|
+
- **Scope creep into conversion flows:** Without clear CTAs, stakeholders may push to add contact forms or booking widgets to this feature. Mitigation: CTA functionality is explicitly scoped to a separate feature.
|
|
93
|
+
|
|
94
|
+
## Success Metrics
|
|
95
|
+
|
|
96
|
+
1. Visitors can identify the business name, what it does, and its core services within 10 seconds of landing on the page.
|
|
97
|
+
2. The page renders correctly and is fully usable across desktop, tablet, and mobile viewports.
|
|
98
|
+
3. Page load time is under 2 seconds on a standard broadband connection.
|
|
99
|
+
4. All content sections (hero, value proposition, services) are present and display without layout issues.
|
|
100
|
+
|
|
101
|
+
## Implementation Context
|
|
102
|
+
|
|
103
|
+
> This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Responsive navigation bar with mobile hamburger menu
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Responsive Navbar
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A persistent, top-of-viewport navigation bar that anchors the site identity on the left and presents navigation destinations on the right, adapting its layout across viewport sizes. Without a consistent navigation element, visitors must rely on back buttons or memorized URLs to move between pages — increasing friction and reducing discoverability of key sections.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** All site visitors navigating between pages.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A first-time visitor lands on any page and uses the navbar to discover and navigate to other sections of the site without scrolling back to the top or returning to the home page.
|
|
19
|
+
2. A visitor on a mobile device taps the hamburger menu to access the full set of navigation destinations that would otherwise not fit in the narrow viewport.
|
|
20
|
+
3. A visitor on any page clicks the site identity (icon/name) in the navbar to return to the home page as a familiar orientation point.
|
|
21
|
+
4. A visitor scrolls down a long page and uses the pinned navbar to navigate elsewhere without scrolling back to the top.
|
|
22
|
+
|
|
23
|
+
## Scope
|
|
24
|
+
|
|
25
|
+
**In scope:**
|
|
26
|
+
|
|
27
|
+
- Site identity element (icon and/or name) pinned to the left side of the navbar, functioning as a home link
|
|
28
|
+
- Horizontal navigation links displayed on the right side at wider viewports
|
|
29
|
+
- Hamburger menu trigger that replaces the horizontal links at narrow viewports, revealing a flat list of all navigation destinations
|
|
30
|
+
- Sticky positioning so the navbar remains visible during scrolling
|
|
31
|
+
- Responsive transition between expanded links and collapsed hamburger menu
|
|
32
|
+
|
|
33
|
+
**Out of scope:**
|
|
34
|
+
|
|
35
|
+
- Context-aware action slots (edit/view toggles, page-specific controls) — handled by individual page features
|
|
36
|
+
- Nested or multi-level dropdown menus within the hamburger
|
|
37
|
+
- Search bar or search functionality within the navbar
|
|
38
|
+
- User account controls, login/logout, or authentication-related UI
|
|
39
|
+
- Notification badges or indicators
|
|
40
|
+
- Breadcrumb navigation
|
|
41
|
+
|
|
42
|
+
**Deferred ideas:**
|
|
43
|
+
|
|
44
|
+
- Animated transitions for hamburger menu open/close
|
|
45
|
+
- Active state highlighting for the current page's link
|
|
46
|
+
- Dropdown sub-menus for grouped navigation at desktop widths
|
|
47
|
+
- Secondary navbar or sub-navigation bar below the primary navbar
|
|
48
|
+
|
|
49
|
+
## Capabilities
|
|
50
|
+
|
|
51
|
+
- [ ] **P0**: Site identity element is displayed on the left side of the navbar and links to the home page
|
|
52
|
+
- An icon, name, or combination of both is visible on the left edge of the navbar at all viewport sizes
|
|
53
|
+
- Clicking or tapping the identity element navigates to the home page
|
|
54
|
+
- The identity element has an accessible label describing its purpose as a home link
|
|
55
|
+
|
|
56
|
+
- [ ] **P0**: Navigation destinations are displayed as horizontal links on the right side at wide viewports
|
|
57
|
+
- All defined navigation destinations are visible as individual, clickable links
|
|
58
|
+
- Links are displayed in a consistent, stable order
|
|
59
|
+
- Each link navigates to the correct destination page
|
|
60
|
+
|
|
61
|
+
- [ ] **P0**: Navigation destinations collapse into a hamburger menu at narrow viewports
|
|
62
|
+
- A recognizable hamburger icon (three horizontal lines or equivalent) replaces the horizontal links below a defined breakpoint
|
|
63
|
+
- Tapping the hamburger icon reveals a flat list of all navigation destinations
|
|
64
|
+
- Tapping a destination in the list navigates to that page
|
|
65
|
+
- Tapping the hamburger icon again or navigating away closes the menu
|
|
66
|
+
|
|
67
|
+
- [ ] **P0**: Navbar remains pinned to the top of the viewport during scrolling
|
|
68
|
+
- The navbar stays visible at the top of the screen as the user scrolls down the page
|
|
69
|
+
- Page content scrolls beneath the navbar without overlapping or obscuring it
|
|
70
|
+
- The navbar does not cause content at the top of the page to be hidden behind it on initial load
|
|
71
|
+
|
|
72
|
+
- [ ] **P0**: Navbar is fully responsive across common device sizes
|
|
73
|
+
- Layout adapts cleanly to desktop (1024px+), tablet (768px), and mobile (375px) viewports
|
|
74
|
+
- The site identity element remains visible and legible at all sizes
|
|
75
|
+
- No horizontal scrolling is introduced by the navbar at any viewport width
|
|
76
|
+
|
|
77
|
+
- [ ] **P1**: Hamburger menu is accessible to keyboard and screen reader users
|
|
78
|
+
- The hamburger trigger is keyboard-focusable and activatable via Enter or Space
|
|
79
|
+
- The expanded menu can be navigated with keyboard (Tab, Escape to close)
|
|
80
|
+
- The trigger has an accessible label (e.g., "Navigation menu") that communicates its purpose
|
|
81
|
+
- Screen readers announce the expanded/collapsed state of the menu
|
|
82
|
+
|
|
83
|
+
- [ ] **P2**: Navigation destination order remains stable across viewport transitions
|
|
84
|
+
- The sequence of links in the expanded horizontal layout matches the sequence in the hamburger menu
|
|
85
|
+
- Resizing the viewport does not reorder or drop navigation destinations
|
|
86
|
+
|
|
87
|
+
## Dependencies
|
|
88
|
+
|
|
89
|
+
- **Home Page** ([home-page.md](home-page.md)): The site identity element links to the home page; the home page must exist as a navigation destination.
|
|
90
|
+
|
|
91
|
+
## Assumptions & Risks
|
|
92
|
+
|
|
93
|
+
**Assumptions:**
|
|
94
|
+
|
|
95
|
+
- The site has a defined identity (icon, name, or both) available for use in the navbar.
|
|
96
|
+
- Navigation destinations are statically defined and change infrequently; developer-managed updates are acceptable.
|
|
97
|
+
- The number of navigation destinations is small enough (3-6 items) that a flat list in the hamburger menu is sufficient without grouping or nesting.
|
|
98
|
+
|
|
99
|
+
**Key risks:**
|
|
100
|
+
|
|
101
|
+
- **Content overflow at medium viewports:** If the number of navigation links grows, the horizontal layout may overflow before reaching the narrow-viewport breakpoint. Mitigation: define the responsive breakpoint based on content width rather than a fixed pixel value, or set a maximum number of supported links in the horizontal layout.
|
|
102
|
+
- **Sticky positioning conflicts:** The pinned navbar may conflict with other fixed or sticky elements on the page (e.g., cookie banners, chat widgets). Mitigation: establish a clear stacking order convention so the navbar's layer priority is predictable.
|
|
103
|
+
|
|
104
|
+
## Success Metrics
|
|
105
|
+
|
|
106
|
+
1. Visitors can navigate to any primary page from any other page using the navbar without scrolling to the top of the page.
|
|
107
|
+
2. The navbar renders correctly with site identity visible and links accessible across desktop, tablet, and mobile viewports.
|
|
108
|
+
3. On narrow viewports, the hamburger menu reveals all navigation destinations and each link functions correctly.
|
|
109
|
+
4. The navbar remains visible and functional during page scroll on all supported viewport sizes.
|
|
110
|
+
|
|
111
|
+
## Implementation Context
|
|
112
|
+
|
|
113
|
+
> This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Service offerings with descriptions, icons, and pricing tiers
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Services Page
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A dedicated Services page that presents the business's service offerings in detail beyond the brief overview on the home page. Prospective clients who are evaluating whether the business can meet their specific needs require more than a one-line summary — this page gives each service enough space to communicate what it involves and why it matters, helping visitors self-qualify before making contact.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** Prospective clients evaluating the business's service offerings in detail.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A prospective client clicks through from the home page services overview to understand a specific service in more depth before deciding to reach out.
|
|
19
|
+
2. A visitor comparing multiple firms reviews the Services page to assess breadth and relevance of offerings against their needs.
|
|
20
|
+
3. A referral who was told the business handles a specific type of work visits the Services page to confirm that service is offered and understand what it entails.
|
|
21
|
+
|
|
22
|
+
## Scope
|
|
23
|
+
|
|
24
|
+
**In scope:**
|
|
25
|
+
|
|
26
|
+
- Individual section for each service with a heading and short descriptive paragraph (3-5 sentences)
|
|
27
|
+
- Introductory text at the top of the page framing the overall service offering
|
|
28
|
+
- Support for 3-6 service items
|
|
29
|
+
- Responsive layout that works across desktop, tablet, and mobile devices
|
|
30
|
+
- Static content coded directly into the page
|
|
31
|
+
|
|
32
|
+
**Out of scope:**
|
|
33
|
+
|
|
34
|
+
- Pricing, rates, or cost information
|
|
35
|
+
- Calls-to-action, contact forms, or conversion elements (handled by a separate feature)
|
|
36
|
+
- Individual dedicated pages per service
|
|
37
|
+
- Case studies, project examples, or portfolio items tied to services
|
|
38
|
+
- Dynamic or CMS-managed content
|
|
39
|
+
- Filtering, search, or categorization of services
|
|
40
|
+
|
|
41
|
+
**Deferred ideas:**
|
|
42
|
+
|
|
43
|
+
- Individual service detail pages linked from each service section
|
|
44
|
+
- Icons or illustrations accompanying each service
|
|
45
|
+
- Client testimonials or case studies associated with specific services
|
|
46
|
+
- Service comparison table or feature matrix
|
|
47
|
+
- FAQ section addressing common questions about the services
|
|
48
|
+
|
|
49
|
+
## Capabilities
|
|
50
|
+
|
|
51
|
+
- [ ] **P0**: Page displays an introductory section framing the overall service offering
|
|
52
|
+
- Section includes a heading and a brief paragraph (1-3 sentences) that sets context for the services listed below
|
|
53
|
+
- Introductory text is visible immediately on page load without scrolling on desktop viewports
|
|
54
|
+
- Section is visually distinct from the individual service sections
|
|
55
|
+
|
|
56
|
+
- [ ] **P0**: Each service is presented with a heading and descriptive paragraph
|
|
57
|
+
- Each service has a clear, distinct heading (service name)
|
|
58
|
+
- Each service includes a descriptive paragraph of 3-5 sentences explaining what the service involves and the value it provides
|
|
59
|
+
- Services are presented in a consistent, repeatable layout pattern
|
|
60
|
+
- The page accommodates 3-6 services without feeling cluttered or requiring excessive scrolling
|
|
61
|
+
|
|
62
|
+
- [ ] **P0**: Page is fully responsive across common device sizes
|
|
63
|
+
- Layout adapts cleanly to desktop (1024px+), tablet (768px), and mobile (375px) viewports
|
|
64
|
+
- No horizontal scrolling on any viewport
|
|
65
|
+
- Text remains readable and sections are well-spaced at all sizes
|
|
66
|
+
|
|
67
|
+
- [ ] **P1**: Services are visually scannable and well-structured
|
|
68
|
+
- A visitor can identify all available services by name within 10 seconds of viewing the page
|
|
69
|
+
- Each service section is visually separated from adjacent sections with adequate spacing
|
|
70
|
+
- Clear visual hierarchy distinguishes service headings from descriptive text
|
|
71
|
+
|
|
72
|
+
- [ ] **P2**: Semantic page structure supports accessibility
|
|
73
|
+
- Page uses proper heading hierarchy (single h1, logical h2/h3 nesting)
|
|
74
|
+
- Content is navigable via keyboard
|
|
75
|
+
- Sufficient color contrast for all text elements
|
|
76
|
+
|
|
77
|
+
## Dependencies
|
|
78
|
+
|
|
79
|
+
- **Home Page** ([home-page.md](home-page.md)): The home page includes a services overview section. The Services page expands on that overview. Navigation between pages should be consistent, and the home page services section should link to this page for visitors wanting more detail.
|
|
80
|
+
|
|
81
|
+
## Assumptions & Risks
|
|
82
|
+
|
|
83
|
+
**Assumptions:**
|
|
84
|
+
|
|
85
|
+
- The business has 3-6 defined service offerings that can each be described in 3-5 sentences.
|
|
86
|
+
- Service offerings are stable and change infrequently; developer-managed updates are acceptable.
|
|
87
|
+
- The brief home page services overview is sufficient as a summary, and this page serves as the next level of detail without needing individual service pages.
|
|
88
|
+
|
|
89
|
+
**Key risks:**
|
|
90
|
+
|
|
91
|
+
- **Content readiness:** Each service requires a descriptive paragraph beyond what the home page provides. Mitigation: use realistic placeholder content during development so layout and structure can be validated independently.
|
|
92
|
+
- **Redundancy with home page:** Visitors may feel the Services page duplicates the home page overview if the additional detail is not meaningfully different. Mitigation: ensure the home page overview uses shorter summaries (1-2 sentences) while this page provides fuller descriptions (3-5 sentences) with distinct value-oriented content.
|
|
93
|
+
|
|
94
|
+
## Success Metrics
|
|
95
|
+
|
|
96
|
+
1. Visitors can identify all available services by name within 10 seconds of viewing the page.
|
|
97
|
+
2. Each service description provides enough detail that a visitor can determine whether the service is relevant to their needs without contacting the business.
|
|
98
|
+
3. The page renders correctly and is fully usable across desktop, tablet, and mobile viewports.
|
|
99
|
+
4. All service sections display in a consistent layout without visual issues or excessive whitespace.
|
|
100
|
+
|
|
101
|
+
## Implementation Context
|
|
102
|
+
|
|
103
|
+
> This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Site footer with nav links, social icons, and copyright
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Site Footer
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A standard informational footer rendered at the bottom of every page, providing consistent brand identity, copyright information, and site-wide navigation and legal links. Without a persistent footer, visitors lack a reliable anchor for finding key links and verifying they are on a legitimate, professional site — reducing trust and increasing navigation friction.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** All site visitors, regardless of their entry point or intent.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A visitor reaches the bottom of any page and wants to navigate to another section of the site without scrolling back to the top — the footer provides quick links to key pages.
|
|
19
|
+
2. A visitor wants to review legal or policy information (privacy policy, terms of use) and looks to the footer as the conventional location for these links.
|
|
20
|
+
3. A first-time visitor glances at the footer to confirm the business identity, read a brief description, and see a copyright notice — reinforcing legitimacy and professionalism.
|
|
21
|
+
|
|
22
|
+
## Scope
|
|
23
|
+
|
|
24
|
+
**In scope:**
|
|
25
|
+
|
|
26
|
+
- Business identity display (name and short tagline or description)
|
|
27
|
+
- Copyright notice with current year
|
|
28
|
+
- Navigation links to main site pages
|
|
29
|
+
- Legal and support links (privacy policy, terms of use, accessibility)
|
|
30
|
+
- Consistent rendering across all pages
|
|
31
|
+
- Responsive layout across device sizes
|
|
32
|
+
|
|
33
|
+
**Out of scope:**
|
|
34
|
+
|
|
35
|
+
- Contact forms, email signup forms, or interactive input elements
|
|
36
|
+
- Embedded maps or dynamic content
|
|
37
|
+
- Page-specific content or messaging that varies by page
|
|
38
|
+
- CMS or admin interface for managing footer content
|
|
39
|
+
|
|
40
|
+
**Deferred ideas:**
|
|
41
|
+
|
|
42
|
+
- Social media profile icon links
|
|
43
|
+
- Certification badges or trust seals
|
|
44
|
+
- Micro-CTA buttons (e.g., "Get a Quote")
|
|
45
|
+
- Newsletter signup field
|
|
46
|
+
- Secondary tagline or seasonal messaging
|
|
47
|
+
|
|
48
|
+
## Capabilities
|
|
49
|
+
|
|
50
|
+
- [ ] **P0**: Footer displays the business name and a short tagline or description
|
|
51
|
+
- Business name is visible and prominent within the footer
|
|
52
|
+
- A brief tagline or description (1 sentence) accompanies the name
|
|
53
|
+
- Identity text is legible at all viewport sizes
|
|
54
|
+
|
|
55
|
+
- [ ] **P0**: Footer displays a copyright notice
|
|
56
|
+
- Copyright notice includes the current year and business name
|
|
57
|
+
- Notice is positioned in a conventional footer location (typically bottom of the footer)
|
|
58
|
+
- Text is legible but visually secondary to navigation and identity content
|
|
59
|
+
|
|
60
|
+
- [ ] **P0**: Footer includes navigation links to main site pages
|
|
61
|
+
- Links to all primary site pages (Home, About, Contact) are present
|
|
62
|
+
- Links are clearly labeled with readable text
|
|
63
|
+
- Each link navigates to the correct page when activated
|
|
64
|
+
|
|
65
|
+
- [ ] **P0**: Footer includes legal and support links
|
|
66
|
+
- Links for privacy policy, terms of use, and accessibility statement are present
|
|
67
|
+
- Legal links are visually grouped or separated from main navigation links to indicate their distinct purpose
|
|
68
|
+
- Each link navigates to the correct destination when activated
|
|
69
|
+
|
|
70
|
+
- [ ] **P0**: Footer renders consistently on every page
|
|
71
|
+
- The footer appears at the bottom of the page content on all site pages
|
|
72
|
+
- Footer content and layout are identical regardless of which page the visitor is on
|
|
73
|
+
- Footer does not overlap or interfere with page-specific content or sticky navigation elements
|
|
74
|
+
|
|
75
|
+
- [ ] **P0**: Footer is fully responsive across common device sizes
|
|
76
|
+
- Layout adapts cleanly to desktop (1024px+), tablet (768px), and mobile (375px) viewports
|
|
77
|
+
- No horizontal scrolling caused by the footer on any viewport
|
|
78
|
+
- Links remain legible and tappable (adequate touch target size) on mobile devices
|
|
79
|
+
|
|
80
|
+
- [ ] **P1**: Footer content is organized with clear visual hierarchy
|
|
81
|
+
- Business identity, navigation links, legal links, and copyright are visually distinct sections or groups
|
|
82
|
+
- A visitor can distinguish between navigation and legal links without reading every label
|
|
83
|
+
- Layout uses spacing and grouping to prevent the footer from feeling cluttered
|
|
84
|
+
|
|
85
|
+
- [ ] **P2**: Footer structure supports accessibility
|
|
86
|
+
- Footer uses a semantic landmark element so assistive technologies can identify it
|
|
87
|
+
- All links are keyboard-navigable and have accessible labels
|
|
88
|
+
- Sufficient color contrast for all text and link elements
|
|
89
|
+
|
|
90
|
+
## Dependencies
|
|
91
|
+
|
|
92
|
+
- **Home Page** ([home-page.md](home-page.md)): Footer navigation links include a link to the home page.
|
|
93
|
+
- **About Page** ([about-page.md](about-page.md)): Footer navigation links include a link to the about page.
|
|
94
|
+
- **Contact Page** ([contact-page.md](contact-page.md)): Footer navigation links include a link to the contact page.
|
|
95
|
+
|
|
96
|
+
Note: The footer can be built before these pages exist by using placeholder destinations. The dependency is on the link targets being available at launch.
|
|
97
|
+
|
|
98
|
+
## Assumptions & Risks
|
|
99
|
+
|
|
100
|
+
**Assumptions:**
|
|
101
|
+
|
|
102
|
+
- The business has an established name and can provide a short tagline or description for footer use.
|
|
103
|
+
- Legal pages (privacy policy, terms of use, accessibility statement) will exist as link destinations by launch, even if as simple placeholder pages.
|
|
104
|
+
- Footer content (identity info, links) is stable and changes infrequently; developer-managed updates are acceptable.
|
|
105
|
+
- A single, shared footer is sufficient — no page-specific footer variations are needed.
|
|
106
|
+
|
|
107
|
+
**Key risks:**
|
|
108
|
+
|
|
109
|
+
- **Legal page readiness:** The footer links to legal pages that may not yet exist. Mitigation: links can point to placeholder pages during development; the footer layout is not blocked by legal content.
|
|
110
|
+
- **Navigation consistency with header:** If a separate header or navigation bar exists, the footer's navigation links must stay in sync. Mitigation: both should draw link destinations from a shared configuration or data source to avoid drift.
|
|
111
|
+
|
|
112
|
+
## Success Metrics
|
|
113
|
+
|
|
114
|
+
1. The footer is present and visually consistent on every page of the site.
|
|
115
|
+
2. All footer links (navigation and legal) navigate to their correct destinations without errors.
|
|
116
|
+
3. Visitors can identify the business name and find at least one navigation link within 3 seconds of viewing the footer.
|
|
117
|
+
4. The footer renders correctly across desktop, tablet, and mobile viewports with no layout issues.
|
|
118
|
+
|
|
119
|
+
## Implementation Context
|
|
120
|
+
|
|
121
|
+
> This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Light/dark mode toggle with system preference detection
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Theme Switcher
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A light/dark theme switcher that allows visitors to toggle between light and dark color schemes across all pages of the site. Many users prefer dark interfaces for comfort, reduced eye strain, or personal taste — and increasingly expect websites to respect their system-level preference. Without theme support, the site forces a single visual mode on all visitors regardless of context or preference.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** All site visitors.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A visitor browsing at night prefers a dark interface to reduce eye strain and toggles to dark mode using the switcher in the header.
|
|
19
|
+
2. A visitor whose operating system is set to dark mode arrives at the site and sees it automatically rendered in dark mode without needing to take any action.
|
|
20
|
+
3. A visitor who previously selected light mode returns to the site days later and finds their preference preserved — the site loads in light mode without requiring them to toggle again.
|
|
21
|
+
4. A visitor who normally uses OS-level dark mode wants the site specifically in light mode, so they override the default using the toggle — and the override sticks on future visits.
|
|
22
|
+
|
|
23
|
+
## Scope
|
|
24
|
+
|
|
25
|
+
**In scope:**
|
|
26
|
+
|
|
27
|
+
- Toggle between a light theme and a dark theme
|
|
28
|
+
- Detection of the visitor's operating system color scheme preference
|
|
29
|
+
- User override of the OS default via manual toggle
|
|
30
|
+
- Persistence of the user's theme preference across browser sessions using client-side storage
|
|
31
|
+
- A toggle control placed in the site header/navigation bar, visible on all pages
|
|
32
|
+
- Theming applied consistently across all existing pages (home, about, contact)
|
|
33
|
+
- Smooth visual transition when switching themes (no jarring flash)
|
|
34
|
+
|
|
35
|
+
**Out of scope:**
|
|
36
|
+
|
|
37
|
+
- Multiple color themes beyond light and dark
|
|
38
|
+
- Custom user-defined themes or color pickers
|
|
39
|
+
- Server-side or account-based theme preference storage
|
|
40
|
+
- Theming of third-party embedded content (maps, widgets, iframes)
|
|
41
|
+
- High-contrast or accessibility-specific themes (separate feature)
|
|
42
|
+
|
|
43
|
+
**Deferred ideas:**
|
|
44
|
+
|
|
45
|
+
- Additional predefined color themes (e.g., sepia, high-contrast)
|
|
46
|
+
- Scheduled auto-switching based on time of day
|
|
47
|
+
- Per-page theme overrides
|
|
48
|
+
- Animated theme transition effects beyond a simple crossfade
|
|
49
|
+
|
|
50
|
+
## Capabilities
|
|
51
|
+
|
|
52
|
+
- [ ] **P0**: Visitor can toggle between light and dark themes using a control in the site header
|
|
53
|
+
- A toggle or icon button is visible in the header/navigation bar on all pages
|
|
54
|
+
- Clicking the toggle switches the entire page between light and dark color schemes
|
|
55
|
+
- The current theme state is visually indicated by the toggle (e.g., sun icon for light, moon icon for dark)
|
|
56
|
+
- The toggle is reachable and operable via keyboard
|
|
57
|
+
|
|
58
|
+
- [ ] **P0**: Theme is applied consistently across all pages and components
|
|
59
|
+
- All text, backgrounds, borders, and interactive elements reflect the active theme
|
|
60
|
+
- No unstyled or mismatched elements remain when switching themes
|
|
61
|
+
- Theme applies to the home page, about page, and contact page without page-specific overrides
|
|
62
|
+
|
|
63
|
+
- [ ] **P0**: Site detects and respects the visitor's operating system color scheme preference on first visit
|
|
64
|
+
- If the OS is set to dark mode, the site renders in dark mode on the first visit (before any manual toggle)
|
|
65
|
+
- If the OS is set to light mode or has no preference, the site renders in light mode
|
|
66
|
+
- Detection happens before the initial page paint to avoid a flash of the wrong theme
|
|
67
|
+
|
|
68
|
+
- [ ] **P0**: Visitor's manual theme preference is persisted in client-side storage
|
|
69
|
+
- After toggling, the selected theme is saved and survives browser tab closure and reopening
|
|
70
|
+
- On subsequent visits, the persisted preference takes priority over the OS preference
|
|
71
|
+
- If no persisted preference exists, the OS preference is used as the default
|
|
72
|
+
|
|
73
|
+
- [ ] **P1**: Theme switch occurs without a flash of unstyled or incorrect-theme content
|
|
74
|
+
- On page load, the correct theme is applied before the page becomes visible to the visitor
|
|
75
|
+
- Toggling themes mid-session produces a smooth transition without a jarring flicker
|
|
76
|
+
- Navigation between pages does not cause a momentary flash of the wrong theme
|
|
77
|
+
|
|
78
|
+
- [ ] **P1**: Toggle control is responsive and works across all device sizes
|
|
79
|
+
- Toggle is visible and tappable on mobile viewports without being obscured by other header elements
|
|
80
|
+
- Toggle does not break header layout on any supported viewport size (desktop, tablet, mobile)
|
|
81
|
+
|
|
82
|
+
- [ ] **P2**: Theme preference is accessible
|
|
83
|
+
- Toggle has an accessible label describing its function (e.g., "Switch to dark mode" / "Switch to light mode")
|
|
84
|
+
- Theme colors maintain sufficient contrast ratios for text readability in both light and dark modes
|
|
85
|
+
- Toggle state change is announced to screen readers
|
|
86
|
+
|
|
87
|
+
## Dependencies
|
|
88
|
+
|
|
89
|
+
- **Home Page** ([home-page.md](home-page.md)): Theme must apply to all home page sections (hero, value proposition, services).
|
|
90
|
+
- **About Page** ([about-page.md](about-page.md)): Theme must apply to all about page content.
|
|
91
|
+
- **Contact Page** ([contact-page.md](contact-page.md)): Theme must apply to all contact page content.
|
|
92
|
+
|
|
93
|
+
The theme switcher depends on a shared site header/navigation existing across pages. If no shared header exists yet, one must be established for the toggle to have a consistent location.
|
|
94
|
+
|
|
95
|
+
> **Compatibility note**: This feature requires client-side JavaScript for toggle interaction, OS preference detection (`prefers-color-scheme`), localStorage persistence, and flash-of-wrong-theme prevention. Stacks that default to zero client-side JS (e.g., static site generators with island architecture) will need an interactive component or inline script for the toggle, plus a blocking inline script in `<head>` to apply the saved theme before first paint. Consult `gspec/stack.md` Section 15 (Technology-Specific Practices) for the framework's approach to client-side interactivity.
|
|
96
|
+
|
|
97
|
+
## Assumptions & Risks
|
|
98
|
+
|
|
99
|
+
**Assumptions:**
|
|
100
|
+
|
|
101
|
+
- The site uses a design approach where colors are defined as variables or tokens, making it feasible to swap between two palettes.
|
|
102
|
+
- A shared header or navigation component exists (or will be created) across all pages.
|
|
103
|
+
- Client-side storage is available in the visitor's browser (virtually universal in modern browsers).
|
|
104
|
+
|
|
105
|
+
**Open questions:**
|
|
106
|
+
|
|
107
|
+
- Exact contrast ratios and color values for the dark theme will need validation during implementation against accessibility standards.
|
|
108
|
+
|
|
109
|
+
**Key risks:**
|
|
110
|
+
|
|
111
|
+
- **Flash of incorrect theme on load:** If the theme preference is read too late in the page load process, visitors may see a brief flash of the wrong theme. Mitigation: apply the theme preference as early as possible in the page rendering pipeline, before the main content is painted.
|
|
112
|
+
- **Inconsistent theming across pages:** If pages are styled independently, some elements may not respond to the theme toggle. Mitigation: define theme colors as shared design tokens or variables referenced by all page styles.
|
|
113
|
+
- **Dark theme readability:** Poorly chosen dark theme colors can reduce readability or make the site feel amateurish. Mitigation: follow established dark theme design conventions (muted backgrounds, appropriate contrast, desaturated accent colors).
|
|
114
|
+
|
|
115
|
+
## Success Metrics
|
|
116
|
+
|
|
117
|
+
1. Visitors can switch between light and dark themes with a single click/tap and see the change applied immediately across the entire page.
|
|
118
|
+
2. The site loads in the visitor's preferred theme (OS-detected or previously saved) without a visible flash of the wrong theme.
|
|
119
|
+
3. A visitor's manually selected theme preference persists across at least 3 return visits over multiple days.
|
|
120
|
+
4. Both light and dark themes meet WCAG AA contrast requirements for all body text.
|
|
121
|
+
|
|
122
|
+
## Implementation Context
|
|
123
|
+
|
|
124
|
+
> This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
|