+ Battl Builders +
+Updates
++ What we've shipped and what's coming next. +
+diff --git a/.superpowers/brainstorm/20960-1774881654/.server-stopped b/.superpowers/brainstorm/20960-1774881654/.server-stopped new file mode 100644 index 0000000..bd67f46 --- /dev/null +++ b/.superpowers/brainstorm/20960-1774881654/.server-stopped @@ -0,0 +1 @@ +{"reason":"idle timeout","timestamp":1774884294221} diff --git a/.superpowers/brainstorm/20960-1774881654/.server.log b/.superpowers/brainstorm/20960-1774881654/.server.log new file mode 100644 index 0000000..42a0580 --- /dev/null +++ b/.superpowers/brainstorm/20960-1774881654/.server.log @@ -0,0 +1,10 @@ +{"type":"server-started","port":63304,"host":"127.0.0.1","url_host":"localhost","url":"http://localhost:63304","screen_dir":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/waiting.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/waiting-2.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/changelog-layout.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/roadmap-tab.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/roadmap-votes.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/feedback-form.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/feedback-form-v2.html"} +{"type":"screen-added","file":"/Users/sean/Dev/battl/gunbuilder-prototype/.superpowers/brainstorm/20960-1774881654/waiting-3.html"} +{"type":"server-stopped","reason":"idle timeout"} diff --git a/.superpowers/brainstorm/20960-1774881654/.server.pid b/.superpowers/brainstorm/20960-1774881654/.server.pid new file mode 100644 index 0000000..f0d741b --- /dev/null +++ b/.superpowers/brainstorm/20960-1774881654/.server.pid @@ -0,0 +1 @@ +20969 diff --git a/.superpowers/brainstorm/20960-1774881654/changelog-layout.html b/.superpowers/brainstorm/20960-1774881654/changelog-layout.html new file mode 100644 index 0000000..6c407ef --- /dev/null +++ b/.superpowers/brainstorm/20960-1774881654/changelog-layout.html @@ -0,0 +1,113 @@ + + +
Battl Builders
+What we've shipped and what's coming next.
+Battl Builders
+What we've shipped and what's coming next.
+Bug, feature idea, or general thought — we read everything. Rough language welcome.
+Battl Builders
+What we've shipped and what's coming next.
+Give Feedback tab (full page)
+Bug, feature idea, or general thought — we read everything. Rough language welcome.
+We'll only use this to follow up on your feedback.
+Modal
+Battl Builders
+What we've shipped and what's coming next.
+Battl Builders
+What we've shipped and what's coming next.
+Continuing in terminal...
+Continuing in terminal...
+Continuing in terminal...
++ Battl Builders +
++ What we've shipped and what's coming next. +
++ No releases yet — check back soon. +
+ ) : ( ++ {entry.version} +
++ {formatDate(entry.publishedAt)} +
+Roadmap coming soon.
+ )} + + {/* ── Give Feedback — stub, filled in Task 6 ── */} + {activeTab === 'give-feedback' && ( +Feedback form coming soon.
+ )} +{title}
+{description}
++ No roadmap items yet — check back soon. +
+ ) : ( + <> + {roadmapItems.filter((i) => i.status === 'in-progress').length > 0 && ( ++ In Progress +
++ Planned +
++ Don't see what you need?{' '} + +
+ > + )} ++ + Sign in + {' '} + to upvote roadmap items. +
+)} +``` + +- [ ] **Step 2: Verify build** + +```bash +cd /Users/sean/Dev/battl/gunbuilder-prototype && npx tsc --noEmit +``` + +- [ ] **Step 3: Smoke test** + +Open `http://localhost:3000/changelog#whats-next`: +- Logged out: click upvote → "Sign in to upvote roadmap items." prompt appears below the list, fades after 4 seconds +- Logged in: click upvote → optimistic count update, request fires to `/api/roadmap/{id}/vote` (rolls back cleanly until Spring Boot is ready) + +- [ ] **Step 4: Commit** + +```bash +git add components/ChangelogTabs.tsx +git commit -m "feat: wire up roadmap upvote with optimistic UI and inline auth prompt" +``` + +--- + +## Task 6: `FeedbackForm` + `FeedbackModal` + Give Feedback tab + +**Files:** +- Create: `components/FeedbackForm.tsx` +- Create: `components/FeedbackModal.tsx` +- Modify: `components/ChangelogTabs.tsx` (replace Give Feedback stub) + +- [ ] **Step 1: Create `components/FeedbackForm.tsx`** + +```tsx +'use client' + +import { useState } from 'react' + +type Status = 'idle' | 'loading' | 'done' | 'error' + +const CATEGORIES = [ + { value: 'BUG', label: 'Bug report' }, + { value: 'FEATURE_REQUEST', label: 'Feature request' }, + { value: 'GENERAL', label: 'General feedback' }, +] + +export function FeedbackForm({ onSuccess }: { onSuccess?: () => void }) { + const [category, setCategory] = useState('BUG') + const [message, setMessage] = useState('') + const [email, setEmail] = useState('') + const [status, setStatus] = useStateThanks — we got it.
++ We read everything. If you left an email we'll follow up. +
++ Bug, feature idea, or general thought — we read everything. +
++ Battl Builders +
++ Bug, feature idea, or general thought — we read everything. +
++ User-submitted feedback. Mark items reviewed to track triage. +
+Loading…
} + {error &&{error}
} + + {!loading && !error && filtered.length === 0 && ( +No submissions match your filters.
+ )} + + {!loading && !error && filtered.length > 0 && ( +| Date | +Category | +Message | +Reviewed | +|
|---|---|---|---|---|
| + {formatDate(item.createdAt)} + | ++ + {CATEGORY_LABELS[item.category]} + + | ++ {item.message.length > 120 + ? `${item.message.slice(0, 120)}…` + : item.message} + | ++ {item.email ?? '—'} + | ++ + | +