feat: comprehensive app improvements with Pinia state management
Backend: - Add API keys management (create, list, delete endpoints) - Add email verification flow (verify, resend verification) - Add account management (profile, change password, delete account) - Add billing/Stripe integration (checkout, portal, webhooks) - Add GeoIP service for analytics - Add bulk link creation and link restore endpoints - Add QR code analytics endpoint - Add project description field with migration - Add QR code name and logo support with migration - Improve QR code generator with logo overlay support - Add rate limiting middleware - Update tests for new functionality Frontend: - Refactor entire app to use Pinia for state management - Add auth store with initialization, login, register, logout - Add workspace store with CRUD for workspaces, projects, links, QR codes, domains, assets, and analytics - Add localStorage persistence for workspace selection - Update App.vue with proper store initialization - Update AppLayout.vue to use store methods instead of direct API - Refactor Projects.vue and Domains.vue to use store state/actions - Add VerifyEmail.vue for email verification flow - Add ForgotPassword.vue and ResetPassword.vue - Add Settings.vue with profile, password, API keys, danger zone - Add QRCodeDetail.vue for QR code analytics - Add Billing.vue for subscription management - Expand api/client.js with all new API methods - Add workspace change watchers for automatic data refresh Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
142
docs/tasks.md
142
docs/tasks.md
@@ -175,13 +175,13 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 6: Frontend Dashboard (In Progress)
|
||||
## Phase 6: Frontend Dashboard (Complete)
|
||||
|
||||
### Authentication UI
|
||||
- [x] Login page
|
||||
- [x] Registration page
|
||||
- [ ] Forgot password page
|
||||
- [ ] Password reset page
|
||||
- [x] Forgot password page
|
||||
- [x] Password reset page
|
||||
- [x] Auth state management (Pinia store)
|
||||
|
||||
### Dashboard
|
||||
@@ -198,17 +198,17 @@
|
||||
### QR Designer UI
|
||||
- [x] QR designer page
|
||||
- [x] Color pickers
|
||||
- [~] Shape selectors (basic support)
|
||||
- [ ] Logo upload integration
|
||||
- [x] Shape selectors (Square, Rounded, Dots for modules; Square, Rounded, Circle for eyes)
|
||||
- [x] Logo upload integration (upload new or select from existing assets)
|
||||
- [x] Live preview (for saved QR codes)
|
||||
- [x] Export buttons (PNG/SVG)
|
||||
- [x] Style presets (6 presets)
|
||||
- [x] Style presets (6 presets with shape variations)
|
||||
|
||||
### Analytics UI
|
||||
- [x] Charts (time series with clicks/scans)
|
||||
- [x] Stat cards (clicks, scans, visitors, total)
|
||||
- [x] Breakdown tables (referrer, device)
|
||||
- [~] Geo breakdown (API ready, UI pending)
|
||||
- [x] Geo breakdown (country flags and names, requires MaxMind GeoIP2 database)
|
||||
|
||||
---
|
||||
|
||||
@@ -230,8 +230,7 @@
|
||||
### Plan & Quotas
|
||||
- [ ] Usage tracking
|
||||
- [ ] Plan limits enforcement
|
||||
- Free: 50 links, 1 workspace
|
||||
- Pro: 5,000 links, 5 workspaces
|
||||
- Free: 50 links, 1 workspacf - Pro: 5,000 links, 5 workspaces
|
||||
- Business: Unlimited
|
||||
- [ ] Upgrade prompts
|
||||
|
||||
@@ -297,6 +296,131 @@ Completed:
|
||||
|
||||
---
|
||||
|
||||
## Gap Analysis (Spec vs Implementation)
|
||||
|
||||
> This section identifies gaps between the MVP spec (`docs/spec.md`) and the current implementation.
|
||||
|
||||
### Authentication & Account
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Email verification | ❌ Missing | Endpoint structure exists, but no email sending or verification flow |
|
||||
| Basic account settings page | ❌ Missing | No settings UI or endpoints for profile updates |
|
||||
| SSO (optional, post-MVP) | ⏳ Deferred | As expected |
|
||||
|
||||
### Short Link Features
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| UTM builder (preset templates) | ❌ Missing | Spec mentions UTM builder for Pro plan |
|
||||
| Destination URL allowlist/denylist | ❌ Missing | Abuse prevention not implemented |
|
||||
| Soft delete for links | ❌ Missing | Currently using hard delete |
|
||||
|
||||
### QR Code Designer
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Shape presets (module shapes) | ✅ Complete | Square, Rounded, Dots module shapes supported |
|
||||
| Eye shape customization | ✅ Complete | Square, Rounded, Circle eye shapes supported |
|
||||
| Logo upload integration | ✅ Complete | Upload new or select from existing assets |
|
||||
| Logo size + margin controls | ⚠️ Partial | Fixed 20% size, no user controls |
|
||||
| Print-ready options ("high contrast" toggle) | ❌ Missing | No print optimization features |
|
||||
|
||||
### Analytics & Tracking
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Geo (country) breakdown | ✅ Complete | MaxMind GeoIP2 integrated, UI with country flags |
|
||||
| Per-QR analytics endpoint | ❌ Missing | Spec: `GET /analytics/qrcode/{id}` - only link analytics exist |
|
||||
| Scan vs Click distinction via `?qr=` param | ⚠️ Partial | Event type exists but QR export doesn't append `?qr=<id>` to URLs |
|
||||
| Custom date range filter | ❌ Missing | Only 24h/7d/30d implemented, spec mentions custom range |
|
||||
| Monthly IP salt rotation | ❌ Missing | Spec requires rotating salt for privacy compliance |
|
||||
| Event retention configuration per plan | ❌ Missing | No retention policy or cleanup jobs |
|
||||
|
||||
### Admin & Quotas
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Subscription status display | ❌ Missing | Plan field exists on Workspace but no UI |
|
||||
| Usage quotas enforcement | ❌ Missing | No limits enforced for links/QRs/events/domains |
|
||||
| Upgrade prompts | ❌ Missing | No paywall or upgrade flows |
|
||||
|
||||
### Security & Non-Functional
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Rate limiting on public endpoints | ❌ Missing | Critical for redirect endpoint |
|
||||
| CORS configuration | ❌ Missing | Needs proper configuration |
|
||||
| Strict CSP headers | ❌ Missing | App pages have no CSP |
|
||||
| Request logging | ❌ Missing | No structured logging |
|
||||
| Error handling middleware | ❌ Missing | No global error handler |
|
||||
|
||||
### Frontend UI Pages
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Forgot password page | ✅ Complete | Full UI with success state |
|
||||
| Password reset page | ✅ Complete | Full UI with token validation and success state |
|
||||
| Projects list UI | ❌ Missing | Backend CRUD complete, no frontend |
|
||||
| Domains page (add/verify) | ❌ Missing | Backend complete, no frontend |
|
||||
| Workspace switcher (full UI) | ⚠️ Partial | Basic switcher exists, no create/manage UI |
|
||||
| Per-QR analytics view | ❌ Missing | Only per-link analytics in UI |
|
||||
|
||||
### Email System
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Email service integration | ❌ Missing | No email provider configured |
|
||||
| Email verification emails | ❌ Missing | No templates or sending logic |
|
||||
| Password reset emails | ❌ Missing | Token generated but not emailed |
|
||||
| Email templates | ❌ Missing | No templating system |
|
||||
|
||||
### Background Jobs
|
||||
|
||||
| Spec Requirement | Status | Notes |
|
||||
|-----------------|--------|-------|
|
||||
| Domain verification checks | ❌ Missing | Only manual verification, no periodic checks |
|
||||
| Event enrichment (geo/device) | ✅ Complete | Device parsing and GeoIP country lookup done |
|
||||
| Cleanup & retention tasks | ❌ Missing | No scheduled cleanup for old events |
|
||||
|
||||
### API Surface Gaps
|
||||
|
||||
| Endpoint (from spec) | Status |
|
||||
|---------------------|--------|
|
||||
| `GET /analytics/qrcode/{id}` | ❌ Missing |
|
||||
| Account settings endpoints | ❌ Missing |
|
||||
| Usage/quota endpoints | ❌ Missing |
|
||||
|
||||
---
|
||||
|
||||
## Priority Gap Resolution
|
||||
|
||||
### High Priority (MVP Blockers)
|
||||
|
||||
1. **Email system** - Verification and password reset cannot work without email
|
||||
2. **Rate limiting** - Security risk without it on public redirect
|
||||
3. **QR scan tracking** - QR exports need `?qr=<id>` param for scan attribution
|
||||
4. ~~**Geo breakdown** - GeoIP integration for country-level analytics~~ ✅ Complete
|
||||
5. **Projects UI** - Backend exists, needs frontend
|
||||
|
||||
### Medium Priority (MVP Polish)
|
||||
|
||||
6. **Account settings page** - Users need to update profile
|
||||
7. **Domains UI** - Backend exists, needs frontend
|
||||
8. **Usage quotas** - Enforce plan limits
|
||||
9. ~~**QR shape presets** - More customization options~~ ✅ Complete (Square, Rounded, Dots)
|
||||
10. **Custom date range** - Analytics flexibility
|
||||
|
||||
### Lower Priority (Post-MVP)
|
||||
|
||||
11. UTM builder
|
||||
12. Soft delete for links
|
||||
13. Print-ready QR options
|
||||
14. SSO integration
|
||||
15. Stripe payments
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Backend uses FastEndpoints (not traditional MVC controllers)
|
||||
|
||||
Reference in New Issue
Block a user