Commit Graph
16 Commits
Author SHA1 Message Date
s0lrayandPaperclip 6f21a88ffe Fix mobile detail panel height to account for browser chrome (THE-188)
Use 100dvh (dynamic viewport height) instead of 100vh so the panel
footer with "Report an Issue" buttons is accessible on mobile browsers
where the address bar and navigation bar reduce visible viewport height.
Falls back to 100vh for older browsers.

Also enable pointer-events on the panel overlay on mobile so tapping
outside the panel closes it.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-27 08:30:59 -04:00
s0lrayandPaperclip b50c831d1e Add half-star and 0-star community ratings (THE-122)
Replace integer-only 1-5 stars with 0-5 scale in 0.5 increments.
Each star has left/right click zones for half/full values, plus a
dedicated 0-star button. Backend validation updated to accept the
new range. Half-filled stars rendered via CSS linear-gradient on
background-clip: text.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 23:01:21 -04:00
s0lrayandPaperclip 4b1510a8af Replace thumbs up/down voting with 5-star community rating (THE-122)
- HTML: Replace #panel-rating empty span with #star-rating (5 .star-btn
  buttons) + #rating-avg display row
- CSS: Replace .vote-btn/.vote-score styles with .star-btn/.filled/
  .user-rated and #rating-avg styles
- JS: Replace _renderVoteUI/castVote/updateScoreDisplay with
  _renderVoteUI/_castRating/_applyStarFill/_updateRatingDisplay;
  hover highlights 1-N stars, click submits/toggles rating 1-5,
  sessionStorage key changed from vote: to rating:
- Worker: handleVote now accepts { rating: 1-5|null } instead of
  { direction: "up"|"down"|null }; KV keys changed from votes:up/down
  to ratings:sum/count; handleStats returns ratings:{average,count}
  instead of votes:{up,down,score}

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 22:55:10 -04:00
s0lrayandGitHub 641cb8c092 Merge pull request #601 from lockfale/feature/THE-117-panel-focus
Allow clicking different tool while detail panel is open (THE-117)
2026-03-26 17:49:38 -04:00
s0lrayandPaperclip de13225292 Allow clicking different tool while detail panel is open (THE-117)
The panel overlay (z-index 199) was intercepting all clicks on the tree
when the panel was open, forcing users to close the panel before selecting
a different tool. Setting pointer-events: none on the overlay lets clicks
pass through to tree nodes, where openPanel() already handles replacing
the panel content. The SVG background click handler still closes the panel
when clicking empty canvas.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 17:36:32 -04:00
s0lrayandPaperclip 05997513b5 Add region badge to tool panel (THE-116)
Adds a region badge that always shows in the tool details panel.
Defaults to "Global" when the region field is absent or set to "global".
Accepts a two-letter country code string (uppercased) or an array of
country codes (joined as "US, UK"). Badge is styled green (#2e7d32).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 15:04:12 -04:00
s0lrayandPaperclip 591ded3875 Add nsfw badge to tool panel (THE-116)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 15:01:41 -04:00
s0lrayandPaperclip 2db8276c09 Add api, invitationOnly, deprecated badges to tool panel (THE-116)
Show boolean feature badges in the tool details panel when true:
- API (blue): tool has a public API
- Invite Only (amber): tool requires an invitation
- Deprecated (dark red): tool is no longer actively maintained

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 14:57:19 -04:00
s0lrayandPaperclip 51a8adbbda Move Report an Issue into sticky panel footer (THE-114)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 11:08:51 -04:00
s0lrayandGitHub fa3c5d1e73 Merge branch 'master' into feature/THE-114-panel-ui-adjustments 2026-03-26 11:01:52 -04:00
s0lrayandPaperclip 6d0b6e0a34 Move breadcrumb to header and shrink Open Tool button (THE-114)
- Breadcrumb now sits below the tool name inside panel-header, wrapped
  in #panel-header-text flex column; removes the need for the first HR
  divider between breadcrumb and the CTA button
- #panel-open-tool changed from block/width:100% to inline-block with
  auto width; #panel-cta-section centered with text-align so the button
  is pill-sized and no longer overflows the panel

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 10:56:14 -04:00
s0lrayandPaperclip ef885f481e Restructure tool details panel layout (THE-114)
Move Open Tool button to top (below breadcrumb), add HR dividers,
split Input→Output into its own section separate from Usage Context,
and rename Rating label to Community Rating.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 10:49:47 -04:00
s0lrayandPaperclip 7412c6ab19 Add Phase 3 community voting and issue reporting (THE-109, THE-110)
Backend (src/worker.js):
- Add POST /api/vote: upvote/downvote with toggle behavior, one vote per
  session per tool, returns net score
- Add POST /api/report: flag tools as dead_link/paywalled/incorrect_info;
  auto-creates GitHub issue via GitHub API when REPORT_THRESHOLD (3) unique
  reports of the same type are received (requires GITHUB_TOKEN secret)
- Update GET /api/tool-stats to include votes { up, down, score }
- Extract validateCommon() and isRateLimited() helpers to reduce duplication

Frontend (public/js/arf.js):
- Replace static rating placeholder with _renderVoteUI(): renders thumbs
  up/down buttons, reads cached vote from sessionStorage, fetches live score
  async from /api/tool-stats
- Add _castVote(): fires POST /api/vote, updates button active state and
  score display, persists user vote in sessionStorage
- Add _resetReportButtons() and _submitReport(): wire report buttons per
  panel open, POST /api/report, show inline feedback message

HTML (public/index.html):
- Replace static rating span with vote row (thumbs up, score, thumbs down)
- Replace static GitHub report link with three report buttons + feedback div

CSS (public/css/panel.css):
- Add .vote-btn, .vote-score (.positive/.negative/.zero) styles
- Add .report-btn, .panel-report-feedback styles
- Remove old #panel-report-link styles (replaced by button row)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-26 00:56:24 -04:00
s0lrayandPaperclip 8c5ab92c88 Fix mobile panel to full-screen overlay per board (THE-104)
Board confirmed: mobile panel should be full-screen overlay with X button,
not a bottom sheet. Simplified @media breakpoint to 100vw/100vh with no
border-radius and inherited slide-right animation from desktop.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-25 23:07:07 -04:00
s0lrayandPaperclip 9600931365 Add enrichment badge rendering and panel data fields (THE-107)
- Status (live/down/degraded/unknown) and pricing (free/freemium/paid/unknown)
  pill badges always shown in panel badges row with semantic colors
- OPSEC section now renders colored badge (passive/active/unknown) + opsecNote text
- Description section always visible; shows italic placeholder when no data
- Usage context renders bestFor and input→output mapping; hidden when all empty
- CTA button label now shows "Open [Tool Name] ↗" with actual tool name
- Added badge pill CSS (.badge-live, .badge-down, etc.) to panel.css
- Seeded Shodan (Discovery subcategory) with all new enrichment fields as demo

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-25 23:05:55 -04:00
s0lrayandPaperclip 0e7fdcfdbf Add tool details panel UI and D3 wiring (THE-104, THE-105)
THE-104: Build panel UI component
- New public/css/panel.css using existing design tokens
- Fixed-position slide-in panel (340px desktop, 100vw bottom-sheet on mobile)
- 250ms GPU-accelerated translateX() slide animation with will-change
- All section placeholders: header, breadcrumb, badges, description, usage,
  OPSEC, rating, report link, CTA button
- Dark mode via body.light-mode CSS variable overrides
- Graceful empty states (sections hidden via .empty class)

THE-105: Wire panel to D3 tree interactions
- Leaf-node clicks (nodes with url, no children) open panel instead of navigating
- parseName() for clean title + badge rendering
- Breadcrumb built by walking parent chain to root
- Selected-node ring via _panelSelected flag + stroke style in nodeUpdate
- Close triggers: ✕ button, Escape key, overlay click, canvas click, same-node re-click
- Clicking another leaf swaps panel content in-place
- Session hash via crypto.randomUUID() stored in sessionStorage

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-25 23:00:21 -04:00