Add SmartTools Registry with Web UI (Phase 1-7) #18

Merged
rob merged 13 commits from feature/registry into main 2026-01-01 01:21:40 +00:00
Owner

Summary

This PR adds the complete SmartTools Registry backend and web UI, implementing Phases 1-7 from the design docs.

What's Included

Backend (Phases 1-2)

  • REST API with all endpoints (/api/v1/tools, search, download, etc.)
  • SQLite storage with FTS5 full-text search
  • Publisher registration and authentication
  • API token management
  • Rate limiting
  • Gitea webhook sync support

Web UI (Phase 7)

  • Landing page with hero and featured tools
  • Tool browsing with search, filters, and pagination
  • Tool detail pages with README rendering
  • User authentication (register/login)
  • Publisher dashboard (tools, tokens, settings)
  • Documentation and tutorial pages
  • Privacy policy, terms, about, community, donate pages
  • Mobile-responsive design with Tailwind CSS
  • Cookie consent management
  • SEO (meta tags, sitemap.xml, robots.txt)
  • Error pages (404, 500)

Deployment

What's NOT Included (Future Phases)

  • CLI commands (smarttools registry search/install/publish) - Phase 3-4
  • Project dependencies (smarttools install from manifest) - Phase 5
  • AI-powered features (auto-categorization, duplicate detection) - Phase 6

Closed Issues

  • #2 Design smarttools.yaml manifest format
  • #11 Design and implement Registry REST API
  • #12 Implement tool storage backend
  • #16 Create web UI for registry browsing

Test Plan

  • API endpoints return correct responses
  • Web pages render without errors
  • Authentication flow works
  • Mobile menu and search modal functional
  • Run full test suite

🤖 Generated with Claude Code

## Summary This PR adds the complete SmartTools Registry backend and web UI, implementing Phases 1-7 from the design docs. ### What's Included **Backend (Phases 1-2)** - REST API with all endpoints (`/api/v1/tools`, search, download, etc.) - SQLite storage with FTS5 full-text search - Publisher registration and authentication - API token management - Rate limiting - Gitea webhook sync support **Web UI (Phase 7)** - Landing page with hero and featured tools - Tool browsing with search, filters, and pagination - Tool detail pages with README rendering - User authentication (register/login) - Publisher dashboard (tools, tokens, settings) - Documentation and tutorial pages - Privacy policy, terms, about, community, donate pages - Mobile-responsive design with Tailwind CSS - Cookie consent management - SEO (meta tags, sitemap.xml, robots.txt) - Error pages (404, 500) **Deployment** - Currently running at http://192.168.0.162:5050/ - Deployment guide added to docs/WEB_UI.md ### What's NOT Included (Future Phases) - CLI commands (`smarttools registry search/install/publish`) - Phase 3-4 - Project dependencies (`smarttools install` from manifest) - Phase 5 - AI-powered features (auto-categorization, duplicate detection) - Phase 6 ### Closed Issues - #2 Design smarttools.yaml manifest format - #11 Design and implement Registry REST API - #12 Implement tool storage backend - #16 Create web UI for registry browsing ### Test Plan - [x] API endpoints return correct responses - [x] Web pages render without errors - [x] Authentication flow works - [x] Mobile menu and search modal functional - [ ] Run full test suite --- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
rob added 13 commits 2026-01-01 01:16:52 +00:00
34428f0e72 Add SmartTools Registry and Web UI (Phases 1-7)
Registry Features (Phases 1-6):
- Tool manifest format and validation
- Registry client for API communication
- Resolver integration for tool installation
- CLI commands: install, search, browse, publish, auth
- TUI browse interface with urwid
- Smart features: auto-categorization, similarity suggestions

Web UI (Phase 7):
- Flask blueprint with server-side sessions
- Authentication routes (login, register, logout)
- Public pages: landing, tools browse, tool detail, search
- Dashboard: overview, tools management, API tokens, settings
- Template components: cards, forms, callouts, code blocks
- Tailwind CSS build pipeline
- SEO infrastructure (sitemap, robots.txt)
- Cookie consent and privacy compliance

Infrastructure:
- SQLite database with FTS5 search
- Rate limiting for API endpoints
- Git-based tool submission workflow
- Session management with auto-cleanup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
cfb9858967 Add built Tailwind CSS and lockfile
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
c8a937ec15 Fix Semver dataclass order conflict with Python 3.11
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
d6519bde66 Fix blueprint route registration order
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
b90e632ec7 Fix session interface method indentation
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
0200ad4f6e Add 'now' global function to Jinja2 templates
The footer template uses now().year for the copyright date.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
16554c0694 Fix csrf_token collision in auth.py
The auth.py was passing csrf_token as a string variable which
collided with the global csrf_token function in Jinja2. Removed
the redundant passing since csrf_token() is already available
as a Jinja global.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
c41d2eace2 Update .gitignore and remove untracked files
- Added node_modules/, package-lock.json, discussions/, diagrams/
  and temporary files to .gitignore
- Removed accidentally committed files from git tracking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
b26ae5092b Add error handlers for 404 and 500 pages
Register Flask error handlers to render the error templates.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
24c91b8de7 Add deployment guide to WEB_UI.md
Includes:
- Quick start instructions
- Environment variables
- Database configuration (with mergerfs note)
- systemd service example
- nginx reverse proxy config
- SSL setup with certbot
- Tailwind CSS build commands
- Health check and troubleshooting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9070029d31 Fix static folder path resolution for blueprints
Use absolute paths for templates and static folders to ensure
they resolve correctly regardless of the working directory.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
e029166ba6 Change web blueprint static URL path to avoid conflict
The main Flask app and web blueprint both used /static, causing
conflicts. Changed web blueprint to use /web-static instead.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9a33d57de1 Add JavaScript interactivity and consent API
- Complete main.js with all interactive functions:
  - Mobile menu toggle with icon switching
  - Search modal with live search
  - Dashboard modals (tokens, deprecate, settings)
  - Tool detail page (copy install, report modal)
  - Toast notifications
- Add /api/v1/consent endpoint for cookie preferences
- Session-based consent storage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
rob merged commit 096c0739d8 into main 2026-01-01 01:21:40 +00:00
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: rob/smarttools#18
No description provided.