gspec 1.7.0 → 1.11.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/bin/gspec.js +275 -8
- package/commands/gspec.analyze.md +1 -1
- package/commands/gspec.implement.md +10 -8
- package/commands/gspec.practices.md +3 -1
- package/commands/gspec.stack.md +11 -6
- package/commands/gspec.style.md +18 -23
- package/dist/antigravity/gspec-analyze/SKILL.md +1 -1
- package/dist/antigravity/gspec-architect/SKILL.md +1 -1
- package/dist/antigravity/gspec-feature/SKILL.md +1 -1
- package/dist/antigravity/gspec-implement/SKILL.md +11 -9
- package/dist/antigravity/gspec-migrate/SKILL.md +5 -5
- 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 +3 -3
- 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 +1 -1
- package/dist/claude/gspec-architect/SKILL.md +1 -1
- package/dist/claude/gspec-feature/SKILL.md +1 -1
- package/dist/claude/gspec-implement/SKILL.md +11 -9
- package/dist/claude/gspec-migrate/SKILL.md +5 -5
- 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 +3 -3
- 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 +1 -1
- package/dist/codex/gspec-architect/SKILL.md +1 -1
- package/dist/codex/gspec-feature/SKILL.md +1 -1
- package/dist/codex/gspec-implement/SKILL.md +11 -9
- package/dist/codex/gspec-migrate/SKILL.md +5 -5
- 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 +3 -3
- package/dist/codex/gspec-stack/SKILL.md +12 -7
- package/dist/codex/gspec-style/SKILL.md +19 -24
- package/dist/cursor/gspec-analyze.mdc +1 -1
- package/dist/cursor/gspec-architect.mdc +1 -1
- package/dist/cursor/gspec-feature.mdc +1 -1
- package/dist/cursor/gspec-implement.mdc +11 -9
- package/dist/cursor/gspec-migrate.mdc +5 -5
- package/dist/cursor/gspec-practices.mdc +4 -2
- package/dist/cursor/gspec-profile.mdc +1 -1
- package/dist/cursor/gspec-research.mdc +3 -3
- 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 +202 -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 +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
gspec-version: 1.8.0
|
|
3
|
+
description: Validated contact form with email delivery and success feedback
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Contact Form
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A reusable contact form component that lets visitors submit a structured inquiry (name, email, optional phone, and message) which triggers a server-side email to the business. Without a contact form, visitors must manually compose an email or make a phone call — adding friction that can cause drop-off at the moment of highest intent.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** Prospective clients and general visitors who want to reach the business directly from the website.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A prospective client finishes reviewing services and wants to describe their needs in a message without leaving the site or opening their email client.
|
|
19
|
+
2. A visitor on a mobile device quickly fills in their name, email, and a short message using touch-friendly inputs and submits it in under a minute.
|
|
20
|
+
3. A visitor submits the form and immediately sees confirmation that their message was received, giving them confidence to move on without follow-up.
|
|
21
|
+
4. A visitor makes a validation error (e.g., malformed email) and corrects it in place without losing any of the text they already typed.
|
|
22
|
+
|
|
23
|
+
## Scope
|
|
24
|
+
|
|
25
|
+
**In scope:**
|
|
26
|
+
|
|
27
|
+
- Self-contained, reusable form component that can be placed on any page (contact page, footer CTA, standalone route)
|
|
28
|
+
- Required fields: name, email address, message body
|
|
29
|
+
- Optional field: phone number
|
|
30
|
+
- Client-side validation with inline error feedback
|
|
31
|
+
- Submission to a server-side endpoint that sends the email
|
|
32
|
+
- Clear success and error states after submission
|
|
33
|
+
- Double-submission prevention
|
|
34
|
+
- Hidden honeypot field for basic spam prevention
|
|
35
|
+
- Accessible markup (labels, focus management, error announcements)
|
|
36
|
+
- Responsive layout for mobile through desktop
|
|
37
|
+
|
|
38
|
+
**Out of scope:**
|
|
39
|
+
|
|
40
|
+
- The server-side email-sending endpoint itself (this feature defines the client-side form and its contract with the server; the endpoint is an infrastructure concern)
|
|
41
|
+
- Email templates, recipient configuration, or transport provider selection
|
|
42
|
+
- File attachments or media uploads
|
|
43
|
+
- CAPTCHA or third-party bot detection services
|
|
44
|
+
- Auto-reply or confirmation emails sent back to the submitter
|
|
45
|
+
- Analytics or event tracking for form interactions
|
|
46
|
+
- Multi-step or wizard-style form flows
|
|
47
|
+
|
|
48
|
+
**Deferred ideas:**
|
|
49
|
+
|
|
50
|
+
- Project type or inquiry category selector
|
|
51
|
+
- Preferred contact time field
|
|
52
|
+
- CAPTCHA integration if honeypot proves insufficient
|
|
53
|
+
- Auto-save or draft persistence for partially completed forms
|
|
54
|
+
- Confirmation email sent to the submitter after successful submission
|
|
55
|
+
|
|
56
|
+
## Capabilities
|
|
57
|
+
|
|
58
|
+
- [ ] **P0**: Visitor can fill in required fields (name, email, message) and submit the form
|
|
59
|
+
- Form renders name, email, and message fields, each with a visible label
|
|
60
|
+
- All three fields are required; form cannot be submitted with any of them empty
|
|
61
|
+
- On valid submission, form data is sent to a server-side endpoint as a structured payload
|
|
62
|
+
- After successful server response, a clear success message is displayed
|
|
63
|
+
|
|
64
|
+
- [ ] **P0**: Form validates input and shows inline errors before submission
|
|
65
|
+
- Empty required fields show a "required" error when the visitor attempts to submit
|
|
66
|
+
- Email field validates format and shows a specific error for malformed addresses
|
|
67
|
+
- Errors appear inline next to or below the relevant field
|
|
68
|
+
- Existing field values are preserved when validation errors are displayed
|
|
69
|
+
|
|
70
|
+
- [ ] **P0**: Form displays clear feedback for success and error outcomes
|
|
71
|
+
- On success, a thank-you or confirmation message replaces or overlays the form so the visitor knows the message was received
|
|
72
|
+
- On server error, an actionable error message is shown (e.g., "Something went wrong — please try again or contact us by phone")
|
|
73
|
+
- Feedback persists on screen until the visitor takes further action; it does not auto-dismiss
|
|
74
|
+
|
|
75
|
+
- [ ] **P0**: Submit control is guarded to prevent double submissions
|
|
76
|
+
- The submit button is disabled (or the form is otherwise guarded) while a submission request is in flight
|
|
77
|
+
- A loading indicator is visible during the request so the visitor knows the form is processing
|
|
78
|
+
|
|
79
|
+
- [ ] **P0**: Form is accessible
|
|
80
|
+
- Every input has a programmatically associated label
|
|
81
|
+
- Tab order follows a logical sequence through fields and the submit button
|
|
82
|
+
- Validation errors are announced to assistive technology (e.g., via live regions or focus management)
|
|
83
|
+
- Error messages are visible and not conveyed by color alone
|
|
84
|
+
|
|
85
|
+
- [ ] **P1**: Visitor can optionally provide a phone number
|
|
86
|
+
- An optional phone number field is displayed with a clear indication that it is not required
|
|
87
|
+
- The form submits successfully with or without a phone number value
|
|
88
|
+
- If provided, the phone number is included in the payload sent to the server
|
|
89
|
+
|
|
90
|
+
- [ ] **P1**: Form layout is responsive across device sizes
|
|
91
|
+
- On desktop, fields may be arranged in a multi-column layout where appropriate
|
|
92
|
+
- On mobile, all fields stack vertically with touch-friendly input sizes (minimum 44px tap targets)
|
|
93
|
+
- No horizontal scrolling at any viewport width
|
|
94
|
+
- Labels remain legible and inputs remain usable at all sizes
|
|
95
|
+
|
|
96
|
+
- [ ] **P1**: Hidden honeypot field deters automated spam submissions
|
|
97
|
+
- A visually hidden field is included in the form markup
|
|
98
|
+
- The field is not visible or focusable to human users
|
|
99
|
+
- If the honeypot field contains a value on submission, the form either silently discards the submission or the server rejects it
|
|
100
|
+
- Legitimate users are never affected by the honeypot mechanism
|
|
101
|
+
|
|
102
|
+
- [ ] **P1**: Key conversion pages include a call-to-action linking to the contact form
|
|
103
|
+
- Pages where visitors evaluate the business (e.g., Home, Services) include a CTA section near the bottom that directs visitors to the contact page
|
|
104
|
+
- The CTA includes a clear heading and a button or link to the contact page
|
|
105
|
+
- The CTA is visually distinct from surrounding content sections
|
|
106
|
+
- The CTA does not duplicate the full form — it links to the dedicated contact page where the form lives
|
|
107
|
+
|
|
108
|
+
- [ ] **P2**: Form is a self-contained, reusable component
|
|
109
|
+
- The form can be embedded on different pages without code duplication
|
|
110
|
+
- Placement on a page does not require page-specific modifications to the form's internal logic
|
|
111
|
+
- The server endpoint URL is configurable (e.g., via props, config, or environment) rather than hardcoded
|
|
112
|
+
|
|
113
|
+
## Dependencies
|
|
114
|
+
|
|
115
|
+
- **Contact Page** ([contact-page.md](contact-page.md)): The contact page is the primary intended host for this form component. The form should integrate visually alongside the static contact details already specified in that feature.
|
|
116
|
+
- **Form submission endpoint**: The form requires a backend that accepts the form payload and delivers the inquiry via email. This may be a server-side endpoint within the application or a third-party form service, depending on the stack's capabilities. Consult `gspec/stack.md` to determine the available approach.
|
|
117
|
+
|
|
118
|
+
> **Compatibility note**: This feature requires a form submission endpoint. Static-only stacks with no server runtime must include a third-party form submission service (check `gspec/stack.md` Section 11 — Third-Party Integrations). Full-stack stacks with backend capabilities should implement a custom server endpoint (check `gspec/stack.md` Section 5 — Backend Stack). The form's payload contract (name, email, phone, message, honeypot) remains the same regardless of approach.
|
|
119
|
+
|
|
120
|
+
## Assumptions & Risks
|
|
121
|
+
|
|
122
|
+
**Assumptions:**
|
|
123
|
+
|
|
124
|
+
- A server-side endpoint for receiving form submissions and sending email will be available at implementation time or will be built as a companion task.
|
|
125
|
+
- A single, fixed set of fields (name, email, optional phone, message) is sufficient for all expected inquiry types.
|
|
126
|
+
- The honeypot technique provides adequate spam prevention for the expected traffic level.
|
|
127
|
+
|
|
128
|
+
**Open questions:**
|
|
129
|
+
|
|
130
|
+
- Exact error response format from the server endpoint (status codes, error body structure) will be determined during implementation when the endpoint is built.
|
|
131
|
+
|
|
132
|
+
**Key risks:**
|
|
133
|
+
|
|
134
|
+
- **Server endpoint availability:** The form is inert without a functioning server endpoint. Mitigation: the form can be built and tested with a mock endpoint; the real endpoint can be connected later.
|
|
135
|
+
- **Spam volume:** A honeypot field alone may not stop sophisticated bots. Mitigation: monitor submission volume post-launch; CAPTCHA integration is a deferred enhancement if needed.
|
|
136
|
+
- **Email deliverability:** Submissions may be lost if the server-side email send fails silently. Mitigation: the server endpoint should return clear success/failure responses so the form can display accurate feedback to the visitor.
|
|
137
|
+
|
|
138
|
+
## Success Metrics
|
|
139
|
+
|
|
140
|
+
1. Visitors can successfully submit the form and receive visible confirmation on the first attempt when all fields are valid.
|
|
141
|
+
2. Validation errors prevent submission of incomplete or malformed data, and visitors can correct errors without re-entering other fields.
|
|
142
|
+
3. The form is usable and visually coherent on mobile devices (375px viewport) through desktop (1440px viewport).
|
|
143
|
+
4. Spam submissions (honeypot-caught) account for the majority of bot traffic, with minimal false positives affecting legitimate users.
|
|
144
|
+
|
|
145
|
+
## Implementation Context
|
|
146
|
+
|
|
147
|
+
> 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: Contact page layout with form, location map, and business info
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Contact Page
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A static Contact page that displays the business's contact information so visitors can easily find how to get in touch. Without a clear, dedicated contact page, prospective clients may leave the site rather than search for scattered contact details — making this a critical conversion-support page.
|
|
11
|
+
|
|
12
|
+
## Users & Use Cases
|
|
13
|
+
|
|
14
|
+
**Primary users:** Prospective clients ready to reach out to the business.
|
|
15
|
+
|
|
16
|
+
**Key use cases:**
|
|
17
|
+
|
|
18
|
+
1. A prospective client has reviewed the services and about page and is now ready to make contact — they navigate to the Contact page to find an email address or phone number.
|
|
19
|
+
2. A visitor needs the business's physical address to visit in person or send correspondence.
|
|
20
|
+
3. A returning client needs to quickly look up the business's phone number or email without digging through old communications.
|
|
21
|
+
|
|
22
|
+
## Scope
|
|
23
|
+
|
|
24
|
+
**In scope:**
|
|
25
|
+
|
|
26
|
+
- Display of core contact details: email address, phone number, and physical address
|
|
27
|
+
- Clear, scannable layout that makes each contact method immediately visible
|
|
28
|
+
- Responsive layout that works across desktop, tablet, and mobile devices
|
|
29
|
+
- Static content coded directly into the page
|
|
30
|
+
|
|
31
|
+
**Out of scope:**
|
|
32
|
+
|
|
33
|
+
- Contact form or message submission functionality (separate feature)
|
|
34
|
+
- Embedded map or location visualization
|
|
35
|
+
- Live chat, chatbot, or real-time messaging
|
|
36
|
+
- Social media links or feeds
|
|
37
|
+
- Business hours display
|
|
38
|
+
- CMS-managed or dynamically loaded content
|
|
39
|
+
|
|
40
|
+
**Deferred ideas:**
|
|
41
|
+
|
|
42
|
+
- Embedded interactive map showing the business location
|
|
43
|
+
- Business hours section
|
|
44
|
+
- Social media profile links
|
|
45
|
+
- Multiple office or branch locations
|
|
46
|
+
|
|
47
|
+
## Capabilities
|
|
48
|
+
|
|
49
|
+
- [ ] **P0**: Page displays the business email address
|
|
50
|
+
- Email address is visible without scrolling on desktop viewports
|
|
51
|
+
- Email is rendered as a clickable `mailto:` link that opens the visitor's default email client
|
|
52
|
+
- Email address is displayed as readable text (not hidden behind an icon or "Email Us" label alone)
|
|
53
|
+
|
|
54
|
+
- [ ] **P0**: Page displays the business phone number
|
|
55
|
+
- Phone number is visible and formatted for readability
|
|
56
|
+
- Phone number is rendered as a clickable `tel:` link that initiates a call on mobile devices
|
|
57
|
+
- Phone number is displayed as readable text
|
|
58
|
+
|
|
59
|
+
- [ ] **P0**: Page displays the business physical address
|
|
60
|
+
- Full mailing address is displayed in a standard, readable format
|
|
61
|
+
- Address is presented as plain text (not solely as an image)
|
|
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
|
+
- Contact details remain legible and tappable at all sizes
|
|
67
|
+
|
|
68
|
+
- [ ] **P1**: Contact details are scannable and visually organized
|
|
69
|
+
- Each contact method (email, phone, address) is visually distinct and separated
|
|
70
|
+
- A visitor can identify all available contact methods within 5 seconds of viewing the page
|
|
71
|
+
- Clear labels or headings distinguish each contact method
|
|
72
|
+
|
|
73
|
+
- [ ] **P2**: Semantic page structure supports accessibility
|
|
74
|
+
- Page uses proper heading hierarchy (single h1, logical h2/h3 nesting)
|
|
75
|
+
- Interactive elements (links) are keyboard-navigable and have accessible labels
|
|
76
|
+
- Sufficient color contrast for all text elements
|
|
77
|
+
|
|
78
|
+
## Dependencies
|
|
79
|
+
|
|
80
|
+
- **Home Page** ([home-page.md](home-page.md)): The Contact page is a secondary page that visitors typically navigate to from the home page. Navigation between pages should be consistent.
|
|
81
|
+
|
|
82
|
+
## Assumptions & Risks
|
|
83
|
+
|
|
84
|
+
**Assumptions:**
|
|
85
|
+
|
|
86
|
+
- The business has a single set of contact details (one email, one phone number, one address) to display.
|
|
87
|
+
- Contact information is stable and changes infrequently; developer-managed updates are acceptable.
|
|
88
|
+
- Static content is acceptable for the initial version.
|
|
89
|
+
|
|
90
|
+
**Key risks:**
|
|
91
|
+
|
|
92
|
+
- **Content readiness:** The page requires finalized contact details before launch. Mitigation: use realistic placeholder content during development so layout and structure can be validated independently.
|
|
93
|
+
- **Spam exposure:** Displaying email addresses and phone numbers as plain text exposes them to automated scraping. Mitigation: accept this tradeoff for usability in the initial version; obfuscation techniques can be added later if spam becomes a problem.
|
|
94
|
+
|
|
95
|
+
## Success Metrics
|
|
96
|
+
|
|
97
|
+
1. Visitors can identify at least one contact method (email, phone, or address) within 5 seconds of viewing the page.
|
|
98
|
+
2. The page renders correctly and is fully usable across desktop, tablet, and mobile viewports.
|
|
99
|
+
3. All clickable contact methods (`mailto:` and `tel:` links) function correctly on their respective devices.
|
|
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,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.
|