Update pricing UX, billing flows, and API rules
This commit is contained in:
188
redirection-dewemoji-plan.md
Normal file
188
redirection-dewemoji-plan.md
Normal file
@@ -0,0 +1,188 @@
|
||||
# Redirection Plan — Dewemoji Pivot (2026)
|
||||
|
||||
**Source of truth:** `dewemoji-direction-2026.md` (Feb 8, 2026)
|
||||
|
||||
This document maps the **2026 pivot** (“personal emoji library + sync”) against what we have **already built** in the rebuild app, then defines a concrete redirection plan.
|
||||
|
||||
---
|
||||
|
||||
## 1) Pivot Summary (as confirmed)
|
||||
|
||||
**New product north star:**
|
||||
- Dewemoji is a **personal emoji library**.
|
||||
- Users create private keywords in any language (including slang and non‑Latin scripts), sync across devices, and **own their vocabulary**.
|
||||
- Public discovery remains free (EN/ID + semantic) as a growth engine.
|
||||
- No public/community submissions → no moderation burden.
|
||||
|
||||
**Monetization shift:**
|
||||
- Free: public search only.
|
||||
- Paid: private keyword library + sync + API keys + dashboard.
|
||||
- Rename **Pro → Personal**.
|
||||
|
||||
---
|
||||
|
||||
## 2) What We’ve Already Built (Current State)
|
||||
|
||||
### ✅ Built & aligned
|
||||
- Public emoji discovery (JSON dataset, EN + ID keywords).
|
||||
- API endpoints: `/v1/emojis`, `/v1/categories`, `/v1/emoji`, `/v1/health`.
|
||||
- Frontend search + browse + emoji detail pages.
|
||||
- Basic SEO + sitemap + robots.
|
||||
- License verification/activation endpoints (legacy‑style) and supporting services.
|
||||
- The rebuild is already cache‑first (`app/data/emojis.json`).
|
||||
|
||||
### ⚠️ Built but **misaligned** with pivot
|
||||
- **License‑based Pro system** (Gumroad/Mayar validation).
|
||||
- **Device activation** + license tables intended for legacy Pro (not Personal plan).
|
||||
- “Pro” pricing page and marketing copy (old pricing, old narrative).
|
||||
- API docs + support pages referencing license key flow.
|
||||
|
||||
### ❌ Not built yet (required by pivot)
|
||||
- User accounts (register/login/session).
|
||||
- Personal tier subscription model (Stripe + subscriptions table).
|
||||
- API key management tied to user (generate/revoke).
|
||||
- Private keyword CRUD (user keywords table).
|
||||
- Personal dashboard (keywords, API keys, billing).
|
||||
- Extension account linking + private keyword sync.
|
||||
- Public endpoint whitelisting (origin + extension UA) + soft throttling.
|
||||
|
||||
---
|
||||
|
||||
## 3) Directional Conflicts to Resolve
|
||||
|
||||
| Area | Current | Pivot Requirement | Decision |
|
||||
|------|---------|------------------|----------|
|
||||
| Monetization | Pro license keys | Personal subscription | **Replace** license key system with account + API key model |
|
||||
| Identity | None | User accounts | **Add** auth system + dashboard |
|
||||
| Keywords | Public only | Private per user | **Add** `user_keywords` + blended search |
|
||||
| API Access | License key | User API keys | **Replace** authorization method |
|
||||
| Community | Planned public contributions | Private‑only | **Remove** community feature scope |
|
||||
| Pricing | $3/mo + $27/yr + $69 lifetime | $4.99/mo + $49/yr + $99 lifetime | **Update** pricing + copy |
|
||||
|
||||
---
|
||||
|
||||
## 4) Redirection Plan (Phased)
|
||||
|
||||
### Phase A — Foundation (Backend) ✅ *Start here*
|
||||
Goal: replace license model with **account + API key** architecture.
|
||||
|
||||
**Backend tasks**
|
||||
- Add tables: `users`, `user_api_keys`, `user_keywords`, `subscriptions`.
|
||||
- Add auth endpoints:
|
||||
- `POST /v1/user/register`
|
||||
- `POST /v1/user/login`
|
||||
- `POST /v1/user/logout`
|
||||
- Add API key endpoints:
|
||||
- `GET /v1/user/apikeys`
|
||||
- `POST /v1/user/apikeys`
|
||||
- `DELETE /v1/user/apikeys/:key`
|
||||
- Add private keyword endpoints:
|
||||
- `GET /v1/keywords`
|
||||
- `POST /v1/keywords`
|
||||
- `DELETE /v1/keywords/:id`
|
||||
- Add `GET /v1/search?private=true` to **blend private + public** results.
|
||||
- Implement **origin/UA whitelist** for public endpoints and soft throttling.
|
||||
|
||||
**What to freeze**
|
||||
- Legacy license endpoints stay online temporarily but **deprecated**.
|
||||
- No new features on Gumroad/Mayar flow.
|
||||
|
||||
---
|
||||
|
||||
### Phase B — Dashboard UI (Web)
|
||||
Goal: provide a **personal workspace** for private keywords and API keys.
|
||||
|
||||
**Frontend tasks**
|
||||
- Add `/register`, `/login`, `/dashboard`.
|
||||
- Dashboard tabs:
|
||||
- **My Keywords** (CRUD, bulk import/export)
|
||||
- **API Keys** (generate/revoke)
|
||||
- **Billing** (plan status, upgrade links)
|
||||
- Update emoji detail page:
|
||||
- “Add to My Keywords” for Personal users.
|
||||
- Show personal keywords for this emoji (if any).
|
||||
|
||||
---
|
||||
|
||||
### Phase C — Extension Integration
|
||||
Goal: enable personal keywords in extension + sync.
|
||||
|
||||
**Extension tasks**
|
||||
- “Link Account” flow in extension.
|
||||
- Store API key in `chrome.storage.sync`.
|
||||
- Include `Authorization: Bearer dew_…` header when logged in.
|
||||
- Blend private + public results.
|
||||
- Upgrade prompt on missing keyword: “Create this in Personal?”
|
||||
|
||||
---
|
||||
|
||||
### Phase D — Payments + Plan Rename
|
||||
Goal: Personal tier + billing system.
|
||||
|
||||
**Billing tasks**
|
||||
- PayPal subscription plan (Monthly/Annual) + webhook handler.
|
||||
- Keep pricing **admin‑controlled** (see Admin Dashboard plan).
|
||||
- Webhooks → populate `subscriptions`.
|
||||
- Plan rename everywhere: **Pro → Personal**.
|
||||
- Pricing page update.
|
||||
|
||||
---
|
||||
|
||||
### Phase E — Deprecate Legacy Licenses
|
||||
Goal: cut off old Gumroad model cleanly.
|
||||
|
||||
**Migration tasks**
|
||||
- “Paste license → auto‑create account → grant Personal (lifetime)” tool.
|
||||
- Email existing license users.
|
||||
- Sunset date for legacy validation.
|
||||
|
||||
---
|
||||
|
||||
## 5) Immediate File Updates (Recommended Next)
|
||||
|
||||
- Update **API docs** to mention account/API keys (not licenses).
|
||||
- Update **Pricing page** to Personal tier and new price points.
|
||||
- Update **Support/Terms/Privacy** copy with Personal tier language.
|
||||
- Update **community-plan.md** (already aligned with private‑only direction).
|
||||
|
||||
---
|
||||
|
||||
## 6) Risk Notes
|
||||
|
||||
- The pivot **removes public contribution features** and their associated moderation burden. This is consistent with the new revenue model but changes the original story. Make sure homepage and extension copy reflect **personal library** first.
|
||||
- Referrer whitelist + soft throttle is required to keep free endpoints open without abuse.
|
||||
- **Public unlimited usage** should only be granted to **real extension installs**. Plan: use Chrome Verified Access / `chrome.identity.getCertificationToken()` to prove the request is from a legitimate Web Store install before allowing unlimited public access.
|
||||
- **Private keywords + sync** always require **user authentication** (magic‑link/OTP) — no exceptions.
|
||||
|
||||
---
|
||||
|
||||
## 7) Quick Comparison Snapshot
|
||||
|
||||
**What we should keep:**
|
||||
- Public emoji search + dataset caching.
|
||||
- Site UI/SEO baseline.
|
||||
- API response contract (minus license semantics).
|
||||
|
||||
**What we should replace:**
|
||||
- Gumroad/Mayar license verification.
|
||||
- Pro/lifetime license activation.
|
||||
- Community submissions/voting.
|
||||
|
||||
**What we should add:**
|
||||
- User accounts + API keys.
|
||||
- Private keyword library + sync.
|
||||
- Dashboard + billing.
|
||||
|
||||
---
|
||||
|
||||
## 8) Decision Checkpoints
|
||||
|
||||
Before coding Phase A, confirm:
|
||||
1. **Plan name** is officially “Personal” (not Pro).
|
||||
2. **API key format** (`dew_…`) accepted.
|
||||
3. Public endpoints remain unlimited for **dewemoji.com + extension**.
|
||||
4. Stripe is the primary payment provider.
|
||||
|
||||
---
|
||||
|
||||
If you want, I can immediately convert this into a task checklist by repo folder (backend, web, extension) and start Phase A scaffolding.
|
||||
Reference in New Issue
Block a user